@3sln/trove 0.0.10 → 0.0.12

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.
@@ -22,7 +22,7 @@
22
22
  "// SettingsService — schema-driven, persisted, reactive settings (VS Code's\n// settings model). Core and plugins register typed setting schemas; values are\n// stored in localStorage, namespaced, and merged over defaults. The Settings UI\n// is generated from the schema, so adding a setting never means touching UI code.\n// Plugin keys are namespaced under the plugin id.\n\nimport { cell } from '../runtime.js';\n\nconst STORAGE_KEY = 'trove.settings';\n\nexport class SettingsService {\n constructor() {\n this.schema = new Map(); // key -> { type, default, title, description, enum?, minimum?, maximum?, category, order }\n this.values = read();\n this.cell = cell(this.effective());\n }\n\n /**\n * Register one or more settings. Each: { key, type, default, title,\n * description?, enum?, enumLabels?, minimum?, maximum?, category?, order? }\n */\n register(schemas) {\n for (const s of [].concat(schemas)) this.schema.set(s.key, s);\n this.cell.setValue(this.effective());\n return () => {\n for (const s of [].concat(schemas)) this.schema.delete(s.key);\n this.cell.setValue(this.effective());\n };\n }\n\n get(key) {\n if (key in this.values) return this.values[key];\n return this.schema.get(key)?.default;\n }\n\n set(key, value) {\n const schema = this.schema.get(key);\n if (schema && value === schema.default) delete this.values[key];\n else this.values[key] = value;\n write(this.values);\n this.cell.setValue(this.effective());\n }\n\n reset(key) {\n delete this.values[key];\n write(this.values);\n this.cell.setValue(this.effective());\n }\n\n /** Full resolved values (defaults ⊕ overrides). */\n effective() {\n const out = {};\n for (const [key, s] of this.schema) out[key] = key in this.values ? this.values[key] : s.default;\n // Include stored keys with no (current) schema, so unknown/plugin values survive.\n for (const [key, v] of Object.entries(this.values)) if (!(key in out)) out[key] = v;\n return out;\n }\n\n observe() {\n return this.cell;\n }\n\n /** Schema entries grouped by category, for the Settings UI. */\n grouped() {\n const groups = new Map();\n for (const s of [...this.schema.values()].sort((a, b) => (a.order ?? 0) - (b.order ?? 0))) {\n // `hidden` settings are state the app keeps under the settings key, not choices a\n // person makes — the opener associations, for one, which are edited through the\n // opener chooser and have their own section below. Rendering them anyway put a row\n // reading \"[object Object]\" at the top of Settings.\n if (s.hidden) continue;\n const cat = s.category || 'General';\n if (!groups.has(cat)) groups.set(cat, []);\n groups.get(cat).push({ ...s, value: this.get(s.key) });\n }\n return [...groups.entries()].map(([category, items]) => ({ category, items }));\n }\n\n scopedFor(pluginId) {\n const prefix = `${pluginId}.`;\n return {\n register: (schemas) =>\n this.register([].concat(schemas).map((s) => ({ ...s, key: prefix + s.key, category: s.category || pluginId }))),\n get: (key) => this.get(prefix + key),\n set: (key, value) => this.set(prefix + key, value),\n };\n }\n}\n\nfunction read() {\n try {\n return JSON.parse(localStorage.getItem(STORAGE_KEY)) || {};\n } catch {\n return {};\n }\n}\nfunction write(values) {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(values));\n } catch { /* quota / private mode */ }\n}\n",
23
23
  "// NotificationService — transient toasts + a small log. Everything user-facing\n// that fails routes here so problems are never silent. Reactive: the status/UI\n// watches `observe()`.\n\nimport { cell } from '../runtime.js';\n\nlet seq = 0;\n\nexport class NotificationService {\n constructor() {\n this.items = [];\n this.cell = cell([]);\n }\n observe() {\n return this.cell;\n }\n #push(level, message, opts = {}) {\n const item = {\n id: ++seq, level, message,\n actions: opts.actions || null,\n createdAt: Date.now(),\n sticky: opts.sticky || level === 'error',\n };\n this.items = [...this.items, item];\n this.cell.setValue(this.items);\n if (!item.sticky) setTimeout(() => this.dismiss(item.id), opts.timeout ?? 4000);\n return item.id;\n }\n info(m, o) {\n return this.#push('info', m, o);\n }\n success(m, o) {\n return this.#push('success', m, o);\n }\n warn(m, o) {\n return this.#push('warn', m, o);\n }\n error(m, o) {\n return this.#push('error', m, o);\n }\n /** Update a notification in place (e.g. a progress message). */\n update(id, patch) {\n this.items = this.items.map((i) => (i.id === id ? { ...i, ...patch } : i));\n this.cell.setValue(this.items);\n }\n dismiss(id) {\n this.items = this.items.filter((i) => i.id !== id);\n this.cell.setValue(this.items);\n }\n}\n",
24
24
  "// Retry with exponential backoff + full jitter. Only retries errors classified\n// retryable (see errors.js), respects an AbortSignal between attempts, and\n// surfaces the last error untouched when it gives up — so the caller still sees\n// a clean TroveError, not a generic \"retries exhausted\".\n\nimport { isRetryable, wrapError, TroveError } from './errors.js';\n\nconst DEFAULTS = {\n retries: 4, // attempts after the first = 5 total tries\n minDelayMs: 250,\n maxDelayMs: 8000,\n factor: 2,\n jitter: true,\n};\n\nfunction sleep(ms, signal) {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) return reject(TroveError.aborted());\n // `{ once: true }` removes the listener when it FIRES — not when the timer wins,\n // which is the normal case. One long-lived signal driving a few retried operations\n // therefore accumulated a listener per attempt and released none of them.\n const done = (fn) => (arg) => {\n clearTimeout(t);\n signal?.removeEventListener('abort', onAbort);\n fn(arg);\n };\n const t = setTimeout(() => done(resolve)(), ms);\n const onAbort = () => done(reject)(TroveError.aborted());\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n}\n\n/**\n * @template T\n * @param {(attempt: number) => Promise<T>} fn\n * @param {object} [opts]\n * @param {number} [opts.retries]\n * @param {AbortSignal} [opts.signal]\n * @param {(info: {attempt: number, delayMs: number, error: TroveError}) => void} [opts.onRetry]\n * @param {(err: unknown) => boolean} [opts.shouldRetry] override classification\n * @returns {Promise<T>}\n */\nexport async function withRetry(fn, opts = {}) {\n const cfg = { ...DEFAULTS, ...opts };\n const shouldRetry = cfg.shouldRetry ?? isRetryable;\n let attempt = 0;\n\n for (;;) {\n if (cfg.signal?.aborted) throw TroveError.aborted();\n try {\n return await fn(attempt);\n } catch (raw) {\n const err = wrapError(raw);\n const canRetry = attempt < cfg.retries && shouldRetry(err) && err.code !== 'aborted';\n if (!canRetry) throw err;\n\n const base = Math.min(cfg.maxDelayMs, cfg.minDelayMs * cfg.factor ** attempt);\n const delayMs = cfg.jitter ? Math.random() * base : base;\n cfg.onRetry?.({ attempt: attempt + 1, delayMs, error: err });\n await sleep(delayMs, cfg.signal);\n attempt++;\n }\n }\n}\n\n/** Reject after `ms`, unless `promise` settles first. Cleans up its timer. */\nexport function withTimeout(promise, ms, message = 'Operation timed out') {\n if (!ms || ms <= 0) return promise;\n let t;\n const timeout = new Promise((_, reject) => {\n t = setTimeout(() => reject(TroveError.timeout(message)), ms);\n });\n return Promise.race([promise, timeout]).finally(() => clearTimeout(t));\n}\n",
25
- "// TroveApiClient — the browser's view of the server API. Thin JSON calls with\n// transient-error retry, plus the upload orchestrator, which is where the \"handle\n// large uploads well\" requirement lives:\n//\n// • Chooses nothing itself — it follows the plan the server returns (single /\n// presigned-multipart / direct-multipart), so an S3 deployment uploads parts\n// straight to S3 and a filesystem deployment streams through the server, with\n// the same client code.\n// • Uploads parts concurrently (bounded), each with its own retry, and reports\n// aggregate byte progress for a live progress bar.\n// • Resumable: on retry it asks the server which parts already landed and skips\n// them, so a dropped connection doesn't restart a 4 GB upload.\n//\n// Uploads use XMLHttpRequest because fetch can't report upload progress.\n\nimport { withRetry } from '@3sln/trove/core/retry.js';\nimport { TroveError } from '@3sln/trove/core/errors.js';\n\nexport class TroveApiClient {\n /**\n * @param {{baseUrl?: string, fetch?: Function, token?: string|(() => string|null)}} [opts]\n * `token` is a bearer JWT, or a function returning one. Optional because the common\n * deployment puts an authenticating proxy in front (Cloudflare Access sets its own\n * header and the browser sends nothing) — but a deployment where the user HOLDS a\n * token has no way to present it otherwise, which is why this exists.\n */\n constructor({ baseUrl = '', fetch: f = globalThis.fetch.bind(globalThis), token = null } = {}) {\n this.baseUrl = baseUrl.replace(/\\/$/, '');\n this._fetch = f;\n this._token = token;\n }\n\n /** The bearer token to present, if any. Read per request so a refresh takes effect. */\n token() {\n const t = typeof this._token === 'function' ? this._token() : this._token;\n return t || null;\n }\n /** Auth headers for a request, or nothing at all when there is no token to send. */\n authHeaders() {\n const t = this.token();\n return t ? { authorization: `Bearer ${t}` } : {};\n }\n\n async request(method, path, { body, query, signal, raw } = {}) {\n const url = this.baseUrl + path + (query ? '?' + new URLSearchParams(query) : '');\n return withRetry(\n async () => {\n const res = await this._fetch(url, {\n method,\n headers: { ...this.authHeaders(), ...(body ? { 'content-type': 'application/json' } : {}) },\n body: body ? JSON.stringify(body) : undefined,\n signal,\n });\n if (res.status === 429 || res.status >= 500) {\n // Read the structured error to decide retry: an explicitly non-retryable\n // failure (e.g. a per-file size limit) must fail fast with its real message,\n // not be retried 3× into a generic \"Server 429\". `raw` requests can't consume\n // the body here, so they stay status-based.\n if (!raw) {\n let e;\n try { const t = await res.text(); e = (t ? JSON.parse(t) : null)?.error; } catch { /* non-JSON body */ }\n if (e && e.retryable === false) throw new TroveError(e.code, e.message, { retryable: false, details: e.details });\n throw TroveError.transient(e?.message || `Server ${res.status}`);\n }\n throw TroveError.transient(`Server ${res.status}`);\n }\n if (raw) return res;\n const text = await res.text();\n const json = text ? JSON.parse(text) : null;\n if (!res.ok) {\n const e = json?.error || { code: 'internal', message: `Request failed (${res.status})` };\n throw new TroveError(e.code, e.message, { retryable: e.retryable, details: e.details });\n }\n return json;\n },\n { signal, retries: 3 },\n );\n }\n\n // --- browse / mutate -------------------------------------------------------\n\n capabilities() {\n return this.request('GET', '/api/capabilities');\n }\n /** Single-shot reachability probe (short timeout, no retries) — is the server\n * actually reachable, vs. `navigator.onLine` merely reporting an up interface? */\n async reachable(timeoutMs = 4000) {\n try {\n const signal = AbortSignal.timeout ? AbortSignal.timeout(timeoutMs) : undefined;\n const res = await this._fetch(this.baseUrl + '/api/capabilities', { method: 'GET', signal, headers: this.authHeaders() });\n return res.ok;\n } catch { return false; }\n }\n // Collection-scoped calls name their collection in the PATH. There is no default and\n // no `?collection=`: the server refuses a request that does not say which collection it\n // means, so a caller that forgets gets an error here rather than silently reaching one.\n /** Every item in a collection. */\n list(collection, opts = {}) {\n return this.request('GET', `${this.#scope(collection)}/items`, { query: opts });\n }\n /** Resolve an item by id, by `trove:` URI, or by name within a collection. */\n stat(ref, { collection, ...opts } = {}) {\n const key = String(ref).startsWith('trove:') ? 'uri' : 'id';\n // A name is only unique inside a collection, so resolving one needs the scope. An id\n // or a trove: URI names itself, and the flat resolve is fine for those.\n const base = collection ? `${this.#scope(collection)}/items/resolve` : '/api/items/resolve';\n return this.request('GET', base, { query: { [key]: ref, ...opts } });\n }\n #scope(collection) {\n if (!collection) throw new Error('This call is scoped to a collection — pass one');\n return `/api/collections/${encodeURIComponent(collection)}`;\n }\n /** What links to this item. */\n backlinks(id, opts = {}) {\n return this.request('GET', '/api/items/backlinks', { query: { id, ...opts } });\n }\n rename(id, newName) {\n return this.request('POST', '/api/items/rename', { body: { id, newName } });\n }\n remove(id) {\n return this.request('POST', '/api/items/delete', { body: { id } });\n }\n /** What's been deleted but not yet destroyed. */\n trash(collection) {\n return this.request('GET', `${this.#scope(collection)}/trash`);\n }\n restore(id) {\n return this.request('POST', '/api/trash/restore', { body: { id } });\n }\n /** Destroy for real — one item, or everything in a collection's trash. */\n purgeTrash({ id, collection } = {}) {\n // One item names itself; emptying a whole collection has to name the collection, and\n // says so in the URL — \"everything in here\" is the request that must never be able\n // to mean somewhere you did not point at.\n return id\n ? this.request('POST', '/api/trash/purge', { body: { id } })\n : this.request('POST', `${this.#scope(collection)}/trash/purge`);\n }\n search(q, { collection, ...opts } = {}) {\n const base = collection ? `${this.#scope(collection)}/search` : '/api/search';\n return this.request('GET', base, { query: { q, ...opts } });\n }\n // Unified query: server transforms the raw string (parse/LLM) → runs it → returns\n // { query, results, resolved }. `resolved` is what was actually searched.\n query(q, { collection, ...opts } = {}) {\n const base = collection ? `${this.#scope(collection)}/query` : '/api/query';\n return this.request('POST', base, { body: { q, ...opts } });\n }\n // Drive-wide tag/property filter (launcher #tag / #key:op:value).\n tagSearch(filters, q, { collection, ...opts } = {}) {\n const base = collection ? `${this.#scope(collection)}/tags/search` : '/api/tags/search';\n return this.request('POST', base, { body: { filters, q, ...opts } });\n }\n indexers() {\n return this.request('GET', '/api/indexers');\n }\n\n // --- background work + standing problems -----------------------------------\n // Tasks are in-flight and ephemeral; issues are what a failure left behind and are\n // durable. Ids can contain anything (an issue id embeds a node id), so every one of\n // these encodes before it becomes a path segment.\n tasks() {\n return this.request('GET', '/api/tasks');\n }\n cancelTask(id) {\n return this.request('POST', `/api/tasks/${encodeURIComponent(id)}/cancel`);\n }\n dismissTask(id) {\n return this.request('DELETE', `/api/tasks/${encodeURIComponent(id)}`);\n }\n issues() {\n return this.request('GET', '/api/issues');\n }\n retryIssue(id) {\n return this.request('POST', `/api/issues/${encodeURIComponent(id)}/retry`);\n }\n dismissIssue(id) {\n return this.request('DELETE', `/api/issues/${encodeURIComponent(id)}`);\n }\n reindex() {\n return this.request('POST', '/api/reindex');\n }\n /** Reconcile a collection against its object store (changes made outside Trove). */\n scanCollection(id) {\n return this.request('POST', `/api/collections/${encodeURIComponent(id)}/scan`);\n }\n\n /**\n * Check every collection's backing store for problems a browser would hit — chiefly a\n * missing CORS policy, which leaves the file list and search working while every file\n * fails to open.\n *\n * Worth asking from the browser rather than only on a timer: the server checks against\n * the origin of THIS request, and a bucket policy may name exactly one origin.\n */\n checkStorage() {\n return this.request('POST', '/api/diagnostics/storage');\n }\n\n // --- server plugin installs (account-scoped, synced across devices) ---------\n /** Upload a package zip for account install; returns the server install record. */\n async installPlugin(bytes, grants) {\n const q = grants && grants.length ? '?grants=' + encodeURIComponent(grants.join(',')) : '';\n const res = await this._fetch(this.baseUrl + '/api/plugins/install' + q, { method: 'POST', body: bytes, headers: this.authHeaders() });\n const json = await res.json().catch(() => null);\n if (!res.ok) {\n const e = json?.error || { code: 'internal', message: `Install failed (${res.status})` };\n throw new TroveError(e.code, e.message, { details: e.details });\n }\n return json.install;\n }\n installedPlugins() {\n return this.request('GET', '/api/plugins/installed');\n }\n async pluginPackage(id) {\n const res = await this._fetch(`${this.baseUrl}/api/plugins/${encodeURIComponent(id)}/package`, { headers: this.authHeaders() });\n if (!res.ok) throw new TroveError('not_found', `Package for \"${id}\" not found`);\n return new Uint8Array(await res.arrayBuffer());\n }\n uninstallPluginServer(id) {\n return this.request('DELETE', `/api/plugins/${encodeURIComponent(id)}/install`);\n }\n // contribution: { semanticTexts?, tags?, metadata? } (legacy { documents, facet } ok).\n pushIndex(indexerId, nodeId, contribution) {\n return this.request('POST', `/api/index/${encodeURIComponent(indexerId)}`, { body: { nodeId, ...contribution } });\n }\n\n // --- identity --------------------------------------------------------------\n me() {\n return this.request('GET', '/api/me');\n }\n\n // --- collections -----------------------------------------------------------\n collections() {\n return this.request('GET', '/api/collections');\n }\n createCollection(body) {\n return this.request('POST', '/api/collections', { body });\n }\n\n /** Change a collection's settings — including turning encryption on. */\n updateCollection(id, patch) {\n return this.request('PATCH', `/api/collections/${encodeURIComponent(id)}`, { body: patch });\n }\n\n // --- key rotation ---------------------------------------------------------\n //\n // What a rotation would cost before anyone starts one: on a metered store it is a real\n // bill, and the button should not be the first place that becomes apparent.\n rotationEstimate(id) {\n return this.request('GET', `/api/collections/${encodeURIComponent(id)}/rotate/estimate`);\n }\n rotationState(id) {\n return this.request('GET', `/api/collections/${encodeURIComponent(id)}/rotate`);\n }\n beginRotation(id) {\n return this.request('POST', `/api/collections/${encodeURIComponent(id)}/rotate`);\n }\n cancelRotation(id) {\n return this.request('DELETE', `/api/collections/${encodeURIComponent(id)}/rotate`);\n }\n\n // --- conversations, tags, sidecar ------------------------------------------\n sidecar(id) {\n return this.request('GET', `/api/items/${encodeURIComponent(id)}/sidecar`);\n }\n addComment(id, { body, parentId, mentions } = {}) {\n return this.request('POST', `/api/items/${encodeURIComponent(id)}/comments`, { body: { body, parentId, mentions } });\n }\n editComment(id, cid, body) {\n return this.request('POST', `/api/items/${encodeURIComponent(id)}/comments/${encodeURIComponent(cid)}/edit`, { body: { body } });\n }\n deleteComment(id, cid) {\n return this.request('DELETE', `/api/items/${encodeURIComponent(id)}/comments/${encodeURIComponent(cid)}`);\n }\n reactComment(id, cid, emoji, on) {\n return this.request('POST', `/api/items/${encodeURIComponent(id)}/comments/${encodeURIComponent(cid)}/react`, { body: { emoji, on } });\n }\n setTag(id, name, value) {\n return this.request('POST', `/api/items/${encodeURIComponent(id)}/tags`, { body: { name, value } });\n }\n removeTag(id, name) {\n return this.request('DELETE', `/api/items/${encodeURIComponent(id)}/tags/${encodeURIComponent(name)}`);\n }\n\n // --- notifications & push --------------------------------------------------\n notifications() {\n return this.request('GET', '/api/notifications');\n }\n markNotificationsRead(ids) {\n return this.request('POST', '/api/notifications/read', { body: { ids } });\n }\n vapidKey() {\n return this.request('GET', '/api/push/vapid');\n }\n\n // --- API keys (admin) -------------------------------------------------------\n // Capability-only credentials; see core/apiKeys.js. `mintApiKey` is the one call in\n // this client whose response contains a secret, and it is the only chance to see it.\n apiKeys() {\n return this.request('GET', '/api/keys');\n }\n mintApiKey({ name, scopes, expiresAt = null }) {\n return this.request('POST', '/api/keys', { body: { name, scopes, expiresAt } });\n }\n revokeApiKey(id) {\n return this.request('DELETE', `/api/keys/${encodeURIComponent(id)}`);\n }\n subscribePush(subscription) {\n return this.request('POST', '/api/push/subscribe', { body: { subscription } });\n }\n\n /** URL for GET-ing bytes (used by <img>/<audio>/<video> and downloads). */\n downloadUrl(id, { attachment } = {}) {\n return `${this.baseUrl}/api/items/download?id=${encodeURIComponent(id)}${attachment ? '&disposition=attachment' : ''}`;\n }\n\n /**\n * Mint URLs that carry their own authorization, for the things that cannot send a\n * header — an <img src>, a <video src>, cache.add(). Batched: a gallery asks for what\n * it is about to draw, in one request. See platform/mediaUrls.js.\n */\n mintUrls(ids, op = 'media') {\n return this.request('POST', '/api/items/urls', { body: { ids, op } });\n }\n\n /**\n * Start a download in the browser.\n *\n * With no bearer token this is a plain navigation to the download URL — the browser\n * streams it, handles Range, and never buffers a 4 GB file in a tab. When a token IS\n * in play that isn't possible: an `<a href>` cannot carry an Authorization header, so\n * the navigation would arrive unauthenticated and 401. Rather than move the token into\n * the query string (where it lands in logs, history, and referrers), fetch the bytes\n * with the header and hand the browser a blob.\n *\n * The cost is honest and worth stating: the blob path holds the file in memory. It is\n * the price of bearer auth without a token-bearing URL, and it does not apply to the\n * common proxy-authenticated deployment, which takes the streaming path.\n */\n async download(id, name, { attachment = true } = {}) {\n const url = this.downloadUrl(id, { attachment });\n if (!this.token()) return { url, streamed: true };\n const res = await this._fetch(url, { headers: this.authHeaders() });\n if (!res.ok) throw new TroveError('internal', `Download failed (${res.status})`);\n return { url: URL.createObjectURL(await res.blob()), streamed: false, revoke: true };\n }\n\n /** Read a whole file as text/bytes (small files, indexers). */\n async readBytes(id, { signal } = {}) {\n const res = await this._fetch(this.downloadUrl(id), { signal, headers: this.authHeaders() });\n if (!res.ok) throw new TroveError('internal', `Download failed (${res.status})`);\n return new Uint8Array(await res.arrayBuffer());\n }\n async readText(id, opts) {\n return new TextDecoder().decode(await this.readBytes(id, opts));\n }\n\n /**\n * Read at most `maxBytes` of a file as text.\n *\n * A viewer must never pull a whole file just to show the top of it. A drive holds\n * logs, exports and dumps that are hundreds of megabytes; `readText` on one of those\n * buffers the entire thing in the tab before a single character is drawn, and the\n * browser is gone before the user learns anything. A Range request costs one extra\n * byte over the wire and bounds the damage at the transfer rather than the render.\n *\n * The cut is at a BYTE boundary, which can land mid-character in UTF-8, so the\n * decoder is told to tolerate it — a trailing replacement glyph beats throwing away\n * the read. The last partial line is dropped for the same reason.\n *\n * @returns {Promise<{text: string, truncated: boolean, total: number|null}>}\n */\n async readTextCapped(id, { maxBytes = 512 * 1024, size = null, signal } = {}) {\n // Skip the Range when we already know the file fits. An empty file has no\n // satisfiable range, so asking for one turned \"open an empty note\" into an error\n // page; a 416 from any backend would do the same.\n const ranged = size == null || size > maxBytes;\n const res = await this._fetch(this.downloadUrl(id), {\n signal,\n headers: { ...this.authHeaders(), ...(ranged ? { range: `bytes=0-${maxBytes - 1}` } : {}) },\n });\n if (res.status === 416) return { text: '', truncated: false, total: 0 };\n if (!res.ok && res.status !== 206) throw new TroveError('internal', `Download failed (${res.status})`);\n const bytes = new Uint8Array(await res.arrayBuffer());\n // `Content-Range: bytes 0-N/TOTAL` is how we learn the real size; a server that\n // ignored the Range header just sent everything, which is also fine.\n const total = Number(/\\/(\\d+)$/.exec(res.headers.get('content-range') || '')?.[1]) || null;\n const truncated = bytes.length >= maxBytes && (total == null || total > bytes.length);\n let text = new TextDecoder('utf-8', { fatal: false }).decode(bytes);\n if (truncated) {\n const lastBreak = text.lastIndexOf('\\n');\n if (lastBreak > 0) text = text.slice(0, lastBreak);\n }\n return { text, truncated, total };\n }\n\n /**\n * Upload a File/Blob with progress + resume.\n * @param {Blob & {name?:string}} file\n * @param {object} opts\n * @param {string} opts.parentId\n * @param {string} [opts.name]\n * @param {(p:{loaded:number,total:number,ratio:number}) => void} [opts.onProgress]\n * @param {AbortSignal} [opts.signal]\n * @param {number} [opts.concurrency]\n * @returns {Promise<object>} the created node\n */\n async upload(file, opts) {\n const name = opts.name || file.name || 'untitled';\n const size = file.size;\n // Every step of an upload is retried, not just the parts.\n //\n // Multipart parts already had this; nothing else did — so a transient failure on\n // `create`, on the single presigned PUT, or on `complete` killed the whole upload on\n // the first stumble, while the same failure mid-multipart was shrugged off. The\n // single-PUT path is the one most uploads take (anything under the multipart floor),\n // which is to say the retries were on the rarer half.\n //\n // `withRetry` decides what is worth retrying — see errors.js. Notably a lost upload\n // session is NOT retryable, and must not be: a session that has genuinely expired or\n // been aborted will never come back, and hammering it just delays the error. That\n // case is what the manual retry is for.\n const step = (fn) => withRetry(fn, {\n signal: opts.signal,\n retries: 4,\n onRetry: ({ attempt, delayMs, error }) => opts.onRetry?.({ attempt, delayMs, message: error.message }),\n });\n\n const plan = await step(() => this.request('POST', `${this.#scope(opts.collection)}/uploads`, {\n body: { name, size, contentType: file.type || undefined },\n signal: opts.signal,\n }));\n // Hand the caller the server upload id so a cancel/failure can abort the session\n // (otherwise a multipart upload leaks server + storage state).\n if (plan.uploadId) opts.onStart?.(plan.uploadId);\n\n // Progress is measured against what TRAVELS, which is now the file itself even for an\n // encrypted collection: the drive seals it on the way to the store, so nothing larger\n // than the file ever leaves this tab.\n const progress = new ProgressAggregator(size, opts.onProgress);\n const t = plan.transfer || {};\n const completeUrl = plan.endpoints?.complete || `/api/uploads/${plan.uploadId}/complete`;\n\n if (plan.strategy === 'single') {\n // One presigned PUT straight to storage (bytes never touch our server). The plan\n // only ever chooses this for an UNENCRYPTED collection now — a presigned PUT of a\n // file this client has not sealed would put plaintext in the bucket.\n const body = file;\n await step(() => xhrPut(t.url || plan.url, body, { headers: t.requiredHeaders, signal: opts.signal, onProgress: (l) => progress.set('single', l) }));\n const done = await step(() => this.request('POST', completeUrl, { body: {}, signal: opts.signal }));\n return done.node;\n }\n if (plan.strategy === 'direct-single') {\n const body = file;\n await step(() => xhrPut(this.baseUrl + this.#partUrl(plan, 1), body, {\n // Our own server, so it needs our bearer token; `t.authHeaders` lets the plan\n // add its own and wins on a clash.\n headers: { ...this.authHeaders(), ...t.authHeaders },\n signal: opts.signal, onProgress: (l) => progress.set(1, l),\n }));\n const done = await step(() => this.request('POST', completeUrl, { body: {}, signal: opts.signal }));\n return done.node;\n }\n\n // Multipart (presign or direct).\n const partSize = plan.partSize;\n const partCount = plan.partCount ?? Math.ceil(size / partSize);\n // Resume: which parts already exist?\n let received = new Set();\n try {\n const statusUrl = plan.endpoints?.status || `/api/uploads/${plan.uploadId}/status`;\n const status = await this.request('GET', statusUrl, { signal: opts.signal });\n received = new Set(status.received || []);\n } catch { /* fresh upload */ }\n\n const parts = [];\n const jobs = [];\n for (let n = 1; n <= partCount; n++) {\n const start = (n - 1) * partSize;\n const blob = file.slice(start, Math.min(start + partSize, size));\n jobs.push({ n, blob });\n }\n\n const results = new Array(partCount);\n const concurrency = Math.min(opts.concurrency ?? 4, jobs.length);\n let cursor = 0;\n // When one part fails for good, abort the sibling workers' in-flight parts instead\n // of letting them keep PUTting bytes whose result we're about to discard. The inner\n // controller is chained to the caller's signal so a user cancel still propagates.\n const inner = new AbortController();\n const onOuterAbort = () => inner.abort();\n if (opts.signal) {\n if (opts.signal.aborted) inner.abort();\n else opts.signal.addEventListener('abort', onOuterAbort, { once: true });\n }\n const worker = async () => {\n while (cursor < jobs.length) {\n if (inner.signal.aborted) return;\n const { n, blob } = jobs[cursor++];\n if (received.has(n)) {\n progress.set(n, blob.size);\n continue;\n }\n const etag = await withRetry(\n () => this.#uploadPart(plan, n, blob, {\n signal: inner.signal, onProgress: (l) => progress.set(n, l),\n }),\n {\n signal: inner.signal,\n retries: 4,\n onRetry: ({ attempt, delayMs, error }) => opts.onRetry?.({ attempt, delayMs, part: n, message: error.message }),\n },\n );\n results[n - 1] = { partNumber: n, etag };\n }\n };\n try {\n await Promise.all(Array.from({ length: concurrency }, worker));\n } catch (err) {\n inner.abort(); // stop the other workers before surfacing the failure\n throw err;\n } finally {\n opts.signal?.removeEventListener('abort', onOuterAbort);\n }\n\n const reportedParts = results.filter(Boolean);\n const done = await step(() => this.request('POST', completeUrl, {\n body: { parts: reportedParts }, signal: opts.signal,\n }));\n return done.node;\n }\n\n // Expand an endpoint/transfer URL template's {partNumber} placeholder.\n #partUrl(plan, n) {\n const tmpl = plan.transfer?.partUrl || `/api/uploads/${plan.uploadId}/parts/{partNumber}`;\n return tmpl.replace('{partNumber}', String(n));\n }\n\n\n async #uploadPart(plan, n, blob, { signal, onProgress }) {\n const t = plan.transfer || {};\n if (plan.strategy === 'presign') {\n const part = (t.parts || plan.parts)?.find((p) => p.partNumber === n);\n let url = part?.url;\n if (!url) {\n const signTmpl = plan.endpoints?.sign || `/api/uploads/${plan.uploadId}/parts/{partNumber}/sign`;\n const r = await this.request('POST', signTmpl.replace('{partNumber}', String(n)), { signal });\n url = r.url;\n }\n const res = await xhrPut(url, blob, { signal, onProgress, wantEtag: true });\n const etag = res.etag;\n const reportTmpl = plan.endpoints?.report || `/api/uploads/${plan.uploadId}/parts/{partNumber}/report`;\n await this.request('POST', reportTmpl.replace('{partNumber}', String(n)), { body: { etag }, signal });\n return etag;\n }\n // proxied: server records the etag; response body has it.\n const res = await xhrPut(this.baseUrl + this.#partUrl(plan, n), blob, {\n headers: { ...this.authHeaders(), ...t.authHeaders },\n signal, onProgress, wantJson: true,\n });\n return res.json?.etag;\n }\n\n async abortUpload(uploadId) {\n return this.request('DELETE', `/api/uploads/${uploadId}`);\n }\n}\n\nclass ProgressAggregator {\n constructor(total, cb) {\n this.total = total;\n this.cb = cb;\n this.parts = new Map();\n }\n set(key, loaded) {\n // Monotonic per part: a retried part restarts its XHR progress at 0, which would\n // otherwise pull the aggregate bar backwards. Never let a part's reported bytes drop.\n const prev = this.parts.get(key) || 0;\n if (loaded < prev) return;\n this.parts.set(key, loaded);\n if (!this.cb) return;\n let sum = 0;\n for (const v of this.parts.values()) sum += v;\n const loadedTotal = Math.min(sum, this.total);\n this.cb({ loaded: loadedTotal, total: this.total, ratio: this.total ? loadedTotal / this.total : 1 });\n }\n}\n\n// XHR PUT with upload progress + abort. Returns { status, etag?, json? }.\nfunction xhrPut(url, body, { signal, onProgress, wantEtag, wantJson, headers } = {}) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('PUT', url, true);\n for (const [k, v] of Object.entries(headers || {})) { try { xhr.setRequestHeader(k, v); } catch { /* forbidden header */ } }\n if (signal) {\n if (signal.aborted) {\n xhr.abort();\n return reject(TroveError.aborted());\n }\n signal.addEventListener('abort', () => xhr.abort(), { once: true });\n }\n xhr.upload.onprogress = (e) => onProgress?.(e.loaded);\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n const out = { status: xhr.status };\n if (wantEtag) out.etag = xhr.getResponseHeader('ETag') || xhr.getResponseHeader('etag');\n if (wantJson) {\n try {\n out.json = JSON.parse(xhr.responseText);\n } catch { /* ignore */ }\n }\n resolve(out);\n } else if (xhr.status === 429 || xhr.status >= 500) {\n reject(TroveError.transient(`Upload part failed (${xhr.status})`));\n } else {\n reject(new TroveError('internal', `Upload failed (${xhr.status})`));\n }\n };\n xhr.onerror = () => reject(TroveError.transient('Network error during upload'));\n xhr.onabort = () => reject(TroveError.aborted());\n xhr.send(body);\n });\n}\n",
25
+ "// TroveApiClient — the browser's view of the server API. Thin JSON calls with\n// transient-error retry, plus the upload orchestrator, which is where the \"handle\n// large uploads well\" requirement lives:\n//\n// • Chooses nothing itself — it follows the plan the server returns (single /\n// presigned-multipart / direct-multipart), so an S3 deployment uploads parts\n// straight to S3 and a filesystem deployment streams through the server, with\n// the same client code.\n// • Uploads parts concurrently (bounded), each with its own retry, and reports\n// aggregate byte progress for a live progress bar.\n// • Resumable: on retry it asks the server which parts already landed and skips\n// them, so a dropped connection doesn't restart a 4 GB upload.\n//\n// Uploads use XMLHttpRequest because fetch can't report upload progress.\n\nimport { withRetry } from '@3sln/trove/core/retry.js';\nimport { TroveError } from '@3sln/trove/core/errors.js';\n\nexport class TroveApiClient {\n /**\n * @param {{baseUrl?: string, fetch?: Function, token?: string|(() => string|null)}} [opts]\n * `token` is a bearer JWT, or a function returning one. Optional because the common\n * deployment puts an authenticating proxy in front (Cloudflare Access sets its own\n * header and the browser sends nothing) — but a deployment where the user HOLDS a\n * token has no way to present it otherwise, which is why this exists.\n */\n constructor({ baseUrl = '', fetch: f = globalThis.fetch.bind(globalThis), token = null } = {}) {\n this.baseUrl = baseUrl.replace(/\\/$/, '');\n this._fetch = f;\n this._token = token;\n }\n\n /** The bearer token to present, if any. Read per request so a refresh takes effect. */\n token() {\n const t = typeof this._token === 'function' ? this._token() : this._token;\n return t || null;\n }\n /** Auth headers for a request, or nothing at all when there is no token to send. */\n authHeaders() {\n const t = this.token();\n return t ? { authorization: `Bearer ${t}` } : {};\n }\n\n async request(method, path, { body, query, signal, raw } = {}) {\n const url = this.baseUrl + path + (query ? '?' + new URLSearchParams(query) : '');\n return withRetry(\n async () => {\n const res = await this._fetch(url, {\n method,\n headers: { ...this.authHeaders(), ...(body ? { 'content-type': 'application/json' } : {}) },\n body: body ? JSON.stringify(body) : undefined,\n signal,\n });\n if (res.status === 429 || res.status >= 500) {\n // Read the structured error to decide retry: an explicitly non-retryable\n // failure (e.g. a per-file size limit) must fail fast with its real message,\n // not be retried 3× into a generic \"Server 429\". `raw` requests can't consume\n // the body here, so they stay status-based.\n if (!raw) {\n let e;\n try { const t = await res.text(); e = (t ? JSON.parse(t) : null)?.error; } catch { /* non-JSON body */ }\n if (e && e.retryable === false) throw new TroveError(e.code, e.message, { retryable: false, details: e.details });\n throw TroveError.transient(e?.message || `Server ${res.status}`);\n }\n throw TroveError.transient(`Server ${res.status}`);\n }\n if (raw) return res;\n const text = await res.text();\n const json = text ? JSON.parse(text) : null;\n if (!res.ok) {\n const e = json?.error || { code: 'internal', message: `Request failed (${res.status})` };\n throw new TroveError(e.code, e.message, { retryable: e.retryable, details: e.details });\n }\n return json;\n },\n { signal, retries: 3 },\n );\n }\n\n // --- browse / mutate -------------------------------------------------------\n\n capabilities() {\n return this.request('GET', '/api/capabilities');\n }\n /** Single-shot reachability probe (short timeout, no retries) — is the server\n * actually reachable, vs. `navigator.onLine` merely reporting an up interface? */\n async reachable(timeoutMs = 4000) {\n try {\n const signal = AbortSignal.timeout ? AbortSignal.timeout(timeoutMs) : undefined;\n const res = await this._fetch(this.baseUrl + '/api/capabilities', { method: 'GET', signal, headers: this.authHeaders() });\n return res.ok;\n } catch { return false; }\n }\n // Collection-scoped calls name their collection in the PATH. There is no default and\n // no `?collection=`: the server refuses a request that does not say which collection it\n // means, so a caller that forgets gets an error here rather than silently reaching one.\n /** Every item in a collection. */\n list(collection, opts = {}) {\n return this.request('GET', `${this.#scope(collection)}/items`, { query: opts });\n }\n /** Resolve an item by id, by `trove:` URI, or by name within a collection. */\n stat(ref, { collection, ...opts } = {}) {\n const key = String(ref).startsWith('trove:') ? 'uri' : 'id';\n // A name is only unique inside a collection, so resolving one needs the scope. An id\n // or a trove: URI names itself, and the flat resolve is fine for those.\n const base = collection ? `${this.#scope(collection)}/items/resolve` : '/api/items/resolve';\n return this.request('GET', base, { query: { [key]: ref, ...opts } });\n }\n #scope(collection) {\n if (!collection) throw new Error('This call is scoped to a collection — pass one');\n return `/api/collections/${encodeURIComponent(collection)}`;\n }\n /** What links to this item. */\n backlinks(id, opts = {}) {\n return this.request('GET', '/api/items/backlinks', { query: { id, ...opts } });\n }\n rename(id, newName) {\n return this.request('POST', '/api/items/rename', { body: { id, newName } });\n }\n remove(id) {\n return this.request('POST', '/api/items/delete', { body: { id } });\n }\n /** What's been deleted but not yet destroyed. */\n trash(collection) {\n return this.request('GET', `${this.#scope(collection)}/trash`);\n }\n restore(id) {\n return this.request('POST', '/api/trash/restore', { body: { id } });\n }\n /** Destroy for real — one item, or everything in a collection's trash. */\n purgeTrash({ id, collection } = {}) {\n // One item names itself; emptying a whole collection has to name the collection, and\n // says so in the URL — \"everything in here\" is the request that must never be able\n // to mean somewhere you did not point at.\n return id\n ? this.request('POST', '/api/trash/purge', { body: { id } })\n : this.request('POST', `${this.#scope(collection)}/trash/purge`);\n }\n search(q, { collection, ...opts } = {}) {\n const base = collection ? `${this.#scope(collection)}/search` : '/api/search';\n return this.request('GET', base, { query: { q, ...opts } });\n }\n // Unified query: server transforms the raw string (parse/LLM) → runs it → returns\n // { query, results, resolved }. `resolved` is what was actually searched.\n query(q, { collection, ...opts } = {}) {\n const base = collection ? `${this.#scope(collection)}/query` : '/api/query';\n return this.request('POST', base, { body: { q, ...opts } });\n }\n // Drive-wide tag/property filter (launcher #tag / #key:op:value).\n tagSearch(filters, q, { collection, ...opts } = {}) {\n const base = collection ? `${this.#scope(collection)}/tags/search` : '/api/tags/search';\n return this.request('POST', base, { body: { filters, q, ...opts } });\n }\n indexers() {\n return this.request('GET', '/api/indexers');\n }\n\n // --- background work + standing problems -----------------------------------\n // Tasks are in-flight and ephemeral; issues are what a failure left behind and are\n // durable. Ids can contain anything (an issue id embeds a node id), so every one of\n // these encodes before it becomes a path segment.\n tasks() {\n return this.request('GET', '/api/tasks');\n }\n cancelTask(id) {\n return this.request('POST', `/api/tasks/${encodeURIComponent(id)}/cancel`);\n }\n dismissTask(id) {\n return this.request('DELETE', `/api/tasks/${encodeURIComponent(id)}`);\n }\n issues() {\n return this.request('GET', '/api/issues');\n }\n retryIssue(id) {\n return this.request('POST', `/api/issues/${encodeURIComponent(id)}/retry`);\n }\n dismissIssue(id) {\n return this.request('DELETE', `/api/issues/${encodeURIComponent(id)}`);\n }\n reindex() {\n return this.request('POST', '/api/reindex');\n }\n /** Reconcile a collection against its object store (changes made outside Trove). */\n scanCollection(id) {\n return this.request('POST', `/api/collections/${encodeURIComponent(id)}/scan`);\n }\n\n /**\n * Check every collection's backing store for problems a browser would hit — chiefly a\n * missing CORS policy, which leaves the file list and search working while every file\n * fails to open.\n *\n * Worth asking from the browser rather than only on a timer: the server checks against\n * the origin of THIS request, and a bucket policy may name exactly one origin.\n */\n checkStorage() {\n return this.request('POST', '/api/diagnostics/storage');\n }\n\n // --- server plugin installs (account-scoped, synced across devices) ---------\n /** Upload a package zip for account install; returns the server install record. */\n async installPlugin(bytes, grants) {\n const q = grants && grants.length ? '?grants=' + encodeURIComponent(grants.join(',')) : '';\n const res = await this._fetch(this.baseUrl + '/api/plugins/install' + q, { method: 'POST', body: bytes, headers: this.authHeaders() });\n const json = await res.json().catch(() => null);\n if (!res.ok) {\n const e = json?.error || { code: 'internal', message: `Install failed (${res.status})` };\n throw new TroveError(e.code, e.message, { details: e.details });\n }\n return json.install;\n }\n installedPlugins() {\n return this.request('GET', '/api/plugins/installed');\n }\n async pluginPackage(id) {\n const res = await this._fetch(`${this.baseUrl}/api/plugins/${encodeURIComponent(id)}/package`, { headers: this.authHeaders() });\n if (!res.ok) throw new TroveError('not_found', `Package for \"${id}\" not found`);\n return new Uint8Array(await res.arrayBuffer());\n }\n uninstallPluginServer(id) {\n return this.request('DELETE', `/api/plugins/${encodeURIComponent(id)}/install`);\n }\n // contribution: { semanticTexts?, tags?, metadata? } (legacy { documents, facet } ok).\n pushIndex(indexerId, nodeId, contribution) {\n return this.request('POST', `/api/index/${encodeURIComponent(indexerId)}`, { body: { nodeId, ...contribution } });\n }\n\n // --- identity --------------------------------------------------------------\n me() {\n return this.request('GET', '/api/me');\n }\n\n // --- collections -----------------------------------------------------------\n collections() {\n return this.request('GET', '/api/collections');\n }\n createCollection(body) {\n return this.request('POST', '/api/collections', { body });\n }\n\n /** Change a collection's settings — including turning encryption on. */\n updateCollection(id, patch) {\n return this.request('PATCH', `/api/collections/${encodeURIComponent(id)}`, { body: patch });\n }\n\n // --- key rotation ---------------------------------------------------------\n //\n // What a rotation would cost before anyone starts one: on a metered store it is a real\n // bill, and the button should not be the first place that becomes apparent.\n rotationEstimate(id) {\n return this.request('GET', `/api/collections/${encodeURIComponent(id)}/rotate/estimate`);\n }\n /** Who has access to a collection. Admin-only, server-side. */\n collectionGrants(id) {\n return this.request('GET', `/api/collections/${encodeURIComponent(id)}/grants`);\n }\n\n /**\n * Add, change or remove one grant.\n *\n * Upsert by (type, subject); an empty capability list REMOVES the grant, which is the\n * shape `setGrant` already had — so revoking is the same call as granting, with nothing.\n */\n setCollectionGrant(id, grant) {\n return this.request('POST', `/api/collections/${encodeURIComponent(id)}/grants`, { body: grant });\n }\n\n rotationState(id) {\n return this.request('GET', `/api/collections/${encodeURIComponent(id)}/rotate`);\n }\n beginRotation(id) {\n return this.request('POST', `/api/collections/${encodeURIComponent(id)}/rotate`);\n }\n cancelRotation(id) {\n return this.request('DELETE', `/api/collections/${encodeURIComponent(id)}/rotate`);\n }\n\n // --- conversations, tags, sidecar ------------------------------------------\n sidecar(id) {\n return this.request('GET', `/api/items/${encodeURIComponent(id)}/sidecar`);\n }\n addComment(id, { body, parentId, mentions } = {}) {\n return this.request('POST', `/api/items/${encodeURIComponent(id)}/comments`, { body: { body, parentId, mentions } });\n }\n editComment(id, cid, body) {\n return this.request('POST', `/api/items/${encodeURIComponent(id)}/comments/${encodeURIComponent(cid)}/edit`, { body: { body } });\n }\n deleteComment(id, cid) {\n return this.request('DELETE', `/api/items/${encodeURIComponent(id)}/comments/${encodeURIComponent(cid)}`);\n }\n reactComment(id, cid, emoji, on) {\n return this.request('POST', `/api/items/${encodeURIComponent(id)}/comments/${encodeURIComponent(cid)}/react`, { body: { emoji, on } });\n }\n setTag(id, name, value) {\n return this.request('POST', `/api/items/${encodeURIComponent(id)}/tags`, { body: { name, value } });\n }\n removeTag(id, name) {\n return this.request('DELETE', `/api/items/${encodeURIComponent(id)}/tags/${encodeURIComponent(name)}`);\n }\n\n // --- notifications & push --------------------------------------------------\n notifications() {\n return this.request('GET', '/api/notifications');\n }\n markNotificationsRead(ids) {\n return this.request('POST', '/api/notifications/read', { body: { ids } });\n }\n vapidKey() {\n return this.request('GET', '/api/push/vapid');\n }\n\n // --- API keys (admin) -------------------------------------------------------\n // Capability-only credentials; see core/apiKeys.js. `mintApiKey` is the one call in\n // this client whose response contains a secret, and it is the only chance to see it.\n apiKeys() {\n return this.request('GET', '/api/keys');\n }\n mintApiKey({ name, scopes, expiresAt = null }) {\n return this.request('POST', '/api/keys', { body: { name, scopes, expiresAt } });\n }\n revokeApiKey(id) {\n return this.request('DELETE', `/api/keys/${encodeURIComponent(id)}`);\n }\n subscribePush(subscription) {\n return this.request('POST', '/api/push/subscribe', { body: { subscription } });\n }\n\n /** URL for GET-ing bytes (used by <img>/<audio>/<video> and downloads). */\n downloadUrl(id, { attachment } = {}) {\n return `${this.baseUrl}/api/items/download?id=${encodeURIComponent(id)}${attachment ? '&disposition=attachment' : ''}`;\n }\n\n /**\n * Mint URLs that carry their own authorization, for the things that cannot send a\n * header — an <img src>, a <video src>, cache.add(). Batched: a gallery asks for what\n * it is about to draw, in one request. See platform/mediaUrls.js.\n */\n mintUrls(ids, op = 'media') {\n return this.request('POST', '/api/items/urls', { body: { ids, op } });\n }\n\n /**\n * Start a download in the browser.\n *\n * With no bearer token this is a plain navigation to the download URL — the browser\n * streams it, handles Range, and never buffers a 4 GB file in a tab. When a token IS\n * in play that isn't possible: an `<a href>` cannot carry an Authorization header, so\n * the navigation would arrive unauthenticated and 401. Rather than move the token into\n * the query string (where it lands in logs, history, and referrers), fetch the bytes\n * with the header and hand the browser a blob.\n *\n * The cost is honest and worth stating: the blob path holds the file in memory. It is\n * the price of bearer auth without a token-bearing URL, and it does not apply to the\n * common proxy-authenticated deployment, which takes the streaming path.\n */\n async download(id, name, { attachment = true } = {}) {\n const url = this.downloadUrl(id, { attachment });\n if (!this.token()) return { url, streamed: true };\n const res = await this._fetch(url, { headers: this.authHeaders() });\n if (!res.ok) throw new TroveError('internal', `Download failed (${res.status})`);\n return { url: URL.createObjectURL(await res.blob()), streamed: false, revoke: true };\n }\n\n /** Read a whole file as text/bytes (small files, indexers). */\n async readBytes(id, { signal } = {}) {\n const res = await this._fetch(this.downloadUrl(id), { signal, headers: this.authHeaders() });\n if (!res.ok) throw new TroveError('internal', `Download failed (${res.status})`);\n return new Uint8Array(await res.arrayBuffer());\n }\n async readText(id, opts) {\n return new TextDecoder().decode(await this.readBytes(id, opts));\n }\n\n /**\n * Read at most `maxBytes` of a file as text.\n *\n * A viewer must never pull a whole file just to show the top of it. A drive holds\n * logs, exports and dumps that are hundreds of megabytes; `readText` on one of those\n * buffers the entire thing in the tab before a single character is drawn, and the\n * browser is gone before the user learns anything. A Range request costs one extra\n * byte over the wire and bounds the damage at the transfer rather than the render.\n *\n * The cut is at a BYTE boundary, which can land mid-character in UTF-8, so the\n * decoder is told to tolerate it — a trailing replacement glyph beats throwing away\n * the read. The last partial line is dropped for the same reason.\n *\n * @returns {Promise<{text: string, truncated: boolean, total: number|null}>}\n */\n async readTextCapped(id, { maxBytes = 512 * 1024, size = null, signal } = {}) {\n // Skip the Range when we already know the file fits. An empty file has no\n // satisfiable range, so asking for one turned \"open an empty note\" into an error\n // page; a 416 from any backend would do the same.\n const ranged = size == null || size > maxBytes;\n const res = await this._fetch(this.downloadUrl(id), {\n signal,\n headers: { ...this.authHeaders(), ...(ranged ? { range: `bytes=0-${maxBytes - 1}` } : {}) },\n });\n if (res.status === 416) return { text: '', truncated: false, total: 0 };\n if (!res.ok && res.status !== 206) throw new TroveError('internal', `Download failed (${res.status})`);\n const bytes = new Uint8Array(await res.arrayBuffer());\n // `Content-Range: bytes 0-N/TOTAL` is how we learn the real size; a server that\n // ignored the Range header just sent everything, which is also fine.\n const total = Number(/\\/(\\d+)$/.exec(res.headers.get('content-range') || '')?.[1]) || null;\n const truncated = bytes.length >= maxBytes && (total == null || total > bytes.length);\n let text = new TextDecoder('utf-8', { fatal: false }).decode(bytes);\n if (truncated) {\n const lastBreak = text.lastIndexOf('\\n');\n if (lastBreak > 0) text = text.slice(0, lastBreak);\n }\n return { text, truncated, total };\n }\n\n /**\n * Upload a File/Blob with progress + resume.\n * @param {Blob & {name?:string}} file\n * @param {object} opts\n * @param {string} opts.parentId\n * @param {string} [opts.name]\n * @param {(p:{loaded:number,total:number,ratio:number}) => void} [opts.onProgress]\n * @param {AbortSignal} [opts.signal]\n * @param {number} [opts.concurrency]\n * @returns {Promise<object>} the created node\n */\n async upload(file, opts) {\n const name = opts.name || file.name || 'untitled';\n const size = file.size;\n // Every step of an upload is retried, not just the parts.\n //\n // Multipart parts already had this; nothing else did — so a transient failure on\n // `create`, on the single presigned PUT, or on `complete` killed the whole upload on\n // the first stumble, while the same failure mid-multipart was shrugged off. The\n // single-PUT path is the one most uploads take (anything under the multipart floor),\n // which is to say the retries were on the rarer half.\n //\n // `withRetry` decides what is worth retrying — see errors.js. Notably a lost upload\n // session is NOT retryable, and must not be: a session that has genuinely expired or\n // been aborted will never come back, and hammering it just delays the error. That\n // case is what the manual retry is for.\n const step = (fn) => withRetry(fn, {\n signal: opts.signal,\n retries: 4,\n onRetry: ({ attempt, delayMs, error }) => opts.onRetry?.({ attempt, delayMs, message: error.message }),\n });\n\n const plan = await step(() => this.request('POST', `${this.#scope(opts.collection)}/uploads`, {\n body: { name, size, contentType: file.type || undefined },\n signal: opts.signal,\n }));\n // Hand the caller the server upload id so a cancel/failure can abort the session\n // (otherwise a multipart upload leaks server + storage state).\n if (plan.uploadId) opts.onStart?.(plan.uploadId);\n\n // Progress is measured against what TRAVELS, which is now the file itself even for an\n // encrypted collection: the drive seals it on the way to the store, so nothing larger\n // than the file ever leaves this tab.\n const progress = new ProgressAggregator(size, opts.onProgress);\n const t = plan.transfer || {};\n const completeUrl = plan.endpoints?.complete || `/api/uploads/${plan.uploadId}/complete`;\n\n if (plan.strategy === 'single') {\n // One presigned PUT straight to storage (bytes never touch our server). The plan\n // only ever chooses this for an UNENCRYPTED collection now — a presigned PUT of a\n // file this client has not sealed would put plaintext in the bucket.\n const body = file;\n await step(() => xhrPut(t.url || plan.url, body, { headers: t.requiredHeaders, signal: opts.signal, onProgress: (l) => progress.set('single', l) }));\n const done = await step(() => this.request('POST', completeUrl, { body: {}, signal: opts.signal }));\n return done.node;\n }\n if (plan.strategy === 'direct-single') {\n const body = file;\n await step(() => xhrPut(this.baseUrl + this.#partUrl(plan, 1), body, {\n // Our own server, so it needs our bearer token; `t.authHeaders` lets the plan\n // add its own and wins on a clash.\n headers: { ...this.authHeaders(), ...t.authHeaders },\n signal: opts.signal, onProgress: (l) => progress.set(1, l),\n }));\n const done = await step(() => this.request('POST', completeUrl, { body: {}, signal: opts.signal }));\n return done.node;\n }\n\n // Multipart (presign or direct).\n const partSize = plan.partSize;\n const partCount = plan.partCount ?? Math.ceil(size / partSize);\n // Resume: which parts already exist?\n let received = new Set();\n try {\n const statusUrl = plan.endpoints?.status || `/api/uploads/${plan.uploadId}/status`;\n const status = await this.request('GET', statusUrl, { signal: opts.signal });\n received = new Set(status.received || []);\n } catch { /* fresh upload */ }\n\n const parts = [];\n const jobs = [];\n for (let n = 1; n <= partCount; n++) {\n const start = (n - 1) * partSize;\n const blob = file.slice(start, Math.min(start + partSize, size));\n jobs.push({ n, blob });\n }\n\n const results = new Array(partCount);\n const concurrency = Math.min(opts.concurrency ?? 4, jobs.length);\n let cursor = 0;\n // When one part fails for good, abort the sibling workers' in-flight parts instead\n // of letting them keep PUTting bytes whose result we're about to discard. The inner\n // controller is chained to the caller's signal so a user cancel still propagates.\n const inner = new AbortController();\n const onOuterAbort = () => inner.abort();\n if (opts.signal) {\n if (opts.signal.aborted) inner.abort();\n else opts.signal.addEventListener('abort', onOuterAbort, { once: true });\n }\n const worker = async () => {\n while (cursor < jobs.length) {\n if (inner.signal.aborted) return;\n const { n, blob } = jobs[cursor++];\n if (received.has(n)) {\n progress.set(n, blob.size);\n continue;\n }\n const etag = await withRetry(\n () => this.#uploadPart(plan, n, blob, {\n signal: inner.signal, onProgress: (l) => progress.set(n, l),\n }),\n {\n signal: inner.signal,\n retries: 4,\n onRetry: ({ attempt, delayMs, error }) => opts.onRetry?.({ attempt, delayMs, part: n, message: error.message }),\n },\n );\n results[n - 1] = { partNumber: n, etag };\n }\n };\n try {\n await Promise.all(Array.from({ length: concurrency }, worker));\n } catch (err) {\n inner.abort(); // stop the other workers before surfacing the failure\n throw err;\n } finally {\n opts.signal?.removeEventListener('abort', onOuterAbort);\n }\n\n const reportedParts = results.filter(Boolean);\n const done = await step(() => this.request('POST', completeUrl, {\n body: { parts: reportedParts }, signal: opts.signal,\n }));\n return done.node;\n }\n\n // Expand an endpoint/transfer URL template's {partNumber} placeholder.\n #partUrl(plan, n) {\n const tmpl = plan.transfer?.partUrl || `/api/uploads/${plan.uploadId}/parts/{partNumber}`;\n return tmpl.replace('{partNumber}', String(n));\n }\n\n\n async #uploadPart(plan, n, blob, { signal, onProgress }) {\n const t = plan.transfer || {};\n if (plan.strategy === 'presign') {\n const part = (t.parts || plan.parts)?.find((p) => p.partNumber === n);\n let url = part?.url;\n if (!url) {\n const signTmpl = plan.endpoints?.sign || `/api/uploads/${plan.uploadId}/parts/{partNumber}/sign`;\n const r = await this.request('POST', signTmpl.replace('{partNumber}', String(n)), { signal });\n url = r.url;\n }\n const res = await xhrPut(url, blob, { signal, onProgress, wantEtag: true });\n const etag = res.etag;\n const reportTmpl = plan.endpoints?.report || `/api/uploads/${plan.uploadId}/parts/{partNumber}/report`;\n await this.request('POST', reportTmpl.replace('{partNumber}', String(n)), { body: { etag }, signal });\n return etag;\n }\n // proxied: server records the etag; response body has it.\n const res = await xhrPut(this.baseUrl + this.#partUrl(plan, n), blob, {\n headers: { ...this.authHeaders(), ...t.authHeaders },\n signal, onProgress, wantJson: true,\n });\n return res.json?.etag;\n }\n\n async abortUpload(uploadId) {\n return this.request('DELETE', `/api/uploads/${uploadId}`);\n }\n}\n\nclass ProgressAggregator {\n constructor(total, cb) {\n this.total = total;\n this.cb = cb;\n this.parts = new Map();\n }\n set(key, loaded) {\n // Monotonic per part: a retried part restarts its XHR progress at 0, which would\n // otherwise pull the aggregate bar backwards. Never let a part's reported bytes drop.\n const prev = this.parts.get(key) || 0;\n if (loaded < prev) return;\n this.parts.set(key, loaded);\n if (!this.cb) return;\n let sum = 0;\n for (const v of this.parts.values()) sum += v;\n const loadedTotal = Math.min(sum, this.total);\n this.cb({ loaded: loadedTotal, total: this.total, ratio: this.total ? loadedTotal / this.total : 1 });\n }\n}\n\n// XHR PUT with upload progress + abort. Returns { status, etag?, json? }.\nfunction xhrPut(url, body, { signal, onProgress, wantEtag, wantJson, headers } = {}) {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('PUT', url, true);\n for (const [k, v] of Object.entries(headers || {})) { try { xhr.setRequestHeader(k, v); } catch { /* forbidden header */ } }\n if (signal) {\n if (signal.aborted) {\n xhr.abort();\n return reject(TroveError.aborted());\n }\n signal.addEventListener('abort', () => xhr.abort(), { once: true });\n }\n xhr.upload.onprogress = (e) => onProgress?.(e.loaded);\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n const out = { status: xhr.status };\n if (wantEtag) out.etag = xhr.getResponseHeader('ETag') || xhr.getResponseHeader('etag');\n if (wantJson) {\n try {\n out.json = JSON.parse(xhr.responseText);\n } catch { /* ignore */ }\n }\n resolve(out);\n } else if (xhr.status === 429 || xhr.status >= 500) {\n reject(TroveError.transient(`Upload part failed (${xhr.status})`));\n } else {\n reject(new TroveError('internal', `Upload failed (${xhr.status})`));\n }\n };\n xhr.onerror = () => reject(TroveError.transient('Network error during upload'));\n xhr.onabort = () => reject(TroveError.aborted());\n xhr.send(body);\n });\n}\n",
26
26
  "// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n , // determined by compression function\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data[0]) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush(ev.data[1]);\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n // can fail for cross-realm Uint8Array, but ok - only a small performance penalty\n w.postMessage([d, t = f], d.buffer instanceof ArrayBuffer ? [d.buffer] : []);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function (sync) { w.postMessage([0, sync]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\n// read 8 bytes\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n if (final) {\n // cleanup unneeded buffers/state to reduce memory usage\n this.s = this.o = {};\n this.b = et;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible. A separate DEFLATE stream may be concatenated\n * with the current output after a sync flush.\n */\n Deflate.prototype.flush = function (sync) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n // could technically skip writing the type-0 block for (this.s.r & 7) == 0,\n // but the deterministic trailer (00 00 FF FF) is useful in some situations\n if (sync) {\n var c = new u8(6);\n c[0] = this.s.r >> 3;\n // write empty, non-final type-0 block\n var ep = wfblk(c, this.s.r, et);\n this.s.r = 0;\n this.ondata(c.subarray(0, ep >> 3), false);\n }\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Gzip.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, 0);\n // process concatenated GZIP\n if (this.s.f && !this.s.l) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n else if (final) {\n Inflate.prototype.c.call(this, final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Zlib.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (ArrayBuffer.isView(val))\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), efl = b2(d, b + 30), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n var _a = z64hs(d, es, efl, z, b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)), sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + efl + b2(d, b + 32), off];\n};\n// read zip64 header sizes\nvar z64hs = function (d, b, l, z, sc, su, off) {\n var nsc = sc == 4294967295, nsu = su == 4294967295, noff = off == 4294967295, e = b + l;\n var nf = nsc + nsu + noff;\n if (z && nf) {\n for (; b + 4 < e; b += 4 + b2(d, b + 2)) {\n if (b2(d, b) == 1) {\n return [\n nsc ? b8(d, b + 4 + 8 * nsu) : sc,\n nsu ? b8(d, b + 4) : su,\n noff ? b8(d, b + 4 + 8 * (nsu + nsc)) : off,\n 1\n ];\n }\n }\n // z == 2 for unknown whether or not zip64\n if (z < 2)\n err(13);\n }\n return [sc, su, off, 0];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n // we shouldn't really do this cast, but properly handling ArrayBufferLike\n // makes the API unergonomic with Buffer\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (chunk, final) {\n // same as ZipPassThrough: cast to retain Buffer ergonomics\n this.ondata(null, chunk, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (chunk, final) {\n try {\n this.i.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (chunk, final) {\n if (this.i.terminate)\n chunk = slc(chunk, 0);\n this.i.push(chunk, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var lsc = b4(buf, i + 18), lsu = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n var _a = z64hs(buf, i, es, 2, lsc, lsu, 0), sc_1 = _a[0], su_1 = _a[1], z64 = _a[3];\n if (dd)\n sc_1 = -1 - z64;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n",
27
27
  "// PluginRegistry — install records (manifest, package files, granted caps, trust\n// status, settings, secrets) persisted in IndexedDB so plugins survive reloads on\n// this device. Package bytes stay on-device (they can be large); non-secret\n// settings can also be mirrored to the server (see the settings service) so they\n// follow the user. A plugin's OWN data lives in per-scope SQLite databases (server\n// via the host API; on-device via the wasm store) — not here.\n\nconst DB = 'trove-plugins';\nconst STORE = 'installs';\n\nfunction openDb() {\n return new Promise((resolve, reject) => {\n const req = indexedDB.open(DB, 1);\n req.onupgradeneeded = () => {\n const db = req.result;\n if (!db.objectStoreNames.contains(STORE)) db.createObjectStore(STORE, { keyPath: 'id' });\n };\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n}\nfunction tx(db, mode, fn) {\n return new Promise((resolve, reject) => {\n const t = db.transaction(STORE, mode);\n const s = t.objectStore(STORE);\n let out;\n Promise.resolve(fn(s)).then((r) => (out = r));\n t.oncomplete = () => resolve(out);\n t.onerror = () => reject(t.error);\n });\n}\nconst reqP = (r) => new Promise((res, rej) => { r.onsuccess = () => res(r.result); r.onerror = () => rej(r.error); });\n\nexport class PluginRegistry {\n constructor() {\n this._db = null;\n }\n async #db() {\n return (this._db ??= await openDb());\n }\n /** record: { id, manifest, files:{path:Uint8Array}, grants, trust, settings, secrets, installedAt } */\n async save(record) {\n const db = await this.#db();\n await tx(db, 'readwrite', (s) => s.put(record));\n return record;\n }\n async get(id) {\n const db = await this.#db();\n return tx(db, 'readonly', (s) => reqP(s.get(id)));\n }\n async list() {\n const db = await this.#db();\n return tx(db, 'readonly', (s) => reqP(s.getAll()));\n }\n async remove(id) {\n const db = await this.#db();\n await tx(db, 'readwrite', (s) => s.delete(id));\n }\n async patch(id, patch) {\n const rec = await this.get(id);\n if (!rec) return null;\n const next = { ...rec, ...patch };\n await this.save(next);\n return next;\n }\n}\n\n",
28
28
  "// Client-side plugin storage: an on-device SQLite database per scope, run in the\n// HOST with sql.js (wasm) and persisted to IndexedDB. The sandboxed iframe can't\n// touch IndexedDB (opaque origin), so — like everything else — the host holds the\n// store and the plugin reaches it over RPC. It exposes the SAME async\n// SqliteDatabase surface as the server side, so ctx.storage.*.client mirrors\n// .server. Lazy: the wasm only loads the first time a plugin uses client storage.\n\nlet sqlPromise = null;\nfunction loadSql() {\n // locateFile points at the wasm we serve at the app root (build copies it; dev &\n // test serve it via middleware). Only fetched on first use. On failure we clear\n // the cached promise so a later attempt can retry rather than wedging forever.\n if (!sqlPromise) {\n sqlPromise = import('sql.js')\n .then((m) => (m.default || m)({ locateFile: () => '/sql-wasm.wasm' }))\n .catch((err) => { sqlPromise = null; throw err; });\n }\n return sqlPromise;\n}\n\n// --- IndexedDB blob persistence (host origin) --------------------------------\n\nconst IDB = 'trove-plugin-clientdb';\nconst STORE = 'dbs';\n\nfunction openIdb() {\n return new Promise((resolve, reject) => {\n const req = indexedDB.open(IDB, 1);\n req.onupgradeneeded = () => {\n const db = req.result;\n if (!db.objectStoreNames.contains(STORE)) db.createObjectStore(STORE);\n };\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n}\nfunction idbOp(mode, fn) {\n return openIdb().then((db) => new Promise((resolve, reject) => {\n const t = db.transaction(STORE, mode);\n let out;\n Promise.resolve(fn(t.objectStore(STORE))).then((r) => (out = r));\n t.oncomplete = () => { db.close(); resolve(out); };\n t.onerror = () => { db.close(); reject(t.error); };\n }));\n}\nconst reqP = (r) => new Promise((res, rej) => { r.onsuccess = () => res(r.result); r.onerror = () => rej(r.error); });\nconst loadBytes = (key) => idbOp('readonly', (s) => reqP(s.get(key)));\nconst saveBytes = (key, bytes) => idbOp('readwrite', (s) => s.put(bytes, key));\nconst dropBytes = (key) => idbOp('readwrite', (s) => s.delete(key));\n\n// --- a single scoped database (conforms to SqliteDatabase) -------------------\n\nclass ClientDatabase {\n constructor(key, db) {\n this.key = key;\n this.db = db;\n this._saveTimer = null;\n }\n // Debounce persistence: export the whole (small, per-scope) db to IndexedDB\n // shortly after the last write.\n //\n // The write already returned `{ok:true}` to the plugin by the time this runs, so a\n // failure here is data the plugin believes it saved and hasn't. Nothing can be\n // returned to it any more — but it must at least be visible, not swallowed.\n #dirty() {\n clearTimeout(this._saveTimer);\n this._saveTimer = setTimeout(() => {\n this.flush().catch((err) => {\n console.error(`persisting plugin storage \"${this.key}\" failed`, err);\n this.onError?.(err, this.key);\n });\n }, 150);\n }\n async flush() {\n clearTimeout(this._saveTimer);\n this._saveTimer = null;\n await saveBytes(this.key, this.db.export());\n }\n async exec(sql) { this.db.exec(sql); this.#dirty(); return { ok: true }; }\n async run(sql, ...params) { this.db.run(sql, params); this.#dirty(); return { ok: true }; }\n async get(sql, ...params) {\n const stmt = this.db.prepare(sql);\n try { stmt.bind(params); return stmt.step() ? stmt.getAsObject() : null; }\n finally { stmt.free(); }\n }\n async all(sql, ...params) {\n const stmt = this.db.prepare(sql);\n const out = [];\n try { stmt.bind(params); while (stmt.step()) out.push(stmt.getAsObject()); }\n finally { stmt.free(); }\n return out;\n }\n async batch(statements = []) {\n this.db.run('BEGIN');\n try {\n for (const { sql, params = [] } of statements) this.db.run(sql, params);\n this.db.run('COMMIT');\n } catch (err) {\n try { this.db.run('ROLLBACK'); } catch { /* already rolled back */ }\n throw err;\n }\n this.#dirty();\n return { ok: true };\n }\n close() { clearTimeout(this._saveTimer); this.db.close(); }\n}\n\n// --- the pool ----------------------------------------------------------------\n\nexport class ClientSqlProvider {\n constructor({ onError } = {}) { this._pool = new Map(); this.onError = onError || null; }\n\n async obtain(key) {\n let db = this._pool.get(key);\n if (!db) {\n const SQL = await loadSql();\n const bytes = await loadBytes(key);\n db = new ClientDatabase(key, new SQL.Database(bytes || undefined));\n db.onError = this.onError;\n this._pool.set(key, db);\n }\n return db;\n }\n\n /** Drop a scope's database. Throws if the bytes can't be deleted — the caller\n * (uninstall) reports leftover on-device data rather than claiming a clean wipe. */\n async drop(key) {\n const db = this._pool.get(key);\n if (db) { db.close(); this._pool.delete(key); }\n await dropBytes(key);\n }\n}\n",
@@ -44,10 +44,10 @@
44
44
  "// One place that knows how to classify a file by type — extension extraction and a\n// single format table. Previously the ext/mime lists were re-derived (and drifted)\n// across openers.extOf, contributions.matchesSelector, iconForNode, and offline.isTexty;\n// now the icon shown, the \"is this text?\" decision, and the type label all agree.\n\n/** The extension (\".pdf\") for a node, lowercased, or '' if none. */\nexport function extOf(node) {\n const name = (node?.name || '').toLowerCase();\n return name.includes('.') ? name.slice(name.lastIndexOf('.')) : '';\n}\n\n// Category → { mime: prefixes/exact it matches, ext: extensions }. Order matters:\n// kindOf checks these top-down.\nconst CATEGORIES = [\n { kind: 'audio', icon: 'file-audio', mime: ['audio/'], ext: ['.mp3', '.flac', '.wav', '.opus', '.ogg', '.m4a', '.m4b'] },\n { kind: 'image', icon: 'file-image', mime: ['image/'], ext: ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg', '.avif'] },\n { kind: 'video', icon: 'file-video', mime: ['video/'], ext: ['.mp4', '.webm', '.mkv', '.mov'] },\n {\n kind: 'text', icon: 'file-text', mime: ['text/', 'application/json'],\n ext: ['.txt', '.md', '.markdown', '.json', '.js', '.mjs', '.ts', '.jsx', '.tsx', '.css', '.html',\n '.xml', '.yaml', '.yml', '.toml', '.ini', '.log', '.csv', '.py', '.rb', '.go', '.rs', '.sh', '.c', '.h', '.cpp', '.java'],\n },\n];\n\nfunction matchesCategory(cat, ext, ct) {\n if (cat.ext.includes(ext)) return true;\n // A mime entry ending in '/' is a prefix (audio/), otherwise an exact type.\n return cat.mime.some((m) => (m.endsWith('/') ? ct.startsWith(m) : ct === m));\n}\n\n/** Classify an item → 'audio'|'image'|'video'|'text'|'file'. */\nexport function kindOf(node) {\n const ext = extOf(node);\n const ct = node?.contentType || '';\n for (const cat of CATEGORIES) if (matchesCategory(cat, ext, ct)) return cat.kind;\n return 'file';\n}\n\nconst ICONS = { ...Object.fromEntries(CATEGORIES.map((c) => [c.kind, c.icon])), file: 'file' };\n\n/** The icon name for a node, derived from its kind. */\nexport function iconForKind(node) {\n return ICONS[kindOf(node)] || 'file';\n}\n\n/** Whether a node holds indexable text (drives offline text extraction). */\nexport function isTexty(node) {\n return kindOf(node) === 'text';\n}\n",
45
45
  "// Opener choice: which viewer opens a file when several can. Built-in and plugin\n// openers register the same way (a selector + priority), so a file can match more\n// than one — e.g. a plugin PDF viewer alongside a built-in, or a rich player vs the\n// plain audio player for an .m4a. When that happens and the user hasn't expressed a\n// preference, we ask; their choice can be remembered per file type.\n//\n// Preferences live in settings under `openers.associations`: a map from a *type key*\n// (an extension like \".pdf\", an exact mime, or a \"type/*\" wildcard) to an opener id.\n\nimport { selectorMatches } from '@3sln/trove/core/util.js';\nimport { extOf } from './fileType.js';\n\nexport const ASSOC_KEY = 'openers.associations';\n\nexport { extOf };\n\n/**\n * One opener as the chooser and the switcher need to see it: what it is called, what it\n * claims, and where it came from.\n *\n * `source` is resolved here because it needs the plugin host to answer, which a component\n * has no business holding. `match` stays so the selector can be applied later, by\n * `openersFor`, against a node the caller already has.\n *\n * No `component`, only because nothing on this path renders — both callers are picking\n * between openers, not drawing with one. (A renderer would be fine to pass: it is a pure\n * vnode builder. See the `views` query, which does exactly that.)\n */\nexport function describeOpener(opener, plugins) {\n return {\n id: opener.id,\n title: opener.title ?? opener.name ?? opener.id,\n match: opener.match ?? null,\n priority: opener.priority ?? 0,\n pluginId: opener.pluginId ?? null,\n source: opener.pluginId\n ? (plugins?.plugins?.get(opener.pluginId)?.manifest?.displayName || opener.pluginId)\n : 'Built-in',\n };\n}\n\n/**\n * Which of these openers claim this node, best first.\n *\n * Pure, and deliberately so — see the `openers` query. Every reactive decision (when-clause,\n * plugin health, priority order) has already been made; all that is left is running a\n * selector over a file, which needs nothing but its two arguments.\n */\nexport function openersFor(openers, node) {\n return (openers || []).filter((o) => selectorMatches(o.match, node));\n}\n\n/** The canonical type key we remember a choice under: prefer extension, else mime. */\nexport function typeKeyFor(node) {\n return extOf(node) || node?.contentType || '';\n}\n\n/** A human label for the type, for \"Always use … for {label}\". */\nexport function typeLabelFor(node) {\n const ext = extOf(node);\n if (ext) return `${ext} files`;\n const mime = node?.contentType || '';\n return mime ? `${mime} files` : 'this file type';\n}\n\n/**\n * All openers that can handle this node right now (selector + when + availability),\n * best (highest priority) first — for an ACTION, which holds the resources to ask.\n *\n * The render layer gets the same answer the other way round: the `openers` query resolves\n * when/availability, `openersFor` applies the selector. Both end at `describeOpener`, so\n * the opener-chooser dialog looks the same whichever side opened it.\n */\nexport function availableOpeners(r, node) {\n return r.contributions\n .openersFor(node)\n .filter((o) => (!o.when || r.context.evaluate(o.when)) && r.plugins.isAvailable(o))\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n .map((o) => describeOpener(o, r.plugins));\n}\n\n/** The remembered opener id for a node's type (ext → exact mime → type/* ), or null. */\nexport function rememberedOpenerId(r, node) {\n const assoc = r.settings.get(ASSOC_KEY) || {};\n const ext = extOf(node);\n const mime = node?.contentType || '';\n const wild = mime.includes('/') ? `${mime.slice(0, mime.indexOf('/') + 1)}*` : '';\n return (ext && assoc[ext]) || (mime && assoc[mime]) || (wild && assoc[wild]) || null;\n}\n\n/**\n * The associations with one type key changed, or removed with a null openerId.\n *\n * Returns the next map rather than writing it: the write is `RememberOpenerAction`'s, and\n * keeping the arithmetic separate from the effect is what lets both the settings screen and\n * the opener chooser reach it without either touching `settings`.\n */\nexport function withAssociation(assoc, typeKey, openerId) {\n const next = { ...(assoc || {}) };\n if (openerId) next[typeKey] = openerId;\n else delete next[typeKey];\n return next;\n}\n",
46
46
  "// `trove:` — the URI that addresses an ITEM in the drive.\n//\n// There is no folder hierarchy. A collection is a flat namespace of uniquely-named\n// items, and structure comes from items linking to each other — a markdown document\n// that links its sources is what a folder used to be, except it can say *why* things\n// belong together, an item can appear in several of them, and the grouping is\n// searchable content rather than an invisible container.\n//\n// So a link has to be something a person can type into a markdown file:\n//\n// trove:default?name=sailing.txt canonical, by name\n// trove:default/sailing.txt shorthand for the same thing\n// trove:default?id=fil_01H2X8F4KQ by id — survives a rename, unreadable\n//\n// The selector is EXPLICIT (`?name=` vs `?id=`) rather than inferred from the shape\n// of the segment: a name that happens to look like an id would otherwise resolve to\n// something else entirely, and a link that silently retargets is worse than one that\n// visibly breaks. The `/name` shorthand is unambiguous for the same reason — that\n// slot only ever means a name.\n//\n// Names are unique per collection, which is what makes `?name=` resolve to exactly one\n// item. Renaming therefore breaks inbound links, on purpose and visibly: the alternative\n// is opaque ids nobody can hand-write, which would put linking back in the UI's hands.\n// `?id=` is there for links a tool inserts, where stability matters more than legibility.\n\nimport { TroveError } from './errors.js';\n\nexport const TROVE_SCHEME = 'trove:';\n\n// An item name is capped at 255 chars (isValidItemName), so a longer selector can never\n// resolve to anything. Refusing it at parse time keeps garbage out of the links index\n// rather than storing kilobytes that will never match.\nconst MAX_SELECTOR = 255;\n// How many distinct links one item may record. A document is a grouping, not a database\n// dump; past this the value is in the search index, not the link graph.\nexport const MAX_LINKS_PER_ITEM = 500;\n\n// Collection ids are slugs (see CollectionService); a name is anything but a slash,\n// since the pathname shorthand has to stop somewhere.\nconst COLLECTION_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;\n\n/**\n * Parse a `trove:` URI into `{ collection, by: 'name'|'id', value }`, or null if it\n * isn't one. Never throws — callers parse untrusted document text with this, where a\n * malformed link is a thing to render as broken, not an exception.\n */\nexport function parseTroveUri(uri) {\n if (typeof uri !== 'string' || !uri.toLowerCase().startsWith(TROVE_SCHEME)) return null;\n let url;\n try {\n url = new URL(uri);\n } catch {\n return null;\n }\n // `trove:default/sailing.txt` → pathname \"default/sailing.txt\"; the slash-free case\n // is `trove:default?name=…`, where the whole pathname is the collection.\n const path = url.pathname;\n const slash = path.indexOf('/');\n const collection = slash < 0 ? path : path.slice(0, slash);\n if (!COLLECTION_RE.test(collection)) return null;\n\n const id = url.searchParams.get('id');\n const name = url.searchParams.get('name');\n let shorthand = '';\n if (slash >= 0) {\n // A malformed percent-escape is a malformed link, not an exception to propagate\n // out of a document render.\n try { shorthand = decodeURIComponent(path.slice(slash + 1)); } catch { return null; }\n }\n\n // Both selectors at once is a contradiction, not something to silently pick between.\n if (id != null && (name != null || shorthand)) return null;\n const by = id != null ? 'id' : 'name';\n const value = id != null ? id : (name != null ? name : shorthand);\n if (!value || value.length > MAX_SELECTOR) return null;\n return { collection, by, value };\n}\n\n/** Whether `uri` is a well-formed trove: reference. */\nexport function isTroveUri(uri) {\n return parseTroveUri(uri) != null;\n}\n\n/**\n * Build a `trove:` URI. `by` defaults to 'name' — the legible form, which is what\n * gets written into documents; pass 'id' for a link that must survive a rename.\n */\nexport function troveUri(node, by = 'name') {\n const collection = node?.collectionId || 'default';\n if (by === 'id') {\n if (!node?.id) throw TroveError.invalid('trove: link by id needs a node id');\n return `${TROVE_SCHEME}${collection}?id=${encodeURIComponent(node.id)}`;\n }\n if (!node?.name) throw TroveError.invalid('trove: link by name needs a node name');\n return `${TROVE_SCHEME}${collection}?name=${encodeURIComponent(node.name)}`;\n}\n\n/**\n * Every distinct `trove:` reference in a block of text, in first-appearance order.\n *\n * Deliberately scans raw text rather than parsing markdown: a link is just as real in\n * an HTML `href`, a bare mention, or a front-matter list, and the point of extraction\n * is to know what an item references — not to reproduce one renderer's idea of a link.\n * Trailing punctuation is trimmed so `see trove:default/a.md.` doesn't capture the dot.\n */\nexport function extractTroveLinks(text, { limit = MAX_LINKS_PER_ITEM } = {}) {\n if (typeof text !== 'string' || !text) return [];\n const out = [];\n const seen = new Set();\n // Stop at whitespace and at the delimiters that wrap a URL in markdown/HTML.\n const re = /trove:[^\\s<>\"'`)\\]}]+/gi;\n for (const m of text.matchAll(re)) {\n if (out.length >= limit) break;\n const raw = m[0].replace(/[.,;:!?]+$/, '');\n const parsed = parseTroveUri(raw);\n if (!parsed) continue;\n const canonical = `${TROVE_SCHEME}${parsed.collection}?${parsed.by}=${encodeURIComponent(parsed.value)}`;\n if (seen.has(canonical)) continue;\n seen.add(canonical);\n out.push({ uri: canonical, raw, ...parsed });\n }\n return out;\n}\n\n/**\n * The canonical form of a reference, for storing and comparing. Two links that address\n * the same item by the same selector must produce the same string, or backlinks would\n * miss `trove:default/a.md` when the target stored `trove:default?name=a.md`.\n */\nexport function canonicalTroveUri(uri) {\n const p = parseTroveUri(uri);\n return p ? `${TROVE_SCHEME}${p.collection}?${p.by}=${encodeURIComponent(p.value)}` : null;\n}\n\n/** Both canonical forms an item can be addressed by — what a backlink query looks for. */\nexport function troveUrisFor(node) {\n const out = [];\n if (node?.collectionId && node?.name) out.push(troveUri(node, 'name'));\n if (node?.collectionId && node?.id) out.push(troveUri(node, 'id'));\n return out;\n}\n\n// --- shareable web links -------------------------------------------------------\n//\n// `trove:` addresses an item INSIDE the drive: it is what one document writes to link\n// another, and it means nothing to a browser. A share link is the other half — a URL you\n// can paste into a message so that someone else's browser opens the same item.\n//\n// They are deliberately the same addressing, not two competing schemes. A share link is a\n// `trove:` URI wearing an http(s) coat: same collection, same explicit `name`-or-`id`\n// selector, same refusal to infer which one you meant. So anything that can already\n// resolve a `trove:` URI can resolve a share link by parsing it back, and a rename breaks\n// both in the same visible way rather than one silently retargeting.\n//\n// The path form — /c/<collection>/i/<selector> — rather than the query form\n// `?coll=&item=`. Both put the ids in the URL and therefore in server logs and browser\n// history, so that is not the difference; the path reads as a location, survives being\n// truncated in a chat client more gracefully, and leaves the query string free for the\n// things that genuinely are parameters.\n//\n// Nothing secret ever rides in one. An encrypted collection's key is not in the link and\n// must not be: a link is pasted into chats, logged by proxies, and kept in history\n// forever. The recipient gets the item because they are allowed the collection, which is\n// the same rule as everywhere else here.\n\n/** The path a share link uses. Exported so a client router and the server agree. */\nexport const SHARE_PATH = '/c';\n\n/**\n * A URL that opens this item in a browser.\n *\n * @param {object} node\n * @param {string} [origin] where the drive is served; omitted gives a root-relative link\n * @param {'name'|'id'} [by] `name` reads better and breaks on rename; `id` is the reverse\n */\nexport function shareUrl(node, origin = '', by = 'name') {\n if (!node?.collectionId) throw TroveError.invalid('An item needs a collection to be linked to');\n const selector = by === 'id'\n ? `id:${node.id}`\n : encodeURIComponent(node.name);\n if (!selector || (by === 'id' && !node.id)) throw TroveError.invalid('Nothing to link to');\n const path = `${SHARE_PATH}/${encodeURIComponent(node.collectionId)}/i/${selector}`;\n return origin ? `${String(origin).replace(/\\/$/, '')}${path}` : path;\n}\n\n/**\n * Read a share link back, from a full URL or just a path.\n *\n * Returns the same shape `parseTroveUri` does, so a caller resolves either without caring\n * which it was handed. Null rather than a throw: this parses whatever was in the address\n * bar, and a URL that is not a share link is an ordinary page, not an error.\n */\nexport function parseShareUrl(url) {\n let path;\n try {\n path = url.startsWith('/') ? url : new URL(url).pathname;\n } catch {\n return null;\n }\n const m = /^\\/c\\/([^/]+)\\/i\\/(.+)$/.exec(path);\n if (!m) return null;\n let collection;\n let raw;\n try {\n collection = decodeURIComponent(m[1]);\n raw = decodeURIComponent(m[2]);\n } catch {\n return null; // a malformed escape is not a link to anything\n }\n if (!COLLECTION_RE.test(collection)) return null;\n // `id:` is the explicit selector, mirroring `?id=` — a name is never guessed at just\n // because it happens to look like an id.\n const byId = raw.startsWith('id:');\n const value = byId ? raw.slice(3) : raw;\n if (!value || value.length > MAX_SELECTOR) return null;\n return { collection, by: byId ? 'id' : 'name', value };\n}\n\n/** The `trove:` URI a share link denotes — the two are the same address. */\nexport function troveUriFromShareUrl(url) {\n const parsed = parseShareUrl(url);\n if (!parsed) return null;\n return parsed.by === 'id'\n ? `${TROVE_SCHEME}${parsed.collection}?id=${encodeURIComponent(parsed.value)}`\n : `${TROVE_SCHEME}${parsed.collection}?name=${encodeURIComponent(parsed.value)}`;\n}\n",
47
- "// What is left of the data services, plus the derivations that were methods on them.\n//\n// The explorer, search and API-key services were state bags — a `state`, a `cell`, and a\n// `set` that wrote both — and are slices now (bl/state.js). TransfersService stays,\n// because it holds things a state snapshot cannot: AbortControllers, per-file retry\n// thunks closing over the File itself, and a projection into the activity list.\n//\n// The functions below were METHODS on those bags. They are derivations, so they belong to\n// whoever is asking rather than to whatever happens to hold the data.\n\nimport { cell } from '../runtime.js';\n\n\n/**\n * The nodes the selection refers to — a pure function of explorer state.\n *\n * It was a method, which meant every caller reached for the service to ask a question about\n * data it could already see. As a function it can be used two ways without either being a\n * back door: the explorer QUERY folds it into the view, so the UI is handed the answer; and\n * an effect that needs it right now computes it from the state it already holds.\n *\n * Resolving ids against `items` only finds rows on the LOADED PAGE of the CURRENT\n * collection — and the launcher's rows come from search (which the server scopes to every\n * readable collection) and from recents (which survive a collection switch). So every row\n * reached by searching resolved to nothing, and rename / move-to-trash / copy-link returned\n * silently while `explorer.hasSelection` said there was a selection. Preferring the nodes\n * the selecting caller already held fixes the whole class; the `items` lookup stays for\n * callers that only have ids.\n */\nexport function selectedNodesOf(state) {\n // Tolerant of a partial state: a view is computed on every emission, including the first\n // one, and a projection that throws takes the whole query down rather than the field.\n const selection = state?.selection || [];\n const held = state?.selectionNodes;\n if (held?.length) return held.filter((n) => selection.includes(n.id));\n return (state?.items || []).filter((i) => selection.includes(i.id));\n}\n\n\n\n/**\n * Uploads in flight.\n *\n * This owns the DETAIL an upload needs and a generic task doesn't — bytes moved, an\n * AbortController, per-file retry. It also projects each transfer into ActivityService\n * so the drive has ONE list of \"what is happening\", covering work on both sides of the\n * wire: an upload running in this browser and a reindex running on the server show up\n * together, because a user doesn't care which machine is busy.\n *\n * The projection is one-way and this stays the owner. Two writable copies of the same\n * fact is how they drift.\n */\nexport class TransfersService {\n /** @param {import('./activity.js').ActivityService} [activity] */\n constructor(activity = null) {\n this.state = { items: [] }; // { id, name, direction, ratio, loaded, total, status, error, retryable }\n this.cell = cell(this.state);\n this._controllers = new Map();\n this.activity = activity;\n this._tasks = new Map(); // transfer id -> activity task handle\n // How to run this transfer again. Held here rather than in state because it closes\n // over the File itself, which is not something a state snapshot should carry.\n //\n // It exists because automatic retry cannot cover everything: a lost upload session is\n // `notFound`, which is correctly classified non-retryable and will never succeed on\n // its own no matter how many times it is tried. Someone has to decide to start over,\n // and the alternative is asking the user to find the file and drag it in again.\n this._retries = new Map();\n }\n observe() {\n return this.cell;\n }\n #emit() {\n this.cell.setValue(this.state);\n }\n /**\n * @param {{retry?: () => Promise<any>}} [opts] how to run this transfer again, if it can be\n */\n start(id, name, total, controller, { retry = null } = {}) {\n this._controllers.set(id, controller);\n if (retry) this._retries.set(id, retry);\n this.state = {\n items: [...this.state.items, {\n id, name, direction: 'up', ratio: 0, loaded: 0, total, status: 'active', error: null,\n // Surfaced in state so the tray renders from a snapshot rather than interrogating\n // the service — it is a fact about the row, like `status`.\n retryable: !!retry,\n }],\n };\n this.#emit();\n this.#task(id, name, total);\n }\n\n #task(id, name, total) {\n const task = this.activity?.start({\n kind: 'transfer', title: `Uploading ${name}`, total: total || null, unit: 'bytes',\n onCancel: () => this.cancel(id),\n });\n if (task) this._tasks.set(id, task);\n }\n\n /**\n * Run a failed transfer again, in place.\n *\n * The same row rather than a new one: a retry is another attempt at the thing the user\n * already asked for, and a tray that grew an entry per attempt would report one upload\n * as four.\n */\n retry(id) {\n const again = this._retries.get(id);\n if (!again) return null;\n const item = this.state.items.find((t) => t.id === id);\n if (!item || item.status === 'active') return null;\n return again();\n }\n\n /** Put an existing row back into flight — see `retry`. */\n restart(id, controller) {\n this._controllers.set(id, controller);\n const item = this.state.items.find((t) => t.id === id);\n this.state = {\n items: this.state.items.map((t) => (t.id === id\n ? { ...t, status: 'active', error: null, ratio: 0, loaded: 0 }\n : t)),\n };\n this.#emit();\n // A fresh activity task: the previous one already ended as failed, and reporting\n // progress into a finished task would leave the panel showing a failure that is\n // actively being retried.\n this.#task(id, item?.name || 'file', item?.total || null);\n }\n progress(id, { loaded, total, ratio }) {\n this.state = { items: this.state.items.map((t) => (t.id === id ? { ...t, loaded, total, ratio } : t)) };\n this.#emit();\n this._tasks.get(id)?.progress({ done: loaded, total: total || null });\n }\n finish(id, status = 'done', error = null) {\n this.state = { items: this.state.items.map((t) => (t.id === id ? { ...t, status, error, ratio: status === 'done' ? 1 : t.ratio } : t)) };\n this._controllers.delete(id);\n this.#emit();\n const task = this._tasks.get(id);\n if (task) {\n if (status === 'done') task.succeed();\n else if (status === 'cancelled') task.cancel();\n else task.fail(error || new Error('Upload failed'));\n this._tasks.delete(id);\n }\n if (status === 'done') setTimeout(() => this.dismiss(id), 4000);\n }\n cancel(id) {\n this._controllers.get(id)?.abort();\n this.finish(id, 'cancelled');\n }\n dismiss(id) {\n this.state = { items: this.state.items.filter((t) => t.id !== id) };\n this._retries.delete(id);\n this.#emit();\n }\n clearDone() {\n const kept = this.state.items.filter((t) => t.status === 'active');\n const keptIds = new Set(kept.map((t) => t.id));\n // Drop the retry thunks of the rows that just left, so a dismissed upload does not\n // hold its File alive for the rest of the session.\n for (const id of [...this._retries.keys()]) if (!keptIds.has(id)) this._retries.delete(id);\n this.state = { items: kept };\n this.#emit();\n }\n}\n\n\n/**\n * The API-key draft as the API wants it, or null when it would grant nothing.\n *\n * A pure function rather than a method, for the same reason as `selectedNodesOf`: it is a\n * derivation, so it belongs to the view that shows it and to the action that submits it,\n * not to the resource that happens to hold the draft.\n */\nexport function draftScopesOf(state) {\n const caps = state?.draft?.caps || {};\n const scopes = Object.entries(caps)\n .filter(([, list]) => list.length)\n .map(([collectionId, capabilities]) => ({ collectionId, capabilities }));\n return scopes.length ? scopes : null;\n}\n\n\n/**\n * The collection switcher's menu, derived from what the explorer knows.\n *\n * A pure function for the same reason as `selectedNodesOf`: it answers a question about\n * state, so it belongs to the view that shows it. It used to be a closure hung on `app` by\n * `registerCommands` — reachable only through that one field, and impossible to see from\n * the component that rendered it.\n *\n * Items carry `actions`, like every other menu item; see ui/activate.js.\n *\n * @param {object} state explorer state\n * @param {(id?: string) => object} switchTo builds the action for picking a collection\n * @param {() => object} create builds the action for making a new one\n */\nexport function collectionMenuOf(state, switchTo, create) {\n // No fallback: this only decides which row gets a tick, and with nothing open the answer\n // is that none of them do. `|| 'default'` ticked a collection the user had not chosen,\n // and on a drive with one actually called \"default\", the wrong one.\n const current = state?.collectionId;\n const items = (state?.collections || []).map((c) => ({\n label: c.name || c.id,\n icon: c.id === current ? 'check' : 'files',\n actions: [switchTo(c.id)],\n }));\n if (state?.canCreateCollection) {\n if (items.length) items.push({ sep: true });\n items.push({ label: 'New collection…', icon: 'plus', actions: [create()] });\n }\n return items;\n}\n",
47
+ "// What is left of the data services, plus the derivations that were methods on them.\n//\n// The explorer, search and API-key services were state bags — a `state`, a `cell`, and a\n// `set` that wrote both — and are slices now (bl/state.js). TransfersService stays,\n// because it holds things a state snapshot cannot: AbortControllers, per-file retry\n// thunks closing over the File itself, and a projection into the activity list.\n//\n// The functions below were METHODS on those bags. They are derivations, so they belong to\n// whoever is asking rather than to whatever happens to hold the data.\n\nimport { cell } from '../runtime.js';\n\n\n/**\n * The nodes the selection refers to — a pure function of explorer state.\n *\n * It was a method, which meant every caller reached for the service to ask a question about\n * data it could already see. As a function it can be used two ways without either being a\n * back door: the explorer QUERY folds it into the view, so the UI is handed the answer; and\n * an effect that needs it right now computes it from the state it already holds.\n *\n * Resolving ids against `items` only finds rows on the LOADED PAGE of the CURRENT\n * collection — and the launcher's rows come from search (which the server scopes to every\n * readable collection) and from recents (which survive a collection switch). So every row\n * reached by searching resolved to nothing, and rename / move-to-trash / copy-link returned\n * silently while `explorer.hasSelection` said there was a selection. Preferring the nodes\n * the selecting caller already held fixes the whole class; the `items` lookup stays for\n * callers that only have ids.\n */\nexport function selectedNodesOf(state) {\n // Tolerant of a partial state: a view is computed on every emission, including the first\n // one, and a projection that throws takes the whole query down rather than the field.\n const selection = state?.selection || [];\n const held = state?.selectionNodes;\n if (held?.length) return held.filter((n) => selection.includes(n.id));\n return (state?.items || []).filter((i) => selection.includes(i.id));\n}\n\n\n\n/**\n * Uploads in flight.\n *\n * This owns the DETAIL an upload needs and a generic task doesn't — bytes moved, an\n * AbortController, per-file retry. It also projects each transfer into ActivityService\n * so the drive has ONE list of \"what is happening\", covering work on both sides of the\n * wire: an upload running in this browser and a reindex running on the server show up\n * together, because a user doesn't care which machine is busy.\n *\n * The projection is one-way and this stays the owner. Two writable copies of the same\n * fact is how they drift.\n */\nexport class TransfersService {\n /** @param {import('./activity.js').ActivityService} [activity] */\n constructor(activity = null) {\n this.state = { items: [] }; // { id, name, direction, ratio, loaded, total, status, error, retryable }\n this.cell = cell(this.state);\n this._controllers = new Map();\n this.activity = activity;\n this._tasks = new Map(); // transfer id -> activity task handle\n // How to run this transfer again. Held here rather than in state because it closes\n // over the File itself, which is not something a state snapshot should carry.\n //\n // It exists because automatic retry cannot cover everything: a lost upload session is\n // `notFound`, which is correctly classified non-retryable and will never succeed on\n // its own no matter how many times it is tried. Someone has to decide to start over,\n // and the alternative is asking the user to find the file and drag it in again.\n this._retries = new Map();\n }\n observe() {\n return this.cell;\n }\n #emit() {\n this.cell.setValue(this.state);\n }\n /**\n * @param {{retry?: () => Promise<any>}} [opts] how to run this transfer again, if it can be\n */\n start(id, name, total, controller, { retry = null } = {}) {\n this._controllers.set(id, controller);\n if (retry) this._retries.set(id, retry);\n this.state = {\n items: [...this.state.items, {\n id, name, direction: 'up', ratio: 0, loaded: 0, total, status: 'active', error: null,\n // Surfaced in state so the tray renders from a snapshot rather than interrogating\n // the service — it is a fact about the row, like `status`.\n retryable: !!retry,\n }],\n };\n this.#emit();\n this.#task(id, name, total);\n }\n\n #task(id, name, total) {\n const task = this.activity?.start({\n kind: 'transfer', title: `Uploading ${name}`, total: total || null, unit: 'bytes',\n onCancel: () => this.cancel(id),\n });\n if (task) this._tasks.set(id, task);\n }\n\n /**\n * Run a failed transfer again, in place.\n *\n * The same row rather than a new one: a retry is another attempt at the thing the user\n * already asked for, and a tray that grew an entry per attempt would report one upload\n * as four.\n */\n retry(id) {\n const again = this._retries.get(id);\n if (!again) return null;\n const item = this.state.items.find((t) => t.id === id);\n if (!item || item.status === 'active') return null;\n return again();\n }\n\n /** Put an existing row back into flight — see `retry`. */\n restart(id, controller) {\n this._controllers.set(id, controller);\n const item = this.state.items.find((t) => t.id === id);\n this.state = {\n items: this.state.items.map((t) => (t.id === id\n ? { ...t, status: 'active', error: null, ratio: 0, loaded: 0 }\n : t)),\n };\n this.#emit();\n // A fresh activity task: the previous one already ended as failed, and reporting\n // progress into a finished task would leave the panel showing a failure that is\n // actively being retried.\n this.#task(id, item?.name || 'file', item?.total || null);\n }\n progress(id, { loaded, total, ratio }) {\n this.state = { items: this.state.items.map((t) => (t.id === id ? { ...t, loaded, total, ratio } : t)) };\n this.#emit();\n this._tasks.get(id)?.progress({ done: loaded, total: total || null });\n }\n finish(id, status = 'done', error = null) {\n this.state = { items: this.state.items.map((t) => (t.id === id ? { ...t, status, error, ratio: status === 'done' ? 1 : t.ratio } : t)) };\n this._controllers.delete(id);\n this.#emit();\n const task = this._tasks.get(id);\n if (task) {\n if (status === 'done') task.succeed();\n else if (status === 'cancelled') task.cancel();\n else task.fail(error || new Error('Upload failed'));\n this._tasks.delete(id);\n }\n if (status === 'done') setTimeout(() => this.dismiss(id), 4000);\n }\n cancel(id) {\n this._controllers.get(id)?.abort();\n this.finish(id, 'cancelled');\n }\n dismiss(id) {\n this.state = { items: this.state.items.filter((t) => t.id !== id) };\n this._retries.delete(id);\n this.#emit();\n }\n clearDone() {\n const kept = this.state.items.filter((t) => t.status === 'active');\n const keptIds = new Set(kept.map((t) => t.id));\n // Drop the retry thunks of the rows that just left, so a dismissed upload does not\n // hold its File alive for the rest of the session.\n for (const id of [...this._retries.keys()]) if (!keptIds.has(id)) this._retries.delete(id);\n this.state = { items: kept };\n this.#emit();\n }\n}\n\n\n/**\n * The API-key draft as the API wants it, or null when it would grant nothing.\n *\n * A pure function rather than a method, for the same reason as `selectedNodesOf`: it is a\n * derivation, so it belongs to the view that shows it and to the action that submits it,\n * not to the resource that happens to hold the draft.\n */\nexport function draftScopesOf(state) {\n const caps = state?.draft?.caps || {};\n const scopes = Object.entries(caps)\n .filter(([, list]) => list.length)\n .map(([collectionId, capabilities]) => ({ collectionId, capabilities }));\n return scopes.length ? scopes : null;\n}\n\n\n/**\n * The collection switcher's menu, derived from what the explorer knows.\n *\n * A pure function for the same reason as `selectedNodesOf`: it answers a question about\n * state, so it belongs to the view that shows it. It used to be a closure hung on `app` by\n * `registerCommands` — reachable only through that one field, and impossible to see from\n * the component that rendered it.\n *\n * Items carry `actions`, like every other menu item; see ui/activate.js.\n *\n * @param {object} state explorer state\n * @param {(id?: string) => object} switchTo builds the action for picking a collection\n * @param {() => object} create builds the action for making a new one\n */\n/**\n * The administration screen's row per collection.\n *\n * Built here rather than in the component for the same reason `collectionMenuOf` is: these\n * rows carry ACTIONS, and deciding which actions a collection offers is a question about\n * the collection, not about rendering. A component that assembled them would have to know\n * that rotation lives behind Settings and that scanning applies to the OPEN collection.\n *\n * `scan` and `rotate` are sequenced pairs — switch first, then do the thing — because both\n * operate on whatever is open. That is what makes them work from a screen that lists every\n * collection rather than only the current one. Rotation routes to Settings rather than\n * starting one: the estimate and the confirmation live there, and a rotation begun without\n * seeing its cost is exactly the button nobody should have.\n */\nexport function collectionAdminOf(state, { open, scan, rotate, create, access }) {\n const current = state?.collectionId;\n const rows = (state?.collections || []).map((c) => ({\n id: c.id,\n name: c.name || c.id,\n driver: c.driver || 'unknown',\n system: !!c.system,\n current: c.id === current,\n // `describeEncryption` gives the fingerprint and nothing secret, so this is safe to show\n // and is the only way to tell two keys apart across a rotation.\n fingerprint: c.encryption?.fingerprint || null,\n encrypted: !!c.encryption,\n capabilities: c.capabilities || [],\n actions: {\n open: [open(c.id)],\n scan: [open(c.id), scan()],\n rotate: c.encryption ? [open(c.id), rotate()] : null,\n // Access needs no switch: the ACL is read by collection id, not by what is open.\n access: c.capabilities?.includes('admin') ? [access(c.id)] : null,\n },\n }));\n return { rows, canCreate: !!state?.canCreateCollection, create: [create()] };\n}\n\nexport function collectionMenuOf(state, switchTo, create) {\n // No fallback: this only decides which row gets a tick, and with nothing open the answer\n // is that none of them do. `|| 'default'` ticked a collection the user had not chosen,\n // and on a drive with one actually called \"default\", the wrong one.\n const current = state?.collectionId;\n const items = (state?.collections || []).map((c) => ({\n label: c.name || c.id,\n icon: c.id === current ? 'check' : 'files',\n actions: [switchTo(c.id)],\n }));\n if (state?.canCreateCollection) {\n if (items.length) items.push({ sep: true });\n items.push({ label: 'New collection…', icon: 'plus', actions: [create()] });\n }\n return items;\n}\n",
48
48
  "// The two things only the browser can do: ask for a file, and save one.\n//\n// These are effects, so they are reached from actions rather than from a render — but they\n// are effects on the DOCUMENT rather than on the drive, which is why they live in\n// `platform` and not in `bl`. An action that needs a file from the user calls in here; the\n// action is still the thing that decides what happens to it.\n//\n// They were private to bl/commands.js, where the command handlers that used them lived.\n\n/**\n * Open a native file picker.\n *\n * The hidden `<input>` is removed on selection AND on cancel — cancelling fires no\n * `change`, so cleanup also hangs off the next window focus (which the OS dialog returns)\n * to avoid leaking a growing pile of inputs.\n */\nfunction pick(cb, configure) {\n const input = document.createElement('input');\n input.type = 'file';\n configure(input);\n input.style.display = 'none';\n document.body.appendChild(input);\n const cleanup = () => { input.remove(); window.removeEventListener('focus', onFocus); };\n const onFocus = () => setTimeout(() => { if (!input.files.length) cleanup(); }, 300);\n input.addEventListener('change', () => { cb(input.files); cleanup(); }, { once: true });\n window.addEventListener('focus', onFocus);\n input.click();\n}\n\nexport function pickFiles(cb) {\n pick((files) => cb(files), (input) => { input.multiple = true; });\n}\n\nexport function pickZip(cb) {\n pick((files) => cb(files[0]), (input) => { input.accept = '.zip,application/zip'; });\n}\n\n/** Hand a URL to the browser as a download. */\nexport function triggerDownload(url, name) {\n const a = document.createElement('a');\n a.href = url;\n a.download = name || '';\n document.body.appendChild(a);\n a.click();\n a.remove();\n}\n",
49
- "// The drive's own state, as named slices.\n//\n// These were classes: an `ExplorerService`, a `SearchClientService`, an `ApiKeysService`,\n// each holding a `state` field, a `cell`, and a `set` that wrote both. Nothing else. A\n// service should cover something complex and offer it through a narrow door — these\n// covered an object.\n//\n// Two things came of that shape and both are gone with it.\n//\n// TWO DOORS. Actions read `.state` and queries read `.cell`, and the two are only equal by\n// habit: most services wrote `this.state = {...}; this.cell.setValue(this.state)`, but not\n// all did, and `settings` still has a cell holding `effective()` and no `state` field at\n// all. A slice has one value and one way to read it.\n//\n// LOGIC IN THE HOLDER. `toggleCap` computed a capability set inside the service while an\n// action stood in front of it forwarding two arguments — and dropped one of them, which is\n// how a minted key came to be rejected by the server. Arithmetic over state belongs to the\n// action that decides to change it; the slice only holds.\n//\n// Each slice is still its OWN provider, so `static deps = ['explorer']` keeps meaning what\n// it says. A single `appState` covering everything would put the whole drive back behind\n// one lease, which is what naming the resources individually was for.\n\nimport { cell } from '../runtime.js';\n\n/**\n * One named piece of the drive's state.\n *\n * `set` merges, because every caller was already merging and doing it here removes the\n * chance of a caller replacing a slice by forgetting to spread it. `replace` exists for\n * the cases that genuinely mean \"all of it\" — a fresh panel stack, an emptied list.\n *\n * @param {object} initial\n */\nexport function slice(initial = {}) {\n const held = cell(initial);\n return {\n /** The cell, for a query to watch. */\n observe: () => held,\n /** The value, for an action about to decide something from it. */\n get: () => held.getValue(),\n /** Merge a patch in. A new object every time — a cell compares with Object.is. */\n set: (patch) => held.setValue({ ...held.getValue(), ...patch }),\n /** Replace it outright, for when a patch would be a lie. */\n replace: (next) => held.setValue(next),\n };\n}\n\n/** Items, selection, the open collection, and the gate. */\nexport const explorerState = (settings) => slice({\n items: [], loading: false, error: null,\n selection: [], sort: settings.get('explorer.sort'), order: settings.get('explorer.sortOrder'),\n // No collection until one is chosen or created. `gate` is 'create' | 'choose' | null —\n // when set, it is the ONLY thing the workbench shows, because every request needs a\n // collection and there is nothing sensible to render without one.\n collectionId: null, collections: [], canCreateCollection: false, gate: null,\n // `stats` is the whole collection; `items` is the page on screen. Keeping both is what\n // lets the UI say \"500 of 3,006\" instead of quietly claiming 500.\n stats: null, usage: null, nextCursor: null, loadingMore: false, trash: null,\n});\n\n/** Query text, results, and the palette's separate file list. */\nexport const searchState = () => slice({\n query: '', mode: 'hybrid', results: [], loading: false, error: null, ran: false,\n paletteFiles: [], paletteQuery: '', paletteLoading: false, paletteError: null,\n});\n\n/**\n * The admin API-key list.\n *\n * `minted` holds the one secret a mint returns. It lives here, in memory, and is dropped\n * the moment the admin dismisses it — the server cannot show it again, so the UI is the\n * only place it ever exists and it must not outlive the tab.\n *\n * `draft` is the mint form. Held in state rather than in the DOM so the section stays a\n * pure function of state, and so a half-filled form survives a re-render caused by\n * something else on the settings screen.\n */\nexport const apiKeysState = () => slice({\n keys: [], loading: false, loaded: false, error: null, minted: null, busy: null, draft: null,\n});\n\n/**\n * What the UI is in the middle of doing — a keybinding mid-capture, text typed into a\n * dialog that has not been submitted, the boxes ticked in a plugin review.\n *\n * None of it is drive state; all of it decides what is on screen, which is what makes it\n * engine state. Keyed by component, so `set` here replaces one key rather than merging a\n * patch — see SetViewStateAction.\n */\nexport const viewState = () => slice({});\n\n/**\n * The shell's transient overlays: the command palette, a modal dialog, the right-click\n * menu, and the plugin popup panel.\n *\n * Four things that are independent of the panel stack and of each other, which is why they\n * were split out of the workbench in the first place. What they are NOT is complex enough\n * to need a service — the class was four setters and a `wrapIndex`, with an action standing\n * in front of each one. The wrapping now lives in the action that moves a cursor, which is\n * where it was needed: MovePaletteAction lost the count argument once already, precisely\n * because deciding and writing were on opposite sides of a forwarding layer.\n */\nexport const overlayState = () => slice({\n palette: null, // { mode: 'commands'|'files', query, index } when open\n dialog: null,\n contextMenu: null,\n pluginPanel: null,\n});\n\n/**\n * The shell itself: which activity is showing, and the launcher's own cursor.\n *\n * The panel stack is NOT here — that is NavigationService, which stays a service because it\n * mirrors the stack into browser history and persists recents, neither of which a state bag\n * can do.\n */\nexport const workbenchState = () => slice({\n activity: 'home', // home (stack) | plugins | settings\n sidebarVisible: true,\n launch: { query: '', index: 0 },\n searchModal: false, // the double-shift modal search overlay\n // Phone chrome: which bottom sheet is up, if any ('status' | 'more'). A phone has no room\n // for a permanent status bar or a left rail, so both fold into a sheet pulled up on demand.\n sheet: null,\n infoPanel: false,\n});\n\n/** Wrap a list cursor by `delta` within `[0, count)` — the palette and the launcher share it. */\nexport function wrapIndex(index, delta, count) {\n return (index + delta + count) % count;\n}\n\n/**\n * What the open collection's key is doing.\n *\n * Rotation is long-running and lives on the server, so this is a local view of it kept in\n * step by polling while the settings screen is open — see `RotationQuery`. It is state\n * rather than a fetch-per-render because two things read it (the progress line and whether\n * Start is offered) and they must not disagree.\n */\nexport const rotationState = () => slice({\n collectionId: null, rotation: null, estimate: null, loading: false, error: null, busy: false,\n});\n",
50
- "// ngin Actions — the workbench's business logic as thin, dispatchable verbs\n// (CQRS-style). Each depends on the `app` provider (platform + reactive\n// services) and performs one user intent: navigate, mutate the tree, upload,\n// search, open a file. Errors surface as notifications; the reactive services\n// they update flow straight back into the UI via `watch`.\n\nimport { Action } from '@3sln/ngin';\nimport { PROMPT } from './viewState.js';\nimport { beginInstallFromUrl } from './pluginInstall.js';\nimport { newId } from '@3sln/trove/core/util.js';\nimport { matchesTagFilters } from './tagQuery.js';\nimport { availableOpeners, rememberedOpenerId, withAssociation, ASSOC_KEY } from './openers.js';\n// A share link and a `trove:` URI are the same address in two spellings — see core/links.js.\nimport { parseShareUrl, troveUri, shareUrl } from '@3sln/trove/core/links.js';\nimport { selectedNodesOf, draftScopesOf, collectionMenuOf } from './services.js';\nimport { beginInstallFromFile } from './pluginInstall.js';\nimport { pickFiles, pickZip, triggerDownload } from '../platform/pickers.js';\nimport { wrapIndex } from './state.js';\n\n/**\n * Load a collection's items. There is nothing to navigate INTO any more — a drive is\n * browsed by search and by following links — so this only ever switches which\n * collection is on screen, or refreshes the current one.\n */\nexport class NavigateAction extends Action {\n static deps = ['api', 'explorer', 'notifications', 'settings'];\n\n constructor(collectionId) {\n super();\n this.collectionId = collectionId;\n }\n async execute(r) {\n const { api, explorer, notifications, settings } = r;\n // No `|| 'default'`. Navigating nowhere in particular used to land on a collection\n // that may not exist and may not be readable; now it is a bug in the caller, said out\n // loud rather than papered over with a guess.\n const collectionId = this.collectionId || explorer.get().collectionId;\n if (!collectionId) {\n explorer.set({ loading: false, gate: 'choose' });\n return;\n }\n const switching = collectionId !== explorer.get().collectionId;\n // A collection's trash belongs to that collection. Carrying it across a switch\n // listed the OLD collection's deleted files under the new one — above an \"Empty\n // trash\" button that purges the new one, so the rows and the button disagreed\n // about which drive they were talking about.\n explorer.set({ loading: true, error: null, collectionId, ...(switching ? { trash: null } : {}) });\n try {\n const sort = settings.get('explorer.sort');\n const order = settings.get('explorer.sortOrder');\n const res = await api.list(collectionId, { sort, order });\n explorer.set({\n items: res.items, loading: false, selection: [], sort, order,\n collectionId: res.collectionId || collectionId,\n // What the COLLECTION holds, as against the page we were handed. Reporting the\n // page length would tell someone with 3,000 files that they have 500.\n stats: res.stats || null,\n usage: res.usage || null,\n nextCursor: res.nextCursor || null,\n });\n // Remember where they were, so the next visit opens there rather than guessing.\n settings.set?.('explorer.lastCollection', collectionId);\n explorer.set({ gate: null });\n // Explorer→context projection (collectionId/hasSelection) lives in bl/index.js\n // so it stays in sync with selection too — nothing to mirror here.\n } catch (err) {\n explorer.set({ loading: false, error: err.message });\n notifications.error(`Couldn't load this collection: ${err.message}`);\n }\n }\n}\n\nexport class LoadCollectionsAction extends Action {\n static deps = ['api', 'explorer'];\n\n async execute(r) {\n try {\n const res = await r.api.collections();\n const collections = res.collections || [];\n r.explorer.set({ collections, canCreateCollection: !!res.canCreate });\n return collections;\n } catch { /* collections disabled */ return []; }\n }\n}\n\n/**\n * Open the drive the user should land on.\n *\n * NOT simply 'default'. On a multi-user deployment plenty of people have no access to\n * the default collection at all, and starting there shows them a permission error\n * instead of their own files — the drive appears broken to the exact users for whom it\n * is working correctly. So: keep the last collection if it is still readable, otherwise\n * take the first one they can actually see.\n */\nexport class OpenInitialCollectionAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'settings'];\n\n async execute(r) {\n // A share link decides where we land, ahead of everything below.\n //\n // Arriving at a link to a specific item and being asked which collection you would\n // like to open would be absurd — the link already said. So this runs before the\n // remembered choice and before the gate, and only falls through to them when the URL\n // is not a share link or cannot be honoured.\n const shared = parseShareUrl(typeof location !== 'undefined' ? location.pathname : '');\n if (shared) return this.#openShared(r, shared);\n\n // Calls the API directly rather than dispatching LoadCollectionsAction: ngin's\n // dispatch() returns an event feed, not the action's value, so awaiting it would\n // hand back an EventTarget and this would fail in a way nothing reports.\n let collections = [];\n let canCreate = false;\n try {\n const res = await r.api.collections();\n collections = res.collections || [];\n canCreate = !!res.canCreate;\n r.explorer.set({ collections, canCreateCollection: canCreate });\n } catch (err) {\n r.explorer.set({ loading: false, error: `Couldn't load your collections: ${err.message}` });\n return;\n }\n\n const ids = collections.map((c) => c.id);\n const remembered = r.settings.get('explorer.lastCollection');\n\n // Nothing exists yet. Two different situations that used to read as one:\n if (!ids.length) {\n r.explorer.set({\n loading: false, items: [], collections: [],\n // Someone who may create one is on a fresh drive and should be asked to. Someone\n // who may not has no grants, and telling them to create a collection they cannot\n // create is worse than telling them nothing.\n gate: canCreate ? 'create' : null,\n error: canCreate\n ? null\n : 'You do not have access to any collections yet. Ask an administrator to grant you one.',\n });\n return;\n }\n\n // There is no fallback to a first or a favourite. Landing somewhere the user did not\n // pick is how the old 'default' behaved, and on a shared drive it opened a collection\n // plenty of people could not read — a permission error presented as their drive.\n // A remembered choice is theirs; anything else is a question.\n if (!remembered || !ids.includes(remembered)) {\n r.explorer.set({ loading: false, items: [], gate: 'choose', error: null });\n return;\n }\n\n r.explorer.set({ gate: null });\n return r.engine.dispatch(new NavigateAction(remembered));\n }\n\n /**\n * Open the collection and item a share link names.\n *\n * Every way this can fail says which way it failed. A link to a collection you cannot\n * read, and a link to an item that has been renamed, are different problems with\n * different answers, and both used to be indistinguishable from an empty drive.\n */\n async #openShared(r, shared) {\n const { api, engine, explorer, notifications } = r;\n // The URL is consumed rather than kept. The app does not otherwise reflect its state\n // in the address bar, so leaving a share path there would go stale the moment the user\n // navigated anywhere — a URL that lies is worse than one that is merely uninformative.\n if (typeof history !== 'undefined') history.replaceState(null, '', '/');\n\n let collections = [];\n try {\n const res = await api.collections();\n collections = res.collections || [];\n explorer.set({ collections, canCreateCollection: !!res.canCreate });\n } catch (err) {\n explorer.set({ loading: false, error: `Couldn’t load your collections: ${err.message}` });\n return;\n }\n\n if (!collections.some((c) => c.id === shared.collection)) {\n // Said plainly rather than shown as an empty drive. The recipient may simply not\n // have been granted this collection, and that is worth knowing rather than guessing.\n explorer.set({\n loading: false, items: [], gate: null,\n error: `This link points at a collection you do not have access to (“${shared.collection}”). Ask whoever shared it to grant you access.`,\n });\n return;\n }\n\n explorer.set({ gate: null });\n await engine.dispatch(new NavigateAction(shared.collection));\n\n let node;\n try {\n // `stat` answers `{ node }` rather than the node — see bl/links.js, which unwraps it\n // the same way. Reading `.id` off the envelope silently looks like \"not found\".\n const res = shared.by === 'id'\n ? await api.stat(shared.value)\n : await api.stat(shared.value, { collection: shared.collection });\n node = res?.node || null;\n } catch {\n node = null;\n }\n if (!node?.id) {\n // A link by name breaks on rename, deliberately and visibly. Saying so beats\n // landing in the right collection with no explanation of what was expected.\n notifications.warn(\n shared.by === 'name'\n ? `“${shared.value}” is not in this collection any more — it may have been renamed or removed.`\n : 'That item no longer exists.',\n );\n return;\n }\n engine.dispatch(new OpenFileAction(node, { reset: true }));\n }\n}\n\n/**\n * Uninstall a plugin.\n *\n * An action rather than a closure threaded through the render tree. Uninstalling is engine\n * work — it is not a render concern in any sense — and it had exactly one call site,\n * reached by carrying a function through fourteen modules of components that had no use\n * for it except to hand it to their children.\n */\n/**\n * Run a command.\n *\n * Commands used to be invoked straight on the command service, which meant every command a\n * user ran from the UI — every menu item, every keybinding, every palette entry — went\n * around the engine rather than through it. Nothing could intercept one, nothing could\n * observe one, and the engine's own view of what the app was doing had a hole in it exactly\n * the shape of everything a person actually did.\n *\n * Running one is an action like any other, so it is one.\n *\n * The command's return value is not available here — `dispatch` answers with an event feed\n * rather than the handler's result. That costs nothing today: every one of the call sites\n * is fire-and-forget, and a command that needs to answer its caller wants a query.\n */\nexport class ExecCommandAction extends Action {\n static deps = ['commands'];\n constructor(id, ...args) {\n super();\n this.id = id;\n this.args = args;\n }\n async execute({ commands }) {\n return commands.execute(this.id, ...this.args);\n }\n}\n\nexport class UninstallPluginAction extends Action {\n static deps = ['notifications', 'plugins'];\n\n constructor(pluginId) {\n super();\n this.pluginId = pluginId;\n }\n async execute(r) {\n try {\n await r.plugins.uninstall(this.pluginId);\n } catch (err) {\n r.notifications.error(`Couldn’t uninstall: ${err.message}`);\n }\n }\n}\n\nexport class CreateCollectionAction extends Action {\n static deps = ['api', 'engine', 'notifications'];\n\n constructor(record) {\n super();\n this.record = record;\n }\n async execute(r) {\n try {\n const res = await r.api.createCollection(this.record);\n r.notifications.success(`Created collection “${res.collection.name}”`);\n await r.engine.dispatch(new LoadCollectionsAction());\n r.engine.dispatch(new NavigateAction(res.collection.id));\n } catch (err) {\n r.notifications.error(`Couldn’t create collection: ${err.message}`);\n }\n }\n}\n\n/** Append the next page of a collection to what's already on screen. */\nexport class LoadMoreAction extends Action {\n static deps = ['api', 'explorer', 'notifications'];\n\n async execute(r) {\n const { api, explorer, notifications } = r;\n const cursor = explorer.get().nextCursor;\n if (!cursor || explorer.get().loadingMore) return;\n explorer.set({ loadingMore: true });\n try {\n const res = await api.list(explorer.get().collectionId, {\n sort: explorer.get().sort, order: explorer.get().order, cursor,\n });\n explorer.set({\n items: [...explorer.get().items, ...res.items],\n nextCursor: res.nextCursor || null,\n loadingMore: false,\n });\n } catch (err) {\n explorer.set({ loadingMore: false });\n notifications.error(`Couldn't load more: ${err.message}`);\n }\n }\n}\n\nexport class RefreshAction extends Action {\n static deps = ['engine', 'explorer'];\n\n async execute(r) {\n return r.engine.dispatch(new NavigateAction(r.explorer.get().collectionId));\n }\n}\n\n/** Show what's been deleted but not destroyed, and act on it. */\nexport class TrashAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications'];\n\n constructor(op = 'list', id = null) {\n super();\n this.op = op;\n this.id = id;\n }\n async execute(r) {\n const { api, explorer, notifications } = r;\n const collection = explorer.get().collectionId;\n // Putting it away is one of the things you can do to the trash. Without this the\n // section, once opened, stayed on screen until a page reload — there was no way\n // back to a plain list of files.\n if (this.op === 'hide') {\n explorer.set({ trash: null });\n return;\n }\n try {\n if (this.op === 'restore') {\n const { node } = await api.restore(this.id);\n notifications.success(`Restored “${node.name}”`);\n } else if (this.op === 'purge') {\n await api.purgeTrash({ id: this.id });\n } else if (this.op === 'empty') {\n const { purged } = await api.purgeTrash({ collection });\n notifications.success(`Deleted ${purged} item${purged === 1 ? '' : 's'} for good`);\n }\n const { items } = await api.trash(collection);\n explorer.set({ trash: items });\n // Restoring puts something back in the drive, so the list on screen is now stale.\n if (this.op !== 'list') await r.engine.dispatch(new NavigateAction(collection));\n } catch (err) {\n notifications.error(`Trash: ${err.message}`);\n }\n }\n}\n\nexport class DeleteAction extends Action {\n // `navigation`, not `workbench`: the panel stack and the recents list are both its, and a\n // deleted file must not survive in either.\n static deps = ['api', 'engine', 'navigation', 'notifications'];\n\n constructor(ids) {\n super();\n this.ids = ids;\n }\n async execute(r) {\n try {\n for (const id of this.ids) await r.api.remove(id);\n r.notifications.info(`Deleted ${this.ids.length} item${this.ids.length > 1 ? 's' : ''}`);\n for (const id of this.ids) r.navigation.forget(id);\n } catch (err) {\n r.notifications.error(`Couldn’t delete: ${err.message}`);\n }\n r.engine.dispatch(new RefreshAction());\n }\n}\n\nexport class RenameAction extends Action {\n // The renamed node has to reach the open panel too, or the title bar keeps the old name\n // until something else refreshes it. That stack belongs to `navigation`.\n static deps = ['api', 'engine', 'navigation', 'notifications'];\n\n constructor(id, newName) {\n super();\n this.id = id;\n this.newName = newName;\n }\n async execute(r) {\n try {\n const node = await r.api.rename(this.id, this.newName);\n r.navigation.updateTabNode(node.node);\n r.engine.dispatch(new RefreshAction());\n } catch (err) {\n r.notifications.error(`Couldn’t rename: ${err.message}`);\n }\n }\n}\n\n\nexport class OpenFileAction extends Action {\n static deps = ['context', 'contributions', 'engine', 'plugins', 'settings'];\n\n /** @param {object} node @param {{reset?:boolean}} [opts] reset → start a fresh stack (modal search) */\n constructor(node, opts = {}) {\n super();\n this.node = node;\n this.opts = opts;\n }\n async execute(r) {\n // Guard against being invoked with no target (e.g. a command fired with an empty\n // selection) — dereferencing a null node would throw an unhandled rejection.\n if (!this.node) return;\n const open = (openerId) => r.engine.dispatch(new OpenInPanelAction(this.node, openerId, { reset: !!this.opts.reset }));\n\n // An explicit opener (e.g. the switch-opener control) wins outright.\n if (this.opts.openerId) return open(this.opts.openerId);\n\n // Only openers available right now (a plugin previewer needing the network while\n // offline is skipped, so we fall back to a built-in one).\n const avail = availableOpeners(r, this.node);\n\n // A remembered choice for this file type, if that opener is still available.\n const remembered = rememberedOpenerId(r, this.node);\n if (remembered && avail.some((o) => o.id === remembered)) return open(remembered);\n\n // Several openers and no saved preference → let the user choose (with an option to\n // remember). One or none → just open the best (or the download fallback).\n if (avail.length > 1) {\n return r.engine.dispatch(new ShowDialogAction({ kind: 'opener-chooser', node: this.node, openers: avail, reset: !!this.opts.reset }));\n }\n open(avail[0]?.id || 'core.fallback');\n }\n}\n\nexport class UploadFilesAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'settings', 'transfers'];\n\n constructor(files, collectionId) {\n super();\n this.files = files;\n this.collectionId = collectionId;\n }\n async execute(r) {\n const collection = this.collectionId || r.explorer.get().collectionId;\n // Uploading with no collection open has nowhere to put the bytes. Refused visibly:\n // the old fallback sent them to whatever 'default' happened to be.\n if (!collection) {\n r.notifications.error('Open a collection before uploading');\n return;\n }\n const concurrency = r.settings.get('uploads.concurrency');\n const uploads = [...this.files].map((file) => this.#one(r, file, collection, concurrency));\n await Promise.allSettled(uploads);\n r.engine.dispatch(new NavigateAction(collection));\n }\n /**\n * One file, once — and again, on the same tray row, if the user asks.\n *\n * `existingTid` is what makes a manual retry a second attempt at the row already on\n * screen rather than a new entry beside it. The retry closes over the File, which is why\n * it can run at all without asking the user to find the file again; it is also why the\n * offer does not survive a reload, since nothing here is persisted.\n */\n async #one(r, file, collection, concurrency, existingTid = null) {\n const { api, notifications, transfers } = r;\n const tid = existingTid || newId('xfer');\n const controller = new AbortController();\n if (existingTid) {\n transfers.restart(tid, controller);\n } else {\n transfers.start(tid, file.name, file.size, controller, {\n retry: () => this.#one(r, file, collection, concurrency, tid),\n });\n }\n let uploadId = null;\n try {\n const node = await api.upload(file, {\n collection, concurrency, signal: controller.signal,\n onStart: (id) => { uploadId = id; },\n onProgress: (p) => transfers.progress(tid, p),\n });\n transfers.finish(tid, 'done');\n // The server disambiguates a same-name collision rather than overwriting — tell\n // the user when the saved name differs from what they dropped.\n if (node?.name && node.name !== file.name) {\n notifications.info(`\"${file.name}\" already existed — saved as \"${node.name}\".`);\n }\n } catch (err) {\n // Release the server-side session so a cancelled/failed multipart upload doesn't\n // leak an open multipart object (best-effort; the server also sweeps stale ones).\n if (uploadId) api.abortUpload(uploadId).catch(() => {});\n if (err.code === 'aborted') transfers.finish(tid, 'cancelled');\n else {\n transfers.finish(tid, 'error', err.message);\n // The toast says what happened; the tray row is where it can be acted on, and\n // pointing at it is the difference between a dead end and an offer.\n notifications.error(`Upload failed: ${file.name} — ${err.message}. Retry it from the transfers tray.`);\n }\n }\n }\n}\n\n/** Drive-wide tag/property filter (`#tag`, `#key:op:value`), optionally narrowed\n * by free text. Falls back to filtering the loaded folder when offline. */\nexport class FilterAction extends Action {\n static deps = ['api', 'explorer', 'offline', 'search'];\n\n constructor(filters, text) {\n super();\n this.filters = filters || [];\n this.text = text || '';\n }\n async execute(r) {\n const { api, search } = r;\n if (!this.filters.length) {\n search.set({ results: [], ran: false, filtered: false });\n return;\n }\n search.set({ query: this.text, loading: true, error: null, filtered: true });\n if (r.offline && !r.offline.state.online) {\n const items = (r.explorer.get().items || []).filter((n) => matchesTagFilters(n, this.filters));\n search.set({ results: items.map((node) => ({ node })), loading: false, ran: true, filtered: true, offline: true });\n return;\n }\n try {\n const res = await api.tagSearch(this.filters, this.text.trim() || undefined, { limit: 100 });\n search.set({ results: (res.items || []).map((node) => ({ node })), loading: false, ran: true, filtered: true, offline: false });\n } catch (err) {\n search.set({ loading: false, error: err.message, ran: true, filtered: true });\n }\n }\n}\n\n/** Command-palette quick-open: a keyword file search whose results live in the search\n * service (state.se.paletteFiles) instead of ad-hoc state hung off the UI. */\nexport class QuickOpenAction extends Action {\n static deps = ['api', 'overlay', 'search'];\n\n constructor(query) {\n super();\n this.query = query;\n }\n async execute(r) {\n const { api, overlay, search } = r;\n // The palette's mode as it is NOW, not as it was when the keystroke's timer was set.\n // This guard used to live in the debounce callback in the component, which had to read\n // it back off the service for exactly this reason — a listener belongs to the render\n // that created it, and the mode can change under a pending timer.\n if (overlay.get().palette?.mode !== 'files') return;\n const q = (this.query || '').trim();\n if (!q) { search.set({ paletteFiles: [], paletteQuery: '', paletteError: null, paletteLoading: false }); return; }\n // Keystrokes outrun the network: a slower request for an earlier query must not\n // land on top of a newer one's results. The query itself is the sequence token —\n // whatever the palette input holds now is the only answer worth showing.\n search.set({ paletteQuery: q, paletteLoading: true, paletteError: null });\n try {\n const res = await api.search(q, { mode: 'keyword', limit: 30 });\n if (search.get().paletteQuery !== q) return; // superseded\n search.set({ paletteFiles: res.results || [], paletteLoading: false });\n } catch (err) {\n if (search.get().paletteQuery !== q) return;\n // A failed search must not look like \"no files matched\" — that reads as a fact\n // about the drive when it's actually a fact about the request.\n search.set({ paletteFiles: [], paletteLoading: false, paletteError: err?.message || 'Search failed' });\n }\n }\n}\n\nexport class SearchAction extends Action {\n static deps = ['api', 'contributions', 'offline', 'search', 'settings'];\n\n constructor(query, mode) {\n super();\n this.query = query;\n this.mode = mode;\n }\n async execute(r) {\n const { api, contributions, search, settings } = r;\n const q = this.query.trim();\n if (!q) {\n search.set({ query: '', results: [], ran: false, error: null, resolved: null });\n return;\n }\n const mode = this.mode || settings.get('search.mode');\n search.set({ query: this.query, mode, loading: true, error: null, resolved: null });\n const offline = r.offline;\n // Offline (or server unreachable) → search the pinned corpus locally.\n if (offline && !offline.state.online) {\n try {\n const results = await offline.searchOffline(q, { limit: 40 });\n search.set({ results, loading: false, ran: true, offline: true, resolved: null });\n } catch (err) {\n search.set({ results: [], loading: false, ran: true, offline: true, error: err.message });\n }\n return;\n }\n try {\n // The server transforms the raw query (parse/LLM) and tells us what it actually\n // searched — surfaced to the user via `resolved` so search is honest.\n //\n // We send the views we can draw with, because the transformer is the only thing in\n // the stack that read the sentence: \"photos from the trip last summer\" asks for a\n // gallery, and by the time the results are back all anyone can do is guess from\n // content types. It can only name a view from this list.\n const views = contributions.ofType('view').map((v) => ({ id: v.id, title: v.title || v.id }));\n const res = await api.query(q, { mode, limit: 40, views });\n search.set({ results: res.results, resolved: res.resolved || null, loading: false, ran: true, offline: false });\n } catch (err) {\n if (offline) {\n const results = await offline.searchOffline(q, { limit: 40 });\n search.set({ results, loading: false, ran: true, offline: true, error: results.length ? null : err.message });\n } else {\n search.set({ loading: false, error: err.message, ran: true });\n }\n }\n }\n}\n\n// --- API keys (admin) ----------------------------------------------------------\n\n/**\n * Load the key list.\n *\n * Silent on failure rather than noisy: this fires when Settings opens, and a non-admin\n * opening Settings gets a 403 that is the correct answer, not an error worth a toast.\n * The section simply does not render.\n */\nexport class LoadApiKeysAction extends Action {\n static deps = ['api', 'apiKeys'];\n\n async execute(r) {\n r.apiKeys.set({ loading: true, error: null });\n try {\n const res = await r.api.apiKeys();\n r.apiKeys.set({ keys: res.keys || [], loading: false, loaded: true, error: null });\n } catch (err) {\n r.apiKeys.set({ loading: false, loaded: true, error: err?.message || 'Could not load API keys' });\n }\n }\n}\n\n/**\n * Mint a key and hold the secret for display.\n *\n * The secret is the whole point of the round trip and cannot be fetched again, so it is\n * put into state before anything else can fail. A refresh of the list afterwards is a\n * convenience; losing the secret because the refresh threw would not be.\n */\nexport class MintApiKeyAction extends Action {\n static deps = ['api', 'apiKeys', 'notifications'];\n\n constructor(spec) {\n super();\n this.spec = spec;\n }\n async execute(r) {\n r.apiKeys.set({ busy: 'mint', error: null });\n try {\n const { key, secret } = await r.api.mintApiKey(this.spec);\n r.apiKeys.set({ minted: { key, secret }, busy: null });\n const res = await r.api.apiKeys().catch(() => null);\n if (res) r.apiKeys.set({ keys: res.keys || [] });\n return key;\n } catch (err) {\n r.apiKeys.set({ busy: null, error: err?.message || 'Could not create the key' });\n r.notifications.error(err?.message || 'Could not create the key');\n return null;\n }\n }\n}\n\nexport class RevokeApiKeyAction extends Action {\n static deps = ['api', 'apiKeys', 'notifications'];\n\n constructor(id) {\n super();\n this.id = id;\n }\n async execute(r) {\n r.apiKeys.set({ busy: this.id, error: null });\n try {\n await r.api.revokeApiKey(this.id);\n const res = await r.api.apiKeys().catch(() => null);\n r.apiKeys.set({ busy: null, ...(res ? { keys: res.keys || [] } : {}) });\n r.notifications.success('Key revoked');\n } catch (err) {\n r.apiKeys.set({ busy: null });\n r.notifications.error(err?.message || 'Could not revoke the key');\n }\n }\n}\n\n\n/**\n * Rebind a keyboard shortcut, or clear it with `key: null`.\n *\n * Carries the binding ID rather than the binding, because a view emits descriptions and an\n * action carries an id — the component that dispatches this has never held the binding\n * object, only a row describing it.\n */\nexport class RebindKeyAction extends Action {\n static deps = ['keybindings'];\n constructor(bindingId, key) {\n super();\n this.bindingId = bindingId;\n this.key = key;\n }\n\n async execute({ keybindings: kb }) {\n // `rebind` resolves a binding object or a command id, not a binding id, so look the\n // row back up. Resolving here rather than widening the service keeps the id the only\n // thing that crosses the boundary.\n const binding = kb.resolved().find((b) => b.bindingId === this.bindingId);\n if (!binding) return;\n kb.rebind(binding, this.key);\n }\n}\n\n/**\n * Copy text to the clipboard, and say so.\n *\n * Four components had their own version of this, each written slightly differently — two\n * with `.then/.catch`, one with `await` in a `try`, one optional-chaining the clipboard and\n * one not. All four ended the same way, and the ending is the part that matters: a copy that\n * FAILS must still put the text where it can be selected by hand, or the user is left with a\n * button that did nothing and no way to get at what it was for. That is what the sticky\n * fallback is, and it is exactly the sort of detail that rots when it lives in four places.\n *\n * Clipboard access is denied outside a user gesture and in an insecure context, so the\n * failure path is ordinary rather than exceptional.\n */\nexport class CopyTextAction extends Action {\n static deps = ['notifications'];\n /**\n * @param {string} text\n * @param {string} [label] what the toast says on success\n */\n constructor(text, label = 'Copied') {\n super();\n this.text = text;\n this.label = label;\n }\n\n async execute({ notifications: notes }) {\n try {\n await navigator.clipboard.writeText(this.text);\n notes.success(this.label);\n } catch {\n notes.info(this.text, { sticky: true });\n }\n }\n}\n\n/** Say something to the user. `kind` is one of info, success, warn, error. */\nexport class NotifyAction extends Action {\n static deps = ['notifications'];\n constructor(kind, message, opts) {\n super();\n this.kind = kind;\n this.message = message;\n this.opts = opts;\n }\n\n async execute({ notifications: notes }) {\n (notes[this.kind] ?? notes.info).call(notes, this.message, this.opts);\n }\n}\n\n/** Dismiss one notification, by id. */\nexport class DismissNotificationAction extends Action {\n static deps = ['notifications'];\n constructor(id) {\n super();\n this.id = id;\n }\n\n async execute({ notifications }) {\n notifications.dismiss(this.id);\n }\n}\n\n// --- the shell's own surface ----------------------------------------------------\n//\n// Opening and closing the workbench's overlays. These were direct calls on\n// `platform.workbench`, which meant the engine could not see a person close a dialog or\n// move through the palette — the same hole `ExecCommandAction` closed for commands.\n//\n// One class per operation rather than a single ShellAction carrying a method name. The\n// point of routing these through the engine is that the feed says what happened; a\n// discriminated blob would make every one of them read as \"ShellAction\" and give back\n// exactly the observability this is for.\n//\n// NOT here yet, deliberately: `showDialog` and `showContextMenu`. Both take callbacks —\n// a dialog carries `onConfirm`, a menu carries an item's `run` — so converting them\n// mechanically would post a closure through the engine and call it an action. They want\n// the outcome to be an ACTION TO DISPATCH rather than a function to call, which is a real\n// change at each call site rather than a swap. See docs/tickets/009.\n\nclass ShellAction extends Action {\n static deps = ['workbench'];\n async execute({ workbench }) {\n this.apply(workbench);\n }\n}\n\n/**\n * The overlays: palette, dialog, context menu, plugin panel.\n *\n * Their own lease. Closing a dialog used to go through the workbench facade and therefore\n * leased the entire shell — the panel stack, the launcher cursor and the sheet included —\n * to set one field to null.\n */\nclass OverlayAction extends Action {\n static deps = ['overlay'];\n async execute({ overlay }) {\n this.apply(overlay);\n }\n}\n\n/** The panel stack. Still a service: it mirrors into browser history and persists recents. */\nclass NavAction extends Action {\n static deps = ['navigation'];\n async execute({ navigation }) {\n this.apply(navigation);\n }\n}\n\nexport class CloseDialogAction extends OverlayAction {\n apply(o) { o.set({ dialog: null }); }\n}\n\n/** Merge a patch into the open dialog — a reactive dialog, like the opener chooser. */\nexport class UpdateDialogAction extends OverlayAction {\n constructor(patch) { super(); this.patch = patch; }\n apply(o) {\n const dialog = o.get().dialog;\n if (dialog) o.set({ dialog: { ...dialog, ...this.patch } });\n }\n}\n\nexport class CloseContextMenuAction extends OverlayAction {\n apply(o) { o.set({ contextMenu: null }); }\n}\n\nexport class ClosePaletteAction extends OverlayAction {\n apply(o) { o.set({ palette: null }); }\n}\n\nexport class SetPaletteQueryAction extends OverlayAction {\n constructor(query) { super(); this.query = query; }\n apply(o) {\n const palette = o.get().palette;\n // Back to the top: the previous highlight belonged to the previous result set.\n if (palette) o.set({ palette: { ...palette, query: this.query, index: 0 } });\n }\n}\n\nexport class SetPaletteIndexAction extends OverlayAction {\n constructor(index) { super(); this.index = index; }\n apply(o) {\n const palette = o.get().palette;\n if (palette) o.set({ palette: { ...palette, index: this.index } });\n }\n}\n\n/**\n * Move the palette's highlight, wrapping at either end.\n *\n * The wrapping is HERE now. It used to be in the service with this action forwarding two\n * arguments to it — and it forwarded one, so the service could not tell where the end was,\n * returned early, and the arrow keys did nothing at all. Deciding and writing in one place\n * is what removes the chance.\n */\nexport class MovePaletteAction extends OverlayAction {\n constructor(delta, count) { super(); this.delta = delta; this.count = count; }\n apply(o) {\n const palette = o.get().palette;\n if (!palette || !this.count) return;\n o.set({ palette: { ...palette, index: wrapIndex(palette.index, this.delta, this.count) } });\n }\n}\n\n/** The double-shift overlay: a search that starts empty and resets the stack on a pick. */\nexport class OpenSearchModalAction extends ShellAction {\n apply(wb) { wb.set({ searchModal: true, launch: { query: '', index: 0 } }); }\n}\n\nexport class CloseSearchModalAction extends ShellAction {\n apply(wb) { wb.set({ searchModal: false }); }\n}\n\nexport class SetLaunchQueryAction extends ShellAction {\n constructor(query) { super(); this.query = query; }\n // Back to the top, for the same reason the palette does: the old highlight belonged to\n // the old results.\n apply(wb) { wb.set({ launch: { query: this.query, index: 0 } }); }\n}\n\nexport class SetLaunchIndexAction extends ShellAction {\n constructor(index) { super(); this.index = index; }\n apply(wb) { wb.set({ launch: { ...wb.get().launch, index: this.index } }); }\n}\n\n/** Raise, swap, or drop the phone bottom sheet. Tapping the open one closes it. */\nexport class OpenSheetAction extends ShellAction {\n constructor(which) { super(); this.which = which; }\n apply(wb) { wb.set({ sheet: wb.get().sheet === this.which ? null : this.which }); }\n}\n\nexport class CloseSheetAction extends ShellAction {\n apply(wb) { wb.set({ sheet: null }); }\n}\n\nexport class ToggleInfoPanelAction extends ShellAction {\n constructor(open) { super(); this.open = open; }\n apply(wb) { wb.set({ infoPanel: this.open ?? !wb.get().infoPanel }); }\n}\n\nexport class OpenPluginPanelAction extends OverlayAction {\n constructor(pluginId) { super(); this.pluginId = pluginId; }\n apply(o) { o.set({ pluginPanel: this.pluginId }); }\n}\n\nexport class ClosePluginPanelAction extends OverlayAction {\n apply(o) { o.set({ pluginPanel: null }); }\n}\n\n/**\n * Open a node in a panel, with a chosen opener.\n *\n * Three things at once, and they belong together: the panel goes on the stack, the shell\n * switches to the drive, and the modal search — if that is where the pick came from —\n * closes behind it. The workbench service used to do the coordinating because the stack\n * lives in one place and the activity in another; an action is a better home for \"these\n * happen together\" than a facade over both.\n */\nexport class OpenInPanelAction extends Action {\n static deps = ['navigation', 'workbench'];\n constructor(node, openerId, opts = {}) {\n super();\n this.node = node;\n this.openerId = openerId;\n this.opts = opts;\n }\n async execute({ navigation, workbench }) {\n workbench.set({ activity: 'home', searchModal: false });\n navigation.openFile(this.node, this.openerId, this.opts);\n }\n}\n\n// --- the drive's services --------------------------------------------------------\n//\n// Cancelling a transfer, retrying an issue, tagging a file. These were direct method calls\n// on the service, so the engine saw an upload being cancelled only as the state change that\n// followed, with nothing to say a person had asked for it.\n//\n// Named per operation for the same reason the shell actions are: the feed is the point.\n\nclass ActivityAction extends Action {\n static deps = ['activity'];\n async execute(r) { this.apply(r.activity); }\n}\nexport class ToggleActivityPanelAction extends ActivityAction {\n constructor(which) { super(); this.which = which; }\n apply(s) { s.togglePanel(this.which); }\n}\nexport class CancelTaskAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.cancel(this.id); }\n}\nexport class DismissTaskAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.dismiss(this.id); }\n}\nexport class RetryIssueAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.retryIssue(this.id); }\n}\nexport class DismissIssueAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.dismissIssue(this.id); }\n}\n\nclass TransfersAction extends Action {\n static deps = ['transfers'];\n async execute(r) { this.apply(r.transfers); }\n}\nexport class CancelTransferAction extends TransfersAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.cancel(this.id); }\n}\nexport class RetryTransferAction extends TransfersAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.retry(this.id); }\n}\nexport class DismissTransferAction extends TransfersAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.dismiss(this.id); }\n}\nexport class ClearFinishedTransfersAction extends TransfersAction {\n apply(s) { s.clearDone(); }\n}\n\nclass SocialAction extends Action {\n static deps = ['social'];\n // Awaited: several of these are network calls, and a dispatch feed that settles before\n // the work does reports success for something still in flight.\n async execute(r) { return this.apply(r.social); }\n}\nexport class ToggleInboxAction extends SocialAction {\n constructor(open) { super(); this.open = open; }\n apply(s) { s.toggleInbox(this.open); }\n}\n\n/** Ask the browser for push permission and register. */\nexport class EnablePushAction extends SocialAction {\n apply(s) { return s.enablePush(); }\n}\n\n/** Post a comment on the open item. */\nexport class PostCommentAction extends SocialAction {\n constructor(body) { super(); this.body = body; }\n apply(s) { return s.comment(this.body); }\n}\n\nexport class DeleteCommentAction extends SocialAction {\n constructor(commentId) { super(); this.commentId = commentId; }\n apply(s) { return s.deleteComment(this.commentId); }\n}\n\nexport class ReactToCommentAction extends SocialAction {\n constructor(commentId, emoji) { super(); this.commentId = commentId; this.emoji = emoji; }\n apply(s) { return s.react(this.commentId, this.emoji); }\n}\n\n/** Aim the comment box at a comment, or clear it with `null`. */\nexport class SetReplyToAction extends SocialAction {\n constructor(target) { super(); this.target = target; }\n apply(s) { s.setReplyTo(this.target); }\n}\nexport class AddTagAction extends SocialAction {\n constructor(name, value) { super(); this.name = name; this.value = value; }\n apply(s) { s.addTag(this.name, this.value); }\n}\nexport class RemoveTagAction extends SocialAction {\n constructor(name) { super(); this.name = name; }\n apply(s) { s.removeTag(this.name); }\n}\nexport class LoadSidecarAction extends SocialAction {\n constructor(nodeId) { super(); this.nodeId = nodeId; }\n apply(s) { s.loadSidecar(this.nodeId); }\n}\n\nclass ApiKeysAction extends Action {\n static deps = ['apiKeys'];\n async execute(r) { this.apply(r.apiKeys); }\n}\n\n/** Change one field of the mint form. Does nothing when there is no form open. */\nexport class PatchApiKeyDraftAction extends ApiKeysAction {\n constructor(patch) { super(); this.patch = patch; }\n apply(s) {\n const draft = s.get().draft;\n if (draft) s.set({ draft: { ...draft, ...this.patch } });\n }\n}\n\n/**\n * Toggle one capability on one collection in the draft.\n *\n * Per COLLECTION and capability: a key is scoped, so a capability without the collection\n * it applies to is meaningless. This used to be arithmetic inside the service with an\n * action in front of it forwarding two arguments — and it forwarded one, so the collection\n * id arrived as the capability and the server refused every mint. Deciding and writing are\n * one step now, with nothing in between to drop.\n *\n * `admin` is not treated specially. It is offered as itself and the server expands it;\n * pre-ticking read/write/delete alongside it would suggest they are separable afterwards,\n * and they are not.\n */\nexport class ToggleApiKeyCapAction extends ApiKeysAction {\n constructor(collectionId, capability) { super(); this.collectionId = collectionId; this.capability = capability; }\n apply(s) {\n const draft = s.get().draft;\n if (!draft) return;\n const caps = { ...draft.caps };\n const held = new Set(caps[this.collectionId] || []);\n if (held.has(this.capability)) held.delete(this.capability);\n else held.add(this.capability);\n if (held.size) caps[this.collectionId] = [...held];\n else delete caps[this.collectionId];\n s.set({ draft: { ...draft, caps } });\n }\n}\n\n/**\n * Select items in the explorer.\n *\n * `opts` is `{ additive, nodes }`, matching the service — NOT a boolean. It was written as\n * `additive` first, which worked at the one call site only because the options object passed\n * through positionally unchanged. `new SelectItemsAction(ids, true)` would have destructured\n * a boolean into `{additive = false, nodes = null}` and quietly not been additive at all.\n *\n * `nodes` matters when the selection cannot be resolved from the loaded page: the launcher's\n * rows come from search, which is scoped across collections, so the node has to travel with\n * the id.\n */\nexport class SelectItemsAction extends Action {\n static deps = ['explorer'];\n\n constructor(ids, opts = {}) { super(); this.ids = ids; this.opts = opts; }\n\n async execute({ explorer }) {\n const { additive = false, nodes = null } = this.opts;\n const current = explorer.get().selection;\n const next = additive ? Array.from(new Set([...current, ...this.ids])) : this.ids;\n // Selecting what is already selected must not emit. The launcher syncs the highlighted\n // row into here on every mouseenter, and a state push per mouse move would re-render\n // the list under the pointer. The rule lives with the mutation now rather than inside\n // the resource, so the resource only holds and only `set` writes.\n const same = next.length === current.length && next.every((id, i) => id === current[i]);\n if (same) return;\n explorer.set({ selection: next, selectionNodes: nodes && !additive ? nodes : null });\n }\n}\n\n/**\n * Move the launcher's highlight and sync the selection to whatever it landed on.\n *\n * ONE action because the two halves are not separable. Moving computes a new index — with\n * wrapping, so it is not `index + delta` — and the selection has to follow the row that\n * index now names. Written as two steps in the component it read the index back out of the\n * store immediately after writing it, which only worked because a direct method call is\n * synchronous. Dispatching is not: the highlight would move and the selection would sync to\n * the previously highlighted row, one keystroke behind, forever, without anything throwing.\n *\n * Here the read-back is inside the action, where it IS sequenced. `nodes` is the results in\n * display order — the component knows the running order, the store only knows the index.\n */\nexport class MoveLaunchAction extends Action {\n static deps = ['explorer', 'workbench'];\n constructor(delta, nodes) { super(); this.delta = delta; this.nodes = nodes; }\n async execute({ workbench, explorer }) {\n const count = this.nodes.length;\n if (!count) return;\n const index = wrapIndex(workbench.get().launch.index, this.delta, count);\n workbench.set({ launch: { ...workbench.get().launch, index } });\n selectNode(explorer, this.nodes[index]);\n }\n}\n\n/** Highlight a launcher row by position and select it — the pointer/Enter counterpart. */\nexport class SelectLaunchAction extends Action {\n static deps = ['explorer', 'workbench'];\n constructor(index, node) { super(); this.index = index; this.node = node; }\n async execute({ workbench, explorer }) {\n workbench.set({ launch: { ...workbench.get().launch, index: this.index } });\n selectNode(explorer, this.node);\n }\n}\n\n/** Select exactly one node, or nothing. Carries the node itself — see SelectItemsAction. */\nfunction selectNode(explorer, node) {\n const ids = node?.id ? [node.id] : [];\n const current = explorer.get().selection;\n if (ids.length === current.length && ids.every((id, i) => id === current[i])) return;\n explorer.set({ selection: ids, selectionNodes: node ? [node] : null });\n}\n\n/**\n * Write one slice of view state — a draft, a capture, a set of ticked boxes.\n *\n * Components used to call the store directly, and two of them did it DURING their own\n * render to install a default. The default is derived now (see `draftFor`), so this only\n * ever runs because a person did something.\n */\nexport class SetViewStateAction extends Action {\n static deps = ['viewState'];\n constructor(key, value) { super(); this.key = key; this.value = value; }\n async execute({ viewState }) { viewState.set({ [this.key]: this.value }); }\n}\n\n\n/**\n * Show a context menu at a point.\n *\n * Only possible now that items carry `actions` rather than `run` closures — this used to be\n * a direct call precisely because dispatching a menu would have meant putting functions on\n * the feed. See ui/activate.js.\n */\nexport class ShowContextMenuAction extends OverlayAction {\n constructor(x, y, items) { super(); this.x = x; this.y = y; this.items = items; }\n apply(o) { o.set({ contextMenu: { x: this.x, y: this.y, items: this.items } }); }\n}\n\n/**\n * Show a dialog.\n *\n * The spec is data. A confirm carries `confirmActions`; so does a prompt, whose actions read\n * what was typed out of view state rather than being handed it — see PromptAction. Nothing\n * in a dialog spec is callable, which matters because the spec lives in workbench state.\n */\nexport class ShowDialogAction extends OverlayAction {\n constructor(dialog) { super(); this.dialog = dialog; }\n apply(o) { o.set({ dialog: this.dialog }); }\n}\n\n/** Change one setting. */\nexport class SetSettingAction extends Action {\n static deps = ['settings'];\n constructor(key, value) { super(); this.key = key; this.value = value; }\n async execute({ settings }) { settings.set(this.key, this.value); }\n}\n\n/**\n * Remember which opener a file type should use, or forget it with a null openerId.\n *\n * Not `SetSettingAction` with a pre-merged map, because building that map means reading the\n * current one — and a component that reads settings to compute what to write is the same\n * stale-base race as the drafts had (see PatchDraftAction). The merge happens here, against\n * what is stored.\n */\nexport class RememberOpenerAction extends Action {\n static deps = ['settings'];\n constructor(typeKey, openerId) { super(); this.typeKey = typeKey; this.openerId = openerId; }\n async execute({ settings }) {\n if (!this.typeKey) return;\n settings.set(ASSOC_KEY, withAssociation(settings.get(ASSOC_KEY), this.typeKey, this.openerId));\n }\n}\n\n/** Back through the panel stack. */\nexport class NavigateBackAction extends NavAction {\n apply(nav) { nav.back(); }\n}\n\n/** Close the viewer stack and return to the drive. */\nexport class ShowHomeAction extends Action {\n static deps = ['navigation', 'workbench'];\n async execute({ navigation, workbench }) {\n workbench.set({ activity: 'home', searchModal: false });\n navigation.reset();\n }\n}\n\n/** Reload one plugin — re-read its manifest and restart its worker. */\nexport class RefreshPluginAction extends Action {\n static deps = ['plugins'];\n constructor(pluginId) { super(); this.pluginId = pluginId; }\n async execute({ plugins }) { return plugins.refresh(this.pluginId); }\n}\n\n/**\n * Store a plugin secret.\n *\n * Not a setting: secrets go somewhere settings do not, which is why this is its own action\n * rather than SetSettingAction with a different key.\n */\nexport class SetPluginSecretAction extends Action {\n static deps = ['plugins'];\n constructor(pluginId, key, value) { super(); this.pluginId = pluginId; this.key = key; this.value = value; }\n async execute({ plugins }) { return plugins.setSecret(this.pluginId, this.key, this.value); }\n}\n\n/**\n * Open whatever a notification points at.\n *\n * The stat, the open, the panel and the failure message are one action because they are one\n * intent. Spread across a component they were a `.then` chain that had to know the API\n * answers `{ node }` rather than a node, and had to remember that a notification can\n * outlive its target — the item may be deleted, or live somewhere the reader has since\n * lost access to. Either way the click must say so rather than do nothing.\n */\nexport class OpenNotificationTargetAction extends Action {\n static deps = ['api', 'context', 'contributions', 'engine', 'explorer', 'notifications', 'plugins', 'settings', 'workbench'];\n\n constructor(nodeId) { super(); this.nodeId = nodeId; }\n\n async execute(r) {\n let node;\n try {\n ({ node } = await r.api.stat(this.nodeId));\n } catch (err) {\n r.notifications.warn(err?.status === 403 || err?.code === 'forbidden'\n ? 'You no longer have access to that item.'\n : 'That item no longer exists.');\n return;\n }\n await new OpenFileAction(node).execute(r);\n r.workbench.set({ infoPanel: true });\n }\n}\n\n/**\n * The base for anything a prompt dialog submits.\n *\n * The typed value is engine state (see viewState.js), so the action READS it rather than\n * being handed it by a callback. Subclasses implement `withValue`; the dialog closes first,\n * because every one of these used to do that by hand and two forgot to do it consistently.\n */\nexport class PromptAction extends Action {\n static deps = ['overlay', 'viewState'];\n\n async execute(r) {\n const held = r.viewState.get()[PROMPT];\n const value = (held?.value ?? '').trim();\n r.overlay.set({ dialog: null });\n if (value) await this.withValue(value, r);\n }\n}\n\n/** Rename the node this prompt was opened for. */\nexport class RenamePromptAction extends PromptAction {\n static deps = ['engine', 'overlay', 'viewState'];\n constructor(node) { super(); this.node = node; }\n async withValue(name, { engine }) {\n if (name !== this.node.name) await engine.dispatch(new RenameAction(this.node.id, name));\n }\n}\n\n/** Fetch and review a plugin package from the URL that was typed. */\nexport class InstallPluginFromUrlPromptAction extends PromptAction {\n static deps = ['notifications', 'overlay', 'plugins', 'social', 'viewState', 'workbench'];\n async withValue(url, r) { await beginInstallFromUrl(r, url); }\n}\n\n/**\n * Create the collection the dialog's form describes.\n *\n * The form is already engine state — the dialog puts it in viewState as it is typed — so\n * this reads it rather than being handed a record through a callback. The form-to-record\n * shaping stays in the dialog, which is the thing that knows which fields the chosen\n * driver declared.\n */\nexport class CreateCollectionFromFormAction extends Action {\n static deps = ['engine', 'overlay'];\n constructor(record) { super(); this.record = record; }\n async execute({ engine, overlay }) {\n overlay.set({ dialog: null });\n if (this.record) await engine.dispatch(new CreateCollectionAction(this.record));\n }\n}\n\n/**\n * Change one field of a draft, merging against what is stored RATHER than against what the\n * render saw.\n *\n * Every field handler used to build `{ ...form, [k]: value }` from the `form` its own render\n * closed over. Two changes to different fields before the next render therefore both merged\n * onto the same stale base, and the second silently dropped the first — type a name, switch\n * the storage driver in the same frame, and the name is gone with the Create button quietly\n * disabled. Renders are coalesced by rAF, so \"in the same frame\" is not rare, and a\n * backgrounded tab makes it certain.\n *\n * Reading current state inside the action removes the window entirely.\n *\n * @param {string} key which draft\n * @param {object} ref the dialog instance it belongs to\n * @param {object} patch the field(s) being changed\n * @param {object} fallback the draft's default, for when the held one is another dialog's\n */\nexport class PatchDraftAction extends Action {\n static deps = ['viewState'];\n\n constructor(key, ref, patch, fallback = {}) {\n super();\n this.key = key;\n this.ref = ref;\n this.patch = patch;\n this.fallback = fallback;\n }\n\n async execute({ viewState }) {\n const held = viewState.get()[this.key];\n const base = held && held.ref === this.ref ? held.form : this.fallback;\n viewState.set({ [this.key]: { ref: this.ref, form: { ...base, ...this.patch } } });\n }\n}\n\n// --- what commands used to do inline ---------------------------------------------\n//\n// bl/commands.js registered 40 commands and 36 of them were CLOSURES over `app` — the whole\n// world — doing effects outside the engine. That mattered more than the line count suggests,\n// because commands are the entry point for everything a person actually does: the palette,\n// every keybinding, every menu item, every row button. `ExecCommandAction` routed the intent\n// in and the handler walked straight back out, so the engine saw a command being run and\n// then nothing of what it did.\n//\n// A command is a DESCRIPTION now — `{ id, title, actions(...args) }`, where `actions` is a\n// pure factory. Everything below is where those handler bodies went.\n\n/**\n * The file a command acts on: the one it was handed, else the selection, else what is open.\n *\n * Three commands resolved this identically and a fourth got it slightly wrong. \"Nothing is\n * selected\" is a real answer and has to be said out loud — returning silently is\n * indistinguishable from a broken command.\n */\nfunction subjectOf({ explorer, navigation, notifications }, node = null) {\n const found = node || selectedNodesOf(explorer.get())[0] || navigation.activeTab()?.node;\n if (!found) notifications.info('Pick a file first — highlight one in the list, or open it.');\n return found;\n}\n\n/** Open the command palette, or quick-open, depending on the mode. */\nexport class OpenPaletteAction extends OverlayAction {\n constructor(mode = 'commands', query = '') { super(); this.mode = mode; this.query = query; }\n apply(o) { o.set({ palette: { mode: this.mode, query: this.query, index: 0 } }); }\n}\n\n/** Switch the main area between the drive, plugins and settings. */\nexport class SetActivityAction extends ShellAction {\n constructor(activity) { super(); this.activity = activity; }\n apply(wb) { wb.set({ activity: this.activity, sidebarVisible: true }); }\n}\n\n/**\n * Close the topmost transient thing — what Escape does.\n *\n * The ORDER is the whole content of this action, and it spans four resources: the menu\n * over the dialog, the dialog over the phone sheet, the sheet over the modal search, and\n * only when none of those is up does Escape start popping the panel stack. Getting it wrong\n * is not a crash — it is Escape closing the wrong thing, which is why it is written out\n * once, here, rather than distributed over whoever owns each overlay.\n */\nexport class CloseOverlaysAction extends Action {\n static deps = ['activity', 'navigation', 'overlay', 'workbench'];\n async execute({ activity, navigation, overlay, workbench }) {\n const o = overlay.get();\n const wb = workbench.get();\n if (o.contextMenu) return overlay.set({ contextMenu: null });\n if (o.dialog) return overlay.set({ dialog: null });\n if (wb.sheet) return workbench.set({ sheet: null });\n if (wb.searchModal) return workbench.set({ searchModal: false });\n if (o.palette) return overlay.set({ palette: null });\n if (o.pluginPanel) return overlay.set({ pluginPanel: null });\n // The activity panel floats over the page and carries a close button like everything\n // else in this ladder, and was the one such surface Escape did not reach. Below the\n // plugin panel deliberately: it opens BY ITSELF when a storage check finishes, and\n // Escape should not close what you opened on purpose in order to dismiss what\n // appeared on its own.\n if (activity.state?.open) return activity.togglePanel(false);\n // Nothing floating: Escape pops the top viewer panel instead.\n if (navigation.state.stack.length > 1) navigation.back();\n }\n}\n\n/**\n * Speak to search.\n *\n * On a TV this is mostly NOT about recognising anything: a remote's mic dictates into\n * whatever text field the platform keyboard is attached to, and is swallowed by the system\n * assistant when there isn't one. So the first job is to put the search field on screen and\n * focused, which is a feature on every TV whether or not the browser can transcribe. Where\n * it can — on-device only, see platform/voice.js — it also starts listening and types what\n * it hears.\n */\nexport class VoiceSearchAction extends Action {\n static deps = ['engine', 'voice'];\n async execute({ engine, voice }) {\n await voice.run({\n onText: (text, { final }) => {\n if (!text) return;\n engine.dispatch(new SetLaunchQueryAction(text));\n // Interim results keep the box in step with the speaker; only the settled\n // transcript is worth a round trip to the server.\n if (final) engine.dispatch(new SearchAction(text));\n },\n });\n }\n}\n\n/** Reindex the whole drive. Reports as a task rather than blocking — it takes minutes. */\nexport class RebuildIndexAction extends Action {\n static deps = ['activity'];\n async execute({ activity }) { return activity.rebuildIndex().catch(() => {}); }\n}\n\n/**\n * Pick up files added, replaced or removed in the bucket by something other than Trove.\n *\n * No collection means no scan. This used to fall back to one called 'default', which on a\n * drive that has none scanned a collection that does not exist and reported the failure as\n * a scan error.\n */\nexport class ScanCollectionAction extends Action {\n static deps = ['activity', 'explorer', 'notifications'];\n async execute({ activity, explorer, notifications }) {\n const id = explorer.get().collectionId;\n if (!id) return notifications.info('Open a collection first — a scan is per collection.');\n return activity.scanCollection(id).catch(() => {});\n }\n}\n\n/**\n * Whether the backing stores are reachable from a browser at all.\n *\n * Separate from a scan: a scan asks what the store HOLDS, this asks whether it can be READ\n * from here — the failure that makes every file open to a spinner.\n */\nexport class CheckStorageAction extends Action {\n static deps = ['activity'];\n async execute({ activity }) { return activity.checkStorage().catch(() => {}); }\n}\n\n/** Ask for files, then upload them into the open collection. */\nexport class PickAndUploadAction extends Action {\n static deps = ['engine', 'explorer'];\n async execute({ engine, explorer }) {\n const collection = explorer.get().collectionId;\n pickFiles((files) => files.length && engine.dispatch(new UploadFilesAction(files, collection)));\n }\n}\n\n/**\n * Copy a link to the subject, in one of its two spellings.\n *\n * `trove:` is what one document writes to link another; it means nothing to a browser. A\n * share link is a URL you can paste into a message. Both end at CopyTextAction, which is\n * the thing that knows a failed copy must still leave the text somewhere selectable.\n */\nexport class CopyLinkAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications'];\n /** @param {'trove'|'share'} kind */\n constructor(kind = 'trove', node = null) { super(); this.kind = kind; this.node = node; }\n async execute(r) {\n const node = subjectOf(r, this.node);\n if (!node) return;\n return r.engine.dispatch(this.kind === 'share'\n ? new CopyTextAction(shareUrl(node, location.origin),\n 'Link copied — anyone with access to this collection can open it')\n : new CopyTextAction(troveUri(node), `Copied ${troveUri(node)}`));\n }\n}\n\n/** Ask for a new name for the subject. The prompt's value is read by RenamePromptAction. */\nexport class RenameSubjectAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications'];\n constructor(node = null) { super(); this.node = node; }\n async execute(r) {\n const node = subjectOf(r, this.node);\n if (!node) return;\n r.engine.dispatch(new ShowDialogAction({\n kind: 'prompt', title: 'Rename', label: 'New name', value: node.name, confirmLabel: 'Rename',\n confirmActions: [new RenamePromptAction(node)],\n }));\n }\n}\n\n/**\n * Move the selection to the trash, confirming first unless that was turned off.\n *\n * Deleting the file you have OPEN is the obvious intent when nothing is selected, so it\n * counts as the subject. The confirmation says what actually happens: telling someone a\n * file will be \"permanently deleted\" when it goes to the trash trains them to fear a safe\n * action, and the reverse — promising recovery that doesn't exist — is worse.\n */\nexport class DeleteSubjectAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications', 'settings'];\n async execute(r) {\n const nodes = selectedNodesOf(r.explorer.get());\n const open = nodes.length ? null : r.navigation.activeTab()?.node;\n if (open) nodes.push(open);\n if (!nodes.length) {\n r.notifications.info('Pick a file first — highlight one in the list, or open it.');\n return;\n }\n const deleteThem = new DeleteAction(nodes.map((n) => n.id));\n if (!r.settings.get('explorer.confirmDelete')) return r.engine.dispatch(deleteThem);\n r.engine.dispatch(new ShowDialogAction({\n kind: 'confirm',\n title: `Move ${nodes.length} item${nodes.length > 1 ? 's' : ''} to the trash?`,\n body: nodes.length === 1\n ? `\"${nodes[0].name}\" leaves the drive but is kept, and can be restored from the trash.`\n : 'They leave the drive but are kept, and can be restored from the trash.',\n confirmLabel: 'Move to trash',\n confirmActions: [deleteThem],\n }));\n }\n}\n\n/** Show the trash, and get back to the drive to see it. */\nexport class ShowTrashAction extends Action {\n static deps = ['engine'];\n async execute({ engine }) {\n engine.dispatch(new TrashAction('list'));\n engine.dispatch(new ShowHomeAction());\n }\n}\n\n/** Open the subject in a viewer. */\nexport class OpenSubjectAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications'];\n constructor(node = null) { super(); this.node = node; }\n async execute(r) {\n const node = subjectOf(r, this.node);\n if (node) return r.engine.dispatch(new OpenFileAction(node));\n }\n}\n\n/** Save the subject to the machine. */\nexport class DownloadSubjectAction extends Action {\n static deps = ['api', 'explorer', 'navigation', 'notifications'];\n constructor(node = null) { super(); this.node = node; }\n async execute(r) {\n const target = subjectOf(r, this.node);\n if (!target?.id) return;\n try {\n const { url, revoke } = await r.api.download(target.id, target.name);\n triggerDownload(url, target.name);\n // A blob URL pins the bytes until it is released; the click has already happened by\n // the time this runs.\n if (revoke) setTimeout(() => URL.revokeObjectURL(url), 60_000);\n } catch (err) {\n r.notifications.error(`Couldn't download ${target.name}: ${err.message}`);\n }\n }\n}\n\n/** Keep a copy of the subject for offline use, or stop keeping one. */\nexport class PinAction extends Action {\n static deps = ['explorer', 'navigation', 'notifications', 'offline'];\n constructor(node = null, pinned = true) { super(); this.node = node; this.pinned = pinned; }\n async execute(r) {\n const target = subjectOf(r, this.node);\n if (!target?.id) return;\n return this.pinned ? r.offline.pin(target) : r.offline.unpin(target.id);\n }\n}\n\n// --- API keys (admin) ------------------------------------------------------------\n\nclass ApiKeyDraftAction extends Action {\n static deps = ['apiKeys'];\n async execute({ apiKeys }) { this.apply(apiKeys); }\n}\nexport class StartApiKeyDraftAction extends ApiKeyDraftAction {\n apply(s) { s.set({ draft: { name: '', expiresInDays: '', caps: {} }, error: null }); }\n}\nexport class CancelApiKeyDraftAction extends ApiKeyDraftAction {\n apply(s) { s.set({ draft: null }); }\n}\n/** Forget the freshly minted secret. On dismiss, and after a copy. */\nexport class ClearMintedApiKeyAction extends ApiKeyDraftAction {\n apply(s) { if (s.get().minted) s.set({ minted: null }); }\n}\n\n/**\n * Mint the key the draft describes.\n *\n * The days-to-instant conversion is here rather than in the form because the server compares\n * against its own clock: \"30 days from whenever this arrives\" is not what was chosen. The\n * draft is cleared BEFORE the mint so the form cannot be submitted twice while it is in\n * flight.\n */\nexport class MintApiKeyFromDraftAction extends Action {\n static deps = ['apiKeys', 'engine'];\n async execute({ apiKeys, engine }) {\n const draft = apiKeys.get().draft;\n const scopes = draftScopesOf(apiKeys.get());\n if (!draft?.name?.trim() || !scopes) return;\n const days = Number(draft.expiresInDays);\n const expiresAt = draft.expiresInDays !== '' && Number.isFinite(days) && days > 0\n ? Date.now() + days * 86400_000\n : null;\n apiKeys.set({ draft: null });\n return engine.dispatch(new MintApiKeyAction({ name: draft.name.trim(), scopes, expiresAt }));\n }\n}\n\n// --- collections -----------------------------------------------------------------\n\n/**\n * Switch to a collection, or offer the choice when none was named.\n *\n * From the palette or a keybinding there is no pointer to anchor a menu to, so it opens\n * centred near the top.\n */\nexport class SwitchCollectionAction extends Action {\n static deps = ['engine', 'explorer', 'notifications'];\n constructor(collectionId = null) { super(); this.collectionId = collectionId; }\n async execute({ engine, explorer, notifications }) {\n if (this.collectionId) {\n engine.dispatch(new NavigateAction(this.collectionId));\n engine.dispatch(new ShowHomeAction());\n return;\n }\n const items = collectionMenuOf(explorer.get(),\n (id) => new ExecCommandAction('collections.switch', id),\n () => new ExecCommandAction('collections.create'));\n if (!items.length) return notifications.info('This drive has one collection.');\n const w = typeof window === 'undefined' ? 800 : window.innerWidth;\n engine.dispatch(new ShowContextMenuAction(Math.max(12, Math.round(w / 2) - 110), 120, items));\n }\n}\n\n/**\n * Show the details panel — but only when there is a file for it to be about.\n *\n * With nothing open there is nothing to show, and flipping the flag silently was\n * indistinguishable from a broken command.\n */\nexport class ToggleDetailsAction extends Action {\n static deps = ['navigation', 'notifications', 'workbench'];\n async execute({ navigation, notifications, workbench }) {\n if (!navigation.activeTab()) {\n notifications.info('Open a file to see its details and conversation.');\n return;\n }\n workbench.set({ infoPanel: !workbench.get().infoPanel });\n }\n}\n\n// --- plugins ---------------------------------------------------------------------\n\n/** Ask for a .zip and take it through the install review. */\nexport class PickAndInstallPluginAction extends Action {\n static deps = ['notifications', 'plugins', 'social', 'workbench'];\n async execute(r) {\n pickZip((file) => file && beginInstallFromFile(r, file));\n }\n}\n\n/**\n * Run a command a PLUGIN registered.\n *\n * Plugin commands used to be handlers proxying straight over RPC, which left the same hole\n * for them that `ExecCommandAction` closed for the host's own: the engine could see a plugin\n * command being invoked only as whatever state changed afterwards. Now every command in the\n * registry — host or plugin — resolves to actions.\n */\nexport class InvokePluginCommandAction extends Action {\n static deps = ['plugins'];\n constructor(pluginId, name, args = []) {\n super();\n this.pluginId = pluginId;\n this.name = name;\n this.args = args;\n }\n async execute({ plugins }) {\n return plugins.invokeCommand(this.pluginId, this.name, this.args);\n }\n}\n\n/**\n * Forget the open item's conversation — but only if it is still the one named.\n *\n * Dispatched when the last observer of a `sidecarFor` query goes away. Scoped to the node\n * because kill and boot are not ordered against each other: switching from A to B can kill\n * A's query after B's has booted, and an unscoped clear would wipe what B just loaded.\n */\nexport class ClearSidecarAction extends Action {\n static deps = ['social'];\n constructor(nodeId) { super(); this.nodeId = nodeId; }\n async execute({ social }) {\n if (social.state.sidecar?.nodeId === this.nodeId) social.loadSidecar(null);\n }\n}\n\n// --- key rotation ---------------------------------------------------------------\n//\n// Rotation moves a collection onto a fresh key, object by object, bounded by wall-clock\n// time per slice. It runs on the server; what the UI needs is to see where it is, what it\n// would cost before anyone starts, and a way to stop it.\n\n/**\n * Read where the rotation stands, and what one would cost.\n *\n * The estimate comes with the state rather than only before starting: on a metered store\n * this is a real bill, and the number is worth having in front of the button.\n */\nexport class LoadRotationAction extends Action {\n static deps = ['api', 'explorer', 'notifications', 'rotation'];\n async execute({ api, explorer, notifications, rotation }) {\n const collectionId = explorer.get().collectionId;\n if (!collectionId) return;\n rotation.set({ collectionId, loading: true, error: null });\n try {\n // Both together: the estimate is meaningless without knowing whether one is already\n // running, and a screen showing one without the other invites starting a second.\n const [state, estimate] = await Promise.all([\n api.rotationState(collectionId),\n api.rotationEstimate(collectionId).catch(() => null),\n ]);\n rotation.set({ rotation: state?.rotation ?? null, estimate: estimate ?? null, loading: false });\n } catch (err) {\n // A non-admin gets a 403 here and that is the correct answer, not an error worth a\n // toast — the section simply does not render.\n rotation.set({ loading: false, error: err?.message || 'Could not read the rotation state' });\n if (err?.status !== 403) notifications.error?.(err?.message || 'Could not read the rotation state');\n }\n }\n}\n\n/** Start moving this collection onto a new key. */\nexport class BeginRotationAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'rotation'];\n async execute({ api, engine, explorer, notifications, rotation }) {\n const collectionId = explorer.get().collectionId;\n if (!collectionId) return;\n rotation.set({ busy: true });\n try {\n const res = await api.beginRotation(collectionId);\n rotation.set({ rotation: res?.rotation ?? null, busy: false });\n // The new key becomes current immediately, before any file moves — so the\n // fingerprint on screen is already out of date. Reload the collections or it keeps\n // showing the key the collection is moving OFF, which is the one thing this field\n // exists to get right.\n await engine.dispatch(new LoadCollectionsAction());\n notifications.info('Key rotation started. It runs in the background and survives a reload.');\n } catch (err) {\n rotation.set({ busy: false });\n notifications.error(err?.message || 'Could not start the rotation');\n }\n return engine.dispatch(new LoadRotationAction());\n }\n}\n\n/**\n * Stop one.\n *\n * What has already moved stays moved and the new key stays current, so this is untidy\n * rather than destructive — worth saying, because \"cancel\" on a job that has rewritten\n * half a collection sounds like it might undo something.\n */\nexport class CancelRotationAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'rotation'];\n async execute({ api, engine, explorer, notifications, rotation }) {\n const collectionId = explorer.get().collectionId;\n if (!collectionId) return;\n rotation.set({ busy: true });\n try {\n await api.cancelRotation(collectionId);\n notifications.info('Rotation stopped. Files already moved stay on the new key.');\n } catch (err) {\n notifications.error(err?.message || 'Could not stop the rotation');\n }\n rotation.set({ busy: false });\n return engine.dispatch(new LoadRotationAction());\n }\n}\n",
49
+ "// The drive's own state, as named slices.\n//\n// These were classes: an `ExplorerService`, a `SearchClientService`, an `ApiKeysService`,\n// each holding a `state` field, a `cell`, and a `set` that wrote both. Nothing else. A\n// service should cover something complex and offer it through a narrow door — these\n// covered an object.\n//\n// Two things came of that shape and both are gone with it.\n//\n// TWO DOORS. Actions read `.state` and queries read `.cell`, and the two are only equal by\n// habit: most services wrote `this.state = {...}; this.cell.setValue(this.state)`, but not\n// all did, and `settings` still has a cell holding `effective()` and no `state` field at\n// all. A slice has one value and one way to read it.\n//\n// LOGIC IN THE HOLDER. `toggleCap` computed a capability set inside the service while an\n// action stood in front of it forwarding two arguments — and dropped one of them, which is\n// how a minted key came to be rejected by the server. Arithmetic over state belongs to the\n// action that decides to change it; the slice only holds.\n//\n// Each slice is still its OWN provider, so `static deps = ['explorer']` keeps meaning what\n// it says. A single `appState` covering everything would put the whole drive back behind\n// one lease, which is what naming the resources individually was for.\n\nimport { cell } from '../runtime.js';\n\n/**\n * One named piece of the drive's state.\n *\n * `set` merges, because every caller was already merging and doing it here removes the\n * chance of a caller replacing a slice by forgetting to spread it. `replace` exists for\n * the cases that genuinely mean \"all of it\" — a fresh panel stack, an emptied list.\n *\n * @param {object} initial\n */\nexport function slice(initial = {}) {\n const held = cell(initial);\n return {\n /** The cell, for a query to watch. */\n observe: () => held,\n /** The value, for an action about to decide something from it. */\n get: () => held.getValue(),\n /** Merge a patch in. A new object every time — a cell compares with Object.is. */\n set: (patch) => held.setValue({ ...held.getValue(), ...patch }),\n /** Replace it outright, for when a patch would be a lie. */\n replace: (next) => held.setValue(next),\n };\n}\n\n/** Items, selection, the open collection, and the gate. */\nexport const explorerState = (settings) => slice({\n items: [], loading: false, error: null,\n selection: [], sort: settings.get('explorer.sort'), order: settings.get('explorer.sortOrder'),\n // No collection until one is chosen or created. `gate` is 'create' | 'choose' | null —\n // when set, it is the ONLY thing the workbench shows, because every request needs a\n // collection and there is nothing sensible to render without one.\n collectionId: null, collections: [], canCreateCollection: false, gate: null,\n // `stats` is the whole collection; `items` is the page on screen. Keeping both is what\n // lets the UI say \"500 of 3,006\" instead of quietly claiming 500.\n stats: null, usage: null, nextCursor: null, loadingMore: false, trash: null,\n});\n\n/** Query text, results, and the palette's separate file list. */\nexport const searchState = () => slice({\n query: '', mode: 'hybrid', results: [], loading: false, error: null, ran: false,\n paletteFiles: [], paletteQuery: '', paletteLoading: false, paletteError: null,\n});\n\n/**\n * The admin API-key list.\n *\n * `minted` holds the one secret a mint returns. It lives here, in memory, and is dropped\n * the moment the admin dismisses it — the server cannot show it again, so the UI is the\n * only place it ever exists and it must not outlive the tab.\n *\n * `draft` is the mint form. Held in state rather than in the DOM so the section stays a\n * pure function of state, and so a half-filled form survives a re-render caused by\n * something else on the settings screen.\n */\nexport const apiKeysState = () => slice({\n keys: [], loading: false, loaded: false, error: null, minted: null, busy: null, draft: null,\n});\n\n/**\n * What the UI is in the middle of doing — a keybinding mid-capture, text typed into a\n * dialog that has not been submitted, the boxes ticked in a plugin review.\n *\n * None of it is drive state; all of it decides what is on screen, which is what makes it\n * engine state. Keyed by component, so `set` here replaces one key rather than merging a\n * patch — see SetViewStateAction.\n */\nexport const viewState = () => slice({});\n\n/**\n * The shell's transient overlays: the command palette, a modal dialog, the right-click\n * menu, and the plugin popup panel.\n *\n * Four things that are independent of the panel stack and of each other, which is why they\n * were split out of the workbench in the first place. What they are NOT is complex enough\n * to need a service — the class was four setters and a `wrapIndex`, with an action standing\n * in front of each one. The wrapping now lives in the action that moves a cursor, which is\n * where it was needed: MovePaletteAction lost the count argument once already, precisely\n * because deciding and writing were on opposite sides of a forwarding layer.\n */\nexport const overlayState = () => slice({\n palette: null, // { mode: 'commands'|'files', query, index } when open\n dialog: null,\n contextMenu: null,\n pluginPanel: null,\n});\n\n/**\n * The shell itself: which activity is showing, and the launcher's own cursor.\n *\n * The panel stack is NOT here — that is NavigationService, which stays a service because it\n * mirrors the stack into browser history and persists recents, neither of which a state bag\n * can do.\n */\nexport const workbenchState = () => slice({\n activity: 'home', // home (stack) | plugins | settings\n sidebarVisible: true,\n launch: { query: '', index: 0 },\n // Which collection's access list an administrator has opened, if any. Shell state\n // rather than a component field: it decides what is on screen.\n aclFor: null,\n searchModal: false, // the double-shift modal search overlay\n // Phone chrome: which bottom sheet is up, if any ('status' | 'more'). A phone has no room\n // for a permanent status bar or a left rail, so both fold into a sheet pulled up on demand.\n sheet: null,\n infoPanel: false,\n});\n\n/** Wrap a list cursor by `delta` within `[0, count)` — the palette and the launcher share it. */\nexport function wrapIndex(index, delta, count) {\n return (index + delta + count) % count;\n}\n\n/**\n * What the open collection's key is doing.\n *\n * Rotation is long-running and lives on the server, so this is a local view of it kept in\n * step by polling while the settings screen is open — see `RotationQuery`. It is state\n * rather than a fetch-per-render because two things read it (the progress line and whether\n * Start is offered) and they must not disagree.\n */\n/**\n * Who may do what on one collection, while an administrator is looking at it.\n *\n * Keyed by collection like the rotation slice next door, and for the same reason: the\n * answer belongs to a collection rather than to the drive, so switching is a different\n * question rather than a change to notice.\n */\nexport const aclState = () => slice({\n collectionId: null, grants: [], admins: [], loading: false, error: null, busy: false,\n});\n\nexport const rotationState = () => slice({\n collectionId: null, rotation: null, estimate: null, loading: false, error: null, busy: false,\n});\n",
50
+ "// ngin Actions — the workbench's business logic as thin, dispatchable verbs\n// (CQRS-style). Each depends on the `app` provider (platform + reactive\n// services) and performs one user intent: navigate, mutate the tree, upload,\n// search, open a file. Errors surface as notifications; the reactive services\n// they update flow straight back into the UI via `watch`.\n\nimport { Action } from '@3sln/ngin';\nimport { PROMPT } from './viewState.js';\nimport { beginInstallFromUrl } from './pluginInstall.js';\nimport { newId } from '@3sln/trove/core/util.js';\nimport { matchesTagFilters } from './tagQuery.js';\nimport { availableOpeners, rememberedOpenerId, withAssociation, ASSOC_KEY } from './openers.js';\n// A share link and a `trove:` URI are the same address in two spellings — see core/links.js.\nimport { parseShareUrl, troveUri, shareUrl } from '@3sln/trove/core/links.js';\nimport { selectedNodesOf, draftScopesOf, collectionMenuOf } from './services.js';\nimport { beginInstallFromFile } from './pluginInstall.js';\nimport { pickFiles, pickZip, triggerDownload } from '../platform/pickers.js';\nimport { wrapIndex } from './state.js';\n\n/**\n * Load a collection's items. There is nothing to navigate INTO any more — a drive is\n * browsed by search and by following links — so this only ever switches which\n * collection is on screen, or refreshes the current one.\n */\nexport class NavigateAction extends Action {\n static deps = ['api', 'explorer', 'notifications', 'settings'];\n\n constructor(collectionId) {\n super();\n this.collectionId = collectionId;\n }\n async execute(r) {\n const { api, explorer, notifications, settings } = r;\n // No `|| 'default'`. Navigating nowhere in particular used to land on a collection\n // that may not exist and may not be readable; now it is a bug in the caller, said out\n // loud rather than papered over with a guess.\n const collectionId = this.collectionId || explorer.get().collectionId;\n if (!collectionId) {\n explorer.set({ loading: false, gate: 'choose' });\n return;\n }\n const switching = collectionId !== explorer.get().collectionId;\n // A collection's trash belongs to that collection. Carrying it across a switch\n // listed the OLD collection's deleted files under the new one — above an \"Empty\n // trash\" button that purges the new one, so the rows and the button disagreed\n // about which drive they were talking about.\n explorer.set({ loading: true, error: null, collectionId, ...(switching ? { trash: null } : {}) });\n try {\n const sort = settings.get('explorer.sort');\n const order = settings.get('explorer.sortOrder');\n const res = await api.list(collectionId, { sort, order });\n explorer.set({\n items: res.items, loading: false, selection: [], sort, order,\n collectionId: res.collectionId || collectionId,\n // What the COLLECTION holds, as against the page we were handed. Reporting the\n // page length would tell someone with 3,000 files that they have 500.\n stats: res.stats || null,\n usage: res.usage || null,\n nextCursor: res.nextCursor || null,\n });\n // Remember where they were, so the next visit opens there rather than guessing.\n settings.set?.('explorer.lastCollection', collectionId);\n explorer.set({ gate: null });\n // Explorer→context projection (collectionId/hasSelection) lives in bl/index.js\n // so it stays in sync with selection too — nothing to mirror here.\n } catch (err) {\n explorer.set({ loading: false, error: err.message });\n notifications.error(`Couldn't load this collection: ${err.message}`);\n }\n }\n}\n\nexport class LoadCollectionsAction extends Action {\n static deps = ['api', 'explorer'];\n\n async execute(r) {\n try {\n const res = await r.api.collections();\n const collections = res.collections || [];\n r.explorer.set({ collections, canCreateCollection: !!res.canCreate });\n return collections;\n } catch { /* collections disabled */ return []; }\n }\n}\n\n/**\n * Open the drive the user should land on.\n *\n * NOT simply 'default'. On a multi-user deployment plenty of people have no access to\n * the default collection at all, and starting there shows them a permission error\n * instead of their own files — the drive appears broken to the exact users for whom it\n * is working correctly. So: keep the last collection if it is still readable, otherwise\n * take the first one they can actually see.\n */\nexport class OpenInitialCollectionAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'settings'];\n\n async execute(r) {\n // A share link decides where we land, ahead of everything below.\n //\n // Arriving at a link to a specific item and being asked which collection you would\n // like to open would be absurd — the link already said. So this runs before the\n // remembered choice and before the gate, and only falls through to them when the URL\n // is not a share link or cannot be honoured.\n const shared = parseShareUrl(typeof location !== 'undefined' ? location.pathname : '');\n if (shared) return this.#openShared(r, shared);\n\n // Calls the API directly rather than dispatching LoadCollectionsAction: ngin's\n // dispatch() returns an event feed, not the action's value, so awaiting it would\n // hand back an EventTarget and this would fail in a way nothing reports.\n let collections = [];\n let canCreate = false;\n try {\n const res = await r.api.collections();\n collections = res.collections || [];\n canCreate = !!res.canCreate;\n r.explorer.set({ collections, canCreateCollection: canCreate });\n } catch (err) {\n r.explorer.set({ loading: false, error: `Couldn't load your collections: ${err.message}` });\n return;\n }\n\n const ids = collections.map((c) => c.id);\n const remembered = r.settings.get('explorer.lastCollection');\n\n // Nothing exists yet. Two different situations that used to read as one:\n if (!ids.length) {\n r.explorer.set({\n loading: false, items: [], collections: [],\n // Someone who may create one is on a fresh drive and should be asked to. Someone\n // who may not has no grants, and telling them to create a collection they cannot\n // create is worse than telling them nothing.\n gate: canCreate ? 'create' : null,\n error: canCreate\n ? null\n : 'You do not have access to any collections yet. Ask an administrator to grant you one.',\n });\n return;\n }\n\n // There is no fallback to a first or a favourite. Landing somewhere the user did not\n // pick is how the old 'default' behaved, and on a shared drive it opened a collection\n // plenty of people could not read — a permission error presented as their drive.\n // A remembered choice is theirs; anything else is a question.\n if (!remembered || !ids.includes(remembered)) {\n r.explorer.set({ loading: false, items: [], gate: 'choose', error: null });\n return;\n }\n\n r.explorer.set({ gate: null });\n return r.engine.dispatch(new NavigateAction(remembered));\n }\n\n /**\n * Open the collection and item a share link names.\n *\n * Every way this can fail says which way it failed. A link to a collection you cannot\n * read, and a link to an item that has been renamed, are different problems with\n * different answers, and both used to be indistinguishable from an empty drive.\n */\n async #openShared(r, shared) {\n const { api, engine, explorer, notifications } = r;\n // The URL is consumed rather than kept. The app does not otherwise reflect its state\n // in the address bar, so leaving a share path there would go stale the moment the user\n // navigated anywhere — a URL that lies is worse than one that is merely uninformative.\n if (typeof history !== 'undefined') history.replaceState(null, '', '/');\n\n let collections = [];\n try {\n const res = await api.collections();\n collections = res.collections || [];\n explorer.set({ collections, canCreateCollection: !!res.canCreate });\n } catch (err) {\n explorer.set({ loading: false, error: `Couldn’t load your collections: ${err.message}` });\n return;\n }\n\n if (!collections.some((c) => c.id === shared.collection)) {\n // Said plainly rather than shown as an empty drive. The recipient may simply not\n // have been granted this collection, and that is worth knowing rather than guessing.\n explorer.set({\n loading: false, items: [], gate: null,\n error: `This link points at a collection you do not have access to (“${shared.collection}”). Ask whoever shared it to grant you access.`,\n });\n return;\n }\n\n explorer.set({ gate: null });\n await engine.dispatch(new NavigateAction(shared.collection));\n\n let node;\n try {\n // `stat` answers `{ node }` rather than the node — see bl/links.js, which unwraps it\n // the same way. Reading `.id` off the envelope silently looks like \"not found\".\n const res = shared.by === 'id'\n ? await api.stat(shared.value)\n : await api.stat(shared.value, { collection: shared.collection });\n node = res?.node || null;\n } catch {\n node = null;\n }\n if (!node?.id) {\n // A link by name breaks on rename, deliberately and visibly. Saying so beats\n // landing in the right collection with no explanation of what was expected.\n notifications.warn(\n shared.by === 'name'\n ? `“${shared.value}” is not in this collection any more — it may have been renamed or removed.`\n : 'That item no longer exists.',\n );\n return;\n }\n engine.dispatch(new OpenFileAction(node, { reset: true }));\n }\n}\n\n/**\n * Uninstall a plugin.\n *\n * An action rather than a closure threaded through the render tree. Uninstalling is engine\n * work — it is not a render concern in any sense — and it had exactly one call site,\n * reached by carrying a function through fourteen modules of components that had no use\n * for it except to hand it to their children.\n */\n/**\n * Run a command.\n *\n * Commands used to be invoked straight on the command service, which meant every command a\n * user ran from the UI — every menu item, every keybinding, every palette entry — went\n * around the engine rather than through it. Nothing could intercept one, nothing could\n * observe one, and the engine's own view of what the app was doing had a hole in it exactly\n * the shape of everything a person actually did.\n *\n * Running one is an action like any other, so it is one.\n *\n * The command's return value is not available here — `dispatch` answers with an event feed\n * rather than the handler's result. That costs nothing today: every one of the call sites\n * is fire-and-forget, and a command that needs to answer its caller wants a query.\n */\nexport class ExecCommandAction extends Action {\n static deps = ['commands'];\n constructor(id, ...args) {\n super();\n this.id = id;\n this.args = args;\n }\n async execute({ commands }) {\n return commands.execute(this.id, ...this.args);\n }\n}\n\nexport class UninstallPluginAction extends Action {\n static deps = ['notifications', 'plugins'];\n\n constructor(pluginId) {\n super();\n this.pluginId = pluginId;\n }\n async execute(r) {\n try {\n await r.plugins.uninstall(this.pluginId);\n } catch (err) {\n r.notifications.error(`Couldn’t uninstall: ${err.message}`);\n }\n }\n}\n\nexport class CreateCollectionAction extends Action {\n static deps = ['api', 'engine', 'notifications'];\n\n constructor(record) {\n super();\n this.record = record;\n }\n async execute(r) {\n try {\n const res = await r.api.createCollection(this.record);\n r.notifications.success(`Created collection “${res.collection.name}”`);\n await r.engine.dispatch(new LoadCollectionsAction());\n r.engine.dispatch(new NavigateAction(res.collection.id));\n } catch (err) {\n r.notifications.error(`Couldn’t create collection: ${err.message}`);\n }\n }\n}\n\n/** Append the next page of a collection to what's already on screen. */\nexport class LoadMoreAction extends Action {\n static deps = ['api', 'explorer', 'notifications'];\n\n async execute(r) {\n const { api, explorer, notifications } = r;\n const cursor = explorer.get().nextCursor;\n if (!cursor || explorer.get().loadingMore) return;\n explorer.set({ loadingMore: true });\n try {\n const res = await api.list(explorer.get().collectionId, {\n sort: explorer.get().sort, order: explorer.get().order, cursor,\n });\n explorer.set({\n items: [...explorer.get().items, ...res.items],\n nextCursor: res.nextCursor || null,\n loadingMore: false,\n });\n } catch (err) {\n explorer.set({ loadingMore: false });\n notifications.error(`Couldn't load more: ${err.message}`);\n }\n }\n}\n\nexport class RefreshAction extends Action {\n static deps = ['engine', 'explorer'];\n\n async execute(r) {\n return r.engine.dispatch(new NavigateAction(r.explorer.get().collectionId));\n }\n}\n\n/** Show what's been deleted but not destroyed, and act on it. */\nexport class TrashAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications'];\n\n constructor(op = 'list', id = null) {\n super();\n this.op = op;\n this.id = id;\n }\n async execute(r) {\n const { api, explorer, notifications } = r;\n const collection = explorer.get().collectionId;\n // Putting it away is one of the things you can do to the trash. Without this the\n // section, once opened, stayed on screen until a page reload — there was no way\n // back to a plain list of files.\n if (this.op === 'hide') {\n explorer.set({ trash: null });\n return;\n }\n try {\n if (this.op === 'restore') {\n const { node } = await api.restore(this.id);\n notifications.success(`Restored “${node.name}”`);\n } else if (this.op === 'purge') {\n await api.purgeTrash({ id: this.id });\n } else if (this.op === 'empty') {\n const { purged } = await api.purgeTrash({ collection });\n notifications.success(`Deleted ${purged} item${purged === 1 ? '' : 's'} for good`);\n }\n const { items } = await api.trash(collection);\n explorer.set({ trash: items });\n // Restoring puts something back in the drive, so the list on screen is now stale.\n if (this.op !== 'list') await r.engine.dispatch(new NavigateAction(collection));\n } catch (err) {\n notifications.error(`Trash: ${err.message}`);\n }\n }\n}\n\nexport class DeleteAction extends Action {\n // `navigation`, not `workbench`: the panel stack and the recents list are both its, and a\n // deleted file must not survive in either.\n static deps = ['api', 'engine', 'navigation', 'notifications'];\n\n constructor(ids) {\n super();\n this.ids = ids;\n }\n async execute(r) {\n try {\n for (const id of this.ids) await r.api.remove(id);\n r.notifications.info(`Deleted ${this.ids.length} item${this.ids.length > 1 ? 's' : ''}`);\n for (const id of this.ids) r.navigation.forget(id);\n } catch (err) {\n r.notifications.error(`Couldn’t delete: ${err.message}`);\n }\n r.engine.dispatch(new RefreshAction());\n }\n}\n\nexport class RenameAction extends Action {\n // The renamed node has to reach the open panel too, or the title bar keeps the old name\n // until something else refreshes it. That stack belongs to `navigation`.\n static deps = ['api', 'engine', 'navigation', 'notifications'];\n\n constructor(id, newName) {\n super();\n this.id = id;\n this.newName = newName;\n }\n async execute(r) {\n try {\n const node = await r.api.rename(this.id, this.newName);\n r.navigation.updateTabNode(node.node);\n r.engine.dispatch(new RefreshAction());\n } catch (err) {\n r.notifications.error(`Couldn’t rename: ${err.message}`);\n }\n }\n}\n\n\nexport class OpenFileAction extends Action {\n static deps = ['context', 'contributions', 'engine', 'plugins', 'settings'];\n\n /** @param {object} node @param {{reset?:boolean}} [opts] reset → start a fresh stack (modal search) */\n constructor(node, opts = {}) {\n super();\n this.node = node;\n this.opts = opts;\n }\n async execute(r) {\n // Guard against being invoked with no target (e.g. a command fired with an empty\n // selection) — dereferencing a null node would throw an unhandled rejection.\n if (!this.node) return;\n const open = (openerId) => r.engine.dispatch(new OpenInPanelAction(this.node, openerId, { reset: !!this.opts.reset }));\n\n // An explicit opener (e.g. the switch-opener control) wins outright.\n if (this.opts.openerId) return open(this.opts.openerId);\n\n // Only openers available right now (a plugin previewer needing the network while\n // offline is skipped, so we fall back to a built-in one).\n const avail = availableOpeners(r, this.node);\n\n // A remembered choice for this file type, if that opener is still available.\n const remembered = rememberedOpenerId(r, this.node);\n if (remembered && avail.some((o) => o.id === remembered)) return open(remembered);\n\n // Several openers and no saved preference → let the user choose (with an option to\n // remember). One or none → just open the best (or the download fallback).\n if (avail.length > 1) {\n return r.engine.dispatch(new ShowDialogAction({ kind: 'opener-chooser', node: this.node, openers: avail, reset: !!this.opts.reset }));\n }\n open(avail[0]?.id || 'core.fallback');\n }\n}\n\nexport class UploadFilesAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'settings', 'transfers'];\n\n constructor(files, collectionId) {\n super();\n this.files = files;\n this.collectionId = collectionId;\n }\n async execute(r) {\n const collection = this.collectionId || r.explorer.get().collectionId;\n // Uploading with no collection open has nowhere to put the bytes. Refused visibly:\n // the old fallback sent them to whatever 'default' happened to be.\n if (!collection) {\n r.notifications.error('Open a collection before uploading');\n return;\n }\n const concurrency = r.settings.get('uploads.concurrency');\n const uploads = [...this.files].map((file) => this.#one(r, file, collection, concurrency));\n await Promise.allSettled(uploads);\n r.engine.dispatch(new NavigateAction(collection));\n }\n /**\n * One file, once — and again, on the same tray row, if the user asks.\n *\n * `existingTid` is what makes a manual retry a second attempt at the row already on\n * screen rather than a new entry beside it. The retry closes over the File, which is why\n * it can run at all without asking the user to find the file again; it is also why the\n * offer does not survive a reload, since nothing here is persisted.\n */\n async #one(r, file, collection, concurrency, existingTid = null) {\n const { api, notifications, transfers } = r;\n const tid = existingTid || newId('xfer');\n const controller = new AbortController();\n if (existingTid) {\n transfers.restart(tid, controller);\n } else {\n transfers.start(tid, file.name, file.size, controller, {\n retry: () => this.#one(r, file, collection, concurrency, tid),\n });\n }\n let uploadId = null;\n try {\n const node = await api.upload(file, {\n collection, concurrency, signal: controller.signal,\n onStart: (id) => { uploadId = id; },\n onProgress: (p) => transfers.progress(tid, p),\n });\n transfers.finish(tid, 'done');\n // The server disambiguates a same-name collision rather than overwriting — tell\n // the user when the saved name differs from what they dropped.\n if (node?.name && node.name !== file.name) {\n notifications.info(`\"${file.name}\" already existed — saved as \"${node.name}\".`);\n }\n } catch (err) {\n // Release the server-side session so a cancelled/failed multipart upload doesn't\n // leak an open multipart object (best-effort; the server also sweeps stale ones).\n if (uploadId) api.abortUpload(uploadId).catch(() => {});\n if (err.code === 'aborted') transfers.finish(tid, 'cancelled');\n else {\n transfers.finish(tid, 'error', err.message);\n // The toast says what happened; the tray row is where it can be acted on, and\n // pointing at it is the difference between a dead end and an offer.\n notifications.error(`Upload failed: ${file.name} — ${err.message}. Retry it from the transfers tray.`);\n }\n }\n }\n}\n\n/** Drive-wide tag/property filter (`#tag`, `#key:op:value`), optionally narrowed\n * by free text. Falls back to filtering the loaded folder when offline. */\nexport class FilterAction extends Action {\n static deps = ['api', 'explorer', 'offline', 'search'];\n\n constructor(filters, text) {\n super();\n this.filters = filters || [];\n this.text = text || '';\n }\n async execute(r) {\n const { api, search } = r;\n if (!this.filters.length) {\n search.set({ results: [], ran: false, filtered: false });\n return;\n }\n search.set({ query: this.text, loading: true, error: null, filtered: true });\n if (r.offline && !r.offline.state.online) {\n const items = (r.explorer.get().items || []).filter((n) => matchesTagFilters(n, this.filters));\n search.set({ results: items.map((node) => ({ node })), loading: false, ran: true, filtered: true, offline: true });\n return;\n }\n try {\n const res = await api.tagSearch(this.filters, this.text.trim() || undefined, { limit: 100 });\n search.set({ results: (res.items || []).map((node) => ({ node })), loading: false, ran: true, filtered: true, offline: false });\n } catch (err) {\n search.set({ loading: false, error: err.message, ran: true, filtered: true });\n }\n }\n}\n\n/** Command-palette quick-open: a keyword file search whose results live in the search\n * service (state.se.paletteFiles) instead of ad-hoc state hung off the UI. */\nexport class QuickOpenAction extends Action {\n static deps = ['api', 'overlay', 'search'];\n\n constructor(query) {\n super();\n this.query = query;\n }\n async execute(r) {\n const { api, overlay, search } = r;\n // The palette's mode as it is NOW, not as it was when the keystroke's timer was set.\n // This guard used to live in the debounce callback in the component, which had to read\n // it back off the service for exactly this reason — a listener belongs to the render\n // that created it, and the mode can change under a pending timer.\n if (overlay.get().palette?.mode !== 'files') return;\n const q = (this.query || '').trim();\n if (!q) { search.set({ paletteFiles: [], paletteQuery: '', paletteError: null, paletteLoading: false }); return; }\n // Keystrokes outrun the network: a slower request for an earlier query must not\n // land on top of a newer one's results. The query itself is the sequence token —\n // whatever the palette input holds now is the only answer worth showing.\n search.set({ paletteQuery: q, paletteLoading: true, paletteError: null });\n try {\n const res = await api.search(q, { mode: 'keyword', limit: 30 });\n if (search.get().paletteQuery !== q) return; // superseded\n search.set({ paletteFiles: res.results || [], paletteLoading: false });\n } catch (err) {\n if (search.get().paletteQuery !== q) return;\n // A failed search must not look like \"no files matched\" — that reads as a fact\n // about the drive when it's actually a fact about the request.\n search.set({ paletteFiles: [], paletteLoading: false, paletteError: err?.message || 'Search failed' });\n }\n }\n}\n\nexport class SearchAction extends Action {\n static deps = ['api', 'contributions', 'offline', 'search', 'settings'];\n\n constructor(query, mode) {\n super();\n this.query = query;\n this.mode = mode;\n }\n async execute(r) {\n const { api, contributions, search, settings } = r;\n const q = this.query.trim();\n if (!q) {\n search.set({ query: '', results: [], ran: false, error: null, resolved: null });\n return;\n }\n const mode = this.mode || settings.get('search.mode');\n search.set({ query: this.query, mode, loading: true, error: null, resolved: null });\n const offline = r.offline;\n // Offline (or server unreachable) → search the pinned corpus locally.\n if (offline && !offline.state.online) {\n try {\n const results = await offline.searchOffline(q, { limit: 40 });\n search.set({ results, loading: false, ran: true, offline: true, resolved: null });\n } catch (err) {\n search.set({ results: [], loading: false, ran: true, offline: true, error: err.message });\n }\n return;\n }\n try {\n // The server transforms the raw query (parse/LLM) and tells us what it actually\n // searched — surfaced to the user via `resolved` so search is honest.\n //\n // We send the views we can draw with, because the transformer is the only thing in\n // the stack that read the sentence: \"photos from the trip last summer\" asks for a\n // gallery, and by the time the results are back all anyone can do is guess from\n // content types. It can only name a view from this list.\n const views = contributions.ofType('view').map((v) => ({ id: v.id, title: v.title || v.id }));\n const res = await api.query(q, { mode, limit: 40, views });\n search.set({ results: res.results, resolved: res.resolved || null, loading: false, ran: true, offline: false });\n } catch (err) {\n if (offline) {\n const results = await offline.searchOffline(q, { limit: 40 });\n search.set({ results, loading: false, ran: true, offline: true, error: results.length ? null : err.message });\n } else {\n search.set({ loading: false, error: err.message, ran: true });\n }\n }\n }\n}\n\n// --- API keys (admin) ----------------------------------------------------------\n\n/**\n * Load the key list.\n *\n * Silent on failure rather than noisy: this fires when Settings opens, and a non-admin\n * opening Settings gets a 403 that is the correct answer, not an error worth a toast.\n * The section simply does not render.\n */\nexport class LoadApiKeysAction extends Action {\n static deps = ['api', 'apiKeys'];\n\n async execute(r) {\n r.apiKeys.set({ loading: true, error: null });\n try {\n const res = await r.api.apiKeys();\n r.apiKeys.set({ keys: res.keys || [], loading: false, loaded: true, error: null });\n } catch (err) {\n r.apiKeys.set({ loading: false, loaded: true, error: err?.message || 'Could not load API keys' });\n }\n }\n}\n\n/**\n * Mint a key and hold the secret for display.\n *\n * The secret is the whole point of the round trip and cannot be fetched again, so it is\n * put into state before anything else can fail. A refresh of the list afterwards is a\n * convenience; losing the secret because the refresh threw would not be.\n */\nexport class MintApiKeyAction extends Action {\n static deps = ['api', 'apiKeys', 'notifications'];\n\n constructor(spec) {\n super();\n this.spec = spec;\n }\n async execute(r) {\n r.apiKeys.set({ busy: 'mint', error: null });\n try {\n const { key, secret } = await r.api.mintApiKey(this.spec);\n r.apiKeys.set({ minted: { key, secret }, busy: null });\n const res = await r.api.apiKeys().catch(() => null);\n if (res) r.apiKeys.set({ keys: res.keys || [] });\n return key;\n } catch (err) {\n r.apiKeys.set({ busy: null, error: err?.message || 'Could not create the key' });\n r.notifications.error(err?.message || 'Could not create the key');\n return null;\n }\n }\n}\n\nexport class RevokeApiKeyAction extends Action {\n static deps = ['api', 'apiKeys', 'notifications'];\n\n constructor(id) {\n super();\n this.id = id;\n }\n async execute(r) {\n r.apiKeys.set({ busy: this.id, error: null });\n try {\n await r.api.revokeApiKey(this.id);\n const res = await r.api.apiKeys().catch(() => null);\n r.apiKeys.set({ busy: null, ...(res ? { keys: res.keys || [] } : {}) });\n r.notifications.success('Key revoked');\n } catch (err) {\n r.apiKeys.set({ busy: null });\n r.notifications.error(err?.message || 'Could not revoke the key');\n }\n }\n}\n\n\n/**\n * Rebind a keyboard shortcut, or clear it with `key: null`.\n *\n * Carries the binding ID rather than the binding, because a view emits descriptions and an\n * action carries an id — the component that dispatches this has never held the binding\n * object, only a row describing it.\n */\nexport class RebindKeyAction extends Action {\n static deps = ['keybindings'];\n constructor(bindingId, key) {\n super();\n this.bindingId = bindingId;\n this.key = key;\n }\n\n async execute({ keybindings: kb }) {\n // `rebind` resolves a binding object or a command id, not a binding id, so look the\n // row back up. Resolving here rather than widening the service keeps the id the only\n // thing that crosses the boundary.\n const binding = kb.resolved().find((b) => b.bindingId === this.bindingId);\n if (!binding) return;\n kb.rebind(binding, this.key);\n }\n}\n\n/**\n * Copy text to the clipboard, and say so.\n *\n * Four components had their own version of this, each written slightly differently — two\n * with `.then/.catch`, one with `await` in a `try`, one optional-chaining the clipboard and\n * one not. All four ended the same way, and the ending is the part that matters: a copy that\n * FAILS must still put the text where it can be selected by hand, or the user is left with a\n * button that did nothing and no way to get at what it was for. That is what the sticky\n * fallback is, and it is exactly the sort of detail that rots when it lives in four places.\n *\n * Clipboard access is denied outside a user gesture and in an insecure context, so the\n * failure path is ordinary rather than exceptional.\n */\nexport class CopyTextAction extends Action {\n static deps = ['notifications'];\n /**\n * @param {string} text\n * @param {string} [label] what the toast says on success\n */\n constructor(text, label = 'Copied') {\n super();\n this.text = text;\n this.label = label;\n }\n\n async execute({ notifications: notes }) {\n try {\n await navigator.clipboard.writeText(this.text);\n notes.success(this.label);\n } catch {\n notes.info(this.text, { sticky: true });\n }\n }\n}\n\n/** Say something to the user. `kind` is one of info, success, warn, error. */\nexport class NotifyAction extends Action {\n static deps = ['notifications'];\n constructor(kind, message, opts) {\n super();\n this.kind = kind;\n this.message = message;\n this.opts = opts;\n }\n\n async execute({ notifications: notes }) {\n (notes[this.kind] ?? notes.info).call(notes, this.message, this.opts);\n }\n}\n\n/** Dismiss one notification, by id. */\nexport class DismissNotificationAction extends Action {\n static deps = ['notifications'];\n constructor(id) {\n super();\n this.id = id;\n }\n\n async execute({ notifications }) {\n notifications.dismiss(this.id);\n }\n}\n\n// --- the shell's own surface ----------------------------------------------------\n//\n// Opening and closing the workbench's overlays. These were direct calls on\n// `platform.workbench`, which meant the engine could not see a person close a dialog or\n// move through the palette — the same hole `ExecCommandAction` closed for commands.\n//\n// One class per operation rather than a single ShellAction carrying a method name. The\n// point of routing these through the engine is that the feed says what happened; a\n// discriminated blob would make every one of them read as \"ShellAction\" and give back\n// exactly the observability this is for.\n//\n// NOT here yet, deliberately: `showDialog` and `showContextMenu`. Both take callbacks —\n// a dialog carries `onConfirm`, a menu carries an item's `run` — so converting them\n// mechanically would post a closure through the engine and call it an action. They want\n// the outcome to be an ACTION TO DISPATCH rather than a function to call, which is a real\n// change at each call site rather than a swap. See docs/tickets/009.\n\nclass ShellAction extends Action {\n static deps = ['workbench'];\n async execute({ workbench }) {\n this.apply(workbench);\n }\n}\n\n/**\n * The overlays: palette, dialog, context menu, plugin panel.\n *\n * Their own lease. Closing a dialog used to go through the workbench facade and therefore\n * leased the entire shell — the panel stack, the launcher cursor and the sheet included —\n * to set one field to null.\n */\nclass OverlayAction extends Action {\n static deps = ['overlay'];\n async execute({ overlay }) {\n this.apply(overlay);\n }\n}\n\n/** The panel stack. Still a service: it mirrors into browser history and persists recents. */\nclass NavAction extends Action {\n static deps = ['navigation'];\n async execute({ navigation }) {\n this.apply(navigation);\n }\n}\n\nexport class CloseDialogAction extends OverlayAction {\n apply(o) { o.set({ dialog: null }); }\n}\n\n/** Merge a patch into the open dialog — a reactive dialog, like the opener chooser. */\nexport class UpdateDialogAction extends OverlayAction {\n constructor(patch) { super(); this.patch = patch; }\n apply(o) {\n const dialog = o.get().dialog;\n if (dialog) o.set({ dialog: { ...dialog, ...this.patch } });\n }\n}\n\nexport class CloseContextMenuAction extends OverlayAction {\n apply(o) { o.set({ contextMenu: null }); }\n}\n\nexport class ClosePaletteAction extends OverlayAction {\n apply(o) { o.set({ palette: null }); }\n}\n\nexport class SetPaletteQueryAction extends OverlayAction {\n constructor(query) { super(); this.query = query; }\n apply(o) {\n const palette = o.get().palette;\n // Back to the top: the previous highlight belonged to the previous result set.\n if (palette) o.set({ palette: { ...palette, query: this.query, index: 0 } });\n }\n}\n\nexport class SetPaletteIndexAction extends OverlayAction {\n constructor(index) { super(); this.index = index; }\n apply(o) {\n const palette = o.get().palette;\n if (palette) o.set({ palette: { ...palette, index: this.index } });\n }\n}\n\n/**\n * Move the palette's highlight, wrapping at either end.\n *\n * The wrapping is HERE now. It used to be in the service with this action forwarding two\n * arguments to it — and it forwarded one, so the service could not tell where the end was,\n * returned early, and the arrow keys did nothing at all. Deciding and writing in one place\n * is what removes the chance.\n */\nexport class MovePaletteAction extends OverlayAction {\n constructor(delta, count) { super(); this.delta = delta; this.count = count; }\n apply(o) {\n const palette = o.get().palette;\n if (!palette || !this.count) return;\n o.set({ palette: { ...palette, index: wrapIndex(palette.index, this.delta, this.count) } });\n }\n}\n\n/** The double-shift overlay: a search that starts empty and resets the stack on a pick. */\nexport class OpenSearchModalAction extends ShellAction {\n apply(wb) { wb.set({ searchModal: true, launch: { query: '', index: 0 } }); }\n}\n\nexport class CloseSearchModalAction extends ShellAction {\n apply(wb) { wb.set({ searchModal: false }); }\n}\n\n/** Open (or close) one collection's access list on the administration screen. */\nexport class ShowCollectionAccessAction extends ShellAction {\n constructor(collectionId) { super(); this.collectionId = collectionId; }\n apply(wb) { wb.set({ aclFor: wb.get().aclFor === this.collectionId ? null : this.collectionId }); }\n}\n\nexport class SetLaunchQueryAction extends ShellAction {\n constructor(query) { super(); this.query = query; }\n // Back to the top, for the same reason the palette does: the old highlight belonged to\n // the old results.\n apply(wb) { wb.set({ launch: { query: this.query, index: 0 } }); }\n}\n\nexport class SetLaunchIndexAction extends ShellAction {\n constructor(index) { super(); this.index = index; }\n apply(wb) { wb.set({ launch: { ...wb.get().launch, index: this.index } }); }\n}\n\n/** Raise, swap, or drop the phone bottom sheet. Tapping the open one closes it. */\nexport class OpenSheetAction extends ShellAction {\n constructor(which) { super(); this.which = which; }\n apply(wb) { wb.set({ sheet: wb.get().sheet === this.which ? null : this.which }); }\n}\n\nexport class CloseSheetAction extends ShellAction {\n apply(wb) { wb.set({ sheet: null }); }\n}\n\nexport class ToggleInfoPanelAction extends ShellAction {\n constructor(open) { super(); this.open = open; }\n apply(wb) { wb.set({ infoPanel: this.open ?? !wb.get().infoPanel }); }\n}\n\nexport class OpenPluginPanelAction extends OverlayAction {\n constructor(pluginId) { super(); this.pluginId = pluginId; }\n apply(o) { o.set({ pluginPanel: this.pluginId }); }\n}\n\nexport class ClosePluginPanelAction extends OverlayAction {\n apply(o) { o.set({ pluginPanel: null }); }\n}\n\n/**\n * Open a node in a panel, with a chosen opener.\n *\n * Three things at once, and they belong together: the panel goes on the stack, the shell\n * switches to the drive, and the modal search — if that is where the pick came from —\n * closes behind it. The workbench service used to do the coordinating because the stack\n * lives in one place and the activity in another; an action is a better home for \"these\n * happen together\" than a facade over both.\n */\nexport class OpenInPanelAction extends Action {\n static deps = ['navigation', 'workbench'];\n constructor(node, openerId, opts = {}) {\n super();\n this.node = node;\n this.openerId = openerId;\n this.opts = opts;\n }\n async execute({ navigation, workbench }) {\n workbench.set({ activity: 'home', searchModal: false });\n navigation.openFile(this.node, this.openerId, this.opts);\n }\n}\n\n// --- the drive's services --------------------------------------------------------\n//\n// Cancelling a transfer, retrying an issue, tagging a file. These were direct method calls\n// on the service, so the engine saw an upload being cancelled only as the state change that\n// followed, with nothing to say a person had asked for it.\n//\n// Named per operation for the same reason the shell actions are: the feed is the point.\n\nclass ActivityAction extends Action {\n static deps = ['activity'];\n async execute(r) { this.apply(r.activity); }\n}\nexport class ToggleActivityPanelAction extends ActivityAction {\n constructor(which) { super(); this.which = which; }\n apply(s) { s.togglePanel(this.which); }\n}\nexport class CancelTaskAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.cancel(this.id); }\n}\nexport class DismissTaskAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.dismiss(this.id); }\n}\nexport class RetryIssueAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.retryIssue(this.id); }\n}\nexport class DismissIssueAction extends ActivityAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.dismissIssue(this.id); }\n}\n\nclass TransfersAction extends Action {\n static deps = ['transfers'];\n async execute(r) { this.apply(r.transfers); }\n}\nexport class CancelTransferAction extends TransfersAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.cancel(this.id); }\n}\nexport class RetryTransferAction extends TransfersAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.retry(this.id); }\n}\nexport class DismissTransferAction extends TransfersAction {\n constructor(id) { super(); this.id = id; }\n apply(s) { s.dismiss(this.id); }\n}\nexport class ClearFinishedTransfersAction extends TransfersAction {\n apply(s) { s.clearDone(); }\n}\n\nclass SocialAction extends Action {\n static deps = ['social'];\n // Awaited: several of these are network calls, and a dispatch feed that settles before\n // the work does reports success for something still in flight.\n async execute(r) { return this.apply(r.social); }\n}\nexport class ToggleInboxAction extends SocialAction {\n constructor(open) { super(); this.open = open; }\n apply(s) { s.toggleInbox(this.open); }\n}\n\n/** Ask the browser for push permission and register. */\nexport class EnablePushAction extends SocialAction {\n apply(s) { return s.enablePush(); }\n}\n\n/** Post a comment on the open item. */\nexport class PostCommentAction extends SocialAction {\n constructor(body) { super(); this.body = body; }\n apply(s) { return s.comment(this.body); }\n}\n\nexport class DeleteCommentAction extends SocialAction {\n constructor(commentId) { super(); this.commentId = commentId; }\n apply(s) { return s.deleteComment(this.commentId); }\n}\n\nexport class ReactToCommentAction extends SocialAction {\n constructor(commentId, emoji) { super(); this.commentId = commentId; this.emoji = emoji; }\n apply(s) { return s.react(this.commentId, this.emoji); }\n}\n\n/** Aim the comment box at a comment, or clear it with `null`. */\nexport class SetReplyToAction extends SocialAction {\n constructor(target) { super(); this.target = target; }\n apply(s) { s.setReplyTo(this.target); }\n}\nexport class AddTagAction extends SocialAction {\n constructor(name, value) { super(); this.name = name; this.value = value; }\n apply(s) { s.addTag(this.name, this.value); }\n}\nexport class RemoveTagAction extends SocialAction {\n constructor(name) { super(); this.name = name; }\n apply(s) { s.removeTag(this.name); }\n}\nexport class LoadSidecarAction extends SocialAction {\n constructor(nodeId) { super(); this.nodeId = nodeId; }\n apply(s) { s.loadSidecar(this.nodeId); }\n}\n\nclass ApiKeysAction extends Action {\n static deps = ['apiKeys'];\n async execute(r) { this.apply(r.apiKeys); }\n}\n\n/** Change one field of the mint form. Does nothing when there is no form open. */\nexport class PatchApiKeyDraftAction extends ApiKeysAction {\n constructor(patch) { super(); this.patch = patch; }\n apply(s) {\n const draft = s.get().draft;\n if (draft) s.set({ draft: { ...draft, ...this.patch } });\n }\n}\n\n/**\n * Toggle one capability on one collection in the draft.\n *\n * Per COLLECTION and capability: a key is scoped, so a capability without the collection\n * it applies to is meaningless. This used to be arithmetic inside the service with an\n * action in front of it forwarding two arguments — and it forwarded one, so the collection\n * id arrived as the capability and the server refused every mint. Deciding and writing are\n * one step now, with nothing in between to drop.\n *\n * `admin` is not treated specially. It is offered as itself and the server expands it;\n * pre-ticking read/write/delete alongside it would suggest they are separable afterwards,\n * and they are not.\n */\nexport class ToggleApiKeyCapAction extends ApiKeysAction {\n constructor(collectionId, capability) { super(); this.collectionId = collectionId; this.capability = capability; }\n apply(s) {\n const draft = s.get().draft;\n if (!draft) return;\n const caps = { ...draft.caps };\n const held = new Set(caps[this.collectionId] || []);\n if (held.has(this.capability)) held.delete(this.capability);\n else held.add(this.capability);\n if (held.size) caps[this.collectionId] = [...held];\n else delete caps[this.collectionId];\n s.set({ draft: { ...draft, caps } });\n }\n}\n\n/**\n * Select items in the explorer.\n *\n * `opts` is `{ additive, nodes }`, matching the service — NOT a boolean. It was written as\n * `additive` first, which worked at the one call site only because the options object passed\n * through positionally unchanged. `new SelectItemsAction(ids, true)` would have destructured\n * a boolean into `{additive = false, nodes = null}` and quietly not been additive at all.\n *\n * `nodes` matters when the selection cannot be resolved from the loaded page: the launcher's\n * rows come from search, which is scoped across collections, so the node has to travel with\n * the id.\n */\nexport class SelectItemsAction extends Action {\n static deps = ['explorer'];\n\n constructor(ids, opts = {}) { super(); this.ids = ids; this.opts = opts; }\n\n async execute({ explorer }) {\n const { additive = false, nodes = null } = this.opts;\n const current = explorer.get().selection;\n const next = additive ? Array.from(new Set([...current, ...this.ids])) : this.ids;\n // Selecting what is already selected must not emit. The launcher syncs the highlighted\n // row into here on every mouseenter, and a state push per mouse move would re-render\n // the list under the pointer. The rule lives with the mutation now rather than inside\n // the resource, so the resource only holds and only `set` writes.\n const same = next.length === current.length && next.every((id, i) => id === current[i]);\n if (same) return;\n explorer.set({ selection: next, selectionNodes: nodes && !additive ? nodes : null });\n }\n}\n\n/**\n * Move the launcher's highlight and sync the selection to whatever it landed on.\n *\n * ONE action because the two halves are not separable. Moving computes a new index — with\n * wrapping, so it is not `index + delta` — and the selection has to follow the row that\n * index now names. Written as two steps in the component it read the index back out of the\n * store immediately after writing it, which only worked because a direct method call is\n * synchronous. Dispatching is not: the highlight would move and the selection would sync to\n * the previously highlighted row, one keystroke behind, forever, without anything throwing.\n *\n * Here the read-back is inside the action, where it IS sequenced. `nodes` is the results in\n * display order — the component knows the running order, the store only knows the index.\n */\nexport class MoveLaunchAction extends Action {\n static deps = ['explorer', 'workbench'];\n constructor(delta, nodes) { super(); this.delta = delta; this.nodes = nodes; }\n async execute({ workbench, explorer }) {\n const count = this.nodes.length;\n if (!count) return;\n const index = wrapIndex(workbench.get().launch.index, this.delta, count);\n workbench.set({ launch: { ...workbench.get().launch, index } });\n selectNode(explorer, this.nodes[index]);\n }\n}\n\n/** Highlight a launcher row by position and select it — the pointer/Enter counterpart. */\nexport class SelectLaunchAction extends Action {\n static deps = ['explorer', 'workbench'];\n constructor(index, node) { super(); this.index = index; this.node = node; }\n async execute({ workbench, explorer }) {\n workbench.set({ launch: { ...workbench.get().launch, index: this.index } });\n selectNode(explorer, this.node);\n }\n}\n\n/** Select exactly one node, or nothing. Carries the node itself — see SelectItemsAction. */\nfunction selectNode(explorer, node) {\n const ids = node?.id ? [node.id] : [];\n const current = explorer.get().selection;\n if (ids.length === current.length && ids.every((id, i) => id === current[i])) return;\n explorer.set({ selection: ids, selectionNodes: node ? [node] : null });\n}\n\n/**\n * Write one slice of view state — a draft, a capture, a set of ticked boxes.\n *\n * Components used to call the store directly, and two of them did it DURING their own\n * render to install a default. The default is derived now (see `draftFor`), so this only\n * ever runs because a person did something.\n */\nexport class SetViewStateAction extends Action {\n static deps = ['viewState'];\n constructor(key, value) { super(); this.key = key; this.value = value; }\n async execute({ viewState }) { viewState.set({ [this.key]: this.value }); }\n}\n\n\n/**\n * Show a context menu at a point.\n *\n * Only possible now that items carry `actions` rather than `run` closures — this used to be\n * a direct call precisely because dispatching a menu would have meant putting functions on\n * the feed. See ui/activate.js.\n */\nexport class ShowContextMenuAction extends OverlayAction {\n constructor(x, y, items) { super(); this.x = x; this.y = y; this.items = items; }\n apply(o) { o.set({ contextMenu: { x: this.x, y: this.y, items: this.items } }); }\n}\n\n/**\n * Show a dialog.\n *\n * The spec is data. A confirm carries `confirmActions`; so does a prompt, whose actions read\n * what was typed out of view state rather than being handed it — see PromptAction. Nothing\n * in a dialog spec is callable, which matters because the spec lives in workbench state.\n */\nexport class ShowDialogAction extends OverlayAction {\n constructor(dialog) { super(); this.dialog = dialog; }\n apply(o) { o.set({ dialog: this.dialog }); }\n}\n\n/** Change one setting. */\nexport class SetSettingAction extends Action {\n static deps = ['settings'];\n constructor(key, value) { super(); this.key = key; this.value = value; }\n async execute({ settings }) { settings.set(this.key, this.value); }\n}\n\n/**\n * Remember which opener a file type should use, or forget it with a null openerId.\n *\n * Not `SetSettingAction` with a pre-merged map, because building that map means reading the\n * current one — and a component that reads settings to compute what to write is the same\n * stale-base race as the drafts had (see PatchDraftAction). The merge happens here, against\n * what is stored.\n */\nexport class RememberOpenerAction extends Action {\n static deps = ['settings'];\n constructor(typeKey, openerId) { super(); this.typeKey = typeKey; this.openerId = openerId; }\n async execute({ settings }) {\n if (!this.typeKey) return;\n settings.set(ASSOC_KEY, withAssociation(settings.get(ASSOC_KEY), this.typeKey, this.openerId));\n }\n}\n\n/** Back through the panel stack. */\nexport class NavigateBackAction extends NavAction {\n apply(nav) { nav.back(); }\n}\n\n/** Close the viewer stack and return to the drive. */\nexport class ShowHomeAction extends Action {\n static deps = ['navigation', 'workbench'];\n async execute({ navigation, workbench }) {\n workbench.set({ activity: 'home', searchModal: false });\n navigation.reset();\n }\n}\n\n/** Reload one plugin — re-read its manifest and restart its worker. */\nexport class RefreshPluginAction extends Action {\n static deps = ['plugins'];\n constructor(pluginId) { super(); this.pluginId = pluginId; }\n async execute({ plugins }) { return plugins.refresh(this.pluginId); }\n}\n\n/**\n * Store a plugin secret.\n *\n * Not a setting: secrets go somewhere settings do not, which is why this is its own action\n * rather than SetSettingAction with a different key.\n */\nexport class SetPluginSecretAction extends Action {\n static deps = ['plugins'];\n constructor(pluginId, key, value) { super(); this.pluginId = pluginId; this.key = key; this.value = value; }\n async execute({ plugins }) { return plugins.setSecret(this.pluginId, this.key, this.value); }\n}\n\n/**\n * Open whatever a notification points at.\n *\n * The stat, the open, the panel and the failure message are one action because they are one\n * intent. Spread across a component they were a `.then` chain that had to know the API\n * answers `{ node }` rather than a node, and had to remember that a notification can\n * outlive its target — the item may be deleted, or live somewhere the reader has since\n * lost access to. Either way the click must say so rather than do nothing.\n */\nexport class OpenNotificationTargetAction extends Action {\n static deps = ['api', 'context', 'contributions', 'engine', 'explorer', 'notifications', 'plugins', 'settings', 'workbench'];\n\n constructor(nodeId) { super(); this.nodeId = nodeId; }\n\n async execute(r) {\n let node;\n try {\n ({ node } = await r.api.stat(this.nodeId));\n } catch (err) {\n r.notifications.warn(err?.status === 403 || err?.code === 'forbidden'\n ? 'You no longer have access to that item.'\n : 'That item no longer exists.');\n return;\n }\n await new OpenFileAction(node).execute(r);\n r.workbench.set({ infoPanel: true });\n }\n}\n\n/**\n * The base for anything a prompt dialog submits.\n *\n * The typed value is engine state (see viewState.js), so the action READS it rather than\n * being handed it by a callback. Subclasses implement `withValue`; the dialog closes first,\n * because every one of these used to do that by hand and two forgot to do it consistently.\n */\nexport class PromptAction extends Action {\n static deps = ['overlay', 'viewState'];\n\n async execute(r) {\n const held = r.viewState.get()[PROMPT];\n const value = (held?.value ?? '').trim();\n r.overlay.set({ dialog: null });\n if (value) await this.withValue(value, r);\n }\n}\n\n/** Rename the node this prompt was opened for. */\nexport class RenamePromptAction extends PromptAction {\n static deps = ['engine', 'overlay', 'viewState'];\n constructor(node) { super(); this.node = node; }\n async withValue(name, { engine }) {\n if (name !== this.node.name) await engine.dispatch(new RenameAction(this.node.id, name));\n }\n}\n\n/** Fetch and review a plugin package from the URL that was typed. */\nexport class InstallPluginFromUrlPromptAction extends PromptAction {\n static deps = ['notifications', 'overlay', 'plugins', 'social', 'viewState', 'workbench'];\n async withValue(url, r) { await beginInstallFromUrl(r, url); }\n}\n\n/**\n * Create the collection the dialog's form describes.\n *\n * The form is already engine state — the dialog puts it in viewState as it is typed — so\n * this reads it rather than being handed a record through a callback. The form-to-record\n * shaping stays in the dialog, which is the thing that knows which fields the chosen\n * driver declared.\n */\nexport class CreateCollectionFromFormAction extends Action {\n static deps = ['engine', 'overlay'];\n constructor(record) { super(); this.record = record; }\n async execute({ engine, overlay }) {\n overlay.set({ dialog: null });\n if (this.record) await engine.dispatch(new CreateCollectionAction(this.record));\n }\n}\n\n/**\n * Change one field of a draft, merging against what is stored RATHER than against what the\n * render saw.\n *\n * Every field handler used to build `{ ...form, [k]: value }` from the `form` its own render\n * closed over. Two changes to different fields before the next render therefore both merged\n * onto the same stale base, and the second silently dropped the first — type a name, switch\n * the storage driver in the same frame, and the name is gone with the Create button quietly\n * disabled. Renders are coalesced by rAF, so \"in the same frame\" is not rare, and a\n * backgrounded tab makes it certain.\n *\n * Reading current state inside the action removes the window entirely.\n *\n * @param {string} key which draft\n * @param {object} ref the dialog instance it belongs to\n * @param {object} patch the field(s) being changed\n * @param {object} fallback the draft's default, for when the held one is another dialog's\n */\nexport class PatchDraftAction extends Action {\n static deps = ['viewState'];\n\n constructor(key, ref, patch, fallback = {}) {\n super();\n this.key = key;\n this.ref = ref;\n this.patch = patch;\n this.fallback = fallback;\n }\n\n async execute({ viewState }) {\n const held = viewState.get()[this.key];\n const base = held && held.ref === this.ref ? held.form : this.fallback;\n viewState.set({ [this.key]: { ref: this.ref, form: { ...base, ...this.patch } } });\n }\n}\n\n// --- what commands used to do inline ---------------------------------------------\n//\n// bl/commands.js registered 40 commands and 36 of them were CLOSURES over `app` — the whole\n// world — doing effects outside the engine. That mattered more than the line count suggests,\n// because commands are the entry point for everything a person actually does: the palette,\n// every keybinding, every menu item, every row button. `ExecCommandAction` routed the intent\n// in and the handler walked straight back out, so the engine saw a command being run and\n// then nothing of what it did.\n//\n// A command is a DESCRIPTION now — `{ id, title, actions(...args) }`, where `actions` is a\n// pure factory. Everything below is where those handler bodies went.\n\n/**\n * The file a command acts on: the one it was handed, else the selection, else what is open.\n *\n * Three commands resolved this identically and a fourth got it slightly wrong. \"Nothing is\n * selected\" is a real answer and has to be said out loud — returning silently is\n * indistinguishable from a broken command.\n */\nfunction subjectOf({ explorer, navigation, notifications }, node = null) {\n const found = node || selectedNodesOf(explorer.get())[0] || navigation.activeTab()?.node;\n if (!found) notifications.info('Pick a file first — highlight one in the list, or open it.');\n return found;\n}\n\n/** Open the command palette, or quick-open, depending on the mode. */\nexport class OpenPaletteAction extends OverlayAction {\n constructor(mode = 'commands', query = '') { super(); this.mode = mode; this.query = query; }\n apply(o) { o.set({ palette: { mode: this.mode, query: this.query, index: 0 } }); }\n}\n\n/** Switch the main area between the drive, plugins and settings. */\nexport class SetActivityAction extends ShellAction {\n constructor(activity) { super(); this.activity = activity; }\n apply(wb) { wb.set({ activity: this.activity, sidebarVisible: true }); }\n}\n\n/**\n * Close the topmost transient thing — what Escape does.\n *\n * The ORDER is the whole content of this action, and it spans four resources: the menu\n * over the dialog, the dialog over the phone sheet, the sheet over the modal search, and\n * only when none of those is up does Escape start popping the panel stack. Getting it wrong\n * is not a crash — it is Escape closing the wrong thing, which is why it is written out\n * once, here, rather than distributed over whoever owns each overlay.\n */\nexport class CloseOverlaysAction extends Action {\n static deps = ['activity', 'navigation', 'overlay', 'workbench'];\n async execute({ activity, navigation, overlay, workbench }) {\n const o = overlay.get();\n const wb = workbench.get();\n if (o.contextMenu) return overlay.set({ contextMenu: null });\n if (o.dialog) return overlay.set({ dialog: null });\n if (wb.sheet) return workbench.set({ sheet: null });\n if (wb.searchModal) return workbench.set({ searchModal: false });\n if (o.palette) return overlay.set({ palette: null });\n if (o.pluginPanel) return overlay.set({ pluginPanel: null });\n // The activity panel floats over the page and carries a close button like everything\n // else in this ladder, and was the one such surface Escape did not reach. Below the\n // plugin panel deliberately: it opens BY ITSELF when a storage check finishes, and\n // Escape should not close what you opened on purpose in order to dismiss what\n // appeared on its own.\n if (activity.state?.open) return activity.togglePanel(false);\n // Nothing floating: Escape pops the top viewer panel instead.\n if (navigation.state.stack.length > 1) navigation.back();\n }\n}\n\n/**\n * Speak to search.\n *\n * On a TV this is mostly NOT about recognising anything: a remote's mic dictates into\n * whatever text field the platform keyboard is attached to, and is swallowed by the system\n * assistant when there isn't one. So the first job is to put the search field on screen and\n * focused, which is a feature on every TV whether or not the browser can transcribe. Where\n * it can — on-device only, see platform/voice.js — it also starts listening and types what\n * it hears.\n */\nexport class VoiceSearchAction extends Action {\n static deps = ['engine', 'voice'];\n async execute({ engine, voice }) {\n await voice.run({\n onText: (text, { final }) => {\n if (!text) return;\n engine.dispatch(new SetLaunchQueryAction(text));\n // Interim results keep the box in step with the speaker; only the settled\n // transcript is worth a round trip to the server.\n if (final) engine.dispatch(new SearchAction(text));\n },\n });\n }\n}\n\n/** Reindex the whole drive. Reports as a task rather than blocking — it takes minutes. */\nexport class RebuildIndexAction extends Action {\n static deps = ['activity'];\n async execute({ activity }) { return activity.rebuildIndex().catch(() => {}); }\n}\n\n/**\n * Pick up files added, replaced or removed in the bucket by something other than Trove.\n *\n * No collection means no scan. This used to fall back to one called 'default', which on a\n * drive that has none scanned a collection that does not exist and reported the failure as\n * a scan error.\n */\nexport class ScanCollectionAction extends Action {\n static deps = ['activity', 'explorer', 'notifications'];\n async execute({ activity, explorer, notifications }) {\n const id = explorer.get().collectionId;\n if (!id) return notifications.info('Open a collection first — a scan is per collection.');\n return activity.scanCollection(id).catch(() => {});\n }\n}\n\n/**\n * Whether the backing stores are reachable from a browser at all.\n *\n * Separate from a scan: a scan asks what the store HOLDS, this asks whether it can be READ\n * from here — the failure that makes every file open to a spinner.\n */\nexport class CheckStorageAction extends Action {\n static deps = ['activity'];\n async execute({ activity }) { return activity.checkStorage().catch(() => {}); }\n}\n\n/** Ask for files, then upload them into the open collection. */\nexport class PickAndUploadAction extends Action {\n static deps = ['engine', 'explorer'];\n async execute({ engine, explorer }) {\n const collection = explorer.get().collectionId;\n pickFiles((files) => files.length && engine.dispatch(new UploadFilesAction(files, collection)));\n }\n}\n\n/**\n * Copy a link to the subject, in one of its two spellings.\n *\n * `trove:` is what one document writes to link another; it means nothing to a browser. A\n * share link is a URL you can paste into a message. Both end at CopyTextAction, which is\n * the thing that knows a failed copy must still leave the text somewhere selectable.\n */\nexport class CopyLinkAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications'];\n /** @param {'trove'|'share'} kind */\n constructor(kind = 'trove', node = null) { super(); this.kind = kind; this.node = node; }\n async execute(r) {\n const node = subjectOf(r, this.node);\n if (!node) return;\n return r.engine.dispatch(this.kind === 'share'\n ? new CopyTextAction(shareUrl(node, location.origin),\n 'Link copied — anyone with access to this collection can open it')\n : new CopyTextAction(troveUri(node), `Copied ${troveUri(node)}`));\n }\n}\n\n/** Ask for a new name for the subject. The prompt's value is read by RenamePromptAction. */\nexport class RenameSubjectAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications'];\n constructor(node = null) { super(); this.node = node; }\n async execute(r) {\n const node = subjectOf(r, this.node);\n if (!node) return;\n r.engine.dispatch(new ShowDialogAction({\n kind: 'prompt', title: 'Rename', label: 'New name', value: node.name, confirmLabel: 'Rename',\n confirmActions: [new RenamePromptAction(node)],\n }));\n }\n}\n\n/**\n * Move the selection to the trash, confirming first unless that was turned off.\n *\n * Deleting the file you have OPEN is the obvious intent when nothing is selected, so it\n * counts as the subject. The confirmation says what actually happens: telling someone a\n * file will be \"permanently deleted\" when it goes to the trash trains them to fear a safe\n * action, and the reverse — promising recovery that doesn't exist — is worse.\n */\nexport class DeleteSubjectAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications', 'settings'];\n async execute(r) {\n const nodes = selectedNodesOf(r.explorer.get());\n const open = nodes.length ? null : r.navigation.activeTab()?.node;\n if (open) nodes.push(open);\n if (!nodes.length) {\n r.notifications.info('Pick a file first — highlight one in the list, or open it.');\n return;\n }\n const deleteThem = new DeleteAction(nodes.map((n) => n.id));\n if (!r.settings.get('explorer.confirmDelete')) return r.engine.dispatch(deleteThem);\n r.engine.dispatch(new ShowDialogAction({\n kind: 'confirm',\n title: `Move ${nodes.length} item${nodes.length > 1 ? 's' : ''} to the trash?`,\n body: nodes.length === 1\n ? `\"${nodes[0].name}\" leaves the drive but is kept, and can be restored from the trash.`\n : 'They leave the drive but are kept, and can be restored from the trash.',\n confirmLabel: 'Move to trash',\n confirmActions: [deleteThem],\n }));\n }\n}\n\n/** Show the trash, and get back to the drive to see it. */\nexport class ShowTrashAction extends Action {\n static deps = ['engine'];\n async execute({ engine }) {\n engine.dispatch(new TrashAction('list'));\n engine.dispatch(new ShowHomeAction());\n }\n}\n\n/** Open the subject in a viewer. */\nexport class OpenSubjectAction extends Action {\n static deps = ['engine', 'explorer', 'navigation', 'notifications'];\n constructor(node = null) { super(); this.node = node; }\n async execute(r) {\n const node = subjectOf(r, this.node);\n if (node) return r.engine.dispatch(new OpenFileAction(node));\n }\n}\n\n/** Save the subject to the machine. */\nexport class DownloadSubjectAction extends Action {\n static deps = ['api', 'explorer', 'navigation', 'notifications'];\n constructor(node = null) { super(); this.node = node; }\n async execute(r) {\n const target = subjectOf(r, this.node);\n if (!target?.id) return;\n try {\n const { url, revoke } = await r.api.download(target.id, target.name);\n triggerDownload(url, target.name);\n // A blob URL pins the bytes until it is released; the click has already happened by\n // the time this runs.\n if (revoke) setTimeout(() => URL.revokeObjectURL(url), 60_000);\n } catch (err) {\n r.notifications.error(`Couldn't download ${target.name}: ${err.message}`);\n }\n }\n}\n\n/** Keep a copy of the subject for offline use, or stop keeping one. */\nexport class PinAction extends Action {\n static deps = ['explorer', 'navigation', 'notifications', 'offline'];\n constructor(node = null, pinned = true) { super(); this.node = node; this.pinned = pinned; }\n async execute(r) {\n const target = subjectOf(r, this.node);\n if (!target?.id) return;\n return this.pinned ? r.offline.pin(target) : r.offline.unpin(target.id);\n }\n}\n\n// --- API keys (admin) ------------------------------------------------------------\n\nclass ApiKeyDraftAction extends Action {\n static deps = ['apiKeys'];\n async execute({ apiKeys }) { this.apply(apiKeys); }\n}\nexport class StartApiKeyDraftAction extends ApiKeyDraftAction {\n apply(s) { s.set({ draft: { name: '', expiresInDays: '', caps: {} }, error: null }); }\n}\nexport class CancelApiKeyDraftAction extends ApiKeyDraftAction {\n apply(s) { s.set({ draft: null }); }\n}\n/** Forget the freshly minted secret. On dismiss, and after a copy. */\nexport class ClearMintedApiKeyAction extends ApiKeyDraftAction {\n apply(s) { if (s.get().minted) s.set({ minted: null }); }\n}\n\n/**\n * Mint the key the draft describes.\n *\n * The days-to-instant conversion is here rather than in the form because the server compares\n * against its own clock: \"30 days from whenever this arrives\" is not what was chosen. The\n * draft is cleared BEFORE the mint so the form cannot be submitted twice while it is in\n * flight.\n */\nexport class MintApiKeyFromDraftAction extends Action {\n static deps = ['apiKeys', 'engine'];\n async execute({ apiKeys, engine }) {\n const draft = apiKeys.get().draft;\n const scopes = draftScopesOf(apiKeys.get());\n if (!draft?.name?.trim() || !scopes) return;\n const days = Number(draft.expiresInDays);\n const expiresAt = draft.expiresInDays !== '' && Number.isFinite(days) && days > 0\n ? Date.now() + days * 86400_000\n : null;\n apiKeys.set({ draft: null });\n return engine.dispatch(new MintApiKeyAction({ name: draft.name.trim(), scopes, expiresAt }));\n }\n}\n\n// --- collections -----------------------------------------------------------------\n\n/**\n * Switch to a collection, or offer the choice when none was named.\n *\n * From the palette or a keybinding there is no pointer to anchor a menu to, so it opens\n * centred near the top.\n */\nexport class SwitchCollectionAction extends Action {\n static deps = ['engine', 'explorer', 'notifications'];\n constructor(collectionId = null) { super(); this.collectionId = collectionId; }\n async execute({ engine, explorer, notifications }) {\n if (this.collectionId) {\n engine.dispatch(new NavigateAction(this.collectionId));\n engine.dispatch(new ShowHomeAction());\n return;\n }\n const items = collectionMenuOf(explorer.get(),\n (id) => new ExecCommandAction('collections.switch', id),\n () => new ExecCommandAction('collections.create'));\n if (!items.length) return notifications.info('This drive has one collection.');\n const w = typeof window === 'undefined' ? 800 : window.innerWidth;\n engine.dispatch(new ShowContextMenuAction(Math.max(12, Math.round(w / 2) - 110), 120, items));\n }\n}\n\n/**\n * Show the details panel — but only when there is a file for it to be about.\n *\n * With nothing open there is nothing to show, and flipping the flag silently was\n * indistinguishable from a broken command.\n */\nexport class ToggleDetailsAction extends Action {\n static deps = ['navigation', 'notifications', 'workbench'];\n async execute({ navigation, notifications, workbench }) {\n if (!navigation.activeTab()) {\n notifications.info('Open a file to see its details and conversation.');\n return;\n }\n workbench.set({ infoPanel: !workbench.get().infoPanel });\n }\n}\n\n// --- plugins ---------------------------------------------------------------------\n\n/** Ask for a .zip and take it through the install review. */\nexport class PickAndInstallPluginAction extends Action {\n static deps = ['notifications', 'plugins', 'social', 'workbench'];\n async execute(r) {\n pickZip((file) => file && beginInstallFromFile(r, file));\n }\n}\n\n/**\n * Run a command a PLUGIN registered.\n *\n * Plugin commands used to be handlers proxying straight over RPC, which left the same hole\n * for them that `ExecCommandAction` closed for the host's own: the engine could see a plugin\n * command being invoked only as whatever state changed afterwards. Now every command in the\n * registry — host or plugin — resolves to actions.\n */\nexport class InvokePluginCommandAction extends Action {\n static deps = ['plugins'];\n constructor(pluginId, name, args = []) {\n super();\n this.pluginId = pluginId;\n this.name = name;\n this.args = args;\n }\n async execute({ plugins }) {\n return plugins.invokeCommand(this.pluginId, this.name, this.args);\n }\n}\n\n/**\n * Forget the open item's conversation — but only if it is still the one named.\n *\n * Dispatched when the last observer of a `sidecarFor` query goes away. Scoped to the node\n * because kill and boot are not ordered against each other: switching from A to B can kill\n * A's query after B's has booted, and an unscoped clear would wipe what B just loaded.\n */\nexport class ClearSidecarAction extends Action {\n static deps = ['social'];\n constructor(nodeId) { super(); this.nodeId = nodeId; }\n async execute({ social }) {\n if (social.state.sidecar?.nodeId === this.nodeId) social.loadSidecar(null);\n }\n}\n\n// --- key rotation ---------------------------------------------------------------\n//\n// Rotation moves a collection onto a fresh key, object by object, bounded by wall-clock\n// time per slice. It runs on the server; what the UI needs is to see where it is, what it\n// would cost before anyone starts, and a way to stop it.\n\n/**\n * Read where the rotation stands, and what one would cost.\n *\n * The estimate comes with the state rather than only before starting: on a metered store\n * this is a real bill, and the number is worth having in front of the button.\n */\n/**\n * Read one collection's access list.\n *\n * Takes the collection rather than reading the open one, because this is asked from a\n * screen that lists every collection — the rotation equivalent next door can assume the\n * open one and this cannot.\n */\nexport class LoadGrantsAction extends Action {\n static deps = ['acl', 'api', 'notifications'];\n constructor(collectionId) { super(); this.collectionId = collectionId; }\n async execute({ acl, api, notifications }) {\n const collectionId = this.collectionId;\n if (!collectionId) return;\n acl.set({ collectionId, loading: true, error: null });\n try {\n const res = await api.collectionGrants(collectionId);\n acl.set({ grants: res?.grants || [], admins: res?.admins || [], loading: false });\n } catch (err) {\n // A non-admin gets a 403, and that is the correct answer rather than an error worth\n // a toast — the section simply does not offer itself. Same reasoning as the rotation\n // loader immediately below.\n acl.set({ loading: false, error: err?.message || 'Could not read the access list' });\n if (err?.status !== 403) notifications.error?.(err?.message || 'Could not read the access list');\n }\n }\n}\n\n/**\n * Grant or revoke, which are one operation.\n *\n * An empty capability list removes the grant — that is `setGrant`'s existing shape, and\n * keeping it means revoking cannot drift from granting. Reloads afterwards rather than\n * patching the slice, because the server expands capabilities (admin implies the rest) and\n * a client that guessed the expansion would eventually disagree with it.\n */\nexport class SetGrantAction extends Action {\n static deps = ['acl', 'api', 'engine', 'notifications'];\n constructor(collectionId, grant) { super(); this.collectionId = collectionId; this.grant = grant; }\n async execute({ acl, api, engine, notifications }) {\n acl.set({ busy: true });\n try {\n await api.setCollectionGrant(this.collectionId, this.grant);\n const who = this.grant.type === 'anyone' ? 'everyone' : this.grant.subject;\n notifications.success?.(this.grant.capabilities?.length\n ? `Access for ${who} updated`\n : `Access for ${who} removed`);\n } catch (err) {\n notifications.error?.(err?.message || 'Could not change access');\n } finally {\n acl.set({ busy: false });\n await engine.dispatch(new LoadGrantsAction(this.collectionId)).next(['complete', 'error', 'abort']);\n }\n }\n}\n\nexport class LoadRotationAction extends Action {\n static deps = ['api', 'explorer', 'notifications', 'rotation'];\n async execute({ api, explorer, notifications, rotation }) {\n const collectionId = explorer.get().collectionId;\n if (!collectionId) return;\n rotation.set({ collectionId, loading: true, error: null });\n try {\n // Both together: the estimate is meaningless without knowing whether one is already\n // running, and a screen showing one without the other invites starting a second.\n const [state, estimate] = await Promise.all([\n api.rotationState(collectionId),\n api.rotationEstimate(collectionId).catch(() => null),\n ]);\n rotation.set({ rotation: state?.rotation ?? null, estimate: estimate ?? null, loading: false });\n } catch (err) {\n // A non-admin gets a 403 here and that is the correct answer, not an error worth a\n // toast — the section simply does not render.\n rotation.set({ loading: false, error: err?.message || 'Could not read the rotation state' });\n if (err?.status !== 403) notifications.error?.(err?.message || 'Could not read the rotation state');\n }\n }\n}\n\n/** Start moving this collection onto a new key. */\nexport class BeginRotationAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'rotation'];\n async execute({ api, engine, explorer, notifications, rotation }) {\n const collectionId = explorer.get().collectionId;\n if (!collectionId) return;\n rotation.set({ busy: true });\n try {\n const res = await api.beginRotation(collectionId);\n rotation.set({ rotation: res?.rotation ?? null, busy: false });\n // The new key becomes current immediately, before any file moves — so the\n // fingerprint on screen is already out of date. Reload the collections or it keeps\n // showing the key the collection is moving OFF, which is the one thing this field\n // exists to get right.\n await engine.dispatch(new LoadCollectionsAction());\n notifications.info('Key rotation started. It runs in the background and survives a reload.');\n } catch (err) {\n rotation.set({ busy: false });\n notifications.error(err?.message || 'Could not start the rotation');\n }\n return engine.dispatch(new LoadRotationAction());\n }\n}\n\n/**\n * Stop one.\n *\n * What has already moved stays moved and the new key stays current, so this is untidy\n * rather than destructive — worth saying, because \"cancel\" on a job that has rewritten\n * half a collection sounds like it might undo something.\n */\nexport class CancelRotationAction extends Action {\n static deps = ['api', 'engine', 'explorer', 'notifications', 'rotation'];\n async execute({ api, engine, explorer, notifications, rotation }) {\n const collectionId = explorer.get().collectionId;\n if (!collectionId) return;\n rotation.set({ busy: true });\n try {\n await api.cancelRotation(collectionId);\n notifications.info('Rotation stopped. Files already moved stay on the new key.');\n } catch (err) {\n notifications.error(err?.message || 'Could not stop the rotation');\n }\n rotation.set({ busy: false });\n return engine.dispatch(new LoadRotationAction());\n }\n}\n",
51
51
  "// A minimal, symmetric JSON-RPC-ish channel over a MessagePort. Used on both\n// ends of the host↔plugin boundary: the host keeps one port, the sandboxed\n// iframe gets the other (transferred cross-origin at init), so neither side ever\n// touches the other's globals — everything is messages. Requests get a reply;\n// events are fire-and-forget. Handlers may be async and may throw; the error is\n// serialized (code/message) back to the caller as a rejected promise.\n\nexport class RpcChannel {\n /**\n * @param {MessagePort|Window} port a MessagePort (preferred) or window\n * @param {object} [opts]\n * @param {(method:string, params:any) => any} [opts.onCall] handler for incoming requests\n * @param {(method:string, params:any) => void} [opts.onEvent] handler for incoming events\n * @param {string} [opts.targetOrigin] required when port is a Window\n */\n constructor(port, opts = {}) {\n this.port = port;\n this.onCall = opts.onCall;\n this.onEvent = opts.onEvent;\n this.targetOrigin = opts.targetOrigin;\n this.seq = 0;\n this.pending = new Map();\n this._listener = (e) => this._receive(e.data, e);\n if (typeof port.addEventListener === 'function') port.addEventListener('message', this._listener);\n else port.onmessage = this._listener;\n port.start?.();\n }\n\n _post(msg, transfer) {\n if (this.targetOrigin) this.port.postMessage(msg, this.targetOrigin, transfer);\n else this.port.postMessage(msg, transfer);\n }\n\n /** Call a remote method, awaiting its result. */\n call(method, params, { timeout = 30000, transfer } = {}) {\n const id = ++this.seq;\n return new Promise((resolve, reject) => {\n const timer = timeout\n ? setTimeout(() => {\n this.pending.delete(id);\n reject(new Error(`RPC timeout: ${method}`));\n }, timeout)\n : null;\n this.pending.set(id, { resolve, reject, timer });\n this._post({ __trove: 'req', id, method, params }, transfer);\n });\n }\n\n /** Fire an event; no reply expected. */\n emit(method, params, transfer) {\n this._post({ __trove: 'event', method, params }, transfer);\n }\n\n async _receive(msg, event) {\n if (!msg || msg.__trove == null) return;\n if (msg.__trove === 'res') {\n const p = this.pending.get(msg.id);\n if (!p) return;\n this.pending.delete(msg.id);\n if (p.timer) clearTimeout(p.timer);\n if (msg.error) p.reject(Object.assign(new Error(msg.error.message), msg.error));\n else p.resolve(msg.result);\n return;\n }\n if (msg.__trove === 'event') {\n try {\n await this.onEvent?.(msg.method, msg.params, event);\n } catch (err) {\n console.error('rpc event handler error', err);\n }\n return;\n }\n if (msg.__trove === 'req') {\n let result, error;\n try {\n result = await this.onCall?.(msg.method, msg.params, event);\n } catch (err) {\n error = { message: err?.message || String(err), code: err?.code || 'error' };\n }\n this._post({ __trove: 'res', id: msg.id, result, error });\n }\n }\n\n dispose() {\n if (typeof this.port.removeEventListener === 'function') {\n this.port.removeEventListener('message', this._listener);\n }\n for (const p of this.pending.values()) {\n if (p.timer) clearTimeout(p.timer);\n p.reject(new Error('RPC channel disposed'));\n }\n this.pending.clear();\n this.port.close?.();\n }\n}\n",
52
52
  "// The host ↔ plugin wire protocol, in one place.\n//\n// Envelope (over the transferred MessagePort):\n// { __trove: 'req', id, method, params } plugin → host, expects a 'res'\n// { __trove: 'res', id, result | error } host → plugin\n// { __trove: 'event', method, params } either direction, fire-and-forget\n// Bootstrap (over postMessage, before the port exists):\n// { __trove: 'ready', protocolVersion } plugin → host\n// { __trove: 'init', manifest, capabilities, storage, online, role, protocolVersion }\n// { __trove: 'boot-error', error } plugin → host (module load failed)\n//\n// NOTE: browser.js is injected into the sandboxed frame as a TEXT blob (it must be a\n// self-contained IIFE with no imports), so it cannot import this module. It declares\n// its own `SDK_PROTOCOL_VERSION` constant instead, and protocol.test.js asserts the\n// two stay equal — a drift guard in place of an import.\n\n/** Bumped MAJOR when a change breaks older plugins; MINOR for additive changes. */\nexport const PROTOCOL_VERSION = '1.0';\n\nexport function majorOf(version) {\n return String(version || '').split('.')[0] || '0';\n}\n\n/** Whether a plugin built against `version` can talk to this host. */\nexport function isCompatible(version) {\n // An SDK older than versioning itself reports nothing — accept it (it predates the\n // field and the protocol hasn't broken yet); a differing MAJOR is a hard mismatch.\n if (!version) return true;\n return majorOf(version) === majorOf(PROTOCOL_VERSION);\n}\n\n// There are no `contribute:*` methods: contributions are DECLARED IN THE MANIFEST and\n// registered by the host before the plugin boots. A plugin can only ever drive what it\n// declared (`ui:status`, `context:setRegister`), never add to it.\n\n/** Canonical host methods a plugin may call. Grouped by namespace. */\nexport const METHODS = {\n activated: 'activated',\n // Note: 'command:execute' travels BOTH ways on the same channel — the host calls it\n // to run a plugin-contributed command, and a plugin calls it (needs that command in\n // its `commands` allowlist) to run someone else's. The direction disambiguates.\n command: { execute: 'command:execute' },\n resources: { list: 'resources:list', read: 'resources:read' },\n files: { read: 'files:read', list: 'files:list', stat: 'files:stat', downloadUrl: 'files:downloadUrl', index: 'files:index' },\n net: { fetch: 'net:fetch' },\n storage: { sql: 'storage:sql' },\n settings: { get: 'settings:get', set: 'settings:set', getSecret: 'settings:getSecret' },\n ui: { showPanel: 'ui:showPanel', status: 'ui:status' },\n context: { setRegister: 'context:setRegister' },\n media: { metadata: 'media:metadata', playbackState: 'media:playbackState', position: 'media:position', action: 'media:action', clear: 'media:clear' },\n dock: { enable: 'dock:enable', disable: 'dock:disable', close: 'dock:close' },\n};\n\n/** Events a plugin may emit to the host (fire-and-forget, no reply). */\nexport const EVENTS = {\n manifest: 'manifest',\n uiToast: 'ui:toast',\n uiBadge: 'ui:badge',\n};\n",
53
53
  "/* es-module-lexer 1.7.0 */\nexport var ImportType;!function(A){A[A.Static=1]=\"Static\",A[A.Dynamic=2]=\"Dynamic\",A[A.ImportMeta=3]=\"ImportMeta\",A[A.StaticSourcePhase=4]=\"StaticSourcePhase\",A[A.DynamicSourcePhase=5]=\"DynamicSourcePhase\",A[A.StaticDeferPhase=6]=\"StaticDeferPhase\",A[A.DynamicDeferPhase=7]=\"DynamicDeferPhase\"}(ImportType||(ImportType={}));const A=1===new Uint8Array(new Uint16Array([1]).buffer)[0];export function parse(E,g=\"@\"){if(!C)return init.then((()=>parse(E)));const I=E.length+1,w=(C.__heap_base.value||C.__heap_base)+4*I-C.memory.buffer.byteLength;w>0&&C.memory.grow(Math.ceil(w/65536));const K=C.sa(I-1);if((A?B:Q)(E,new Uint16Array(C.memory.buffer,K,I)),!C.parse())throw Object.assign(new Error(`Parse error ${g}:${E.slice(0,C.e()).split(\"\\n\").length}:${C.e()-E.lastIndexOf(\"\\n\",C.e()-1)}`),{idx:C.e()});const o=[],D=[];for(;C.ri();){const A=C.is(),Q=C.ie(),B=C.it(),g=C.ai(),I=C.id(),w=C.ss(),K=C.se();let D;C.ip()&&(D=k(E.slice(-1===I?A-1:A,-1===I?Q+1:Q))),o.push({n:D,t:B,s:A,e:Q,ss:w,se:K,d:I,a:g})}for(;C.re();){const A=C.es(),Q=C.ee(),B=C.els(),g=C.ele(),I=E.slice(A,Q),w=I[0],K=B<0?void 0:E.slice(B,g),o=K?K[0]:\"\";D.push({s:A,e:Q,ls:B,le:g,n:'\"'===w||\"'\"===w?k(I):I,ln:'\"'===o||\"'\"===o?k(K):K})}function k(A){try{return(0,eval)(A)}catch(A){}}return[o,D,!!C.f(),!!C.ms()]}function Q(A,Q){const B=A.length;let C=0;for(;C<B;){const B=A.charCodeAt(C);Q[C++]=(255&B)<<8|B>>>8}}function B(A,Q){const B=A.length;let C=0;for(;C<B;)Q[C]=A.charCodeAt(C++)}let C;const E=()=>{return A=\"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GzYCHAtBAEEAKAKwCkECajYCsAoCQAJAAkACQEEAECkiAUHhAEYNACABQfcARg0BQQAoArAKIQEMAgtBACgCsAoiAUECakHACEEKEC8NAUEGIQIMAgtBACgCsAoiAS8BAkHpAEcNACABLwEEQfQARw0AQQQhAiABLwEGQegARg0BC0EAIAFBfmo2ArAKDwtBACABIAJBAXRqNgKwCgJAQQEQKUH7AEYNAEEAIAE2ArAKDwtBACgCsAoiACECA0BBACACQQJqNgKwCgJAAkACQEEBECkiAkEiRg0AIAJBJ0cNAUEnEBpBAEEAKAKwCkECajYCsApBARApIQIMAgtBIhAaQQBBACgCsApBAmo2ArAKQQEQKSECDAELIAIQLCECCwJAIAJBOkYNAEEAIAE2ArAKDwtBAEEAKAKwCkECajYCsAoCQEEBECkiAkEiRg0AIAJBJ0YNAEEAIAE2ArAKDwsgAhAaQQBBACgCsApBAmo2ArAKAkACQEEBECkiAkEsRg0AIAJB/QBGDQFBACABNgKwCg8LQQBBACgCsApBAmo2ArAKQQEQKUH9AEYNAEEAKAKwCiECDAELC0EAKALwCSIBIAA2AhAgAUEAKAKwCkECajYCDAttAQJ/AkACQANAAkAgAEH//wNxIgFBd2oiAkEXSw0AQQEgAnRBn4CABHENAgsgAUGgAUYNASAAIQIgARAoDQJBACECQQBBACgCsAoiAEECajYCsAogAC8BAiIADQAMAgsLIAAhAgsgAkH//wNxC6sBAQR/AkACQEEAKAKwCiICLwEAIgNB4QBGDQAgASEEIAAhBQwBC0EAIAJBBGo2ArAKQQEQKSECQQAoArAKIQUCQAJAIAJBIkYNACACQSdGDQAgAhAsGkEAKAKwCiEEDAELIAIQGkEAQQAoArAKQQJqIgQ2ArAKC0EBECkhA0EAKAKwCiECCwJAIAIgBUYNACAFIARBACAAIAAgAUYiAhtBACABIAIbEAILIAMLcgEEf0EAKAKwCiEAQQAoArQKIQECQAJAA0AgAEECaiECIAAgAU8NAQJAAkAgAi8BACIDQaR/ag4CAQQACyACIQAgA0F2ag4EAgEBAgELIABBBGohAAwACwtBACACNgKwChAlQQAPC0EAIAI2ArAKQd0AC0kBA39BACEDAkAgAkUNAAJAA0AgAC0AACIEIAEtAAAiBUcNASABQQFqIQEgAEEBaiEAIAJBf2oiAg0ADAILCyAEIAVrIQMLIAMLC+wBAgBBgAgLzgEAAHgAcABvAHIAdABtAHAAbwByAHQAZgBvAHIAZQB0AGEAbwB1AHIAYwBlAHIAbwBtAHUAbgBjAHQAaQBvAG4AcwBzAGUAcgB0AHYAbwB5AGkAZQBkAGUAbABlAGMAbwBuAHQAaQBuAGkAbgBzAHQAYQBuAHQAeQBiAHIAZQBhAHIAZQB0AHUAcgBkAGUAYgB1AGcAZwBlAGEAdwBhAGkAdABoAHIAdwBoAGkAbABlAGkAZgBjAGEAdABjAGYAaQBuAGEAbABsAGUAbABzAABB0AkLEAEAAAACAAAAAAQAAEA5AAA=\",\"undefined\"!=typeof Buffer?Buffer.from(A,\"base64\"):Uint8Array.from(atob(A),(A=>A.charCodeAt(0)));var A};export const init=WebAssembly.compile(E()).then(WebAssembly.instantiate).then((({exports:A})=>{C=A}));export const initSync=()=>{if(C)return;const A=new WebAssembly.Module(E());C=new WebAssembly.Instance(A).exports};",
@@ -72,7 +72,7 @@
72
72
  "// OfflineService — a limited but real offline mode.\n// • Pin (\"make available offline\"): file bytes go into the SW's trove-files\n// cache (so every opener reads them with no network), and — for text — the\n// content is chunked, embedded with the same LocalHash model the server can\n// use, and stored in IndexedDB for offline search.\n// • Offline search: lexical (names/tags/content) blended with local\n// semantic (cosine over the cached chunk vectors) — the same hybrid shape as\n// the server, just over what you took offline.\n// • Sidecar op queue: while offline, comment/tag mutations are queued and\n// replayed on reconnect. Because the sidecar is a CRDT, replay merges cleanly\n// with whatever changed server-side meanwhile.\n// Reactive: the workbench watches `online`, the pinned set, and the queue depth.\n\nimport { cell } from '../runtime.js';\nimport { LocalHashEmbedding } from '@3sln/trove/core/search/embeddings.js';\n// Chunking and tokenizing must MATCH the server's — offline results are compared\n// against embeddings the server produced, so a local variant would quietly skew them.\nimport { chunkText } from '@3sln/trove/core/indexers/registry.js';\nimport { tokenize } from '@3sln/trove/core/search/keywordStore.js';\nimport { isTexty } from './fileType.js';\n\nconst DB = 'trove-offline';\nconst FILES_CACHE = 'trove-files-v1';\nconst embed = new LocalHashEmbedding({ dimensions: 256 });\n\nexport class OfflineService {\n constructor(platform) {\n this.platform = platform;\n this.api = platform.api;\n this.db = null;\n this.state = { online: navigator.onLine, pins: [], queued: 0, syncing: false };\n this.cell = cell(this.state);\n }\n observe() {\n return this.cell;\n }\n #set(patch) {\n this.state = { ...this.state, ...patch };\n this.cell.setValue(this.state);\n }\n\n async init() {\n this.db = await openDb();\n await this.#refreshPins();\n await this.#refreshQueue();\n window.addEventListener('online', () => this.#onOnline());\n window.addEventListener('offline', () => this.#onOffline());\n // `navigator.onLine` only reflects that an interface is up — on a captive portal or\n // dead uplink it's `true` while the server is unreachable, which would leave us\n // falsely \"online\" with every request silently failing. Confirm real reachability.\n if (this.state.online && !(await this.api.reachable())) this.#set({ online: false });\n // Tell the plugin host our initial connectivity so it can probe plugins.\n this.platform.plugins?.setOnline?.(this.state.online);\n if (this.state.online) this.flushQueue();\n }\n\n async #onOnline() {\n // The interface came up, but verify the server is actually reachable before\n // declaring online — a captive portal fires 'online' with no real connectivity.\n if (!(await this.api.reachable())) { this.#set({ online: false }); await this.platform.plugins?.setOnline?.(false); return; }\n this.#set({ online: true });\n // Plugins re-announce what works now that we're back online.\n await this.platform.plugins?.setOnline?.(true);\n await this.flushQueue();\n }\n async #onOffline() {\n this.#set({ online: false });\n // Plugins re-announce; network-only features become unavailable.\n await this.platform.plugins?.setOnline?.(false);\n }\n\n // --- pinning ---------------------------------------------------------------\n\n async pin(node) {\n if (!node?.id) return;\n try {\n // Two URLs, deliberately. The KEY is the plain route URL — stable, so `unpin` and\n // the service worker's cache-first lookup both find what `pin` stored. The FETCH\n // may need a minted one, because `cache.add` sends no Authorization header and\n // would 401 on a token-authenticated deployment. Keying on the minted URL instead\n // would have worked exactly once: it carries a signature, so the next session's\n // `unpin` looks for a string that was never there and the bytes are never reclaimed.\n if ('caches' in window) {\n const cache = await caches.open(FILES_CACHE);\n const urls = this.platform.mediaUrls;\n const key = urls.cacheKey(node.id);\n const { url } = await urls.url(node.id, { op: 'download' });\n const res = await fetch(url);\n if (!res.ok) throw new Error(`Couldn't fetch the file (${res.status})`);\n await cache.put(new Request(key), res);\n }\n // Index text content for offline search.\n let chunks = [];\n let text = '';\n if (isTexty(node)) {\n try {\n text = await this.api.readText(node.id);\n const parts = chunkText(text, 1000, 150);\n const vectors = await embed.embed(parts.length ? parts : [node.name]);\n chunks = (parts.length ? parts : [node.name]).map((t, i) => ({ text: t, vector: vectors[i] }));\n } catch { /* keep name-only */ }\n }\n const nameVec = (await embed.embed([node.name]))[0];\n await idbPut(this.db, 'pins', node.id, { node, text, chunks, nameVec, pinnedAt: Date.now() });\n await this.#refreshPins();\n this.platform.notifications.success(`“${node.name}” is available offline`);\n } catch (err) {\n this.platform.notifications.error(`Couldn't make available offline: ${err.message}`);\n }\n }\n\n async unpin(id) {\n const pin = this.state.pins.find((p) => p.id === id);\n if (pin && 'caches' in window) {\n const cache = await caches.open(FILES_CACHE);\n // The same stable key `pin` stored under — never a freshly minted URL.\n await cache.delete(this.platform.mediaUrls.cacheKey(id), { ignoreVary: true }).catch(() => {});\n }\n await idbDelete(this.db, 'pins', id);\n await this.#refreshPins();\n }\n\n async #refreshPins() {\n const all = await idbAll(this.db, 'pins');\n this.#set({ pins: all.map((r) => ({ id: r.node.id, name: r.node.name, contentType: r.node.contentType, collectionId: r.node.collectionId, pinnedAt: r.pinnedAt })) });\n }\n\n // --- offline search --------------------------------------------------------\n\n async searchOffline(query, { limit = 40 } = {}) {\n const rows = await idbAll(this.db, 'pins');\n if (!rows.length) return [];\n const qTokens = tokenize(query);\n const qv = (await embed.embed([query]))[0];\n const results = [];\n for (const r of rows) {\n const hay = tokenize(`${r.node.name} ${r.text || ''}`);\n const lex = lexicalScore(qTokens, new Set(hay));\n let dense = cosine(qv, r.nameVec);\n for (const c of r.chunks || []) dense = Math.max(dense, cosine(qv, c.vector));\n const score = 0.6 * dense + 0.4 * lex;\n if (score > 0.02) results.push({ nodeId: r.node.id, node: r.node, score, snippet: snippet(r.text, qTokens), indexerId: 'offline' });\n }\n return results.sort((a, b) => b.score - a.score).slice(0, limit);\n }\n\n // --- offline sidecar op queue ---------------------------------------------\n\n async queueOp(op) {\n await idbAdd(this.db, 'queue', { ...op, at: Date.now() });\n await this.#refreshQueue();\n }\n\n async #refreshQueue() {\n const q = await idbAll(this.db, 'queue');\n this.#set({ queued: q.length });\n }\n\n async flushQueue() {\n if (!this.state.online || this.state.syncing) return;\n // Claim the sync BEFORE any await — two 'online' events (or init + an event) can\n // fire concurrently, and a check-then-act guard after an await let both pass and\n // replay the queue twice (double-posting). Setting syncing synchronously here makes\n // the second caller bail at the guard above.\n this.#set({ syncing: true });\n let synced = 0;\n let dropped = 0;\n try {\n const q = await idbAllWithKeys(this.db, 'queue');\n for (const { key, value } of q) {\n try {\n await this.api.request(value.method, value.path, { body: value.body });\n await idbDelete(this.db, 'queue', key);\n synced++;\n } catch (err) {\n // Anything that could succeed later stays queued. `unauthorized` is the case\n // that mattered: a session expiring while offline is not a permanent failure,\n // and dropping the entry destroyed a comment the user had written and told\n // them it \"couldn't be applied\" — when signing in again would have applied it.\n if (['transient', 'timeout', 'unauthorized', 'quota'].includes(err.code)) break;\n // A permanent failure (e.g. the file was deleted) — drop it so we don't loop,\n // but don't pretend it synced.\n await idbDelete(this.db, 'queue', key);\n dropped++;\n }\n }\n } finally {\n await this.#refreshQueue();\n this.#set({ syncing: false });\n // Be honest: only claim success for what actually applied, and surface drops.\n if (dropped) this.platform.notifications.warn(`${dropped} offline change${dropped > 1 ? 's' : ''} couldn't be applied and ${dropped > 1 ? 'were' : 'was'} discarded.`);\n if (synced && this.state.queued === 0) this.platform.notifications.info(`${synced} offline change${synced > 1 ? 's' : ''} synced.`);\n }\n }\n}\n\n// --- IndexedDB helpers ------------------------------------------------------\n\nfunction openDb() {\n return new Promise((resolve, reject) => {\n const req = indexedDB.open(DB, 1);\n req.onupgradeneeded = () => {\n const db = req.result;\n if (!db.objectStoreNames.contains('pins')) db.createObjectStore('pins');\n if (!db.objectStoreNames.contains('queue')) db.createObjectStore('queue', { autoIncrement: true });\n };\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n}\nfunction tx(db, store, mode, fn) {\n return new Promise((resolve, reject) => {\n const t = db.transaction(store, mode);\n const s = t.objectStore(store);\n let out;\n Promise.resolve(fn(s)).then((r) => (out = r));\n t.oncomplete = () => resolve(out);\n t.onerror = () => reject(t.error);\n });\n}\nconst reqP = (r) => new Promise((res, rej) => { r.onsuccess = () => res(r.result); r.onerror = () => rej(r.error); });\nconst idbPut = (db, store, key, val) => tx(db, store, 'readwrite', (s) => s.put(val, key));\nconst idbAdd = (db, store, val) => tx(db, store, 'readwrite', (s) => s.add(val));\nconst idbDelete = (db, store, key) => tx(db, store, 'readwrite', (s) => s.delete(key));\nconst idbAll = (db, store) => tx(db, store, 'readonly', (s) => reqP(s.getAll()));\nfunction idbAllWithKeys(db, store) {\n return tx(db, store, 'readonly', (s) =>\n new Promise((resolve, reject) => {\n const out = [];\n const req = s.openCursor();\n req.onsuccess = () => {\n const cur = req.result;\n if (!cur) return resolve(out);\n out.push({ key: cur.key, value: cur.value });\n cur.continue();\n };\n req.onerror = () => reject(req.error);\n }),\n );\n}\n\n// --- search math (mirrors the server's LocalHash hybrid) --------------------\n\nfunction lexicalScore(q, docTokens) {\n if (!q.length || !docTokens.size) return 0;\n let hit = 0;\n for (const t of q) if (docTokens.has(t)) hit++;\n return hit / q.length;\n}\nfunction cosine(a, b) {\n if (!a || !b) return 0;\n let s = 0;\n for (let i = 0; i < a.length; i++) s += a[i] * b[i];\n return s; // both L2-normalised\n}\nfunction snippet(text, qTokens) {\n if (!text) return null;\n const lower = text.toLowerCase();\n let at = -1;\n for (const t of qTokens) { const i = lower.indexOf(t); if (i >= 0) { at = i; break; } }\n if (at < 0) return text.slice(0, 160).trim();\n const start = Math.max(0, at - 60);\n return (start > 0 ? '…' : '') + text.slice(start, start + 200).trim() + '…';\n}\n",
73
73
  "// ActivityService — the client's answer to \"what is going on, and what is stuck\".\n//\n// It holds two lists that look similar and mean different things, and keeping them\n// distinct is the whole design:\n//\n// TASKS work happening now. Ephemeral. A task disappears when it finishes (after a\n// moment on screen) and when the process running it stops. That is correct:\n// the work stopped too.\n// ISSUES a standing problem left behind by something that already failed. Durable on\n// the server. It stays until the thing it complains about actually works —\n// not until it is acknowledged, and not until a reload.\n//\n// WHY ONE SERVICE FOR BOTH SIDES. Work happens in two places — an upload runs in this\n// browser, a reindex runs on the server — and a user does not care which. So this holds\n// one list, with each task tagged by where it lives:\n//\n// local started here, driven here. The owner (TransfersService) reports progress\n// directly, and cancelling calls a function.\n// server a read-only MIRROR of the server's registry. Nothing here drives it;\n// cancelling posts, and the next poll shows the result. Treating a mirror as\n// writable is how two sources of truth get invented.\n//\n// WHY POLLING. There is no streaming transport in this server, and adding SSE through\n// three runtime adapters to move a progress bar is not a trade worth making yet. So:\n// poll fast (1s) only while something is running, drop to nothing when the drive is\n// idle, and re-check when the tab regains focus. At rest this costs one request when\n// the app loads. If a real-time channel ever exists, only `#poll` changes.\n\nimport { cell } from '../runtime.js';\n\nconst ACTIVE_MS = 1000; // while something is running, we want a live-feeling bar\nconst IDLE_MS = 60_000; // otherwise just enough to notice a task someone else started\n\nexport class ActivityService {\n constructor(platform) {\n this.platform = platform;\n this.api = platform.api;\n this.state = {\n tasks: [], // merged: local first, then the server mirror\n issues: [],\n issuesLoading: false,\n // A load failure is state, not a shrug: \"no problems\" and \"we couldn't ask\" look\n // identical on screen unless one of them says so. TWO fields, not one, because\n // these are independent requests — a tasks poll that succeeds must not erase the\n // news that the issues poll failed, which is exactly the bug one shared field\n // produced.\n tasksError: null,\n issuesError: null,\n open: false, // the activity panel\n };\n this.cell = cell(this.state);\n this._local = new Map(); // id -> local task (this browser owns these)\n this._server = [];\n this._timer = null;\n this._pollMs = null;\n }\n\n observe() {\n return this.cell;\n }\n #set(patch) {\n this.state = { ...this.state, ...patch };\n this.cell.setValue(this.state);\n }\n #merge() {\n this.#set({ tasks: [...this._local.values(), ...this._server] });\n }\n\n // --- local tasks -----------------------------------------------------------\n\n /**\n * Register work happening in this browser. Returns a handle with the same shape the\n * server's registry hands its callers, so code that reports progress doesn't need to\n * know which side it is running on.\n *\n * @param {{title: string, kind?: string, detail?: string, total?: number|null,\n * unit?: string, onCancel?: () => void}} spec\n */\n start(spec = {}) {\n const id = spec.id || `local_${Math.random().toString(36).slice(2, 10)}`;\n const task = {\n id,\n source: 'local',\n kind: spec.kind || 'general',\n title: spec.title || 'Working',\n detail: spec.detail ?? null,\n status: 'running',\n done: 0,\n // No total means indeterminate, and that is a legitimate answer. A caller that\n // doesn't know how much work there is must not invent a number: a progress bar\n // that lies is worse than a spinner that admits it doesn't know.\n total: spec.total ?? null,\n unit: spec.unit || null,\n cancellable: !!spec.onCancel,\n startedAt: Date.now(),\n endedAt: null,\n error: null,\n };\n this._local.set(id, task);\n this._cancels ||= new Map();\n if (spec.onCancel) this._cancels.set(id, spec.onCancel);\n this.#merge();\n this.#schedule();\n\n const patch = (p) => {\n const cur = this._local.get(id);\n if (!cur || cur.status !== 'running') return; // finished tasks are final\n this._local.set(id, { ...cur, ...p });\n this.#merge();\n };\n return {\n id,\n progress: (p = {}) => patch({\n done: p.done ?? this._local.get(id)?.done ?? 0,\n total: p.total === undefined ? this._local.get(id)?.total : p.total,\n unit: p.unit ?? this._local.get(id)?.unit,\n detail: p.detail ?? this._local.get(id)?.detail,\n }),\n succeed: (detail) => { patch({ status: 'done', endedAt: Date.now(), detail: detail ?? this._local.get(id)?.detail }); this.#expire(id); },\n fail: (err) => { patch({ status: 'failed', endedAt: Date.now(), error: err?.message || String(err || 'failed') }); },\n cancel: () => { patch({ status: 'cancelled', endedAt: Date.now() }); this.#expire(id); },\n };\n }\n\n /** A finished task lingers briefly so it is seen to finish, then goes. */\n #expire(id, after = 5000) {\n setTimeout(() => {\n this._local.delete(id);\n this._cancels?.delete(id);\n this.#merge();\n }, after);\n }\n\n async cancel(id) {\n const local = this._local.get(id);\n if (local) {\n this._cancels?.get(id)?.();\n return;\n }\n // A server task is a mirror: ask, then let the next poll tell the truth.\n try {\n await this.api.cancelTask(id);\n await this.refreshTasks();\n } catch (err) {\n this.#set({ tasksError: err.message });\n }\n }\n\n dismiss(id) {\n if (this._local.delete(id)) { this.#merge(); return; }\n this.api.dismissTask(id).catch(() => {});\n this._server = this._server.filter((t) => t.id !== id);\n this.#merge();\n }\n\n // --- server mirror + issues ------------------------------------------------\n\n async init() {\n await this.refresh();\n this.#schedule();\n // Coming back to the tab is the moment a stale list is most obvious.\n window.addEventListener('focus', () => this.refresh());\n }\n\n async refresh() {\n await Promise.all([this.refreshTasks(), this.refreshIssues()]);\n }\n\n async refreshTasks() {\n const wasRunning = this.running.length > 0;\n try {\n const { tasks } = await this.api.tasks();\n this._server = (tasks || []).map((t) => ({ ...t, source: 'server' }));\n this.#set({ tasksError: null });\n this.#merge();\n } catch (err) {\n // Offline or a server that doesn't have the endpoint: stop claiming to know.\n this._server = [];\n this.#set({ tasksError: err.message });\n this.#merge();\n }\n // The moment work STOPS is the moment an issue is most likely to have been fixed,\n // so re-read them then. Without this, a retry that succeeds in 50 ms leaves the\n // problem on screen until the next idle poll — up to a minute of the user being\n // told something is broken that isn't.\n if (wasRunning && !this.running.length) this.refreshIssues();\n this.#schedule();\n }\n\n async refreshIssues() {\n this.#set({ issuesLoading: true });\n try {\n const { issues } = await this.api.issues();\n this.#set({ issues: issues || [], issuesLoading: false, issuesError: null });\n } catch (err) {\n // Deliberately NOT clearing `issues`: the last known list is better than an empty\n // one that reads as \"nothing is wrong\".\n this.#set({ issuesLoading: false, issuesError: err.message });\n }\n }\n\n async retryIssue(id) {\n try {\n await this.api.retryIssue(id);\n // The fix runs as a task; adopt it now so the click visibly did something, and\n // let the poll clear the issue when the work actually succeeds. The retry may\n // finish faster than a poll interval, so re-read the issues directly too — a\n // Retry button that leaves the problem sitting there reads as a broken button.\n await this.refreshTasks();\n // A retry can finish faster than one poll interval — in which case there is no\n // running→idle transition to notice and the fixed problem would sit on screen\n // until the next idle poll. A couple of bounded follow-ups cover that window\n // without turning this into a busy loop.\n this.#followUp();\n this.platform.notifications?.info?.('Retrying — watch its progress in Activity');\n } catch (err) {\n this.platform.notifications?.error?.(`Couldn't retry: ${err.message}`);\n }\n }\n\n async dismissIssue(id) {\n const before = this.state.issues;\n this.#set({ issues: before.filter((i) => i.id !== id) });\n try {\n await this.api.dismissIssue(id);\n } catch (err) {\n this.#set({ issues: before }); // put it back rather than pretend\n this.platform.notifications?.error?.(`Couldn't dismiss: ${err.message}`);\n }\n }\n\n /** Two bounded re-reads after an action that may have resolved something. */\n #followUp() {\n for (const ms of [400, 1500]) {\n const t = setTimeout(() => { this.refreshTasks(); this.refreshIssues(); }, ms);\n t?.unref?.();\n }\n }\n\n /** Rebuild the whole search index. Surfaced as a command; reports as a task. */\n async rebuildIndex() {\n try {\n const res = await this.api.reindex();\n await this.refreshTasks();\n this.togglePanel(true);\n if (res.alreadyRunning) this.platform.notifications?.info?.('A rebuild is already running');\n return res;\n } catch (err) {\n this.platform.notifications?.error?.(`Couldn't rebuild the index: ${err.message}`);\n throw err;\n }\n }\n\n /**\n * Reconcile a collection with its object store — the way a drive notices files added,\n * replaced, or removed by anything that isn't Trove. Reports as a task, like a rebuild.\n */\n async scanCollection(collectionId) {\n try {\n const res = await this.api.scanCollection(collectionId);\n await this.refreshTasks();\n this.togglePanel(true);\n if (res.alreadyRunning) this.platform.notifications?.info?.('A scan of this collection is already running');\n this.#followUp();\n return res;\n } catch (err) {\n this.platform.notifications?.error?.(`Couldn't scan “${collectionId}”: ${err.message}`);\n throw err;\n }\n }\n\n /**\n * Ask the server whether the backing stores are actually usable from a browser.\n *\n * Unlike a scan or a reindex this finishes in one round trip, so it reports its own\n * result rather than handing back a task: the answer to \"did I fix the bucket?\" should\n * be available immediately, and the issue list is refreshed so a problem that is now\n * fixed visibly disappears rather than sitting there until the next poll.\n */\n async checkStorage() {\n try {\n const res = await this.api.checkStorage();\n await this.refresh();\n this.togglePanel(true);\n const problems = (res.results || []).reduce((n, r) => n + (r.findings?.length || 0), 0);\n if (problems) {\n this.platform.notifications?.warn?.(`Found ${problems} storage problem${problems === 1 ? '' : 's'} — see Activity`);\n } else if (!res.checked) {\n this.platform.notifications?.info?.('There are no collections to check yet');\n } else if (!res.corsChecked) {\n // Honest about what was not checked. Reporting \"all good\" having skipped the check\n // that matters is how a diagnostic stops being believed.\n this.platform.notifications?.info?.('Stores are reachable. Browser access was not checked — this drive has no public URL configured.');\n } else {\n this.platform.notifications?.success?.('Stores are reachable and allow browser access');\n }\n return res;\n } catch (err) {\n this.platform.notifications?.error?.(`Couldn't check the stores: ${err.message}`);\n throw err;\n }\n }\n\n togglePanel(open) {\n this.#set({ open: open ?? !this.state.open });\n if (this.state.open) this.refresh();\n }\n\n get running() {\n return this.state.tasks.filter((t) => t.status === 'running');\n }\n\n /**\n * Poll fast while something is running, slowly otherwise. Rescheduled rather than\n * fixed, so an idle drive costs one request a minute and a running rebuild feels\n * live — without a second transport to maintain.\n */\n #schedule() {\n const want = this.running.length ? ACTIVE_MS : IDLE_MS;\n if (this._timer && this._pollMs === want) return;\n clearTimeout(this._timer);\n this._pollMs = want;\n this._timer = setTimeout(() => {\n this._timer = null;\n this.refreshTasks().then(() => {\n // Issues change when tasks end, so re-read them then rather than on their own\n // clock — a retry that fixed something should stop being listed promptly.\n if (!this.running.length) this.refreshIssues();\n });\n }, want);\n this._timer?.unref?.();\n }\n\n dispose() {\n clearTimeout(this._timer);\n this._timer = null;\n }\n}\n",
74
74
  "// The workbench's built-in commands.\n//\n// A command is a DESCRIPTION: an id, a title, and `actions(...args)` — a pure factory\n// saying what should be dispatched. It does not do anything itself.\n//\n// That is the whole change here, and it matters more than it looks. Commands are the entry\n// point for everything a person actually does: the palette, every keybinding, every menu\n// item, every row button. These were closures over `app` — the whole world — calling\n// services directly, so `ExecCommandAction` routed the intent into the engine and the\n// handler walked straight back out. The engine saw a command being run and nothing of what\n// it did: no feed entry for the delete, the upload, or the collection switch, and nothing\n// able to intercept or observe one.\n//\n// The bodies moved into actions (bl/actions.js, \"what commands used to do inline\"). What is\n// left is a table, which is what a command registry should have been.\n//\n// `palette: false` where a command is a button on a screen rather than a verb someone would\n// go looking for. Revoking a credential by fuzzy-searching for it is not a thing to make\n// easy.\n\nimport {\n NavigateAction, RefreshAction, LoadMoreAction, TrashAction, ShowTrashAction,\n UploadFilesAction, PickAndUploadAction, OpenSubjectAction, DownloadSubjectAction,\n CopyLinkAction, RenameSubjectAction, DeleteSubjectAction, PinAction,\n SearchAction, VoiceSearchAction,\n RebuildIndexAction, ScanCollectionAction, CheckStorageAction, ToggleActivityPanelAction,\n LoadApiKeysAction, RevokeApiKeyAction, MintApiKeyFromDraftAction,\n StartApiKeyDraftAction, CancelApiKeyDraftAction, ClearMintedApiKeyAction,\n OpenPaletteAction, SetActivityAction, CloseOverlaysAction, ShowHomeAction,\n ShowDialogAction, SwitchCollectionAction, ToggleDetailsAction,\n ToggleInboxAction, EnablePushAction,\n InstallPluginFromUrlPromptAction, PickAndInstallPluginAction,\n} from './actions.js';\n\n// Everything that acts on \"the file you mean\" — the selection, or the one you have open.\n//\n// Without this the palette offered Rename and Delete on an empty drive, accepted the click,\n// and answered with \"Pick a file first\". A when-clause greys them instead, which is the\n// difference between an offer the drive cannot honour and an accurate menu.\n//\n// Row menus satisfy it because opening one SELECTS the row first (see openRowMenu), so a\n// command reached that way always has a subject even though the clause cannot see the node\n// argument it was handed.\nconst HAS_SUBJECT = 'explorer.hasSelection || editor.open';\n\nexport function registerCommands(app) {\n const cmd = (id, title, actions, extra = {}) =>\n app.platform.commands.register({ id, title, actions, ...extra });\n\n // --- navigation / views ----------------------------------------------------\n cmd('workbench.showCommandPalette', 'Show All Commands', () => new OpenPaletteAction('commands'), { category: 'View', icon: 'command' });\n cmd('workbench.quickOpen', 'Go to File…', () => new OpenPaletteAction('files'), { category: 'File', icon: 'search' });\n cmd('workbench.view.home', 'Go Home (search & browse)', () => new ShowHomeAction(), { category: 'View', icon: 'search' });\n cmd('workbench.view.plugins', 'Show Plugins', () => new SetActivityAction('plugins'), { category: 'View' });\n cmd('workbench.view.admin', 'Show Administration', () => new SetActivityAction('admin'), { category: 'View', icon: 'gear' });\n cmd('workbench.openSettings', 'Open Settings', () => new SetActivityAction('settings'), { category: 'Preferences', icon: 'gear' });\n cmd('workbench.closeOverlays', 'Close', () => new CloseOverlaysAction(), { palette: false });\n cmd('search.voice', 'Search by Voice', () => new VoiceSearchAction(), { category: 'View', icon: 'search' });\n\n // --- background work + standing problems -----------------------------------\n cmd('workbench.showActivity', 'Show Activity (running work & problems)',\n () => new ToggleActivityPanelAction(true), { category: 'View', icon: 'refresh' });\n cmd('workbench.rebuildIndex', 'Rebuild Search Index',\n () => new RebuildIndexAction(), { category: 'View', icon: 'refresh' });\n // Trove is not the only thing that can write to the bucket. This is how files added,\n // replaced, or removed by something else get picked up.\n cmd('workbench.scanCollection', 'Scan Collection for Outside Changes',\n () => new ScanCollectionAction(), { category: 'Explorer', icon: 'refresh' });\n cmd('workbench.checkStorage', 'Check Storage Configuration',\n () => new CheckStorageAction(), { category: 'View', icon: 'plug' });\n\n // --- explorer --------------------------------------------------------------\n cmd('explorer.refresh', 'Refresh', () => new RefreshAction(), { category: 'Explorer', icon: 'refresh' });\n cmd('explorer.loadMore', 'Show More Items', () => new LoadMoreAction(), { palette: false });\n cmd('explorer.upload', 'Upload Files…', () => new PickAndUploadAction(), { category: 'Explorer', icon: 'upload' });\n // Two spellings of one address, and which you want depends on where it is going.\n // `trove:` is what one document writes to link another; a share link is a URL you can\n // paste into a message. Offered under both names, labelled for the destination rather\n // than for the format, which is the difference between a choice and a riddle.\n cmd('explorer.copyShareLink', 'Copy Shareable Link', (node) => new CopyLinkAction('share', node), { category: 'Explorer', icon: 'link', when: HAS_SUBJECT });\n cmd('explorer.copyLink', 'Copy Link to Item', (node) => new CopyLinkAction('trove', node), { category: 'Explorer', icon: 'link', when: HAS_SUBJECT });\n cmd('explorer.rename', 'Rename', (node) => new RenameSubjectAction(node), { category: 'Explorer', when: HAS_SUBJECT });\n cmd('explorer.delete', 'Delete', () => new DeleteSubjectAction(), { category: 'Explorer', icon: 'trash', when: HAS_SUBJECT });\n cmd('explorer.open', 'Open', (node) => new OpenSubjectAction(node), { palette: false });\n cmd('explorer.download', 'Download', (node) => new DownloadSubjectAction(node), { category: 'Explorer', icon: 'download', when: HAS_SUBJECT });\n\n // --- trash -----------------------------------------------------------------\n cmd('explorer.showTrash', 'Show Trash', () => new ShowTrashAction(), { category: 'Explorer', icon: 'trash' });\n cmd('explorer.hideTrash', 'Hide Trash', () => new TrashAction('hide'), { palette: false });\n cmd('explorer.restore', 'Restore from Trash', (id) => (id ? new TrashAction('restore', id) : null), { palette: false });\n cmd('explorer.purgeOne', 'Delete Forever', (id) => (id ? new TrashAction('purge', id) : null), { palette: false });\n // Wholly declarative: the confirmation is data, and what it confirms is an action.\n cmd('explorer.emptyTrash', 'Empty Trash', () => new ShowDialogAction({\n kind: 'confirm', title: 'Empty the trash?',\n body: 'Everything in the trash will be destroyed. This cannot be undone.',\n danger: true, confirmLabel: 'Delete forever',\n confirmActions: [new TrashAction('empty')],\n }), { category: 'Explorer', icon: 'trash' });\n\n // --- API keys (admin) ---------------------------------------------------------\n cmd('keys.load', 'Load API Keys', () => new LoadApiKeysAction(), { palette: false });\n cmd('keys.new', 'New API Key', () => new StartApiKeyDraftAction(), { palette: false });\n cmd('keys.cancel', 'Cancel API Key', () => new CancelApiKeyDraftAction(), { palette: false });\n cmd('keys.dismissMinted', 'Dismiss API Key', () => new ClearMintedApiKeyAction(), { palette: false });\n cmd('keys.revoke', 'Revoke API Key', (id) => (id ? new RevokeApiKeyAction(id) : null), { palette: false });\n cmd('keys.mint', 'Create API Key', () => new MintApiKeyFromDraftAction(), { palette: false });\n\n // --- offline ---------------------------------------------------------------\n cmd('offline.pin', 'Make Available Offline', (node) => new PinAction(node, true), { category: 'Offline', icon: 'download', when: HAS_SUBJECT });\n cmd('offline.unpin', 'Remove from Offline', (node) => new PinAction(node, false), { palette: false });\n\n // --- collections -----------------------------------------------------------\n cmd('collections.switch', 'Switch Collection…', (cid) => new SwitchCollectionAction(cid), { category: 'Collections', icon: 'files' });\n cmd('collections.create', 'New Collection…', () => new ShowDialogAction({ kind: 'collection', title: 'New collection' }), { category: 'Collections', icon: 'files' });\n\n // --- conversations & notifications -----------------------------------------\n cmd('workbench.toggleInfoPanel', 'Toggle Details & Conversation', () => new ToggleDetailsAction(), { category: 'View', icon: 'info' });\n cmd('notifications.show', 'Show Notifications', () => new ToggleInboxAction(true), { category: 'View' });\n cmd('notifications.enablePush', 'Enable Push Notifications', () => new EnablePushAction(), { category: 'Notifications' });\n\n // --- plugins ---------------------------------------------------------------\n cmd('plugins.installFromUrl', 'Install Plugin from URL…', () => new ShowDialogAction({\n kind: 'prompt', title: 'Install plugin from URL', label: 'Plugin package (.zip) URL',\n placeholder: 'https://example.com/plugin.zip', confirmLabel: 'Fetch',\n confirmActions: [new InstallPluginFromUrlPromptAction()],\n }), { category: 'Plugins', icon: 'plug' });\n cmd('plugins.installFromFile', 'Install Plugin from File…', () => new PickAndInstallPluginAction(), { category: 'Plugins', icon: 'plug' });\n}\n\n// Kept for the one caller that still hands a File list straight to an upload — the drop\n// target, which already has the files and has nothing to pick.\nexport { UploadFilesAction, NavigateAction, SearchAction };\n",
75
- "// Assemble the ngin engine and the reactive services into one `app` context,\n// register commands and built-in openers, and expose everything the UI needs.\n// The engine holds a single `app` singleton provider so Actions can reach the\n// platform and services; the app object also carries the engine so Actions can\n// dispatch follow-up Actions (the choreographer pattern).\n\nimport { Engine, Provider } from '@3sln/ngin';\nimport { cell } from '../runtime.js';\nimport { registerCoreContext, registerViewportContext } from './context.js';\nimport { TransfersService } from './services.js';\nimport { explorerState, searchState, apiKeysState, viewState as viewStateSlice, overlayState, workbenchState, rotationState } from './state.js';\nimport { NavigationService } from '../platform/navigation.js';\nimport { SocialService } from './social.js';\nimport { OfflineService } from './offline.js';\nimport { ActivityService } from './activity.js';\nimport { registerCommands } from './commands.js';\nimport { NavigateAction, LoadCollectionsAction, OpenInitialCollectionAction, OpenPluginPanelAction } from './actions.js';\n\nexport function createApp(platform) {\n // Named slices, not services — see bl/state.js. Each is still its own provider, so a\n // lease naming `explorer` still says what it touches.\n const explorer = explorerState(platform.settings);\n const search = searchState();\n const apiKeys = apiKeysState();\n const rotation = rotationState();\n // One place for \"what's running\" and \"what's stuck\", covering both sides of the wire.\n const activity = new ActivityService(platform);\n // What the UI is in the middle of doing — see bl/state.js. A resource, because it\n // decides what is on screen.\n const viewState = viewStateSlice();\n // The shell, split into what it actually is. `workbench` and `overlay` are slices; the\n // panel stack stays a service, because it mirrors itself into browser history and\n // persists recents — neither of which a state bag can do. The WorkbenchService that used\n // to sit over all three was a 17-method delegation facade, and the provider graph could\n // not see through it: closing a dialog leased the whole shell.\n const workbench = workbenchState();\n const overlay = overlayState();\n const navigation = new NavigationService();\n const transfers = new TransfersService(activity);\n // Offline first: social queues comment and tag writes through it while disconnected, so\n // it is a dependency rather than something bolted on afterwards. It used to be assigned\n // onto `social` after both existed, which reads as optional and is not — a social service\n // built without it silently drops every offline write.\n const offline = new OfflineService(platform);\n const social = new SocialService(platform, offline);\n\n const app = { platform, explorer, search, transfers, social, offline, activity, apiKeys, rotation, workbench, overlay, navigation, engine: null };\n\n // Every resource the engine has, named. The engine's STATE is the state of its\n // resources, so the single `app` provider this started with made that state one opaque\n // blob: every query and every action leased the whole world, and a lease that always\n // covers everything tells you nothing about what a piece of work touches or how long it\n // needs it.\n //\n // `app` is gone. It survived longest as the thing command handlers closed over, and went\n // when they stopped being closures — see bl/commands.js. Every lease now names what it\n // touches, and `static deps = ['explorer']` means what it says.\n const engine = new Engine({\n providers: {\n // Where a live query keeps its subscription — see bl/queries.js. A provider, so it\n // is per engine; keyed by the query instance, so an entry belongs to exactly one\n // realization. A query instance is shared (it is interned), so it is the wrong place\n // to put anything that is true only while it is being watched.\n appState: Provider.fromSingleton(new Map()),\n\n // The drive.\n explorer: Provider.fromSingleton(explorer),\n search: Provider.fromSingleton(search),\n transfers: Provider.fromSingleton(transfers),\n social: Provider.fromSingleton(social),\n offline: Provider.fromSingleton(offline),\n activity: Provider.fromSingleton(activity),\n apiKeys: Provider.fromSingleton(apiKeys),\n rotation: Provider.fromSingleton(rotation),\n viewState: Provider.fromSingleton(viewState),\n\n // The engine itself, for actions that choreograph — dispatching a follow-up rather\n // than doing the follow-up's work inline. LAZY because the engine does not exist\n // when its own providers are declared; by the time anything leases this, it does.\n // ngin's execute context carries a dispatchFeed but no dispatcher, so this is the\n // seam for it.\n engine: Provider.fromLazySingleton(async () => engine, () => {}),\n\n // The shell.\n workbench: Provider.fromSingleton(workbench),\n overlay: Provider.fromSingleton(overlay),\n navigation: Provider.fromSingleton(navigation),\n settings: Provider.fromSingleton(platform.settings),\n notifications: Provider.fromSingleton(platform.notifications),\n context: Provider.fromSingleton(platform.context),\n commands: Provider.fromSingleton(platform.commands),\n keybindings: Provider.fromSingleton(platform.keybindings),\n contributions: Provider.fromSingleton(platform.contributions),\n viewport: Provider.fromSingleton(platform.viewport),\n voice: Provider.fromSingleton(platform.voice),\n\n // The outside world.\n api: Provider.fromSingleton(platform.api),\n\n // What this deployment can do: which storage drivers it offers, whether it can\n // suggest searches, how transfers reach the bucket.\n //\n // A PROVIDER, not an action and not a query holding a promise. Nobody asks for\n // capabilities — they are ambient facts other things consult in order to decide, so\n // there is no intent to dispatch and nothing to put on the feed. It was a query that\n // memoised `api.capabilities()` on its own instance to avoid re-fetching, which is a\n // cache with no invalidation living inside a view.\n //\n // It provides a CELL rather than the value, and the fetch is deliberately not\n // awaited. Awaiting would make every lease of this block until the server answered,\n // so a query that merely consults capabilities would be PENDING and the shell would\n // render nothing until the round trip finished. The cell starts null — \"not known\n // yet\", which every reader already treats correctly — and fills in, so anything\n // watching simply re-projects when the answer lands.\n //\n // One fetch for the life of the page, because `fromLazySingleton` memoises on the\n // creation promise. That is the provider's job, which is where it belongs.\n // Closes over `platform.api` rather than declaring `{ deps: ['api'] }`: a provider's\n // deps arrive as the PROVIDER INSTANCES, not as resources, so the dependency form\n // would hand over something you must `obtain()` and release. Every other provider\n // here closes over what it needs, and this is the same client either way.\n capabilities: Provider.fromLazySingleton(\n async () => {\n const held = cell(null);\n platform.api.capabilities().then(\n (caps) => held.setValue(caps),\n // A drive whose capabilities cannot be read still works; every reader treats\n // null as \"not known\" and falls back. Failing the provider would take the\n // whole shell down over an optional answer.\n () => {},\n );\n return held;\n },\n () => {},\n ),\n mediaUrls: Provider.fromSingleton(platform.mediaUrls),\n plugins: Provider.fromSingleton(platform.plugins),\n },\n });\n app.engine = engine;\n\n // How a command reaches the engine. A command resolves to actions and the CommandService\n // dispatches them; it is built with the platform, before the engine exists, so the\n // dispatcher is handed over here.\n //\n // This is the boundary, not a shortcut: a keystroke and a plugin's RPC both originate\n // outside the engine, and one of them has to carry the intent in. Everything past this\n // point is an action on the feed.\n platform.commands.dispatch = (action) => engine.dispatch(action);\n // The same seam for the two other places that originate outside the engine: a docked\n // plugin frame opening a file, and the plugin RPC asking for its panel.\n platform.dispatch = (action) => engine.dispatch(action);\n platform.openPluginPanel = (pluginId) => engine.dispatch(new OpenPluginPanelAction(pluginId));\n\n registerCommands(app);\n\n // Every built-in when-clause key, derived from the resource it summarises. Registered\n // here because this is where those resources exist; see bl/context.js for the list and\n // for why deriving them is not the same as moving the writes.\n registerCoreContext(platform.context, { workbench, overlay, navigation, explorer });\n registerViewportContext(platform.context, platform.viewport);\n\n social.init();\n offline.init();\n activity.init();\n engine.dispatch(new LoadCollectionsAction());\n\n return { engine, app };\n}\n\nexport { NavigateAction };\n",
75
+ "// Assemble the ngin engine and the reactive services into one `app` context,\n// register commands and built-in openers, and expose everything the UI needs.\n// The engine holds a single `app` singleton provider so Actions can reach the\n// platform and services; the app object also carries the engine so Actions can\n// dispatch follow-up Actions (the choreographer pattern).\n\nimport { Engine, Provider } from '@3sln/ngin';\nimport { cell } from '../runtime.js';\nimport { registerCoreContext, registerViewportContext } from './context.js';\nimport { TransfersService } from './services.js';\nimport { explorerState, searchState, apiKeysState, viewState as viewStateSlice, overlayState, workbenchState, aclState, rotationState } from './state.js';\nimport { NavigationService } from '../platform/navigation.js';\nimport { SocialService } from './social.js';\nimport { OfflineService } from './offline.js';\nimport { ActivityService } from './activity.js';\nimport { registerCommands } from './commands.js';\nimport { NavigateAction, LoadCollectionsAction, OpenInitialCollectionAction, OpenPluginPanelAction } from './actions.js';\n\nexport function createApp(platform) {\n // Named slices, not services — see bl/state.js. Each is still its own provider, so a\n // lease naming `explorer` still says what it touches.\n const explorer = explorerState(platform.settings);\n const search = searchState();\n const apiKeys = apiKeysState();\n const rotation = rotationState();\n const acl = aclState();\n // One place for \"what's running\" and \"what's stuck\", covering both sides of the wire.\n const activity = new ActivityService(platform);\n // What the UI is in the middle of doing — see bl/state.js. A resource, because it\n // decides what is on screen.\n const viewState = viewStateSlice();\n // The shell, split into what it actually is. `workbench` and `overlay` are slices; the\n // panel stack stays a service, because it mirrors itself into browser history and\n // persists recents — neither of which a state bag can do. The WorkbenchService that used\n // to sit over all three was a 17-method delegation facade, and the provider graph could\n // not see through it: closing a dialog leased the whole shell.\n const workbench = workbenchState();\n const overlay = overlayState();\n const navigation = new NavigationService();\n const transfers = new TransfersService(activity);\n // Offline first: social queues comment and tag writes through it while disconnected, so\n // it is a dependency rather than something bolted on afterwards. It used to be assigned\n // onto `social` after both existed, which reads as optional and is not — a social service\n // built without it silently drops every offline write.\n const offline = new OfflineService(platform);\n const social = new SocialService(platform, offline);\n\n const app = { platform, explorer, search, transfers, social, offline, activity, apiKeys, rotation, workbench, overlay, navigation, engine: null };\n\n // Every resource the engine has, named. The engine's STATE is the state of its\n // resources, so the single `app` provider this started with made that state one opaque\n // blob: every query and every action leased the whole world, and a lease that always\n // covers everything tells you nothing about what a piece of work touches or how long it\n // needs it.\n //\n // `app` is gone. It survived longest as the thing command handlers closed over, and went\n // when they stopped being closures — see bl/commands.js. Every lease now names what it\n // touches, and `static deps = ['explorer']` means what it says.\n const engine = new Engine({\n providers: {\n // Where a live query keeps its subscription — see bl/queries.js. A provider, so it\n // is per engine; keyed by the query instance, so an entry belongs to exactly one\n // realization. A query instance is shared (it is interned), so it is the wrong place\n // to put anything that is true only while it is being watched.\n appState: Provider.fromSingleton(new Map()),\n\n // The drive.\n explorer: Provider.fromSingleton(explorer),\n search: Provider.fromSingleton(search),\n transfers: Provider.fromSingleton(transfers),\n social: Provider.fromSingleton(social),\n offline: Provider.fromSingleton(offline),\n activity: Provider.fromSingleton(activity),\n apiKeys: Provider.fromSingleton(apiKeys),\n rotation: Provider.fromSingleton(rotation),\n acl: Provider.fromSingleton(acl),\n viewState: Provider.fromSingleton(viewState),\n\n // The engine itself, for actions that choreograph — dispatching a follow-up rather\n // than doing the follow-up's work inline. LAZY because the engine does not exist\n // when its own providers are declared; by the time anything leases this, it does.\n // ngin's execute context carries a dispatchFeed but no dispatcher, so this is the\n // seam for it.\n engine: Provider.fromLazySingleton(async () => engine, () => {}),\n\n // The shell.\n workbench: Provider.fromSingleton(workbench),\n overlay: Provider.fromSingleton(overlay),\n navigation: Provider.fromSingleton(navigation),\n settings: Provider.fromSingleton(platform.settings),\n notifications: Provider.fromSingleton(platform.notifications),\n context: Provider.fromSingleton(platform.context),\n commands: Provider.fromSingleton(platform.commands),\n keybindings: Provider.fromSingleton(platform.keybindings),\n contributions: Provider.fromSingleton(platform.contributions),\n viewport: Provider.fromSingleton(platform.viewport),\n voice: Provider.fromSingleton(platform.voice),\n\n // The outside world.\n api: Provider.fromSingleton(platform.api),\n\n // What this deployment can do: which storage drivers it offers, whether it can\n // suggest searches, how transfers reach the bucket.\n //\n // A PROVIDER, not an action and not a query holding a promise. Nobody asks for\n // capabilities — they are ambient facts other things consult in order to decide, so\n // there is no intent to dispatch and nothing to put on the feed. It was a query that\n // memoised `api.capabilities()` on its own instance to avoid re-fetching, which is a\n // cache with no invalidation living inside a view.\n //\n // It provides a CELL rather than the value, and the fetch is deliberately not\n // awaited. Awaiting would make every lease of this block until the server answered,\n // so a query that merely consults capabilities would be PENDING and the shell would\n // render nothing until the round trip finished. The cell starts null — \"not known\n // yet\", which every reader already treats correctly — and fills in, so anything\n // watching simply re-projects when the answer lands.\n //\n // One fetch for the life of the page, because `fromLazySingleton` memoises on the\n // creation promise. That is the provider's job, which is where it belongs.\n // Closes over `platform.api` rather than declaring `{ deps: ['api'] }`: a provider's\n // deps arrive as the PROVIDER INSTANCES, not as resources, so the dependency form\n // would hand over something you must `obtain()` and release. Every other provider\n // here closes over what it needs, and this is the same client either way.\n capabilities: Provider.fromLazySingleton(\n async () => {\n const held = cell(null);\n platform.api.capabilities().then(\n (caps) => held.setValue(caps),\n // A drive whose capabilities cannot be read still works; every reader treats\n // null as \"not known\" and falls back. Failing the provider would take the\n // whole shell down over an optional answer.\n () => {},\n );\n return held;\n },\n () => {},\n ),\n mediaUrls: Provider.fromSingleton(platform.mediaUrls),\n plugins: Provider.fromSingleton(platform.plugins),\n },\n });\n app.engine = engine;\n\n // How a command reaches the engine. A command resolves to actions and the CommandService\n // dispatches them; it is built with the platform, before the engine exists, so the\n // dispatcher is handed over here.\n //\n // This is the boundary, not a shortcut: a keystroke and a plugin's RPC both originate\n // outside the engine, and one of them has to carry the intent in. Everything past this\n // point is an action on the feed.\n platform.commands.dispatch = (action) => engine.dispatch(action);\n // The same seam for the two other places that originate outside the engine: a docked\n // plugin frame opening a file, and the plugin RPC asking for its panel.\n platform.dispatch = (action) => engine.dispatch(action);\n platform.openPluginPanel = (pluginId) => engine.dispatch(new OpenPluginPanelAction(pluginId));\n\n registerCommands(app);\n\n // Every built-in when-clause key, derived from the resource it summarises. Registered\n // here because this is where those resources exist; see bl/context.js for the list and\n // for why deriving them is not the same as moving the writes.\n registerCoreContext(platform.context, { workbench, overlay, navigation, explorer });\n registerViewportContext(platform.context, platform.viewport);\n\n social.init();\n offline.init();\n activity.init();\n engine.dispatch(new LoadCollectionsAction());\n\n return { engine, app };\n}\n\nexport { NavigateAction };\n",
76
76
  "// Reading an engine query from the render layer.\n//\n// Mostly this exists to be the ONE place that knows how a query reaches a component. The\n// bridging itself is a single call; the value is that it is not re-derived at fifteen call\n// sites, and that if it ever needs an initial value or an error view, there is somewhere to\n// put it.\n//\n// `engine.query(q)` answers an observable — `subscribe({next, error, complete})` — and dodo's\n// `watch` takes a Cell — `onDirty(fn)` plus `getValue()`. `fromObservable` already bridges\n// exactly those two shapes, so this is thin on purpose: the point is that there is ONE place\n// that knows how a query reaches a component, rather than the adapter being re-derived at\n// every call site.\n//\n// The subscription belongs to the CELL, not to the component: dodo connects a cell when its\n// first watcher attaches and disconnects when the last one leaves, which is the same\n// lifetime ngin gives a query realization. So a region that scrolls out of the tree stops\n// observing, the query's `kill` runs, and whatever it was holding is released — without any\n// component writing teardown.\n//\n// See docs/tickets/009.\n\nimport { fromObservable, PENDING } from '../runtime.js';\n\n/**\n * Cache the bridged cell per (engine, query instance).\n *\n * Not, as this first claimed, because two cells would \"undo ngin's sharing\" — they would\n * not. Measured: two independent `fromObservable(engine.query(q))` over one instance boot\n * the query ONCE and kill it once, because ngin shares the realization by instance and does\n * not care how many observers arrive or through what. The sharing was never at risk.\n *\n * What the cache actually buys is smaller and worth stating accurately:\n *\n * - **Idempotence.** `watchQuery` can be called freely and returns the same cell, so it\n * is safe in a render. Without it, `watch` — which compares its source by identity and\n * resubscribes when it changes — would tear down and re-establish every pass.\n * - **One fan-out per change** instead of one per bridge. Each extra cell is another\n * observer on the controller and another invalidation to propagate.\n *\n * Neither is correctness, so this is an optimisation and a convenience, not a safeguard.\n * The safeguard against duplicate realizations is interning the query instance — see\n * bl/intern.js, which is where that problem is actually solved.\n *\n * Weak on the engine so a disposed engine takes its cells with it, and weak on the query so\n * an interned instance that falls out of use does too.\n */\nconst cells = new WeakMap();\n\n/**\n * @param {object} engine\n * @param {object} queryInstance an INTERNED instance — see bl/intern.js\n * @returns {object} a dodo Cell, PENDING until the query produces its first value\n */\nexport function watchQuery(engine, queryInstance) {\n let forEngine = cells.get(engine);\n if (!forEngine) {\n forEngine = new WeakMap();\n cells.set(engine, forEngine);\n }\n let cell = forEngine.get(queryInstance);\n if (!cell) {\n // A query may declare what it means before it knows — `initial = null` for something\n // fetched over the network, say. Without one the cell is PENDING, and PENDING reaching\n // a `watch` renders its placeholder: fine for a region that can show an empty bar for a\n // frame, wrong for a snapshot feeding the whole shell, which would blank until the\n // request came back. The initial belongs to the query rather than to this call, so it\n // cannot differ between two call sites reading the same thing.\n const initial = 'initial' in queryInstance ? queryInstance.initial : PENDING;\n cell = fromObservable(engine.query(queryInstance), { initial });\n forEngine.set(queryInstance, cell);\n }\n return cell;\n}\n",
77
77
  "// A region: one part of the shell, subscribed to only the queries it reads.\n//\n// The workbench is a single `watch` over a `derive` of eighteen cells, so any change to any\n// of them rebuilds the whole VDOM — activity bar, status bar, every overlay, the file list.\n// dodo reconciles, so the DOM update stays small; the REBUILD does not. An upload progress\n// tick reconstructs all 500 rows of a file list to move one number in the transfer tray.\n//\n// A region fixes that by narrowing the subscription instead of the render: it watches the\n// queries it actually reads, and a change to anything else never reaches it. That also makes\n// the dependency legible — the region's queries are its argument list, rather than something\n// you infer by reading which snapshot keys the body touches.\n//\n// The teardown matters as much as the render. A region that leaves the tree drops its\n// watchers; dodo disconnects the cells; ngin kills the query realizations, releasing their\n// leases and whatever they held open. That is what makes a query the right home for\n// something like a minted media URL — alive while a region is looking at it, gone when it\n// stops — with no component writing cleanup.\n//\n// See docs/tickets/009.\n\nimport { dd, watch, derive } from '../runtime.js';\nimport { watchQuery } from '../bl/watchQuery.js';\n\n/**\n * @param {object} engine\n * @param {Record<string, object>} queries name → SHARED query instance (see bl/queries.js)\n * @param {(state: Record<string, any>) => any} build the region's view; close over `ui`\n * @param {{placeholder?: () => any, error?: (err: Error) => any}} [opts]\n * @returns {() => any} a component, built ONCE — see below for why that matters\n */\nexport function region(engine, queries, build, opts) {\n const names = Object.keys(queries);\n // Resolved at composition, not per render. `watchQuery` caches per (engine, query) so\n // these would be the same cells either way, but doing it here says the subscription\n // belongs to the region rather than being re-established on every pass.\n const cells = names.map((name) => watchQuery(engine, queries[name]));\n // `derive` coalesces: several of these changing in one frame still costs one render.\n const combined = derive(cells, (...values) =>\n Object.fromEntries(names.map((name, i) => [name, values[i]])));\n\n // ONE alias function, and one options object, for the life of the app.\n //\n // dodo identifies an alias by the FUNCTION: \"swapping the alias function ... is a\n // different component, and reusing the state would skip the old one's detach and the new\n // one's attach\". So `alias(...)` built inside the render would detach and re-attach the\n // watch — dropping the subscription, killing the query realization and booting a fresh\n // one — on every pass of the parent. That is the precise opposite of what a region is\n // for, and it would have looked like it worked.\n //\n // `build` and `opts` are hoisted for the same reason one level down: `watch` compares its\n // arguments, and a builder closure rebuilt per render is a new argument every time.\n return dd.alias(() => watch(combined, build, opts));\n}\n",
78
78
  "// One instance per logical query.\n//\n// ngin shares a live query realization by INSTANCE identity — its controller map is keyed on\n// the object, and neither the class nor the fields are consulted. That is fine for a query\n// with no arguments, which can be a module singleton. It is a trap for a parameterised one:\n// `new MediaUrl('n1')` in two places is two realizations of the same question, so two minted\n// URLs and two leases for one file, and nothing fails to say so.\n//\n// So a parameterised query declares a shared factory and is asked for, not constructed:\n//\n// class MediaUrl extends ViewQuery {\n// static of = queryOf(MediaUrl);\n// constructor(nodeId) { ... }\n// }\n//\n// MediaUrl.of('n1') // same id, same instance, one realization\n//\n// A field holding a factory rather than a base class or a mixin, which is what makes this\n// small: the query keeps whatever base it already had, each factory closes over its own\n// table, and there is no name resolved through a prototype chain for anything to shadow.\n\n/**\n * Eviction, without a policy to get wrong.\n *\n * Entries are weak, and a finalizer sweeps the key once the instance is collected. That is\n * sound because LIVENESS PINS THE INSTANCE: ngin's controller map is a plain Map holding the\n * query as a key, deleted only on teardown, so a query with observers is strongly reachable\n * and cannot be collected. An idle one can be, and re-asking simply builds a fresh instance.\n *\n * The alternative — an LRU with a cap — is actively wrong here: evicting a LIVE entry means\n * the next `of()` mints a second instance while the first is still running, which is the\n * exact bug this exists to prevent, arriving on a timer.\n *\n * (This leans on ngin's default controller map being strong. `hooks.createQueryControllersMap`\n * could replace it with a weak one; we do not, and a weak one would break this.)\n */\nconst sweeper = new FinalizationRegistry(({ table, key }) => {\n // Only if it is still the dead entry — a fresh instance may have claimed the key already.\n if (table.get(key) && !table.get(key).deref()) table.delete(key);\n});\n\n/**\n * Reject anything a canonical key cannot capture.\n *\n * A function stringifies to `undefined` in JSON, so two queries taking different callbacks\n * would key identically and silently share one realization — the very bug this exists to\n * prevent, reintroduced by the fix. Fail at the call site instead. A query with arguments\n * like that passes its own key function and never comes through here.\n */\nfunction assertKeyable(value, path) {\n const t = typeof value;\n if (value === null || t === 'string' || t === 'number' || t === 'boolean') return;\n if (t !== 'object') {\n throw new TypeError(\n `Query argument ${path} is a ${t}, which cannot be part of a sharing key. ` +\n 'Pass an id and let the query look the thing up, or give queryOf a key function.',\n );\n }\n if (Array.isArray(value)) return value.forEach((v, i) => assertKeyable(v, `${path}[${i}]`));\n const proto = Object.getPrototypeOf(value);\n if (proto === Object.prototype || proto === null) {\n return Object.entries(value).forEach(([k, v]) => assertKeyable(v, `${path}.${k}`));\n }\n throw new TypeError(\n `Query argument ${path} is a ${value.constructor?.name ?? 'non-plain object'}, which ` +\n 'cannot be part of a sharing key. Pass an id and let the query look the thing up, ' +\n 'or give queryOf a key function.',\n );\n}\n\n/** A canonical string for a value: object keys sorted, so `{a,b}` and `{b,a}` are one key. */\nexport function stableKey(value) {\n if (value === null || typeof value !== 'object') return JSON.stringify(value) ?? 'null';\n if (Array.isArray(value)) return `[${value.map(stableKey).join(',')}]`;\n return `{${Object.keys(value).sort().map((k) => `${JSON.stringify(k)}:${stableKey(value[k])}`).join(',')}}`;\n}\n\n/** The default key: every argument, in order, canonically. Types count, so 1 and '1' differ. */\nexport function keyOfArgs(...args) {\n args.forEach((a, i) => assertKeyable(a, `#${i}`));\n return args.map(stableKey).join('|');\n}\n\n/**\n * A factory returning the shared instance of `Class` for a given argument list.\n *\n * class Thing extends ViewQuery { static of = queryOf(Thing); }\n *\n * `key` defaults to the arguments, canonically. Pass one to share more coarsely than the\n * arguments do — an option that changes how something is displayed but not what is fetched\n * should not split one realization into two — or to key arguments the default refuses:\n *\n * static of = queryOf(Thing, (nodeId, opts) => nodeId);\n *\n * A key rather than a hash plus a comparator: a comparator only earns its complexity when\n * keys can collide, and a canonical key does not collide.\n *\n * The class is captured, so a subclass inheriting this field would build the PARENT —\n * `Sub.of('x')` returning a `Base` is the sort of wrong that reads as right. The factory is\n * a plain function rather than an arrow so that `this` is the class it was reached through,\n * and it refuses to run when that is not the class it was built for. A subclass that wants\n * sharing declares its own `static of`.\n *\n * A detached call — `const of = Thing.of; of('x')` — has no receiver at all, and in a module\n * `this` is `undefined` rather than the global. That is the ordinary way to pass the factory\n * around, so it is allowed; only a DIFFERENT class is an error.\n *\n * @param {Function} Class the query class, referenced from inside its own body\n * @param {(...args: any[]) => string} [key]\n */\nexport function queryOf(Class, key = keyOfArgs) {\n const table = new Map();\n return function of(...args) {\n if (this !== undefined && this !== Class) {\n throw new TypeError(\n `${this?.name ?? 'A subclass'}.of() would build a ${Class.name}, because \\`of\\` ` +\n `captures the class it was declared on. Give ${this?.name ?? 'the subclass'} its own ` +\n '`static of = queryOf(...)`, or call it on ' + Class.name + ' directly.',\n );\n }\n const k = key(...args);\n const existing = table.get(k)?.deref();\n if (existing) return existing;\n const instance = new Class(...args);\n table.set(k, new WeakRef(instance));\n sweeper.register(instance, { table, key: k });\n return instance;\n };\n}\n",
@@ -80,7 +80,7 @@
80
80
  "// What the drive is doing and how full it is — one answer, for every surface that says so.\n//\n// This lived in the status bar and was imported from there by the phone chrome, which is\n// how it was already admitting to being shared: two shells rendering the same facts in\n// different shapes. It is a derivation over four resources, so it belongs here, and it is\n// reached as the `statusFacts` query rather than recomputed per render.\n//\n// The reason it has to be derived ONCE rather than twice is on the record: the phone bar\n// rendered `collectionId` raw and showed an opaque `col_…` where the desktop bar showed the\n// collection's name — the same fact, said two ways, because each surface worked it out.\n\n/**\n * The facts every shell reports.\n *\n * @param {{ex: object, tr: object, act: object, off: object}} slices\n */\nexport function statusFactsOf({ ex = {}, tr = {}, act = {}, off = {} } = {}) {\n const items = ex.items || [];\n const tasks = act.tasks || [];\n return {\n // `null` with nothing open — `collectionLabelOf` renders that as \"no collection\". The\n // old fallback made the bar name a collection that may not exist, on a drive where the\n // user had not yet chosen one.\n collectionId: ex.collectionId ?? null,\n // What to CALL it, so the phone shell and the desktop bar cannot end up saying\n // different things.\n collectionLabel: collectionLabelOf(ex),\n // The COLLECTION's totals when the server could give them, not the page's. Summing what\n // happens to be loaded reports a 3,000-file drive as 500 files — a wrong number, not a\n // rounded one. Falls back to the page only when the server didn't say.\n totalItems: ex.stats?.items ?? items.length,\n // Whether that total is the COLLECTION's or just the page we happen to hold. With more\n // pages waiting, the page length is a floor, not a total, and must read as one.\n totalKnown: ex.stats?.items != null,\n totalBytes: ex.stats?.bytes ?? items.reduce((n, i) => n + (i.size || 0), 0),\n shown: items.length,\n partial: !!ex.nextCursor,\n usage: ex.usage ?? null,\n usageLevel: usageLevelOf(ex.usage),\n uploading: (tr.items || []).filter((t) => t.status === 'active'),\n running: tasks.filter((t) => t.status === 'running'),\n issues: act.issues || [],\n off: { online: true, pins: [], queued: 0, syncing: false, ...off },\n };\n}\n\n/** The open collection's name, or the plainest true thing when there isn't one. */\nexport function collectionLabelOf(ex) {\n if (!ex?.collectionId) return 'no collection';\n const match = (ex.collections || []).find((c) => c.id === ex.collectionId);\n return match?.name || ex.collectionId;\n}\n\n/**\n * How worried to be about space, or '' when there is nothing to say.\n *\n * A filesystem or NAS can answer exactly, and that is where it matters: a disk fills up and\n * every upload starts failing with no warning that anything was coming. An object store has\n * no equivalent number, so this answers '' and the meter is not drawn at all rather than\n * being drawn meaninglessly.\n *\n * The thresholds are a judgement about when someone still has time to act, which is why\n * they are here and not in whichever bar happens to be on screen.\n */\nexport function usageLevelOf(usage) {\n if (!usage?.total) return '';\n const free = usage.available / usage.total;\n return free < 0.05 ? 'critical' : free < 0.1 ? 'low' : '';\n}\n\n/**\n * The one thing worth saying about the drive right now, most urgent first.\n *\n * The phone has room for a single glyph, so something has to decide what outranks what:\n * being offline beats a standing problem, a standing problem beats work in progress, and\n * anything beats running low on space. That ordering is a claim about which condition a\n * person most needs to know, which makes it a decision rather than a rendering.\n *\n * Answers a KIND, not an icon. Which glyph draws a kind is the shell's business.\n */\nexport function driveConditionOf(facts) {\n const f = facts || {};\n if (!f.off?.online) return { kind: 'offline', label: 'Offline' };\n if (f.issues?.length) {\n return {\n kind: 'issues',\n label: `${f.issues.length} need${f.issues.length === 1 ? 's' : ''} attention`,\n count: f.issues.length,\n };\n }\n if (f.running?.length || f.uploading?.length || f.off?.syncing) {\n return { kind: 'working', label: 'Working…', count: (f.running?.length || 0) + (f.uploading?.length || 0) };\n }\n if (f.usageLevel) return { kind: 'lowSpace', label: 'Low on space' };\n return { kind: 'idle', label: 'Status' };\n}\n",
81
81
  "// What the launcher is showing.\n//\n// This was ~100 lines inside the launcher COMPONENT, deciding — mid-render, where nothing\n// else could see it — which nodes are on screen, what each heading says, whether \"All\n// items\" is a lie because another page is waiting, and what the empty state should read\n// when a load FAILED as against when the drive is genuinely empty. Every one of those is a\n// question about engine state.\n//\n// It also made a smaller thing impossible: `pickView` needs the nodes on screen, and while\n// they were assembled in a render they looked like render-layer data. They are not — they\n// come from the explorer and search resources. Deriving them here is what lets the choice\n// of view become engine state too.\n//\n// Groups are DATA. A header control is `{ icon, label, title, actions }`, not a button —\n// the launcher used to put a rendered vnode in `group.action`, which is the same\n// carrying-a-handle problem that menu items had before they carried `actions`.\n\nimport { parseTagQuery, filterLabel } from './tagQuery.js';\nimport {\n ExecCommandAction, CloseSearchModalAction, OpenFileAction, SearchAction, FilterAction,\n SetLaunchQueryAction,\n} from './actions.js';\n\n/** Which mode the typed query puts the launcher in. */\nexport function launcherMode(query) {\n const q = query || '';\n return q.startsWith('!') ? 'command' : q.includes('#') ? 'filter' : 'search';\n}\n\nconst iconFor = (node) => {\n const t = node?.contentType || '';\n if (t.startsWith('image/')) return 'file-image';\n if (t.startsWith('audio/')) return 'file-audio';\n if (t.startsWith('video/')) return 'file-video';\n return 'file-text';\n};\n\n/**\n * Everything you can do to a file, as descriptions.\n *\n * `pinned` and `keys` are resolved by the caller because both are questions about engine\n * state: whether THIS file is already available offline, and what the shortcut for a\n * command actually is on this machine. Hardcoding \"⌘⇧L\" told a Windows user about a key\n * they do not have, and told everyone the default even after they had rebound it.\n */\nexport function fileMenuOf(node, { pinned = false, keys = {} } = {}) {\n const kbd = (id) => keys[id] || undefined;\n return [\n { label: 'Open', icon: 'file-text', actions: [new ExecCommandAction('explorer.open', node)] },\n { label: 'Download', icon: 'download', actions: [new ExecCommandAction('explorer.download', node)] },\n // Labelled by destination rather than by format: one goes in a document, the other\n // goes to a person.\n { label: 'Copy shareable link', icon: 'link', actions: [new ExecCommandAction('explorer.copyShareLink')] },\n { label: 'Copy trove: link', icon: 'link', kbd: kbd('explorer.copyLink'), actions: [new ExecCommandAction('explorer.copyLink')] },\n { sep: true },\n { label: 'Rename…', actions: [new ExecCommandAction('explorer.rename')] },\n pinned\n ? { label: 'Remove from offline', icon: 'close', actions: [new ExecCommandAction('offline.unpin', node)] }\n : { label: 'Make available offline', icon: 'download', actions: [new ExecCommandAction('offline.pin', node)] },\n { sep: true },\n { label: 'Move to trash', icon: 'trash', danger: true, kbd: kbd('explorer.delete'), actions: [new ExecCommandAction('explorer.delete')] },\n ];\n}\n\n/** What you can do to something already in the trash. */\nexport function trashMenuOf(node) {\n return [\n { label: 'Restore', icon: 'refresh', actions: [new ExecCommandAction('explorer.restore', node.id)] },\n { sep: true },\n { label: 'Delete forever', icon: 'trash', danger: true, actions: [new ExecCommandAction('explorer.purgeOne', node.id)] },\n ];\n}\n\n/**\n * One row for a file.\n *\n * `menu` stays a thunk. A drive can have hundreds of rows on screen and almost none of\n * their menus are ever opened, so building them all would be work nobody asked for — and a\n * pure function deferring pure work is data as much as the array it would have returned.\n */\nfunction fileItem(node, { modal, pinnedIds, keys }) {\n return {\n icon: iconFor(node),\n title: node.name,\n detail: node.contentType || '',\n node,\n // From the modal search, `reset` starts a fresh viewer stack; then close it.\n actions: [\n new OpenFileAction(node, { reset: !!modal }),\n ...(modal ? [new CloseSearchModalAction()] : []),\n ],\n menu: () => fileMenuOf(node, { pinned: pinnedIds.has(node.id), keys }),\n };\n}\n\n/**\n * The groups on screen.\n *\n * @param {object} s the slices this reads, already plain\n * @param {boolean} modal whether this is the double-shift overlay rather than the home\n * screen — the one input that is genuinely about which INSTANCE is rendering, since both\n * are on screen at once when the overlay is up\n */\nexport function launcherGroupsOf(s, modal = false) {\n const { ex = {}, se = {}, nav = {}, query = '', commandMatches = [], pinnedIds = new Set(), keys = {} } = s;\n const mode = launcherMode(query);\n const row = (node) => fileItem(node, { modal, pinnedIds, keys });\n const closeModal = modal ? [new CloseSearchModalAction()] : [];\n\n if (mode === 'command') {\n return [{\n id: 'commands',\n title: 'Commands',\n items: commandMatches.map((c) => ({\n icon: 'command', title: c.title, detail: c.category, badge: 'command',\n actions: [new ExecCommandAction(c.id), ...closeModal],\n })),\n empty: 'No matching commands.',\n }];\n }\n\n const { text, filters } = parseTagQuery(query);\n const nodes = (se.results || []).map((r) => r.node);\n const err = se.error;\n // A one-click retry so a transient search/filter failure isn't a dead end.\n const retry = (actions) => (err ? [{ icon: 'refresh', label: 'Retry', title: 'Retry', actions }] : []);\n\n // Drive-wide tag/property filter (server-side), optionally narrowed by free text.\n if (filters.length) {\n const label = filters.map(filterLabel).join(' ') + (text.trim() ? ` · \"${text.trim()}\"` : '');\n return [{\n id: 'filtered',\n title: se.loading ? 'Filtering…' : err ? 'Filter failed' : 'Filtered',\n // Shown as typed: a tag is a value, not a heading.\n verbatim: se.loading || err ? null : label,\n controls: retry([new FilterAction(filters, text)]),\n items: nodes.map(row),\n empty: se.loading ? 'Filtering…' : err ? `Couldn’t filter: ${err}` : 'No files match those filters.',\n }];\n }\n\n // Free-text search.\n if (text.trim()) {\n return [{\n id: 'results',\n title: se.loading ? 'Searching…' : err ? 'Search failed' : 'Results',\n controls: retry([new SearchAction(query)]),\n items: nodes.map(row),\n empty: se.loading ? 'Searching…' : err ? `Couldn’t search: ${err}` : 'No files match.',\n }];\n }\n\n // Home: recents, then everything in the collection. There is nothing to descend into —\n // this is the \"show me everything\" fallback for when search isn't the answer.\n const groups = [];\n const recents = (nav.recents || []).map(row);\n if (recents.length) groups.push({ id: 'recent', title: 'Recent', items: recents });\n\n const shown = (ex.items || []).length;\n // `stats` is the collection; `items` is the page. When the server didn't report stats we\n // only know the page — and saying \"500\" while a next page exists is a claim about the\n // drive that is false, so say \"500+\" instead.\n const knownTotal = ex.stats?.items ?? null;\n const total = knownTotal ?? shown;\n const totalLabel = knownTotal != null ? knownTotal.toLocaleString() : `${shown.toLocaleString()}+`;\n const items = (ex.items || []).map(row);\n // A partial list must not be titled \"All items\" — that is a claim about the drive, and on\n // a collection bigger than one page it is false. Say what is on screen, and offer the rest\n // rather than leaving it unreachable.\n if (ex.nextCursor) {\n items.push({\n icon: 'refresh',\n title: ex.loadingMore ? 'Loading…'\n : knownTotal != null ? `Show more (${(knownTotal - shown).toLocaleString()} more)` : 'Show more',\n detail: 'or search to jump straight to something',\n actions: [new ExecCommandAction('explorer.loadMore')],\n });\n }\n\n // The trash, when it has been opened. Not shown by default: it is a place you go to\n // recover a mistake, not part of browsing the drive.\n if (ex.trash) {\n groups.push({\n id: 'trash',\n // One line, not two: a header reading \"0 items\" above a body reading \"the trash is\n // empty\" is the same sentence twice, permanently parked above the drive.\n title: ex.trash.length\n ? `Trash · ${ex.trash.length} item${ex.trash.length === 1 ? '' : 's'}`\n : 'Trash',\n controls: [\n ...(ex.trash.length\n ? [{ icon: 'trash', label: 'Empty trash', title: 'Destroy everything in the trash', actions: [new ExecCommandAction('explorer.emptyTrash')] }]\n : []),\n // The way back out. Opening the trash used to be one-way until a page reload.\n { icon: 'close', label: 'Close', title: 'Hide the trash', actions: [new ExecCommandAction('explorer.hideTrash')] },\n ],\n items: (ex.trash || []).map((n) => ({\n icon: 'trash',\n title: n.name,\n detail: `deleted ${new Date(n.deletedAt).toLocaleString()} — restore`,\n actions: [new ExecCommandAction('explorer.restore', n.id)],\n menu: () => trashMenuOf(n),\n })),\n empty: 'The trash is empty.',\n });\n }\n\n groups.push({\n id: 'all',\n title: ex.nextCursor ? `All items · showing ${shown.toLocaleString()} of ${totalLabel}` : 'All items',\n // The empty state told people to upload a file, and on desktop and TV there was nothing\n // anywhere that would let them. (Phone has the + in its bottom bar.)\n controls: modal ? [] : [{ icon: 'upload', label: 'Upload', title: 'Upload files to this collection', actions: [new ExecCommandAction('explorer.upload')] }],\n items,\n // Don't show a false \"empty\" when the load actually FAILED (e.g. server unreachable) —\n // say so, so the user knows to retry rather than believing the collection is empty. (A\n // toast also fires, but the persistent state must be honest.)\n empty: ex.loading ? 'Loading…' : ex.error ? `Couldn’t load this collection: ${ex.error}` : 'Nothing here yet — upload a file to get started.',\n });\n return groups;\n}\n\n/**\n * The suggestions shown when a search came back with nothing.\n *\n * Two halves, both settled by the `launcherContent` query: whether an offer applies at all\n * — a search ran, it succeeded, it found nothing — and what to suggest, which the server\n * decides and reaches the engine through the `capabilities` resource. Each example carries\n * the actions that run it, so the component only draws them.\n */\nexport function searchHelpOf({ eligible = false, caps = null } = {}) {\n if (!eligible) return null;\n const p = caps?.searchPrompt;\n if (!p?.hint && !p?.examples?.length) return null;\n return {\n hint: p.hint || null,\n examples: (p.examples || []).map((ex) => {\n const { text, filters } = parseTagQuery(ex.query);\n return {\n query: ex.query,\n label: ex.label || null,\n // Running an example is the same two steps as typing it: put it in the box, then\n // ask whichever of search or filter that spelling means.\n actions: [\n new SetLaunchQueryAction(ex.query),\n filters.length ? new FilterAction(filters, text) : new SearchAction(text),\n ],\n };\n }),\n };\n}\n",
82
82
  "// Which of the registered views should draw the results.\n//\n// The reactive half — which views exist, their when-clauses, which one the user pinned —\n// is the `views` query. This is the rest: arithmetic over the items on screen.\n//\n// Still a plain function rather than part of that query only because the launcher assembles\n// the items mid-render. They are themselves derived from the explorer and search state, so\n// this folds into a query as soon as that assembly does.\n//\n// It lived in ui/components/views/index.js, which was half a job: the registry reads moved\n// into the engine and the DECISION stayed in the render layer. Choosing a layout from what\n// a collection contains is a claim about the drive, not about markup.\n\n/** Where a pinned view choice is remembered. */\nexport const SETTING = 'explorer.view';\n\n/**\n * The view to draw with, in order of how much someone meant it.\n *\n * 1. A saved choice — they pressed a button. Nothing infers its way past that.\n * 2. The search transformer's hint, when there is a search on screen. It read the\n * sentence: \"photos from the trip last summer\" is a request for a gallery as much as\n * it is a query, and nothing downstream can recover that from a list of content types.\n * 3. A view whose `match` suits what is actually there — a collection of photographs\n * opens as a grid without anyone asking.\n * 4. The highest priority, which is the list.\n *\n * A hint naming a view this build doesn't have is ignored, not an error: the transformer\n * is deployment configuration and may outlive the build it was written against.\n *\n * PURE. It used to take `platform` and read the contribution registry, the context keys and\n * the settings mid-render — three reads that nothing invalidated on, so the launcher only\n * kept up because the shell's snapshot was coarse enough to redraw it anyway. The reactive\n * half is the `views` query now; what is left is arithmetic over the items already on\n * screen, which is the one input that cannot be a query (there is no sensible key for \"these\n * forty search results\").\n *\n * @param {{views: Array, saved: string|null}} slice from the `views` query\n * @param {Array} items the rows being drawn, `{ node }`-shaped\n * @param {string|null} hint the search transformer's suggestion, if this is a search\n */\nexport function pickView({ views = [], saved = null } = {}, items = [], hint = null) {\n if (!views.length) return null;\n const chosen = saved && views.find((v) => v.id === saved);\n if (chosen) return chosen;\n const suggested = hint && views.find((v) => v.id === hint);\n if (suggested) return suggested;\n const nodes = items.map((i) => i.node).filter(Boolean);\n if (nodes.length >= 3) {\n const suits = (v) => v.match && Object.keys(v.match).length\n && nodes.filter((n) => matchesView(v, n)).length / nodes.length > 0.6;\n const fitted = views.find(suits);\n if (fitted) return fitted;\n }\n return views[0];\n}\n\nfunction matchesView(view, node) {\n const ct = node.contentType || '';\n const name = (node.name || '').toLowerCase();\n const ext = name.includes('.') ? name.slice(name.lastIndexOf('.')) : '';\n if ((view.match.ext || []).includes(ext)) return true;\n return (view.match.mime || []).some((m) => (m.endsWith('/*') ? ct.startsWith(m.slice(0, -1)) : ct === m));\n}\n",
83
- "// The drive's state, as engine queries.\n//\n// The web layer grew a second reactive system beside the engine: services holding cells, a\n// `platform` bag of subsystems, an `app` bag of stores, and one derived snapshot threaded\n// through every component. ngin already had all of it — see queries.js in the package:\n// `QueryController` is \"one live realization of a query instance, shared by all of its\n// observers\", `boot`/`kill` bracket a query's life, and a lease holds the providers it needs\n// for exactly that long.\n//\n// This is step one of moving onto it (docs/tickets/009). Each query here wraps the service\n// that exists today, so nothing in the UI has to change yet and the two describe the same\n// state rather than competing to. The services are deleted in a later phase, at which point\n// these stop wrapping and simply hold.\n//\n// INSTANCE IDENTITY IS THE SHARING KEY. ngin keys live realizations by the query INSTANCE —\n// `#controllers` is a Map keyed on the object — and nothing anywhere looks at the class or\n// the fields. So `new Explorer()` twice is two realizations, two boots and two subscriptions\n// to the same underlying cell, quietly, because nothing fails.\n//\n// Two instances carrying the SAME arguments are still two instances. `new MediaUrl('n1')`\n// twice mints two URLs and holds two leases for one file. That is the trap, and \"remember to\n// memoise\" is not a defence: forgetting is silent, and it is the parameterised queries —\n// exactly the ones worth sharing — that need it.\n//\n// So a parameterised query declares `static of = queryOf(TheClass)` and is asked for rather\n// than constructed: the same arguments give back the same instance, which makes identity\n// mean logical equality and lets both ngin's cache and watchQuery's work. See bl/intern.js.\n// Parameterless queries are exported as singletons below. Either way the CLASSES stay\n// private to this module and only instances leave it — which is also what stops anyone\n// calling `new` on a shared query and quietly getting a second realization.\n\nimport { Query } from '@3sln/ngin';\nimport { queryOf } from './intern.js';\nimport { selectedNodesOf, draftScopesOf, collectionMenuOf } from './services.js';\nimport { ExecCommandAction, LoadSidecarAction, ClearSidecarAction, LoadRotationAction } from './actions.js';\nimport { ASSOC_KEY, describeOpener } from './openers.js';\nimport { rankCommands } from './match.js';\nimport { statusFactsOf, driveConditionOf } from './status.js';\nimport { launcherGroupsOf, launcherMode, searchHelpOf } from './launcher.js';\nimport { pickView } from './views.js';\nimport { prettyKey } from '../platform/keybindings.js';\n\n/**\n * A live query over one of the existing cell-backed services.\n *\n * The service exposes dodo's Cell protocol — `onDirty(fn)` to learn it changed, `getValue()`\n * to read it — and a query wants push. Bridging is two lines, so rather than write them per\n * service this takes the cell as a function of the leased `app`.\n *\n * It reads the CELL, never the service's own `state` field. Most services keep both in step\n * (`this.state = {...}; this.cell.setValue(this.state)`) so the two usually agree, but not\n * all of them do — `settings`' cell holds `effective()`, the defaults merged with the\n * overrides, and there is no `state` field at all. The existing snapshot passes cells to\n * `derive`, which hands it their values; reading the same way is what makes these queries\n * and the snapshot describe the same state rather than two subtly different ones.\n */\nclass ServiceQuery extends Query {\n /**\n * @param {string} dep the engine resource this views\n * @param {(resource: object) => {onDirty: Function, getValue: Function}} cellOf\n */\n /** Empty at the class level; the lease is per instance — see `deps` below. */\n static deps = [];\n\n /**\n * @param {string} dep the engine resource this views\n * @param {(resource: object) => {onDirty: Function, getValue: Function}} cellOf\n * @param {(value: any, resource: object) => any} [project] shape the value into a view\n */\n constructor(dep, cellOf, project) {\n super();\n this.dep = dep;\n this.cellOf = cellOf;\n this.project = project;\n }\n\n /**\n * Leased per instance rather than per class, because these all share one class and each\n * views a different resource. ngin leases `constructor.deps` AND `this.deps`, so an\n * instance can name its own.\n */\n get deps() {\n return [this.dep, 'appState'];\n }\n\n boot(resources, { notify }) {\n const cell = this.cellOf(resources[this.dep]);\n // A service may not exist in every build — `plugins` is absent when the plugin host is\n // not installed, which is why the snapshot has a `?? constant([])` beside it.\n if (!cell) {\n notify(null);\n return;\n }\n const resource = resources[this.dep];\n const read = () => (this.project ? this.project(cell.getValue(), resource) : cell.getValue());\n // The current value first: a subscriber that arrives after the last change should not\n // wait for the next one to find out what is true now.\n notify(read());\n hold(resources, this, cell.onDirty(() => notify(read())));\n }\n\n kill(resources) {\n release(resources, this);\n }\n}\n\n/**\n * Where a live query keeps its subscription.\n *\n * NOT on the query. These instances are module-level singletons, interned so that the same\n * arguments give back the same object — which is what makes ngin share one realization per\n * engine. Writing `this.off` on a shared instance is therefore writing per-REALIZATION\n * state onto something that outlives any one of them: two engines observing the same\n * instance boot it twice, the second overwrites the first's unsubscribe, and killing either\n * releases the wrong one while the other leaks.\n *\n * `appState` is a provider, so it is per engine; keyed by the instance, an entry is per\n * (engine, instance) — which is exactly one realization. The query stays a description of\n * what to watch, and nothing about it changes when it is being watched.\n */\nfunction hold(resources, query, off) {\n resources.appState.set(query, off);\n}\n\nfunction release(resources, query) {\n const off = resources.appState?.get(query);\n if (Array.isArray(off)) off.forEach((fn) => fn());\n else off?.();\n resources.appState?.delete(query);\n}\n\n// --- the drive -----------------------------------------------------------------\n\n/**\n * Items, selection, the open collection, and the gate — plus the nodes the selection\n * actually refers to.\n *\n * `selectedNodes` is folded in rather than left as something to call, because resolving it\n * is not trivial: ids alone only match the loaded page of the current collection, and the\n * launcher's rows come from search across every readable one. A view that hands over the\n * answer is the difference between a component knowing what is selected and a component\n * knowing how selection resolution works.\n */\nexport const explorer = new ServiceQuery('explorer', (r) => r.observe(), (v) => ({\n ...v,\n selectedNodes: selectedNodesOf(v),\n // The collection switcher's rows. In the view because it is a question about state, and\n // because the component that shows it could not otherwise see where it came from.\n collectionMenu: collectionMenuOf(v,\n (id) => new ExecCommandAction('collections.switch', id),\n () => new ExecCommandAction('collections.create')),\n}));\n/** Query text, results, and the palette's file list. */\nexport const search = new ServiceQuery('search', (r) => r.observe());\n/** Uploads and downloads in flight. */\nexport const transfers = new ServiceQuery('transfers', (r) => r.observe());\n/** Running tasks and standing issues, both sides of the wire. */\nexport const activity = new ServiceQuery('activity', (r) => r.observe());\n/** Conversations, tags and backlinks for the open item. */\nexport const social = new ServiceQuery('social', (r) => r.observe());\n/**\n * Online state, pinned files, and the queue waiting to sync.\n *\n * `pinnedIds` is folded in so a component can ask whether THIS file is pinned without\n * calling a method on the service to find out. A Set rather than a repeated scan: the\n * question is asked once per row.\n */\nexport const offline = new ServiceQuery('offline', (r) => r.observe(),\n (v) => ({ ...v, pinnedIds: new Set((v?.pins || []).map((p) => p.id)) }));\n/**\n * The open collection's key, and any rotation running over it.\n *\n * Keyed by collection, so switching collections is a different query rather than a change\n * to notice. `bootAction` loads it when the settings screen first looks — the alternative,\n * which the API-keys section still does, is to dispatch from inside a render behind a\n * module-level \"have I asked yet\" flag, which is a render with a side effect.\n *\n * It POLLS while a rotation is running, because the work is happening on the server and\n * there is nothing to push. The interval belongs to the realization: it starts when\n * somebody looks and stops when they look away, so a settings screen nobody has open costs\n * nothing.\n */\nexport const rotationFor = (collectionId) => RotationView.of(collectionId);\n\nclass RotationView extends Query {\n static deps = ['rotation', 'appState', 'engine'];\n static of = queryOf(RotationView);\n\n constructor(collectionId) {\n super();\n this.collectionId = collectionId;\n this.bootAction = new LoadRotationAction();\n }\n\n boot(r, { notify }) {\n const cell = r.rotation.observe();\n notify(cell.getValue());\n const off = cell.onDirty(() => notify(cell.getValue()));\n const timer = setInterval(() => {\n if (r.rotation.get().rotation?.status === 'running') r.engine.dispatch(new LoadRotationAction());\n }, 2500);\n hold(r, this, [off, () => clearInterval(timer)]);\n }\n\n kill(r) {\n release(r, this);\n }\n}\n/** The admin API-key list, with the unsubmitted draft resolved into what it would grant. */\nexport const apiKeys = new ServiceQuery('apiKeys', (r) => r.observe(),\n (v) => ({ ...v, draftScopes: draftScopesOf(v) }));\n\n// --- the shell -----------------------------------------------------------------\n\n/** Which activity is showing, and the rest of the shell's own state. */\nexport const workbench = new ServiceQuery('workbench', (r) => r.observe());\n/** The tab and panel stack. */\nexport const navigation = new ServiceQuery('navigation', (r) => r.observe());\n/** Dialogs, menus and panels. */\nexport const overlay = new ServiceQuery('overlay', (r) => r.observe());\n/** Toasts. */\nexport const notifications = new ServiceQuery('notifications', (r) => r.observe());\n/** Settings, defaults merged with overrides. */\nexport const settings = new ServiceQuery('settings', (r) => r.observe());\n/**\n * The settings SCHEMA, grouped by category, for the screen that edits them.\n *\n * Separate from `settings` rather than folded in, because that one emits the effective\n * values keyed by setting name — adding a `groups` key to it would put a made-up entry in\n * among the real ones.\n */\nexport const settingsGroups = new ServiceQuery('settings', (r) => r.observe(), (_v, r) => r.grouped());\n\n/** The when-clause keys: what is selected, what is open, what is focused. */\nexport const context = new ServiceQuery('context', (r) => r.observe());\n/** Phone, desktop or TV. */\nexport const viewport = new ServiceQuery('viewport', (r) => r.observe());\n/**\n * Whether this browser can transcribe on-device, and whether it is listening now.\n *\n * `canListen` is folded in: it is a question about the state, so a component should not\n * have to call the service to find out.\n */\nexport const voice = new ServiceQuery('voice', (r) => r.observe(),\n (v, r) => ({ ...v, canListen: !!r.canListen?.() }));\n/** Installed plugins; null where the plugin host is not installed. */\nexport const plugins = new ServiceQuery('plugins', (r) => r?.observe?.());\n/** What the UI is in the middle of doing: drafts, captures, ticked boxes. See viewState.js. */\nexport const viewState = new ServiceQuery('viewState', (r) => r.observe());\n\n/**\n * Contributions of one type — status items, openers, views.\n *\n * Parameterised, so it MUST memoise: a fresh instance per render would boot a second live\n * realization every frame and never share one. Keyed by the type, which is the only thing\n * that distinguishes them.\n */\nexport const contributionsOfType = (type) => ContributionsOfType.of(type);\n\nclass ContributionsOfType extends ServiceQuery {\n static of = queryOf(ContributionsOfType);\n\n constructor(type) {\n super('contributions', (r) => r.observeType(type));\n this.type = type;\n }\n}\n\n// --- view queries ---------------------------------------------------------------\n//\n// The ones above hand a service's state through unchanged. These COMPOSE: they answer a\n// question the UI actually asks, in plain renderable data, with every decision already made.\n//\n// The rule, and it is the important one: a query emits a VIEW, never a handle. A list of\n// commands is a list of descriptions — id, title, whether it is enabled right now — not the\n// command objects, and never a `run` function. Interaction goes the other way, as an action\n// carrying the thing's id. So a component renders what it is given and dispatches an id; it\n// does not reach into a service to find out whether to draw something, and it cannot reach\n// into one to make something happen.\n//\n// That is what takes `platform` out of the components. The status bar used to ask\n// `context.evaluate(item.when)` and `plugins.isAvailable(item)` per item, mid-render, which\n// is why it needed the bag at all. Those are view decisions; they belong on this side.\n\n/**\n * A query composed from several services rather than passed through from one.\n *\n * `sources` names the cells whose changes should recompute it; `project` builds the value.\n * Split apart because what a view DEPENDS on is usually wider than what it reads from —\n * the palette's command list changes when a contribution is registered, but also when a\n * context key flips, because that is what decides `enabled`.\n */\nclass ViewQuery extends Query {\n static deps = [];\n\n /**\n * @param {string[]} deps the engine resources this composes\n * @param {(r: object) => Array<{onDirty: Function}>} sources\n * @param {(r: object) => any} project must return plain data — see the note above\n */\n constructor(deps, sources, project) {\n super();\n this.deps = [...deps, 'appState'];\n this.sources = sources;\n this.project = project;\n }\n\n boot(r, { notify }) {\n const emit = () => notify(this.project(r));\n emit();\n hold(r, this, this.sources(r).filter(Boolean).map((c) => c.onDirty(emit)));\n }\n\n kill(r) {\n release(r, this);\n }\n}\n\n/** Contributions, context keys and plugin health — what most of these views depend on. */\nconst REGISTRY_DEPS = ['contributions', 'context', 'plugins', 'settings', 'commands', 'keybindings'];\nconst registries = (r) => [\n r.contributions.observe(),\n r.context.observe(),\n r.plugins?.observe?.(),\n r.settings.observe(),\n];\n\n/**\n * The command palette's list: every palette command, with its keybinding label resolved\n * and `enabled` already decided.\n *\n * No `when` expression and no handler. A component shows the title, greys out what is\n * disabled, and dispatches `ExecCommandAction(id)`.\n */\nexport const paletteCommands = new ViewQuery(REGISTRY_DEPS, registries, paletteCommandsOf);\n\nfunction paletteCommandsOf(r) {\n return r.commands.paletteCommands().map((c) => ({\n id: c.id,\n title: c.title ?? c.id,\n category: c.category ?? null,\n icon: c.icon ?? null,\n keybinding: r.keybindings.labelFor(c.id),\n // Two different reasons a command might not run, and they are labelled differently in\n // the palette: `available` is the plugin behind it being reachable, `enabled` also\n // folds in the when-clause. Collapsing them would tag a command disabled by context as\n // \"offline\", which is a false explanation rather than a vague one.\n available: r.commands.isAvailable(c),\n enabled: r.commands.isEnabled(c.id),\n }));\n}\n\n// The same list, narrowed to what was typed.\n//\n// Ranking used to happen mid-render, in two components, with two different algorithms (see\n// bl/match.js). The typed term is engine state — the palette's lives in the overlay — so\n// this is an ordinary query with no arguments, and the ranking is settled before a\n// component sees anything. The launcher's `!` mode ranks the same way inside\n// `launcherContent`, which already holds everything it needs.\nconst OVERLAY_DEPS = [...REGISTRY_DEPS, 'overlay', 'workbench'];\nconst withShell = (r) => [...registries(r), r.workbench.observe(), r.overlay.observe()];\n\n/** What the command palette should list right now. */\nexport const paletteMatches = new ViewQuery(OVERLAY_DEPS, withShell, (r) =>\n rankCommands(paletteCommandsOf(r), r.overlay.get().palette?.query || ''));\n\n\n/**\n * Plugin-contributed status bar slots, already filtered to the ones that should show.\n *\n * `when` and availability are resolved here rather than in the render, which is the whole\n * reason the status bar had to carry `platform` at all. `html` is still untrusted plugin\n * markup and is still sanitised at the point it becomes nodes — a query emitting plain data\n * says nothing about that data being safe.\n */\nexport const statusItems = new ViewQuery(REGISTRY_DEPS, registries, (r) => {\n return r.contributions.ofType('statusItem')\n .filter((i) => i.visible !== false && i.html)\n .filter((i) => !i.when || r.context.evaluate(i.when))\n .filter((i) => r.plugins?.isAvailable?.(i) ?? true)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0) || String(a.name).localeCompare(String(b.name)))\n .map((i) => ({\n id: i.id,\n slot: i.slot === 'left' ? 'left' : 'right',\n html: i.html,\n tooltip: i.tooltip ?? null,\n command: i.command ?? null,\n }));\n});\n\n/**\n * The effective keybindings, for the settings view: what is bound to what, right now.\n *\n * Everything the UI decides from is decided here — the command's title, whether the binding\n * is a user override, and whether another command answers to the same chord. That last one\n * is why the view carries `clash`: nothing rejects a collision and `#matchFor` scans in\n * reverse so the LAST registration wins, which means binding Delete onto ⌘P silently stops\n * Quick Open from opening. Detecting that needs the whole list at once, which is exactly the\n * sort of thing a component rendering one row cannot do and a view can.\n */\nexport const keybindings = new ViewQuery(REGISTRY_DEPS, registries, (r) => {\n const resolved = r.keybindings.resolved();\n const overrides = r.keybindings.overrides();\n const perKey = new Map();\n for (const b of resolved) perKey.set(b.key, (perKey.get(b.key) || 0) + 1);\n return resolved.map((b) => ({\n bindingId: b.bindingId,\n command: b.command,\n title: r.contributions.get(b.command)?.title ?? b.command,\n key: b.key,\n label: prettyKey(b.key),\n custom: !!overrides[b.bindingId],\n clash: perKey.get(b.key) > 1,\n }));\n});\n\n/**\n * What the launcher is showing: its groups, the view drawing them, and the help offered\n * when a search found nothing. See bl/launcher.js.\n *\n * Parameterised by `modal` — the double-shift overlay and the home screen are BOTH on\n * screen when the overlay is up, so which instance is rendering is the one input that\n * genuinely is not engine state. Two values, so interning gives at most two realizations.\n *\n * `view` is folded in because choosing it needs the items, and the items are right here.\n * That was the last thing keeping `pickView` outside the engine.\n */\nexport const launcherContent = (modal = false) => LauncherContent.of(!!modal);\n\nconst LAUNCHER_DEPS = [...REGISTRY_DEPS, 'explorer', 'search', 'workbench', 'navigation', 'offline', 'capabilities'];\n\nclass LauncherContent extends ViewQuery {\n static of = queryOf(LauncherContent);\n\n constructor(modal) {\n super(\n LAUNCHER_DEPS,\n (r) => [\n ...registries(r),\n r.explorer.observe(), r.search.observe(),\n r.workbench.observe(), r.navigation.observe(), r.offline.observe(),\n // Capabilities arrive after the first render — the provider hands out a cell that\n // fills in — so this has to be watched, not merely read, or the search help would\n // never appear on a drive whose prompt the server supplies.\n r.capabilities,\n ],\n (r) => {\n const wb = r.workbench.get();\n const off = r.offline.observe().getValue() || {};\n const slices = {\n ex: r.explorer.observe().getValue() || {},\n se: r.search.observe().getValue() || {},\n nav: r.navigation.observe().getValue() || {},\n query: wb.launch.query || '',\n commandMatches: rankCommands(paletteCommandsOf(r), (wb.launch.query || '').slice(1)),\n pinnedIds: new Set((off.pins || []).map((p) => p.id)),\n keys: commandKeysOf(r),\n };\n const groups = launcherGroupsOf(slices, this.modal);\n const mode = launcherMode(slices.query);\n return {\n groups,\n mode,\n // Which view draws them. Needs the nodes on screen, which is exactly what this\n // query has just worked out — see bl/views.js. This was the last thing keeping\n // the choice outside the engine.\n view: pickView(viewsOf(r), groups.flatMap((g) => g.items),\n mode === 'search' ? slices.se.resolved?.view ?? null : null),\n // What to offer when a search found nothing. Both halves are here now: whether\n // an offer applies at all (a search ran, it succeeded, it found nothing) and\n // what to suggest, which the server decides — see the `capabilities` resource.\n help: searchHelpOf({\n eligible: mode !== 'command'\n && !!slices.se.ran && !slices.se.loading && !slices.se.error\n && !(slices.se.results || []).length,\n caps: r.capabilities.getValue(),\n }),\n };\n },\n );\n this.modal = modal;\n }\n}\n\n/**\n * What the drive is doing and how full it is — see bl/status.js.\n *\n * Both shells render these, in different shapes. Derived once, here, because the last time\n * each worked them out for itself the phone bar showed a raw `col_…` id where the desktop\n * bar showed the collection's name.\n */\nexport const statusFacts = new ViewQuery(\n ['explorer', 'transfers', 'activity', 'offline'],\n (r) => [r.explorer.observe(), r.transfers.observe(), r.activity.observe(), r.offline.observe()],\n (r) => {\n const facts = statusFactsOf({\n ex: r.explorer.observe().getValue(),\n tr: r.transfers.observe().getValue(),\n act: r.activity.observe().getValue(),\n off: r.offline.observe().getValue(),\n });\n // The single most urgent thing, for a shell with room for one glyph. Folded in rather\n // than left to the phone, because deciding that offline outranks a standing problem is\n // a claim about what someone needs to know.\n return { ...facts, condition: driveConditionOf(facts) };\n },\n);\n\n/**\n * Every opener that could run right now — `when` and plugin availability already decided,\n * and the plugin's display name resolved into `source`.\n *\n * The SELECTOR is left on, which is the whole trick: which openers exist is a question\n * about engine state and belongs here, but which of them suits the file a component is\n * drawing is pure matching against data that component already holds. So the query answers\n * the reactive half and `openersFor` (a pure function, below) answers the rest — rather\n * than the query being parameterised by a node, which would need one live realization per\n * file on screen.\n *\n * Descriptors, not contributions: no `component`, no `entry`. Rendering resolves the\n * callable by id — see ui/components/openers.\n */\nexport const openers = new ViewQuery(REGISTRY_DEPS, registries, (r) =>\n r.contributions.ofType('opener')\n .filter((o) => !o.when || r.context.evaluate(o.when))\n .filter((o) => r.plugins?.isAvailable?.(o) ?? true)\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n .map((o) => describeOpener(o, r.plugins)));\n\n/**\n * How results can be drawn, and which one the user pinned.\n *\n * `saved` travels with the list because choosing between them needs both, and a component\n * that had to fetch the setting separately would be reaching for `settings` mid-render —\n * which is what this replaces. The CHOICE itself is `pickView`, a pure function, because it\n * also depends on the items on screen, and items are not something to key a query by.\n *\n * `render` and `move` come along. The rule about a query emitting a view rather than a\n * handle is about SIDE EFFECTS — a `run()` that mutates the drive is a back door around\n * actions and the feed. A view's renderer is a pure vnode builder over the arguments it is\n * given, so passing it is passing data; making the component look it up by id would have\n * been the registry access this is trying to remove, relocated rather than deleted.\n */\nexport const views = new ViewQuery(REGISTRY_DEPS, registries, viewsOf);\n\nfunction viewsOf(r) {\n return {\n views: r.contributions.ofType('view')\n .filter((v) => !v.when || r.context.evaluate(v.when))\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n .map((v) => ({\n id: v.id,\n title: v.title ?? v.name ?? v.id,\n icon: v.icon ?? null,\n match: v.match ?? null,\n render: v.render,\n move: v.move,\n })),\n saved: r.settings.get('explorer.view') || null,\n };\n}\n\n/**\n * The saved \"always open .pdf with…\" choices, for the settings screen.\n *\n * `missing` is decided here: an association can name an opener that has since been\n * uninstalled, and the row has to say so rather than showing a bare id.\n */\nexport const openerAssociations = new ViewQuery(REGISTRY_DEPS, registries, (r) => {\n const assoc = r.settings.get(ASSOC_KEY) || {};\n return Object.entries(assoc).map(([typeKey, openerId]) => {\n const opener = r.contributions.get(openerId);\n return { typeKey, openerId, openerTitle: opener?.title || openerId, missing: !opener };\n });\n});\n\n/**\n * The conversation, tags and backlinks for one file.\n *\n * Keyed by node, and the KEY is what replaces a reaction. This used to be an `effect` in\n * bl/index.js watching the nav stack with a module-scoped `let lastTab` for change\n * detection, calling `social.loadSidecar` directly — a subscription outside the engine\n * doing effect work, and the last place that still worked that way.\n *\n * ngin already brackets this. `bootAction` is dispatched when the first observer arrives\n * and `killAction` when the last one leaves, so opening a file loads its conversation and\n * closing it clears it, because the query is alive for exactly as long as something is\n * looking. Switching files is not a change to detect: it is one instance dying and another\n * booting.\n *\n * The clear is SCOPED to this node. Kill and boot are not ordered against each other, so\n * switching from A to B can kill A after B has booted — an unscoped clear would then wipe\n * the sidecar B just asked for. It is the same race the loading path already guards, and\n * naming the node is what makes it impossible rather than unlikely.\n */\nexport const sidecarFor = (nodeId) => Sidecar.of(nodeId);\n\nclass Sidecar extends ServiceQuery {\n static of = queryOf(Sidecar);\n\n constructor(nodeId) {\n super('social', (r) => r.observe(), (v) => v?.sidecar ?? null);\n this.nodeId = nodeId;\n this.bootAction = new LoadSidecarAction(nodeId);\n this.killAction = new ClearSidecarAction(nodeId);\n }\n}\n\n/**\n * A file's text, capped.\n *\n * The first query keyed by something unbounded, which is what `queryOf` interning and the\n * weak eviction were built for: one instance per (node, cap), shared by every viewer\n * looking at that file, and collected once nothing is. A viewer that scrolls out of the\n * tree stops observing, ngin kills the realization, and the text goes with it — no cache\n * to invalidate and nothing to remember to release.\n *\n * `size` is a hint the API uses to decide whether a range request is worth it. It is part\n * of the key because it is part of the request, and it is derived from the node id anyway,\n * so it cannot split one file into two entries.\n *\n * Capped at the TRANSFER, not just the render: a character limit in a viewer stops us\n * laying out a huge document, but the whole file still crosses the wire without this.\n */\nexport class FileText extends Query {\n static deps = ['api'];\n\n static of = queryOf(FileText);\n\n constructor(nodeId, maxBytes, size) {\n super();\n this.nodeId = nodeId;\n this.maxBytes = maxBytes;\n this.size = size;\n }\n\n async boot({ api }, { notify }) {\n notify(await api.readTextCapped(this.nodeId, { maxBytes: this.maxBytes, size: this.size }));\n }\n\n kill() {}\n}\n\n/**\n * Command id → its keybinding label, for anything that shows a shortcut next to an action.\n *\n * Hardcoding \"⌘⇧L\" told a Windows or Linux user about a key their machine does not have,\n * and told everyone the default even after they had rebound it. A map rather than a list\n * because every caller is asking about one command it already knows the id of.\n */\nexport const commandKeys = new ViewQuery(REGISTRY_DEPS, registries, commandKeysOf);\n\nfunction commandKeysOf(r) {\n return Object.fromEntries(r.keybindings.resolved()\n .map((b) => [b.command, r.keybindings.labelFor(b.command)])\n .filter(([, label]) => label));\n}\n\n/**\n * What this deployment can do.\n *\n * A plain view over the `capabilities` resource — see bl/index.js, where the provider hands\n * out a cell that fills in once the server answers. This used to be a query that kept the\n * PROMISE on its own instance so a re-boot would not re-fetch, which is a cache with no\n * invalidation living inside a view; and it needed `initial = null` to stop the shell going\n * PENDING while the request was in flight. Both go away when the fetch belongs to the\n * provider: the cell already holds null, and reading a cell is all this does.\n */\nexport const capabilities = new ServiceQuery('capabilities', (r) => r);\n",
83
+ "// The drive's state, as engine queries.\n//\n// The web layer grew a second reactive system beside the engine: services holding cells, a\n// `platform` bag of subsystems, an `app` bag of stores, and one derived snapshot threaded\n// through every component. ngin already had all of it — see queries.js in the package:\n// `QueryController` is \"one live realization of a query instance, shared by all of its\n// observers\", `boot`/`kill` bracket a query's life, and a lease holds the providers it needs\n// for exactly that long.\n//\n// This is step one of moving onto it (docs/tickets/009). Each query here wraps the service\n// that exists today, so nothing in the UI has to change yet and the two describe the same\n// state rather than competing to. The services are deleted in a later phase, at which point\n// these stop wrapping and simply hold.\n//\n// INSTANCE IDENTITY IS THE SHARING KEY. ngin keys live realizations by the query INSTANCE —\n// `#controllers` is a Map keyed on the object — and nothing anywhere looks at the class or\n// the fields. So `new Explorer()` twice is two realizations, two boots and two subscriptions\n// to the same underlying cell, quietly, because nothing fails.\n//\n// Two instances carrying the SAME arguments are still two instances. `new MediaUrl('n1')`\n// twice mints two URLs and holds two leases for one file. That is the trap, and \"remember to\n// memoise\" is not a defence: forgetting is silent, and it is the parameterised queries —\n// exactly the ones worth sharing — that need it.\n//\n// So a parameterised query declares `static of = queryOf(TheClass)` and is asked for rather\n// than constructed: the same arguments give back the same instance, which makes identity\n// mean logical equality and lets both ngin's cache and watchQuery's work. See bl/intern.js.\n// Parameterless queries are exported as singletons below. Either way the CLASSES stay\n// private to this module and only instances leave it — which is also what stops anyone\n// calling `new` on a shared query and quietly getting a second realization.\n\nimport { Query } from '@3sln/ngin';\nimport { queryOf } from './intern.js';\nimport { selectedNodesOf, draftScopesOf, collectionMenuOf, collectionAdminOf } from './services.js';\nimport { ExecCommandAction, LoadSidecarAction, ClearSidecarAction, LoadRotationAction, LoadGrantsAction, ShowCollectionAccessAction } from './actions.js';\nimport { ASSOC_KEY, describeOpener } from './openers.js';\nimport { rankCommands } from './match.js';\nimport { statusFactsOf, driveConditionOf } from './status.js';\nimport { launcherGroupsOf, launcherMode, searchHelpOf } from './launcher.js';\nimport { pickView } from './views.js';\nimport { prettyKey } from '../platform/keybindings.js';\n\n/**\n * A live query over one of the existing cell-backed services.\n *\n * The service exposes dodo's Cell protocol — `onDirty(fn)` to learn it changed, `getValue()`\n * to read it — and a query wants push. Bridging is two lines, so rather than write them per\n * service this takes the cell as a function of the leased `app`.\n *\n * It reads the CELL, never the service's own `state` field. Most services keep both in step\n * (`this.state = {...}; this.cell.setValue(this.state)`) so the two usually agree, but not\n * all of them do — `settings`' cell holds `effective()`, the defaults merged with the\n * overrides, and there is no `state` field at all. The existing snapshot passes cells to\n * `derive`, which hands it their values; reading the same way is what makes these queries\n * and the snapshot describe the same state rather than two subtly different ones.\n */\nclass ServiceQuery extends Query {\n /**\n * @param {string} dep the engine resource this views\n * @param {(resource: object) => {onDirty: Function, getValue: Function}} cellOf\n */\n /** Empty at the class level; the lease is per instance — see `deps` below. */\n static deps = [];\n\n /**\n * @param {string} dep the engine resource this views\n * @param {(resource: object) => {onDirty: Function, getValue: Function}} cellOf\n * @param {(value: any, resource: object) => any} [project] shape the value into a view\n */\n constructor(dep, cellOf, project) {\n super();\n this.dep = dep;\n this.cellOf = cellOf;\n this.project = project;\n }\n\n /**\n * Leased per instance rather than per class, because these all share one class and each\n * views a different resource. ngin leases `constructor.deps` AND `this.deps`, so an\n * instance can name its own.\n */\n get deps() {\n return [this.dep, 'appState'];\n }\n\n boot(resources, { notify }) {\n const cell = this.cellOf(resources[this.dep]);\n // A service may not exist in every build — `plugins` is absent when the plugin host is\n // not installed, which is why the snapshot has a `?? constant([])` beside it.\n if (!cell) {\n notify(null);\n return;\n }\n const resource = resources[this.dep];\n const read = () => (this.project ? this.project(cell.getValue(), resource) : cell.getValue());\n // The current value first: a subscriber that arrives after the last change should not\n // wait for the next one to find out what is true now.\n notify(read());\n hold(resources, this, cell.onDirty(() => notify(read())));\n }\n\n kill(resources) {\n release(resources, this);\n }\n}\n\n/**\n * Where a live query keeps its subscription.\n *\n * NOT on the query. These instances are module-level singletons, interned so that the same\n * arguments give back the same object — which is what makes ngin share one realization per\n * engine. Writing `this.off` on a shared instance is therefore writing per-REALIZATION\n * state onto something that outlives any one of them: two engines observing the same\n * instance boot it twice, the second overwrites the first's unsubscribe, and killing either\n * releases the wrong one while the other leaks.\n *\n * `appState` is a provider, so it is per engine; keyed by the instance, an entry is per\n * (engine, instance) — which is exactly one realization. The query stays a description of\n * what to watch, and nothing about it changes when it is being watched.\n */\nfunction hold(resources, query, off) {\n resources.appState.set(query, off);\n}\n\nfunction release(resources, query) {\n const off = resources.appState?.get(query);\n if (Array.isArray(off)) off.forEach((fn) => fn());\n else off?.();\n resources.appState?.delete(query);\n}\n\n// --- the drive -----------------------------------------------------------------\n\n/**\n * Items, selection, the open collection, and the gate — plus the nodes the selection\n * actually refers to.\n *\n * `selectedNodes` is folded in rather than left as something to call, because resolving it\n * is not trivial: ids alone only match the loaded page of the current collection, and the\n * launcher's rows come from search across every readable one. A view that hands over the\n * answer is the difference between a component knowing what is selected and a component\n * knowing how selection resolution works.\n */\nexport const explorer = new ServiceQuery('explorer', (r) => r.observe(), (v) => ({\n ...v,\n selectedNodes: selectedNodesOf(v),\n // The collection switcher's rows. In the view because it is a question about state, and\n // because the component that shows it could not otherwise see where it came from.\n collectionMenu: collectionMenuOf(v,\n (id) => new ExecCommandAction('collections.switch', id),\n () => new ExecCommandAction('collections.create')),\n // The administration screen's view of the same collections: what each is on, whether it\n // is sealed, and what may be done to it.\n collectionAdmin: collectionAdminOf(v, {\n open: (id) => new ExecCommandAction('collections.switch', id),\n scan: () => new ExecCommandAction('workbench.scanCollection'),\n rotate: () => new ExecCommandAction('workbench.openSettings'),\n create: () => new ExecCommandAction('collections.create'),\n access: (id) => new ShowCollectionAccessAction(id),\n }),\n}));\n/** Query text, results, and the palette's file list. */\nexport const search = new ServiceQuery('search', (r) => r.observe());\n/** Uploads and downloads in flight. */\nexport const transfers = new ServiceQuery('transfers', (r) => r.observe());\n/** Running tasks and standing issues, both sides of the wire. */\nexport const activity = new ServiceQuery('activity', (r) => r.observe());\n/** Conversations, tags and backlinks for the open item. */\nexport const social = new ServiceQuery('social', (r) => r.observe());\n/**\n * Online state, pinned files, and the queue waiting to sync.\n *\n * `pinnedIds` is folded in so a component can ask whether THIS file is pinned without\n * calling a method on the service to find out. A Set rather than a repeated scan: the\n * question is asked once per row.\n */\nexport const offline = new ServiceQuery('offline', (r) => r.observe(),\n (v) => ({ ...v, pinnedIds: new Set((v?.pins || []).map((p) => p.id)) }));\n/**\n * The open collection's key, and any rotation running over it.\n *\n * Keyed by collection, so switching collections is a different query rather than a change\n * to notice. `bootAction` loads it when the settings screen first looks — the alternative,\n * which the API-keys section still does, is to dispatch from inside a render behind a\n * module-level \"have I asked yet\" flag, which is a render with a side effect.\n *\n * It POLLS while a rotation is running, because the work is happening on the server and\n * there is nothing to push. The interval belongs to the realization: it starts when\n * somebody looks and stops when they look away, so a settings screen nobody has open costs\n * nothing.\n */\nexport const rotationFor = (collectionId) => RotationView.of(collectionId);\n\nclass RotationView extends Query {\n static deps = ['rotation', 'appState', 'engine'];\n static of = queryOf(RotationView);\n\n constructor(collectionId) {\n super();\n this.collectionId = collectionId;\n this.bootAction = new LoadRotationAction();\n }\n\n boot(r, { notify }) {\n const cell = r.rotation.observe();\n notify(cell.getValue());\n const off = cell.onDirty(() => notify(cell.getValue()));\n const timer = setInterval(() => {\n if (r.rotation.get().rotation?.status === 'running') r.engine.dispatch(new LoadRotationAction());\n }, 2500);\n hold(r, this, [off, () => clearInterval(timer)]);\n }\n\n kill(r) {\n release(r, this);\n }\n}\n/**\n * Who may do what on one collection.\n *\n * Keyed by collection and loaded by `bootAction`, the same shape as `rotationFor` above —\n * it loads when an administrator opens the row and stops mattering when they close it.\n * No polling: an ACL only changes when somebody changes it, and the action that does so\n * reloads.\n */\nexport const grantsFor = (collectionId) => GrantsView.of(collectionId);\n\nclass GrantsView extends Query {\n static deps = ['acl', 'appState'];\n static of = queryOf(GrantsView);\n\n constructor(collectionId) {\n super();\n this.collectionId = collectionId;\n this.bootAction = new LoadGrantsAction(collectionId);\n }\n\n boot(r, { notify }) {\n const cell = r.acl.observe();\n notify(cell.getValue());\n hold(r, this, cell.onDirty(() => notify(cell.getValue())));\n }\n\n kill(r) {\n release(r, this);\n }\n}\n\n/** The admin API-key list, with the unsubmitted draft resolved into what it would grant. */\nexport const apiKeys = new ServiceQuery('apiKeys', (r) => r.observe(),\n (v) => ({ ...v, draftScopes: draftScopesOf(v) }));\n\n// --- the shell -----------------------------------------------------------------\n\n/** Which activity is showing, and the rest of the shell's own state. */\nexport const workbench = new ServiceQuery('workbench', (r) => r.observe());\n/** The tab and panel stack. */\nexport const navigation = new ServiceQuery('navigation', (r) => r.observe());\n/** Dialogs, menus and panels. */\nexport const overlay = new ServiceQuery('overlay', (r) => r.observe());\n/** Toasts. */\nexport const notifications = new ServiceQuery('notifications', (r) => r.observe());\n/** Settings, defaults merged with overrides. */\nexport const settings = new ServiceQuery('settings', (r) => r.observe());\n/**\n * The settings SCHEMA, grouped by category, for the screen that edits them.\n *\n * Separate from `settings` rather than folded in, because that one emits the effective\n * values keyed by setting name — adding a `groups` key to it would put a made-up entry in\n * among the real ones.\n */\nexport const settingsGroups = new ServiceQuery('settings', (r) => r.observe(), (_v, r) => r.grouped());\n\n/** The when-clause keys: what is selected, what is open, what is focused. */\nexport const context = new ServiceQuery('context', (r) => r.observe());\n/** Phone, desktop or TV. */\nexport const viewport = new ServiceQuery('viewport', (r) => r.observe());\n/**\n * Whether this browser can transcribe on-device, and whether it is listening now.\n *\n * `canListen` is folded in: it is a question about the state, so a component should not\n * have to call the service to find out.\n */\nexport const voice = new ServiceQuery('voice', (r) => r.observe(),\n (v, r) => ({ ...v, canListen: !!r.canListen?.() }));\n/** Installed plugins; null where the plugin host is not installed. */\nexport const plugins = new ServiceQuery('plugins', (r) => r?.observe?.());\n/** What the UI is in the middle of doing: drafts, captures, ticked boxes. See viewState.js. */\nexport const viewState = new ServiceQuery('viewState', (r) => r.observe());\n\n/**\n * Contributions of one type — status items, openers, views.\n *\n * Parameterised, so it MUST memoise: a fresh instance per render would boot a second live\n * realization every frame and never share one. Keyed by the type, which is the only thing\n * that distinguishes them.\n */\nexport const contributionsOfType = (type) => ContributionsOfType.of(type);\n\nclass ContributionsOfType extends ServiceQuery {\n static of = queryOf(ContributionsOfType);\n\n constructor(type) {\n super('contributions', (r) => r.observeType(type));\n this.type = type;\n }\n}\n\n// --- view queries ---------------------------------------------------------------\n//\n// The ones above hand a service's state through unchanged. These COMPOSE: they answer a\n// question the UI actually asks, in plain renderable data, with every decision already made.\n//\n// The rule, and it is the important one: a query emits a VIEW, never a handle. A list of\n// commands is a list of descriptions — id, title, whether it is enabled right now — not the\n// command objects, and never a `run` function. Interaction goes the other way, as an action\n// carrying the thing's id. So a component renders what it is given and dispatches an id; it\n// does not reach into a service to find out whether to draw something, and it cannot reach\n// into one to make something happen.\n//\n// That is what takes `platform` out of the components. The status bar used to ask\n// `context.evaluate(item.when)` and `plugins.isAvailable(item)` per item, mid-render, which\n// is why it needed the bag at all. Those are view decisions; they belong on this side.\n\n/**\n * A query composed from several services rather than passed through from one.\n *\n * `sources` names the cells whose changes should recompute it; `project` builds the value.\n * Split apart because what a view DEPENDS on is usually wider than what it reads from —\n * the palette's command list changes when a contribution is registered, but also when a\n * context key flips, because that is what decides `enabled`.\n */\nclass ViewQuery extends Query {\n static deps = [];\n\n /**\n * @param {string[]} deps the engine resources this composes\n * @param {(r: object) => Array<{onDirty: Function}>} sources\n * @param {(r: object) => any} project must return plain data — see the note above\n */\n constructor(deps, sources, project) {\n super();\n this.deps = [...deps, 'appState'];\n this.sources = sources;\n this.project = project;\n }\n\n boot(r, { notify }) {\n const emit = () => notify(this.project(r));\n emit();\n hold(r, this, this.sources(r).filter(Boolean).map((c) => c.onDirty(emit)));\n }\n\n kill(r) {\n release(r, this);\n }\n}\n\n/** Contributions, context keys and plugin health — what most of these views depend on. */\nconst REGISTRY_DEPS = ['contributions', 'context', 'plugins', 'settings', 'commands', 'keybindings'];\nconst registries = (r) => [\n r.contributions.observe(),\n r.context.observe(),\n r.plugins?.observe?.(),\n r.settings.observe(),\n];\n\n/**\n * The command palette's list: every palette command, with its keybinding label resolved\n * and `enabled` already decided.\n *\n * No `when` expression and no handler. A component shows the title, greys out what is\n * disabled, and dispatches `ExecCommandAction(id)`.\n */\nexport const paletteCommands = new ViewQuery(REGISTRY_DEPS, registries, paletteCommandsOf);\n\nfunction paletteCommandsOf(r) {\n return r.commands.paletteCommands().map((c) => ({\n id: c.id,\n title: c.title ?? c.id,\n category: c.category ?? null,\n icon: c.icon ?? null,\n keybinding: r.keybindings.labelFor(c.id),\n // Two different reasons a command might not run, and they are labelled differently in\n // the palette: `available` is the plugin behind it being reachable, `enabled` also\n // folds in the when-clause. Collapsing them would tag a command disabled by context as\n // \"offline\", which is a false explanation rather than a vague one.\n available: r.commands.isAvailable(c),\n enabled: r.commands.isEnabled(c.id),\n }));\n}\n\n// The same list, narrowed to what was typed.\n//\n// Ranking used to happen mid-render, in two components, with two different algorithms (see\n// bl/match.js). The typed term is engine state — the palette's lives in the overlay — so\n// this is an ordinary query with no arguments, and the ranking is settled before a\n// component sees anything. The launcher's `!` mode ranks the same way inside\n// `launcherContent`, which already holds everything it needs.\nconst OVERLAY_DEPS = [...REGISTRY_DEPS, 'overlay', 'workbench'];\nconst withShell = (r) => [...registries(r), r.workbench.observe(), r.overlay.observe()];\n\n/** What the command palette should list right now. */\nexport const paletteMatches = new ViewQuery(OVERLAY_DEPS, withShell, (r) =>\n rankCommands(paletteCommandsOf(r), r.overlay.get().palette?.query || ''));\n\n\n/**\n * Plugin-contributed status bar slots, already filtered to the ones that should show.\n *\n * `when` and availability are resolved here rather than in the render, which is the whole\n * reason the status bar had to carry `platform` at all. `html` is still untrusted plugin\n * markup and is still sanitised at the point it becomes nodes — a query emitting plain data\n * says nothing about that data being safe.\n */\nexport const statusItems = new ViewQuery(REGISTRY_DEPS, registries, (r) => {\n return r.contributions.ofType('statusItem')\n .filter((i) => i.visible !== false && i.html)\n .filter((i) => !i.when || r.context.evaluate(i.when))\n .filter((i) => r.plugins?.isAvailable?.(i) ?? true)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0) || String(a.name).localeCompare(String(b.name)))\n .map((i) => ({\n id: i.id,\n slot: i.slot === 'left' ? 'left' : 'right',\n html: i.html,\n tooltip: i.tooltip ?? null,\n command: i.command ?? null,\n }));\n});\n\n/**\n * The effective keybindings, for the settings view: what is bound to what, right now.\n *\n * Everything the UI decides from is decided here — the command's title, whether the binding\n * is a user override, and whether another command answers to the same chord. That last one\n * is why the view carries `clash`: nothing rejects a collision and `#matchFor` scans in\n * reverse so the LAST registration wins, which means binding Delete onto ⌘P silently stops\n * Quick Open from opening. Detecting that needs the whole list at once, which is exactly the\n * sort of thing a component rendering one row cannot do and a view can.\n */\nexport const keybindings = new ViewQuery(REGISTRY_DEPS, registries, (r) => {\n const resolved = r.keybindings.resolved();\n const overrides = r.keybindings.overrides();\n const perKey = new Map();\n for (const b of resolved) perKey.set(b.key, (perKey.get(b.key) || 0) + 1);\n return resolved.map((b) => ({\n bindingId: b.bindingId,\n command: b.command,\n title: r.contributions.get(b.command)?.title ?? b.command,\n key: b.key,\n label: prettyKey(b.key),\n custom: !!overrides[b.bindingId],\n clash: perKey.get(b.key) > 1,\n }));\n});\n\n/**\n * What the launcher is showing: its groups, the view drawing them, and the help offered\n * when a search found nothing. See bl/launcher.js.\n *\n * Parameterised by `modal` — the double-shift overlay and the home screen are BOTH on\n * screen when the overlay is up, so which instance is rendering is the one input that\n * genuinely is not engine state. Two values, so interning gives at most two realizations.\n *\n * `view` is folded in because choosing it needs the items, and the items are right here.\n * That was the last thing keeping `pickView` outside the engine.\n */\nexport const launcherContent = (modal = false) => LauncherContent.of(!!modal);\n\nconst LAUNCHER_DEPS = [...REGISTRY_DEPS, 'explorer', 'search', 'workbench', 'navigation', 'offline', 'capabilities'];\n\nclass LauncherContent extends ViewQuery {\n static of = queryOf(LauncherContent);\n\n constructor(modal) {\n super(\n LAUNCHER_DEPS,\n (r) => [\n ...registries(r),\n r.explorer.observe(), r.search.observe(),\n r.workbench.observe(), r.navigation.observe(), r.offline.observe(),\n // Capabilities arrive after the first render — the provider hands out a cell that\n // fills in — so this has to be watched, not merely read, or the search help would\n // never appear on a drive whose prompt the server supplies.\n r.capabilities,\n ],\n (r) => {\n const wb = r.workbench.get();\n const off = r.offline.observe().getValue() || {};\n const slices = {\n ex: r.explorer.observe().getValue() || {},\n se: r.search.observe().getValue() || {},\n nav: r.navigation.observe().getValue() || {},\n query: wb.launch.query || '',\n commandMatches: rankCommands(paletteCommandsOf(r), (wb.launch.query || '').slice(1)),\n pinnedIds: new Set((off.pins || []).map((p) => p.id)),\n keys: commandKeysOf(r),\n };\n const groups = launcherGroupsOf(slices, this.modal);\n const mode = launcherMode(slices.query);\n return {\n groups,\n mode,\n // Which view draws them. Needs the nodes on screen, which is exactly what this\n // query has just worked out — see bl/views.js. This was the last thing keeping\n // the choice outside the engine.\n view: pickView(viewsOf(r), groups.flatMap((g) => g.items),\n mode === 'search' ? slices.se.resolved?.view ?? null : null),\n // What to offer when a search found nothing. Both halves are here now: whether\n // an offer applies at all (a search ran, it succeeded, it found nothing) and\n // what to suggest, which the server decides — see the `capabilities` resource.\n help: searchHelpOf({\n eligible: mode !== 'command'\n && !!slices.se.ran && !slices.se.loading && !slices.se.error\n && !(slices.se.results || []).length,\n caps: r.capabilities.getValue(),\n }),\n };\n },\n );\n this.modal = modal;\n }\n}\n\n/**\n * What the drive is doing and how full it is — see bl/status.js.\n *\n * Both shells render these, in different shapes. Derived once, here, because the last time\n * each worked them out for itself the phone bar showed a raw `col_…` id where the desktop\n * bar showed the collection's name.\n */\nexport const statusFacts = new ViewQuery(\n ['explorer', 'transfers', 'activity', 'offline'],\n (r) => [r.explorer.observe(), r.transfers.observe(), r.activity.observe(), r.offline.observe()],\n (r) => {\n const facts = statusFactsOf({\n ex: r.explorer.observe().getValue(),\n tr: r.transfers.observe().getValue(),\n act: r.activity.observe().getValue(),\n off: r.offline.observe().getValue(),\n });\n // The single most urgent thing, for a shell with room for one glyph. Folded in rather\n // than left to the phone, because deciding that offline outranks a standing problem is\n // a claim about what someone needs to know.\n return { ...facts, condition: driveConditionOf(facts) };\n },\n);\n\n/**\n * Every opener that could run right now — `when` and plugin availability already decided,\n * and the plugin's display name resolved into `source`.\n *\n * The SELECTOR is left on, which is the whole trick: which openers exist is a question\n * about engine state and belongs here, but which of them suits the file a component is\n * drawing is pure matching against data that component already holds. So the query answers\n * the reactive half and `openersFor` (a pure function, below) answers the rest — rather\n * than the query being parameterised by a node, which would need one live realization per\n * file on screen.\n *\n * Descriptors, not contributions: no `component`, no `entry`. Rendering resolves the\n * callable by id — see ui/components/openers.\n */\nexport const openers = new ViewQuery(REGISTRY_DEPS, registries, (r) =>\n r.contributions.ofType('opener')\n .filter((o) => !o.when || r.context.evaluate(o.when))\n .filter((o) => r.plugins?.isAvailable?.(o) ?? true)\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n .map((o) => describeOpener(o, r.plugins)));\n\n/**\n * How results can be drawn, and which one the user pinned.\n *\n * `saved` travels with the list because choosing between them needs both, and a component\n * that had to fetch the setting separately would be reaching for `settings` mid-render —\n * which is what this replaces. The CHOICE itself is `pickView`, a pure function, because it\n * also depends on the items on screen, and items are not something to key a query by.\n *\n * `render` and `move` come along. The rule about a query emitting a view rather than a\n * handle is about SIDE EFFECTS — a `run()` that mutates the drive is a back door around\n * actions and the feed. A view's renderer is a pure vnode builder over the arguments it is\n * given, so passing it is passing data; making the component look it up by id would have\n * been the registry access this is trying to remove, relocated rather than deleted.\n */\nexport const views = new ViewQuery(REGISTRY_DEPS, registries, viewsOf);\n\nfunction viewsOf(r) {\n return {\n views: r.contributions.ofType('view')\n .filter((v) => !v.when || r.context.evaluate(v.when))\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n .map((v) => ({\n id: v.id,\n title: v.title ?? v.name ?? v.id,\n icon: v.icon ?? null,\n match: v.match ?? null,\n render: v.render,\n move: v.move,\n })),\n saved: r.settings.get('explorer.view') || null,\n };\n}\n\n/**\n * The saved \"always open .pdf with…\" choices, for the settings screen.\n *\n * `missing` is decided here: an association can name an opener that has since been\n * uninstalled, and the row has to say so rather than showing a bare id.\n */\nexport const openerAssociations = new ViewQuery(REGISTRY_DEPS, registries, (r) => {\n const assoc = r.settings.get(ASSOC_KEY) || {};\n return Object.entries(assoc).map(([typeKey, openerId]) => {\n const opener = r.contributions.get(openerId);\n return { typeKey, openerId, openerTitle: opener?.title || openerId, missing: !opener };\n });\n});\n\n/**\n * The conversation, tags and backlinks for one file.\n *\n * Keyed by node, and the KEY is what replaces a reaction. This used to be an `effect` in\n * bl/index.js watching the nav stack with a module-scoped `let lastTab` for change\n * detection, calling `social.loadSidecar` directly — a subscription outside the engine\n * doing effect work, and the last place that still worked that way.\n *\n * ngin already brackets this. `bootAction` is dispatched when the first observer arrives\n * and `killAction` when the last one leaves, so opening a file loads its conversation and\n * closing it clears it, because the query is alive for exactly as long as something is\n * looking. Switching files is not a change to detect: it is one instance dying and another\n * booting.\n *\n * The clear is SCOPED to this node. Kill and boot are not ordered against each other, so\n * switching from A to B can kill A after B has booted — an unscoped clear would then wipe\n * the sidecar B just asked for. It is the same race the loading path already guards, and\n * naming the node is what makes it impossible rather than unlikely.\n */\nexport const sidecarFor = (nodeId) => Sidecar.of(nodeId);\n\nclass Sidecar extends ServiceQuery {\n static of = queryOf(Sidecar);\n\n constructor(nodeId) {\n super('social', (r) => r.observe(), (v) => v?.sidecar ?? null);\n this.nodeId = nodeId;\n this.bootAction = new LoadSidecarAction(nodeId);\n this.killAction = new ClearSidecarAction(nodeId);\n }\n}\n\n/**\n * A file's text, capped.\n *\n * The first query keyed by something unbounded, which is what `queryOf` interning and the\n * weak eviction were built for: one instance per (node, cap), shared by every viewer\n * looking at that file, and collected once nothing is. A viewer that scrolls out of the\n * tree stops observing, ngin kills the realization, and the text goes with it — no cache\n * to invalidate and nothing to remember to release.\n *\n * `size` is a hint the API uses to decide whether a range request is worth it. It is part\n * of the key because it is part of the request, and it is derived from the node id anyway,\n * so it cannot split one file into two entries.\n *\n * Capped at the TRANSFER, not just the render: a character limit in a viewer stops us\n * laying out a huge document, but the whole file still crosses the wire without this.\n */\nexport class FileText extends Query {\n static deps = ['api'];\n\n static of = queryOf(FileText);\n\n constructor(nodeId, maxBytes, size) {\n super();\n this.nodeId = nodeId;\n this.maxBytes = maxBytes;\n this.size = size;\n }\n\n async boot({ api }, { notify }) {\n notify(await api.readTextCapped(this.nodeId, { maxBytes: this.maxBytes, size: this.size }));\n }\n\n kill() {}\n}\n\n/**\n * Command id → its keybinding label, for anything that shows a shortcut next to an action.\n *\n * Hardcoding \"⌘⇧L\" told a Windows or Linux user about a key their machine does not have,\n * and told everyone the default even after they had rebound it. A map rather than a list\n * because every caller is asking about one command it already knows the id of.\n */\nexport const commandKeys = new ViewQuery(REGISTRY_DEPS, registries, commandKeysOf);\n\nfunction commandKeysOf(r) {\n return Object.fromEntries(r.keybindings.resolved()\n .map((b) => [b.command, r.keybindings.labelFor(b.command)])\n .filter(([, label]) => label));\n}\n\n/**\n * What this deployment can do.\n *\n * A plain view over the `capabilities` resource — see bl/index.js, where the provider hands\n * out a cell that fills in once the server answers. This used to be a query that kept the\n * PROMISE on its own instance so a re-boot would not re-fetch, which is a cache with no\n * invalidation living inside a view; and it needed `initial = null` to stop the shell going\n * PENDING while the request was in flight. Both go away when the fetch belongs to the\n * provider: the cell already holds null, and reading a cell is all this does.\n */\nexport const capabilities = new ServiceQuery('capabilities', (r) => r);\n",
84
84
  "// Inline SVG icons. One function, a path table, sized via viewBox 24. Using\n// dodo's element helpers so icons are just vnodes like everything else.\n\nimport { dd } from '../runtime.js';\n\nconst { svg, h } = dd;\n\n// Each entry is an array of <path>/<primitive> specs (attrs use SVG names).\nconst PATHS = {\n link: [{ d: 'M10 13a5 5 0 0 0 7.07 0l3-3A5 5 0 0 0 13 3l-1.5 1.5' }, { d: 'M14 11a5 5 0 0 0-7.07 0l-3 3A5 5 0 0 0 11 21l1.5-1.5' }],\n file: [{ d: 'M6 3h8l5 5v13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z' }, { d: 'M14 3v5h5' }],\n 'file-text': [{ d: 'M6 3h8l5 5v13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z' }, { d: 'M14 3v5h5M9 13h6M9 17h6M9 9h2' }],\n 'file-image': [{ d: 'M6 3h8l5 5v13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z' }, { d: 'M14 3v5h5' }, { d: 'M8.5 15l2-2 3 3 2-1.5' }, { d: 'M10 12a1 1 0 1 0 0-.01' }],\n 'file-audio': [{ d: 'M6 3h8l5 5v13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z' }, { d: 'M14 3v5h5M10 12v5M13 10v9' }],\n 'file-video': [{ d: 'M6 3h8l5 5v13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z' }, { d: 'M14 3v5h5M10 12l4 2.5-4 2.5z' }],\n book: [{ d: 'M4 5a2 2 0 0 1 2-2h13v16H6a2 2 0 0 0-2 2z' }, { d: 'M4 19a2 2 0 0 1 2-2h13' }],\n search: [{ d: 'M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14zM20 20l-3.5-3.5' }],\n mic: [{ d: 'M12 3a3 3 0 0 0-3 3v6a3 3 0 0 0 6 0V6a3 3 0 0 0-3-3z' }, { d: 'M5 11a7 7 0 0 0 14 0M12 18v3M9 21h6' }],\n command: [{ d: 'M8 6a2 2 0 1 0-2 2h12a2 2 0 1 0-2-2v12a2 2 0 1 0 2-2H6a2 2 0 1 0 2 2z' }],\n gear: [{ d: 'M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z' }, { d: 'M19 12a7 7 0 0 0-.1-1.2l2-1.6-2-3.4-2.4 1a7 7 0 0 0-2-1.2L14 2h-4l-.5 2.6a7 7 0 0 0-2 1.2l-2.4-1-2 3.4 2 1.6A7 7 0 0 0 5 12a7 7 0 0 0 .1 1.2l-2 1.6 2 3.4 2.4-1a7 7 0 0 0 2 1.2L10 22h4l.5-2.6a7 7 0 0 0 2-1.2l2.4 1 2-3.4-2-1.6A7 7 0 0 0 19 12z' }],\n upload: [{ d: 'M12 16V4M7 9l5-5 5 5M4 20h16' }],\n download: [{ d: 'M12 4v12M7 11l5 5 5-5M4 20h16' }],\n trash: [{ d: 'M4 7h16M9 7V4h6v3M6 7l1 13h10l1-13M10 11v6M14 11v6' }],\n refresh: [{ d: 'M20 11a8 8 0 1 0-.5 4M20 5v6h-6' }],\n 'chevron-right': [{ d: 'M9 6l6 6-6 6' }],\n 'chevron-left': [{ d: 'M15 6l-6 6 6 6' }],\n 'chevron-down': [{ d: 'M6 9l6 6 6-6' }],\n close: [{ d: 'M6 6l12 12M18 6L6 18' }],\n tag: [{ d: 'M4 4h6.5a1 1 0 0 1 .7.3l8.5 8.5a1 1 0 0 1 0 1.4l-5.5 5.5a1 1 0 0 1-1.4 0L4.3 11.2a1 1 0 0 1-.3-.7V4z' }, { d: 'M8 8a0.6 0.6 0 1 0 0-.01' }],\n play: [{ d: 'M8 5v14l11-7z', fill: 'currentColor', stroke: 'none' }],\n pause: [{ d: 'M8 5h3v14H8zM13 5h3v14h-3z', fill: 'currentColor', stroke: 'none' }],\n 'skip-back': [{ d: 'M11 6v12L3 12zM13 6l8 6-8 6zM21 6v12', fill: 'none' }],\n 'skip-forward': [{ d: 'M13 6v12l8-6zM3 6l8 6-8 6zM3 6v12' }],\n 'back-30': [{ d: 'M11 8a7 7 0 1 0 7 7' }, { d: 'M11 4l-3 4 4 1' }],\n 'fwd-30': [{ d: 'M13 8a7 7 0 1 1-7 7' }, { d: 'M13 4l3 4-4 1' }],\n plug: [{ d: 'M9 3v6M15 3v6M6 9h12v3a6 6 0 0 1-12 0zM12 18v3' }],\n bell: [{ d: 'M18 8a6 6 0 1 0-12 0c0 7-3 9-3 9h18s-3-2-3-9z' }, { d: 'M13.73 21a2 2 0 0 1-3.46 0' }],\n files: [{ d: 'M4 4h9l3 3v3M8 8h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2v-9a2 2 0 0 1 2-2z' }],\n dots: [{ d: 'M5 12h.01M12 12h.01M19 12h.01' }],\n check: [{ d: 'M5 12l5 5L20 6' }],\n plus: [{ d: 'M12 5v14M5 12h14' }],\n 'arrow-up': [{ d: 'M12 19V5M6 11l6-6 6 6' }],\n star: [{ d: 'M12 3l2.7 5.6 6.1.9-4.4 4.3 1 6.1L12 17l-5.4 2.9 1-6.1L3.2 9.5l6.1-.9z' }],\n info: [{ d: 'M12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18zM12 11v5M12 8h.01' }],\n warn: [{ d: 'M12 3l9 16H3zM12 10v4M12 17h.01' }],\n x: [{ d: 'M6 6l12 12M18 6L6 18' }],\n list: [{ d: 'M8 6h12M8 12h12M8 18h12M4 6h.01M4 12h.01M4 18h.01' }],\n grid: [{ d: 'M4 4h7v7H4zM13 4h7v7h-7zM4 13h7v7H4zM13 13h7v7h-7z' }],\n};\n\n// Map a node to an icon name via the shared file-type classifier.\nexport { iconForKind as iconForNode } from '../bl/fileType.js';\n\nexport function icon(name, { size = 18, strokeWidth = 1.6, className } = {}) {\n // `Object.hasOwn`, not a bare lookup: `PATHS` is a plain object, so a contribution\n // declaring `\"icon\": \"constructor\"` (kept verbatim from the manifest) otherwise\n // resolves to a function and takes down the whole render with `specs.map is not a\n // function`.\n const specs = Object.hasOwn(PATHS, name) ? PATHS[name] : PATHS.file;\n // `class` through `$attrs`, not `className`. An SVGElement's `className` is a\n // read-only SVGAnimatedString, so the prop is written out as a literal `className=\"…\"`\n // attribute — which no selector matches. `.sheet-row .sr-go` was styling nothing.\n return svg(\n {\n $attrs: {\n viewBox: '0 0 24 24', width: size, height: size, fill: 'none',\n stroke: 'currentColor', 'stroke-width': strokeWidth,\n 'stroke-linecap': 'round', 'stroke-linejoin': 'round',\n ...(className ? { class: className } : {}),\n },\n },\n ...specs.map((s) => h('path', { $attrs: filterAttrs(s) })),\n );\n}\n\nfunction filterAttrs(s) {\n const out = { d: s.d };\n if (s.fill) out.fill = s.fill;\n if (s.stroke) out.stroke = s.stroke;\n return out;\n}\n",
85
85
  "// Formatting helpers for the UI.\n\nexport function bytes(n) {\n if (n == null || Number.isNaN(n)) return '—';\n const u = ['B', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n let v = n;\n while (v >= 1024 && i < u.length - 1) {\n v /= 1024;\n i++;\n }\n return `${v >= 100 || i === 0 ? Math.round(v) : v.toFixed(1)} ${u[i]}`;\n}\n\nexport function duration(sec) {\n if (sec == null || Number.isNaN(sec) || !isFinite(sec)) return '0:00';\n sec = Math.max(0, Math.floor(sec));\n const h = Math.floor(sec / 3600);\n const m = Math.floor((sec % 3600) / 60);\n const s = sec % 60;\n return h > 0 ? `${h}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}` : `${m}:${String(s).padStart(2, '0')}`;\n}\n\nexport function relativeDate(ms) {\n if (!ms) return '';\n const diff = Date.now() - ms;\n const day = 86400000;\n if (diff < 60000) return 'just now';\n if (diff < 3600000) return `${Math.floor(diff / 60000)}m ago`;\n if (diff < day) return `${Math.floor(diff / 3600000)}h ago`;\n if (diff < 7 * day) return `${Math.floor(diff / day)}d ago`;\n return new Date(ms).toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: diff > 330 * day ? 'numeric' : undefined });\n}\n",
86
86
  "// The `@someone` syntax in a comment body.\n//\n// A sibling of bl/tagQuery.js, which parses the `#tag` syntax — and it sat in the social\n// COMPONENT instead, a regex splitting a text format mid-render. Parsing the drive's own\n// notation is business-layer work wherever it happens to be displayed, and having half of\n// it here and half of it in a view is how the two end up disagreeing about what a name\n// may contain.\n//\n// Two spellings, because they arrive from different places. The resolved form\n// `@[Display Name](user-id)` is what the server writes once it knows who was meant; the\n// bare form `@handle` is what someone types before anything has resolved it.\n\nconst MENTION = /@\\[([^\\]]+)\\]\\(([^)]+)\\)|(?:^|\\s)@([a-zA-Z0-9._@-]{2,})/g;\n\n/**\n * Split a comment body into runs of plain text and mentions.\n *\n * @param {string} body\n * @returns {Array<{type: 'text', value: string} | {type: 'mention', name: string, id: string|null}>}\n */\nexport function parseMentions(body) {\n const text = body || '';\n const out = [];\n const re = new RegExp(MENTION.source, 'g'); // own lastIndex — the module-level one is shared\n let last = 0;\n let m;\n while ((m = re.exec(text))) {\n // The bare form's match deliberately includes the space in front of the `@`, so that\n // \"a@b\" is an address rather than a mention. That leading space belongs to the text\n // run, not to the mention.\n const bare = !!m[3];\n const start = m.index + (bare && m[0].startsWith(' ') ? 1 : 0);\n if (start > last) out.push({ type: 'text', value: text.slice(last, start) });\n out.push({ type: 'mention', name: m[1] || m[3], id: m[2] || null });\n last = re.lastIndex;\n }\n if (last < text.length) out.push({ type: 'text', value: text.slice(last) });\n return out;\n}\n",
@@ -98,7 +98,7 @@
98
98
  "import { dd } from '../../runtime.js';\nimport { eventToKey } from '../../platform/keybindings.js';\nimport { icon } from '../icon.js';\nimport { region } from '../region.js';\nimport * as q from '../../bl/queries.js';\nimport { rotationFor } from '../../bl/queries.js';\nimport { watchQuery } from '../../bl/watchQuery.js';\nimport { BeginRotationAction, CancelRotationAction, CopyTextAction, ExecCommandAction, PatchApiKeyDraftAction, RebindKeyAction, RememberOpenerAction, SetSettingAction, SetViewStateAction, ToggleApiKeyCapAction } from '../../bl/actions.js';\n\nconst { div, h2, h3, p, span, select, option, input, label, button, ul, li, code } = dd;\n\nexport default function settingsView(state, ui) {\n const groups = state.settingsGroups || new Map();\n return div({ className: 'editor' },\n div({ className: 'stage' },\n div({ className: 'settings' },\n h2('Settings'),\n p({ className: 'sub' }, 'Preferences are stored in this browser. Plugins contribute their own settings here too.'),\n ...groups.map((g) => group(g, ui)),\n mcpSection(ui, state.caps),\n encryptionSection(state, ui),\n apiKeysSection(state, ui),\n openersSection(state.assoc, ui),\n keybindingsSection(ui),\n ),\n ),\n );\n}\n\nfunction group(g, ui) {\n return div({ className: 'group' },\n h3(g.category),\n ...g.items.map((s) => setting(s, ui)),\n );\n}\n\nfunction setting(s, ui) {\n return div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, s.title || s.key),\n s.description ? div({ className: 'd' }, s.description) : null,\n ),\n div({ className: 'control' }, control(s, ui)),\n );\n}\n\nfunction control(s, ui) {\n const set = (v) => ui.engine.dispatch(new SetSettingAction(s.key, v));\n if (s.type === 'boolean') {\n return label({ className: 'switch' },\n input({ type: 'checkbox', checked: !!s.value }).on({ change: (e) => set(e.target.checked) }),\n span({ className: 'track' }),\n );\n }\n if (s.type === 'enum') {\n return select({ className: 'input' },\n ...s.enum.map((opt, i) =>\n option({ value: opt, selected: s.value === opt }, (s.enumLabels && s.enumLabels[i]) || opt),\n ),\n ).on({ change: (e) => set(e.target.value) });\n }\n if (s.type === 'number') {\n // Guard against a cleared field (Number('') === 0) or a paste yielding NaN, and\n // clamp to the declared range so downstream consumers never see an invalid value.\n const commit = (e) => {\n let n = Number(e.target.value);\n if (e.target.value === '' || Number.isNaN(n)) { e.target.value = s.value; return; }\n if (s.minimum != null) n = Math.max(s.minimum, n);\n if (s.maximum != null) n = Math.min(s.maximum, n);\n e.target.value = n;\n set(n);\n };\n return input({\n className: 'input', type: 'number', value: s.value,\n $attrs: { min: s.minimum ?? '', max: s.maximum ?? '' },\n }).on({ change: commit });\n }\n return input({ className: 'input', value: s.value ?? '' }).on({ change: (e) => set(e.target.value) });\n}\n// Connecting an AI agent to this drive.\n//\n// Read-only, and deliberately so. Everything here is DEPLOYMENT configuration — which\n// identity provider issues the tokens, where the endpoint lives — supplied by the\n// environment or by whoever constructed the server. Pointing the drive at a different\n// authorization server changes who can reach every file in it, which is a `docker run`\n// decision rather than a preference, and a settings field would make it look otherwise.\n//\n// What this section is FOR is the two questions a self-hoster has and currently cannot\n// answer: what URL do I paste into my assistant, and why does it say 401. The second is\n// why `needsAuthorizationServer` is called out as a problem — a drive with auth on and\n// no authorization server configured looks perfectly set up and cannot work.\n//\n// It reads straight off `capabilities`, which the app already fetched at startup, so\n// there is no loading state and nothing to go stale.\nfunction mcpSection(ui, caps) {\n if (!caps) return null; // capabilities never arrived; the shell has bigger problems\n const mcp = caps.mcp;\n const auth = caps.auth || { authorizationServers: [], source: 'none' };\n if (!mcp?.enabled) {\n return div({ className: 'group' }, h3('AI agents (MCP)'),\n p({ className: 'sub' }, 'MCP is switched off on this server. Set TROVE_MCP=on to enable it.'));\n }\n\n // The \"denied clipboard still has to hand the value over\" reasoning moved into\n // CopyTextAction, which is where the other three copies of it went too.\n const copy = (text) => () => ui.engine.dispatch(new CopyTextAction(text));\n\n const servers = auth.authorizationServers || [];\n // Where the value came from matters when it is wrong: \"we took this from your JWT\n // issuer\" points at a different file than \"you set this\".\n const provenance = auth.source === 'jwt-issuer' ? 'from TROVE_JWT_ISSUER'\n : auth.source === 'configured' ? 'from TROVE_AUTH_SERVER' : null;\n\n return div({ className: 'group' },\n h3('AI agents (MCP)'),\n p({ className: 'sub' }, 'Point an AI assistant at this drive. It signs in as you and sees exactly the collections you can see.'),\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Server URL'),\n div({ className: 'd' }, 'Paste this into your assistant\\u2019s MCP settings.'),\n ),\n div({ className: 'control mcp-url' },\n span({ className: 'mono' }, mcp.endpoint),\n button({ className: 'btn small', title: 'Copy' }, icon('link', { size: 13 })).on({ click: copy(mcp.endpoint) }),\n ),\n ),\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Sign-in required'),\n div({ className: 'd' }, mcp.requiresAuth\n ? 'Agents must present a token, the same one this browser uses.'\n : 'This drive is open, so agents connect without a token \\u2014 exactly like the web app does.'),\n ),\n div({ className: 'control' }, span({ className: 'mono' }, mcp.requiresAuth ? 'Yes' : 'No')),\n ),\n\n // The failure that looks like success. Before the value, because it is the answer\n // to \"I set this up and my agent just says 401\".\n mcp.needsAuthorizationServer\n ? div({ className: 'mcp-warn' }, icon('warn', { size: 15 }),\n span('This drive requires a token but no authorization server is set, so an agent has '\n + 'nowhere to sign in. Set TROVE_AUTH_SERVER (or TROVE_JWT_ISSUER) to the issuer URL '\n + 'of your identity provider and restart.'))\n : null,\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Authorization server'),\n div({ className: 'd' }, 'Where clients are sent to sign in \\u2014 for the whole drive, not just for agents. '\n + 'Set with TROVE_AUTH_SERVER; defaults to TROVE_JWT_ISSUER when that is set.'),\n ),\n div({ className: 'control' },\n servers.length\n ? span({ className: 'mono' }, servers.join(', ') + (provenance ? ` (${provenance})` : ''))\n : span({ className: 'mono muted' }, 'not set'),\n ),\n ),\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Discovery document'),\n div({ className: 'd' }, 'What a client reads to find out how to authenticate (RFC 9728).'),\n ),\n div({ className: 'control mcp-url' }, span({ className: 'mono small' }, auth.metadataUrl)),\n ),\n );\n}\n\n// Default openers per file type — the \"always use this\" choices from the opener\n// chooser. Each row shows the type → viewer; the × forgets it (so the next open of\n// that type asks again). Empty when the user hasn't set any defaults.\n// --- API keys -------------------------------------------------------------------\n\nconst CAPS = [\n { id: 'read', label: 'Read', hint: 'list and download' },\n { id: 'write', label: 'Write', hint: 'upload and rename' },\n { id: 'delete', label: 'Delete', hint: 'trash and purge' },\n { id: 'admin', label: 'Admin', hint: 'includes all of the above' },\n];\n\nconst ANY = '*';\n\n/** One-shot guard so a render does not queue a second load while the first is in flight. */\nlet keysRequested = false;\n\nfunction apiKeysSection(state, ui) {\n const keys = state.keys || {};\n\n // Loaded lazily, when Settings is first opened — the list is admin-only and most\n // sessions never need it, so it is not worth a request at boot.\n if (!keysRequested && !keys.loaded && !keys.loading) {\n keysRequested = true;\n ui.engine.dispatch(new ExecCommandAction('keys.load'));\n }\n\n // A non-admin gets a 403 here, which is the correct answer rather than an error worth\n // showing. The section simply is not part of their settings screen.\n if (keys.error && !keys.keys?.length) return null;\n if (!keys.loaded) return null;\n\n const collections = state.ex?.collections || [];\n\n return div({ className: 'group' },\n h3('API keys'),\n p({ className: 'sub' },\n 'Give a script or a service access without giving it an account. A key carries '\n + 'capabilities and no identity, so anything it does is attributed to the key rather '\n + 'than to a person \\u2014 and it can only reach the collections you scope it to.'),\n\n keys.minted ? mintedBanner(keys.minted, ui) : null,\n keys.draft ? draftForm(keys, collections, ui) : null,\n\n !keys.draft && !keys.minted\n ? div({ className: 'keys-actions' },\n button({ className: 'btn' }, icon('plus', { size: 14 }), 'New key')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('keys.new')) }))\n : null,\n\n keys.keys?.length\n ? div({ className: 'keys-list' }, ...keys.keys.map((k) => keyRow(k, keys, collections, ui)))\n : div({ className: 'keys-empty' }, 'No keys yet.'),\n );\n}\n\n/**\n * The secret, shown once.\n *\n * Deliberately loud and deliberately blocking the rest of the section: the server stored\n * only a hash, so this is the only moment the value exists anywhere. A quiet row in a\n * table would be dismissed without being copied.\n */\nfunction mintedBanner(minted, ui) {\n const copy = () => ui.engine.dispatch(new CopyTextAction(minted.secret, 'Key copied'));\n return div({ className: 'key-minted' },\n div({ className: 'key-minted-head' },\n icon('warn', { size: 15 }),\n span(`\\u201c${minted.key.name}\\u201d is ready \\u2014 copy it now.`),\n ),\n p({ className: 'key-minted-note' },\n 'This is the only time it can be shown. It is stored as a hash, so it cannot be '\n + 'recovered \\u2014 if it is lost, revoke the key and make another.'),\n div({ className: 'key-secret' },\n code({ className: 'mono' }, minted.secret),\n button({ className: 'btn small', title: 'Copy' }, icon('link', { size: 13 })).on({ click: copy }),\n ),\n div({ className: 'keys-actions' },\n button({ className: 'btn' }, 'Done').on({ click: () => ui.engine.dispatch(new ExecCommandAction('keys.dismissMinted')) }),\n ),\n );\n}\n\nfunction draftForm(keys, collections, ui) {\n const draft = keys.draft;\n // Resolved by the apiKeys view: what this draft would actually grant, or null when it\n // would grant nothing.\n const scopes = keys.draftScopes;\n const ready = !!draft.name.trim() && !!scopes;\n\n return div({ className: 'key-form' },\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Name'),\n div({ className: 'd' }, 'What it is for. This is what the list shows, so make it recognisable.'),\n ),\n div({ className: 'control' },\n input({ className: 'input', value: draft.name, $attrs: { placeholder: 'CI uploader' } })\n .on({ input: (e) => ui.engine.dispatch(new PatchApiKeyDraftAction({ name: e.target.value })) }),\n ),\n ),\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Expires after'),\n div({ className: 'd' }, 'Days from now. Leave blank and it never expires.'),\n ),\n div({ className: 'control' },\n input({\n className: 'input', type: 'number', value: draft.expiresInDays,\n $attrs: { min: '1', max: '3650', placeholder: 'never' },\n }).on({ input: (e) => ui.engine.dispatch(new PatchApiKeyDraftAction({ expiresInDays: e.target.value })) }),\n ),\n ),\n\n div({ className: 'key-scopes' },\n div({ className: 'key-scopes-head' },\n div({ className: 't' }, 'What it may do'),\n div({ className: 'd' },\n 'Per collection. A key with nothing ticked grants nothing and cannot be created.'),\n ),\n scopeRow({ id: ANY, name: 'All collections', wildcard: true }, draft, ui),\n ...collections.map((c) => scopeRow(c, draft, ui)),\n ),\n\n div({ className: 'keys-actions' },\n button({ className: 'btn primary', $attrs: ready ? {} : { disabled: 'true' } },\n keys.busy === 'mint' ? 'Creating\\u2026' : 'Create key')\n .on({ click: () => ready && ui.engine.dispatch(new ExecCommandAction('keys.mint')) }),\n button({ className: 'btn' }, 'Cancel').on({ click: () => ui.engine.dispatch(new ExecCommandAction('keys.cancel')) }),\n ),\n );\n}\n\nfunction scopeRow(collection, draft, ui) {\n const held = new Set(draft.caps[collection.id] || []);\n return div({ className: `key-scope ${collection.wildcard ? 'wildcard' : ''}` },\n div({ className: 'key-scope-name' },\n icon(collection.wildcard ? 'grid' : 'files', { size: 14 }),\n span(collection.name || collection.id),\n ),\n div({ className: 'key-scope-caps' },\n ...CAPS.map((c) => label({ className: `cap ${held.has(c.id) ? 'on' : ''}`, title: c.hint },\n input({ type: 'checkbox', checked: held.has(c.id) })\n .on({ change: () => ui.engine.dispatch(new ToggleApiKeyCapAction(collection.id, c.id)) }),\n span(c.label),\n )),\n ),\n );\n}\n\nfunction keyRow(k, keys, collections, ui) {\n const revoked = !!k.revokedAt;\n const expired = k.expiresAt != null && k.expiresAt <= Date.now();\n const dead = revoked || expired;\n return div({ className: `key-row ${dead ? 'dead' : ''}` },\n div({ className: 'key-row-main' },\n div({ className: 'key-row-name' },\n span({ className: 't' }, k.name),\n revoked ? span({ className: 'key-tag' }, 'revoked')\n : expired ? span({ className: 'key-tag' }, 'expired') : null,\n ),\n div({ className: 'key-row-scopes' }, ...scopeSummary(k, collections)),\n div({ className: 'key-row-meta' }, metaLine(k)),\n ),\n !dead\n ? button({\n className: 'btn small danger',\n $attrs: keys.busy === k.id ? { disabled: 'true' } : {},\n }, keys.busy === k.id ? '\\u2026' : 'Revoke').on({ click: () => ui.engine.dispatch(new ExecCommandAction('keys.revoke', k.id)) })\n : null,\n );\n}\n\nfunction scopeSummary(k, collections) {\n // The name if we know it, the id if we do not. A key can outlive the collection it was\n // scoped to, and showing a bare id then is more honest than showing nothing — it is\n // also the thing you would search for to find out what happened to it.\n const nameOf = (id) => collections.find((c) => c.id === id)?.name || id;\n return (k.scopes || []).map((s) => span({ className: 'key-chip' },\n span({ className: 'where' }, s.collectionId === ANY ? 'all collections' : nameOf(s.collectionId)),\n span({ className: 'what' }, s.capabilities.join(' \\u00b7 ')),\n ));\n}\n\nfunction metaLine(k) {\n const when = (ms) => new Date(ms).toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n const bits = [`created ${when(k.createdAt)}`];\n if (k.createdBy) bits.push(`by ${k.createdBy}`);\n // \"Never used\" is the more useful of the two facts: it is how you find the key nobody\n // needs and can safely revoke.\n bits.push(k.lastUsedAt ? `last used ${when(k.lastUsedAt)}` : 'never used');\n if (k.expiresAt) bits.push(`expires ${when(k.expiresAt)}`);\n return bits.join(' \\u00b7 ');\n}\n\n/**\n * The open collection's key: which one it is, and moving it to a new one.\n *\n * Only for an encrypted collection, and only for an admin — a non-admin gets a 403 reading\n * the rotation state, which is the correct answer rather than an error, so the section\n * simply is not drawn.\n */\nfunction encryptionSection(state, ui) {\n const collectionId = state.ex?.collectionId;\n const enc = state.ex?.collections?.find((c) => c.id === collectionId)?.encryption;\n if (!enc?.enabled) return null;\n // Watching the query is what LOADS it — its bootAction reads the rotation state and its\n // realization polls while one is running. Nothing fetches while this screen is closed.\n return ui.watch(watchQuery(ui.engine, rotationFor(collectionId)), (rot) => encryptionBody(enc, rot || {}, ui));\n}\n\nfunction encryptionBody(enc, rot, ui) {\n const running = rot.rotation?.status === 'running';\n const est = rot.estimate;\n\n return div({ className: 'group' },\n h3('Encryption'),\n p({ className: 'sub' }, 'Files in this collection are sealed before they leave your browser. The drive holds the key.'),\n\n // The only thing that identifies which key the collection is on, and what a sideloaded\n // object is matched against — so it has to be somewhere findable and copyable.\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Key fingerprint'),\n div({ className: 'd' }, 'Identifies the key this collection is on.'),\n ),\n div({ className: 'control' },\n button({ className: 'btn small', title: 'Copy' }, dd.h('code', enc.fingerprint))\n .on({ click: () => ui.engine.dispatch(new CopyTextAction(enc.fingerprint, 'Fingerprint copied')) }),\n ),\n ),\n\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, running ? 'Rotating the key' : 'Rotate the key'),\n div({ className: 'd' }, running\n ? `${rot.rotation.moved} moved${rot.rotation.failed ? `, ${rot.rotation.failed} failed` : ''} — this continues in the background.`\n : rotationCost(est)),\n ),\n div({ className: 'control' },\n running\n ? button({ className: 'btn small', disabled: !!rot.busy }, 'Stop')\n .on({ click: () => ui.engine.dispatch(new CancelRotationAction()) })\n : button({ className: 'btn small', disabled: !!rot.busy }, 'Rotate')\n .on({ click: () => ui.engine.dispatch(new BeginRotationAction()) }),\n ),\n ),\n running\n ? null\n // Said before it is started rather than after: what has moved stays moved, so this\n // is not a job that can be undone by regretting it.\n : div({},\n rotationBill(est),\n p({ className: 'sub' }, 'Every file is re-sealed under a new key and the old one is retired once nothing is left on it. Files stay readable throughout.'),\n ),\n );\n}\n\n/**\n * What a rotation would cost, before anyone starts one.\n *\n * The server already composes this in words — it knows the provider and its pricing, and\n * whether anyone is billed at all — so this shows what it said rather than recomputing a\n * worse version from a file count. `applicable` is false for a store nobody charges for,\n * where the only cost is time.\n */\nfunction rotationCost(est) {\n if (!est) return 'Re-seals every file under a fresh key.';\n return est.summary || 'Re-seals every file under a fresh key.';\n}\n\n/** The itemised estimate, when the provider charges for the traffic. */\nfunction rotationBill(est) {\n if (!est?.applicable || !(est.lines || []).length) return null;\n return div({ className: 'rot-bill' },\n ...est.lines.map((l) => div({ className: 'rb-line' },\n span(l.label || l.name || ''), span({ className: 'mono' }, l.amount || l.value || ''))),\n est.total ? div({ className: 'rb-line total' }, span('Estimated total'), span({ className: 'mono' }, est.total)) : null,\n // Prices move and this is a guess against a snapshot of them; saying when stops it\n // reading as a quote.\n est.asOf ? div({ className: 'rb-asof' }, `Prices as of ${est.asOf}.`) : null,\n );\n}\n\nfunction openersSection(rows, ui) {\n return div({ className: 'group' },\n h3('Default Openers'),\n rows.length\n ? div({},\n ...rows.map((r) =>\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, r.typeKey),\n div({ className: 'd' }, r.missing ? `${r.openerTitle} (no longer installed)` : `Opens with ${r.openerTitle}`),\n ),\n div({ className: 'control' },\n button({ className: 'iconbtn', title: 'Forget this default' }, icon('close', { size: 14 }))\n .on({ click: () => ui.engine.dispatch(new RememberOpenerAction(r.typeKey, null)) }),\n ),\n ),\n ),\n )\n : p({ className: 'sub', $styling: { margin: 0 } }, 'No default openers set yet. When a file type has more than one viewer, you can pick one and check “Always use this”.'),\n );\n}\n\n// Which shortcut is listening for its new chord. Transient, and still engine state: it\n// decides whether a row renders a `<kbd>` or \"Press keys…\". See bl/viewState.js.\nconst CAPTURE = 'keybindingCapture';\n\n// Its own region, over the keybindings view and the capture state.\n//\n// Everything a row needs is decided by the query — the command's title, whether the user\n// changed it, and whether another command answers to the same chord. That last one is not\n// something a row could work out for itself: it needs the whole list at once.\n//\n// Rebinding dispatches with the binding ID. The component has never held a binding object,\n// only a description of one, which is the point.\nlet kbRegion = null;\nfunction keybindingsSection(ui) {\n // Built once. A fresh region per render would rebuild its alias every pass, and dodo\n // identifies an alias by the function — see ui/region.js.\n kbRegion ??= region(ui.engine, { bindings: q.keybindings, view: q.viewState },\n (st) => keybindingRows(st.bindings || [], ui, st.view?.[CAPTURE] ?? null));\n return kbRegion();\n}\n\nfunction keybindingRows(bindings, ui, capturing) {\n const setCapturing = (id) => ui.engine.dispatch(new SetViewStateAction(CAPTURE, id));\n const stop = () => setCapturing(null);\n const rebind = (bindingId, key) => ui.engine.dispatch(new RebindKeyAction(bindingId, key));\n return div({ className: 'group' },\n h3('Keyboard Shortcuts'),\n p({ className: 'sub' }, 'Click a shortcut to record a new one. Esc cancels; Backspace clears it.'),\n // Every binding, not the first 40. The cap was arbitrary and silent — with no \"N\n // more\" anywhere, the shortcuts past it simply did not exist as far as anyone could\n // tell, and one plugin keymap was enough to push real ones off the end.\n ...bindings.map((b) => {\n const listening = capturing === b.bindingId;\n return div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, b.title),\n div({ className: 'd' }, b.command),\n ),\n div({ className: 'control' },\n b.clash && !listening\n ? span({ className: 'kbd-clash', title: 'Another command answers to this shortcut too — the one registered last wins' },\n icon('warn', { size: 12 }))\n : null,\n button({ className: `kbd-edit ${listening ? 'listening' : ''} ${b.clash ? 'clash' : ''}`, title: listening ? 'Press the new shortcut' : 'Click to rebind' },\n listening ? span('Press keys…') : dd.h('kbd', b.label))\n .on({\n click: () => setCapturing(listening ? null : b.bindingId),\n blur: () => { if (listening) stop(); },\n keydown: (e) => {\n if (!listening) return;\n e.preventDefault();\n e.stopPropagation();\n if (e.key === 'Escape') return stop();\n if (e.key === 'Backspace') { rebind(b.bindingId, null); return stop(); }\n // A bare modifier isn't a chord yet — wait for the key it modifies.\n if (['Control', 'Meta', 'Alt', 'Shift'].includes(e.key)) return;\n rebind(b.bindingId, eventToKey(e));\n stop();\n },\n $attach: (el) => { if (listening) queueMicrotask(() => el.focus()); },\n }),\n b.custom\n ? button({ className: 'c-link', title: 'Back to the default' }, 'reset')\n .on({ click: () => { rebind(b.bindingId, null); setCapturing(null); } })\n : null,\n ),\n );\n }),\n );\n}\n",
99
99
  "// The only thing on screen until a collection is chosen.\n//\n// Every collection-scoped request names its collection in the path, so before one is\n// known there is no file list to draw, nothing to search, and nowhere to upload to. The\n// old behaviour was to pick something — the remembered one, else `default`, else the\n// first in the list — and that is exactly the guess this replaces: on a shared drive it\n// opened a collection plenty of people could not read, and presented the permission error\n// as their drive.\n//\n// So there are two questions and no guesses. A drive with nothing in it asks for a\n// collection to be made; a drive with several asks which one. Once answered, the choice is\n// remembered in localStorage and this never appears again.\n\nimport { dd } from '../../runtime.js';\nimport { icon } from '../icon.js';\nimport { ExecCommandAction } from '../../bl/actions.js';\n\nconst { div, h2, p, button, span } = dd;\n\nexport default function collectionGate(state, ui) {\n const ex = state.ex || {};\n return div({ className: 'editor' },\n div({ className: 'stage' },\n div({ className: 'gate' },\n ex.gate === 'create' ? createPrompt(ui) : choosePrompt(ex, ui),\n ),\n ),\n );\n}\n\n/**\n * A drive with no collections at all.\n *\n * Only shown to someone who may actually create one — `OpenInitialCollectionAction`\n * sends everyone else to the \"ask an administrator\" message instead, because inviting\n * someone to do a thing they are not allowed to do is worse than saying nothing.\n */\nfunction createPrompt(ui) {\n return div({ className: 'gate-card' },\n div({ className: 'gate-icon' }, icon('files', { size: 26 })),\n h2('Make your first collection'),\n p({ className: 'gate-sub' },\n 'A collection is a backing store you own — a bucket, a directory, a mount. Files '\n + 'live in one, and permissions are granted on one. Nothing can be uploaded until '\n + 'there is somewhere to put it.'),\n div({ className: 'gate-actions' },\n button({ className: 'btn primary' }, icon('plus', { size: 14 }), 'New collection')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('collections.create')) }),\n ),\n );\n}\n\n/** Collections exist, but the user has not said which one they want. */\nfunction choosePrompt(ex, ui) {\n const collections = ex.collections || [];\n return div({ className: 'gate-card' },\n div({ className: 'gate-icon' }, icon('grid', { size: 26 })),\n h2(collections.length === 1 ? 'Open your collection' : 'Choose a collection'),\n p({ className: 'gate-sub' },\n collections.length === 1\n ? 'This is the one you have access to. Opening it will be remembered for next time.'\n : 'Files, search and uploads all belong to one collection. Your choice is remembered '\n + 'for next time, and you can switch from the status bar whenever you like.'),\n div({ className: 'gate-list' },\n ...collections.map((c) => button({ className: 'gate-choice' },\n div({ className: 'gate-choice-main' },\n span({ className: 'n' }, c.name || c.id),\n span({ className: 'd' }, c.driver ? `${c.driver}${c.description ? ` · ${c.description}` : ''}` : (c.description || '')),\n ),\n // What they may do, from the server's own answer — so a read-only collection says\n // so before they open it and find the Upload button missing.\n span({ className: 'gate-caps' }, (c.capabilities || []).join(' · ')),\n ).on({ click: () => ui.engine.dispatch(new ExecCommandAction('collections.switch', c.id)) })),\n ),\n ex.canCreateCollection\n ? div({ className: 'gate-actions' },\n button({ className: 'btn' }, icon('plus', { size: 14 }), 'New collection')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('collections.create')) }),\n )\n : null,\n );\n}\n",
100
100
  "import { dd } from '../../runtime.js';\nimport { icon } from '../icon.js';\nimport { CloseDialogAction, ExecCommandAction, OpenPluginPanelAction, RefreshPluginAction, SetPluginSecretAction, SetSettingAction, ShowDialogAction, UninstallPluginAction } from '../../bl/actions.js';\nimport { describeTrust } from '../../bl/trust.js';\n\nconst { div, span, p, button, h2, input, label } = dd;\n\nexport default function pluginsView(state, ui) {\n const plugins = state.plugins || [];\n return div({ className: 'editor' },\n div({ className: 'stage' },\n div({ className: 'plugins' },\n h2('Plugins'),\n p({ className: 'sub', $styling: { color: 'var(--text-dim)', margin: '0 0 8px' } },\n 'Plugins are sandboxed packages you install from a file or URL. They run in an isolated iframe and reach Trove only through a message channel, using the capabilities you granted.'),\n div({ className: 'plugin-install' },\n button({ className: 'btn primary' }, icon('upload', { size: 15 }), 'Install from file…')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('plugins.installFromFile')) }),\n button({ className: 'btn' }, icon('plug', { size: 15 }), 'Install from URL…')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('plugins.installFromUrl')) }),\n ),\n plugins.length\n ? div({ $styling: { display: 'flex', 'flex-direction': 'column', gap: '12px', 'margin-top': '14px' } }, ...plugins.map((pl) => installedCard(pl, state, ui)))\n : div({ className: 'empty', $styling: { padding: '48px' } }, icon('plug', { size: 30 }), span('No plugins installed yet.')),\n ),\n ),\n );\n}\n\nfunction installedCard(pl, state, ui) {\n const connectivity = !pl.responsive ? 'not responding' : pl.manifest?.online === false ? 'offline' : 'connected';\n const features = pl.features || [];\n return div({ className: 'plugin-card' },\n div({ className: 'top' },\n div({ className: 'avatar' }, (pl.name || '?')[0].toUpperCase()),\n div({ $styling: { flex: '1' } },\n div({ className: 'name' }, pl.name, pl.version ? span({ $styling: { color: 'var(--text-faint)', 'font-weight': '400', 'margin-left': '6px' } }, 'v' + pl.version) : null),\n div({ $styling: { 'font-size': '11px', color: 'var(--text-faint)' } }, pl.id),\n ),\n trustBadge(pl.trust),\n span({ className: `status ${pl.status}` }, pl.status),\n ),\n pl.error ? div({ className: 'desc', $styling: { color: 'var(--danger)' } }, pl.error) : null,\n div({ className: 'caps' }, ...(pl.capabilities || []).map((c) => span({ className: 'cap' }, c))),\n (pl.endpoints || []).length\n ? div({ className: 'plugin-endpoints', $styling: { 'font-size': '11px', color: 'var(--text-faint)', 'margin-top': '2px' } },\n icon('plug', { size: 11 }), ' Network: ', (pl.endpoints || []).map((e) => e.host).join(', '))\n : null,\n pl.status === 'active'\n ? div({ className: 'plugin-features' },\n div({ className: 'pf-head' }, span(`Features · ${connectivity}`), span({ className: 'muted' }, `${features.filter((f) => f.available).length}/${features.length} available`)),\n features.length\n ? div({ className: 'pf-list' }, ...features.map(featureRow))\n : div({ className: 'muted', $styling: { 'font-size': '12px' } }, pl.responsive ? 'No contributions announced.' : 'No manifest received — the plugin may not be running.'),\n )\n : null,\n (pl.settingsSchema || []).length ? settingsSection(pl, ui, state) : null,\n div({ className: 'actions' },\n pl.hasUi ? button({ className: 'btn' }, icon('command', { size: 14 }), 'Open panel').on({ click: () => ui.engine.dispatch(new OpenPluginPanelAction(pl.id)) }) : null,\n button({ className: 'btn' }, icon('refresh', { size: 14 }), 'Refresh').on({ click: () => ui.engine.dispatch(new RefreshPluginAction(pl.id)) }),\n button({ className: 'btn danger' }, 'Uninstall').on({\n click: () => ui.engine.dispatch(new ShowDialogAction({\n kind: 'confirm', title: `Uninstall ${pl.name}?`, danger: true, confirmLabel: 'Uninstall',\n body: 'The plugin and all data it stored will be removed.',\n confirmActions: [new UninstallPluginAction(pl.id)],\n })),\n }),\n ),\n );\n}\n\nfunction settingsSection(pl, ui, state) {\n return div({ className: 'plugin-features' },\n div({ className: 'pf-head' }, span('Settings')),\n div({ $styling: { display: 'flex', 'flex-direction': 'column', gap: '8px' } },\n ...pl.settingsSchema.map((s) => settingRow(pl, s, ui, state)),\n ),\n );\n}\n\nfunction settingRow(pl, s, ui, state) {\n const key = `${pl.id}.${s.key}`;\n const value = s.secret ? '' : (state.settings?.[key] ?? s.default ?? '');\n return div({ className: 'setting', $styling: { padding: '6px 0' } },\n div({ className: 'info' }, div({ className: 't' }, s.title || s.key), s.description ? div({ className: 'd' }, s.description) : null),\n div({ className: 'control' },\n s.secret\n ? input({ className: 'input', type: 'password', placeholder: 'Set secret…' }).on({\n change: (e) => { if (e.target.value) { ui.engine.dispatch(new SetPluginSecretAction(pl.id, s.key, e.target.value)); e.target.value = ''; e.target.placeholder = 'Saved ✓'; } },\n })\n : s.type === 'boolean'\n ? label({ className: 'switch' }, input({ type: 'checkbox', checked: !!value }).on({ change: (e) => ui.engine.dispatch(new SetSettingAction(key, e.target.checked)) }), span({ className: 'track' }))\n : input({ className: 'input', value }).on({ change: (e) => ui.engine.dispatch(new SetSettingAction(key, e.target.value)) }),\n ),\n );\n}\n\n// The compact badge. WHAT the signature means is decided in bl/trust.js — this only\n// chooses how few characters to say it in, which is the part that is genuinely a question\n// about a crowded row. The two badges used to be two `if` ladders maintained separately,\n// and this one was missing the branch that distinguishes a tampered package from an\n// unsigned one.\nfunction trustBadge(trust) {\n if (!trust) return null;\n const t = describeTrust(trust);\n const label = t.status === 'verified' ? t.domain\n : t.status === 'invalid' ? 'invalid signature'\n : t.status;\n return span({ className: `trust ${t.tone}`, title: t.explanation },\n icon(t.icon, { size: 12 }), label);\n}\n\nconst KIND_ICON = { command: 'command', opener: 'file', indexer: 'search', statusItem: 'info' };\nfunction featureRow(f) {\n return div({ className: `pf-row ${f.available ? '' : 'off'}` },\n icon(KIND_ICON[f.kind] || 'command', { size: 13 }),\n span({ className: 'pf-title' }, f.title),\n span({ className: 'pf-kind' }, f.kind),\n f.offline ? span({ className: 'pf-badge offline-ok', title: 'Works offline' }, 'offline ✓') : null,\n span({ className: `pf-dot ${f.available ? 'on' : 'no'}`, title: f.available ? 'Available now' : 'Unavailable now' }),\n );\n}\n",
101
- "// The admin console.\n//\n// Drive-level administration had accumulated in three places and no place: API keys in\n// Settings, storage diagnostics behind a status-bar item, ACLs in a dialog, and the driver\n// registry, the indexers and the identity provider only through the API. Each landed where\n// it did for a local reason, and the result was that there was nowhere to send someone who\n// had just been made an administrator.\n//\n// A DESTINATION, not a route. 006 introduced share links, and what it actually established\n// is that this app does not reflect its state in the address bar — it consumes a share path\n// at boot and immediately replaces it with `/`, because a URL that goes stale the moment\n// you navigate is worse than one that says nothing. So there is no router to hang a route\n// on, and an activity-bar destination beside Plugins and Settings is the consistent answer.\n//\n// Almost nothing here is new capability. It is gathering: every value below already comes\n// from `/api/capabilities`, which the app fetches at startup, or from a query that already\n// exists. What was missing was somewhere to look.\n\nimport { dd } from '../../runtime.js';\nimport { icon } from '../icon.js';\nimport { bytes } from '../format.js';\nimport { ExecCommandAction } from '../../bl/actions.js';\n\nconst { div, h2, h3, p, span, button } = dd;\n\nexport default function adminView(state, ui) {\n const caps = state.caps;\n return div({ className: 'editor' },\n div({ className: 'stage' },\n div({ className: 'settings admin' },\n h2('Administration'),\n p({ className: 'sub' }, 'How this drive is configured, and what it can do. Most of it is decided by the deployment rather than here.'),\n accessSection(caps, state, ui),\n storageSection(caps, state, ui),\n extensionsSection(caps, state),\n workSection(state, ui),\n ),\n ),\n );\n}\n\n/** A label/value row, matching the settings screen so the two read as one thing. */\nfunction row(title, detail, value) {\n return div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, title),\n detail ? div({ className: 'd' }, detail) : null,\n ),\n div({ className: 'control' }, typeof value === 'string' ? span({ className: 'mono' }, value) : value),\n );\n}\n\n/**\n * Who this drive thinks you are, and who it lets in.\n *\n * The identity driver and whether authentication is required are deployment decisions —\n * environment variables, not preferences — so they are reported rather than offered. Which\n * is the point: an admin needs to know what is in force, and previously could only find out\n * by reading the server's configuration or calling the API.\n */\nfunction accessSection(caps, state, ui) {\n const auth = caps?.auth || {};\n const me = caps?.principal || state.so?.me || {};\n const servers = auth.authorizationServers || [];\n return div({ className: 'group' },\n h3('Access'),\n p({ className: 'sub' }, 'Who can reach this drive. Set by the deployment, not here.'),\n row('Signed in as', me.anonymous ? 'This drive does not require a sign-in.' : (me.email || me.id),\n me.anonymous ? 'anonymous' : (me.name || me.id || '—')),\n row('Sign-in required', 'Whether a caller must present a token.',\n caps?.mcp?.requiresAuth ? 'Yes' : 'No'),\n row('Authorization server', 'Where clients are sent to sign in.',\n servers.length ? servers.join(', ') : 'not set'),\n // API keys stay in Settings for now and are LINKED rather than duplicated: two places\n // to revoke a credential is worse than one place in the wrong screen.\n row('API keys', 'Credentials for scripts and services, scoped per collection.',\n button({ className: 'btn small' }, 'In Settings')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.openSettings')) })),\n );\n}\n\n/**\n * What this deployment can actually do with bytes.\n *\n * The driver registry is the list a collection form offers, and it is deployment\n * configuration: `TROVE_STORAGE_DRIVERS` narrows it, and a driver missing from here is the\n * reason a collection cannot be made on it. The capability flags below explain behaviour\n * that otherwise looks arbitrary — why a download is proxied rather than direct, why a\n * usage figure is missing.\n */\nfunction storageSection(caps, state, ui) {\n const s = caps?.storage || {};\n const drivers = caps?.storageDrivers || [];\n const usage = state.ex?.usage;\n const can = (on) => span({ className: `mono ${on ? '' : 'muted'}` }, on ? 'yes' : 'no');\n return div({ className: 'group' },\n h3('Storage'),\n p({ className: 'sub' }, 'The backing stores this deployment offers, and what they support.'),\n row('Drivers offered', 'What a new collection may be created on.',\n drivers.length ? drivers.map((d) => d.label || d.key).join(', ') : 'none registered'),\n row('Direct downloads', 'A presigned URL sends bytes from the store, not through the drive.', can(s.presignDownload)),\n row('Direct uploads', 'A presigned PUT sends bytes to the store, not through the drive.', can(s.presignUpload)),\n row('Multipart', 'Large files go up in parts, resumably.', can(s.multipart)),\n row('Range requests', 'Seeking inside a file without fetching the whole thing.', can(s.range)),\n usage?.total\n ? row('Space', 'Reported by the backing store.', `${bytes(usage.available)} free of ${bytes(usage.total)}`)\n : row('Space', 'This store does not report a total, which object stores generally cannot.', 'not reported'),\n // The check and its remedy already exist as a command — this is where someone would\n // look for it, which is the whole complaint the ticket makes.\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Check the backing stores'),\n div({ className: 'd' }, 'Asks whether each store can actually be reached from here — the failure that makes every file open to a spinner.'),\n ),\n div({ className: 'control' },\n button({ className: 'btn small' }, 'Run check')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.checkStorage')) })),\n ),\n );\n}\n\n/**\n * What extends this drive, and what each extension is permitted.\n *\n * Indexers matter here for a reason that is easy to miss: an indexer reads file CONTENTS,\n * including from an encrypted collection, because indexing happens on the drive's side of\n * the encryption. Anyone weighing what encryption protects needs to know which ones are\n * installed, so the same list appears on the collection form.\n */\nfunction extensionsSection(caps, state) {\n const indexers = caps?.indexers || [];\n const plugins = state.plugins || [];\n return div({ className: 'group' },\n h3('Extensions'),\n p({ className: 'sub' }, 'What reads and adds to this drive.'),\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Indexers'),\n div({ className: 'd' }, 'They read file contents to make them searchable — including in an encrypted collection, since indexing happens on the drive’s side of the encryption.'),\n ),\n div({ className: 'control' },\n span({ className: 'mono' }, indexers.length ? indexers.map((i) => i.displayName || i.id).join(', ') : 'none')),\n ),\n plugins.length\n ? div({}, ...plugins.map((pl) => div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, pl.manifest?.displayName || pl.id),\n div({ className: 'd' }, (pl.grants || []).length\n ? `May: ${(pl.grants || []).join(', ')}`\n : 'Granted nothing — it runs in its sandbox and can only draw.'),\n ),\n div({ className: 'control' }, span({ className: `mono ${pl.status === 'active' ? '' : 'muted'}` }, pl.status || 'idle')),\n )))\n : row('Plugins', 'Installed by an administrator, from a signed package.', 'none installed'),\n );\n}\n\n/**\n * What the drive is doing, and what it has not finished.\n *\n * The panel that shows running work already exists and is reached from the status bar,\n * which is fine when something is running and undiscoverable when nothing is. The counts\n * here are the discoverable version; the panel is still where the detail lives.\n */\nfunction workSection(state, ui) {\n const act = state.act || { tasks: [], issues: [] };\n const running = (act.tasks || []).filter((t) => t.status === 'running');\n return div({ className: 'group' },\n h3('Work'),\n p({ className: 'sub' }, 'Background jobs and anything that needs attention.'),\n row('Running now', 'Scans, reindexes and rotations happening on the server.',\n running.length ? `${running.length}` : 'nothing running'),\n row('Needs attention', 'Standing problems — they persist until fixed, unlike a toast.',\n act.issues?.length ? `${act.issues.length}` : 'none'),\n // `stacked`: three buttons do not fit the 200px control column — see styles.css.\n div({ className: 'setting stacked' },\n div({ className: 'info' },\n div({ className: 't' }, 'Maintenance'),\n div({ className: 'd' }, 'A scan picks up files changed in the bucket by something other than Trove. A reindex rebuilds search from scratch.'),\n ),\n div({ className: 'control admin-actions' },\n button({ className: 'btn small' }, 'Activity panel')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.showActivity')) }),\n button({ className: 'btn small' }, 'Scan')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.scanCollection')) }),\n button({ className: 'btn small' }, 'Reindex')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.rebuildIndex')) }),\n ),\n ),\n );\n}\n",
101
+ "// The admin console.\n//\n// Drive-level administration had accumulated in three places and no place: API keys in\n// Settings, storage diagnostics behind a status-bar item, ACLs in a dialog, and the driver\n// registry, the indexers and the identity provider only through the API. Each landed where\n// it did for a local reason, and the result was that there was nowhere to send someone who\n// had just been made an administrator.\n//\n// A DESTINATION, not a route. 006 introduced share links, and what it actually established\n// is that this app does not reflect its state in the address bar — it consumes a share path\n// at boot and immediately replaces it with `/`, because a URL that goes stale the moment\n// you navigate is worse than one that says nothing. So there is no router to hang a route\n// on, and an activity-bar destination beside Plugins and Settings is the consistent answer.\n//\n// Almost nothing here is new capability. It is gathering: every value below already comes\n// from `/api/capabilities`, which the app fetches at startup, or from a query that already\n// exists. What was missing was somewhere to look.\n\nimport { dd } from '../../runtime.js';\nimport { watchQuery } from '../../bl/watchQuery.js';\nimport { grantsFor } from '../../bl/queries.js';\nimport { icon } from '../icon.js';\nimport { bytes } from '../format.js';\nimport { ExecCommandAction, SetGrantAction } from '../../bl/actions.js';\n\nconst { div, h2, h3, p, span, button, select, option, input } = dd;\n\nexport default function adminView(state, ui) {\n const caps = state.caps;\n return div({ className: 'editor' },\n div({ className: 'stage' },\n div({ className: 'settings admin' },\n h2('Administration'),\n p({ className: 'sub' }, 'How this drive is configured, and what it can do. Most of it is decided by the deployment rather than here.'),\n accessSection(caps, state, ui),\n collectionsSection(state, ui),\n storageSection(caps, state, ui),\n extensionsSection(caps, state),\n workSection(state, ui),\n ),\n ),\n );\n}\n\n/** A label/value row, matching the settings screen so the two read as one thing. */\nfunction row(title, detail, value) {\n return div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, title),\n detail ? div({ className: 'd' }, detail) : null,\n ),\n div({ className: 'control' }, typeof value === 'string' ? span({ className: 'mono' }, value) : value),\n );\n}\n\n/**\n * Who this drive thinks you are, and who it lets in.\n *\n * The identity driver and whether authentication is required are deployment decisions —\n * environment variables, not preferences — so they are reported rather than offered. Which\n * is the point: an admin needs to know what is in force, and previously could only find out\n * by reading the server's configuration or calling the API.\n */\nfunction accessSection(caps, state, ui) {\n const auth = caps?.auth || {};\n const me = caps?.principal || state.so?.me || {};\n const servers = auth.authorizationServers || [];\n return div({ className: 'group' },\n h3('Access'),\n p({ className: 'sub' }, 'Who can reach this drive. Set by the deployment, not here.'),\n row('Signed in as', me.anonymous ? 'This drive does not require a sign-in.' : (me.email || me.id),\n me.anonymous ? 'anonymous' : (me.name || me.id || '—')),\n row('Sign-in required', 'Whether a caller must present a token.',\n caps?.mcp?.requiresAuth ? 'Yes' : 'No'),\n row('Authorization server', 'Where clients are sent to sign in.',\n servers.length ? servers.join(', ') : 'not set'),\n // API keys stay in Settings for now and are LINKED rather than duplicated: two places\n // to revoke a credential is worse than one place in the wrong screen.\n row('API keys', 'Credentials for scripts and services, scoped per collection.',\n button({ className: 'btn small' }, 'In Settings')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.openSettings')) })),\n );\n}\n\n/**\n * Every collection, what it sits on, and whether it is sealed.\n *\n * The list an administrator actually wants: not \"which one am I looking at\" — the switcher\n * in the status bar answers that — but what exists, on what, under which key. Rows and their\n * actions come from the engine (`collectionAdmin`), so this only draws.\n */\nfunction collectionsSection(state, ui) {\n const admin = state.ex?.collectionAdmin;\n const rows = admin?.rows || [];\n // SEQUENCED, not fired together. `dispatch()` returns a feed rather than a promise, so\n // `forEach(dispatch)` starts everything at once — and these pairs are switch-then-do,\n // where the second only means anything after the first has landed. Fired concurrently,\n // \"Rotate key…\" opened Settings and was then thrown back to home by the switch that had\n // not finished yet. Same shape as platform/commands.js, which got this right first.\n const run = (actions) => async () => {\n for (const action of actions) {\n const settled = await ui.engine.dispatch(action).next(['complete', 'error', 'abort']);\n if (settled?.type !== 'complete') break;\n }\n };\n return div({ className: 'group' },\n h3('Collections'),\n p({ className: 'sub' }, 'What exists on this drive, where its bytes live, and which key seals it.'),\n ...(rows.length ? rows.map((c) => div({ className: 'setting stacked' },\n div({ className: 'info' },\n div({ className: 't' }, c.name, c.current ? span({ className: 'mono muted' }, ' · open') : null),\n div({ className: 'd' },\n c.encrypted\n // The fingerprint is the only way to tell two keys apart across a rotation, and\n // it is safe to show — it is not the key.\n ? `${c.driver} · sealed, key ${String(c.fingerprint).slice(0, 12)}…`\n : `${c.driver} · not encrypted`),\n div({ className: 'd' }, `You may: ${c.capabilities.join(', ') || 'nothing'}`),\n ),\n div({ className: 'control admin-actions' },\n c.current ? null : button({ className: 'btn small' }, 'Open').on({ click: run(c.actions.open) }),\n button({ className: 'btn small' }, 'Scan').on({ click: run(c.actions.scan) }),\n // Routed to Settings rather than started here: the estimate and the confirmation\n // live there, and a rotation begun without seeing its cost is the button nobody\n // should have.\n c.actions.rotate\n ? button({ className: 'btn small' }, 'Rotate key…').on({ click: run(c.actions.rotate) })\n : null,\n // Only offered where you could actually change it — `setGrant` asserts admin, so a\n // button that always showed would be one that sometimes only produces a 403.\n c.actions.access\n ? button({ className: `btn small ${state.wb?.aclFor === c.id ? 'on' : ''}` }, 'Access…')\n .on({ click: run(c.actions.access) })\n : null,\n ),\n // Leased only while open, by a query keyed on this collection — the same shape\n // settingsView uses for `rotationFor`.\n state.wb?.aclFor === c.id\n ? ui.watch(watchQuery(ui.engine, grantsFor(c.id)), (g) => accessEditor(g, ui, c.id))\n : null,\n )) : [row('Collections', 'Nothing has been created yet.', 'none')]),\n admin?.canCreate\n ? div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'New collection'),\n div({ className: 'd' }, 'A backing store you own — a bucket, a directory, a mount. Encryption is chosen here, at creation.'),\n ),\n div({ className: 'control' },\n button({ className: 'btn small' }, 'Create…').on({ click: run(admin.create) })),\n )\n : row('New collection', 'You do not have permission to create one on this drive.', 'not allowed'),\n );\n}\n\n/** The capabilities a grant can carry. `admin` expands to the rest, server-side. */\nconst CAPS = ['read', 'write', 'delete', 'admin'];\n\n/**\n * Who may do what on one collection.\n *\n * Rendered under the row an administrator opened, and reading `grantsFor(id)` — a query\n * keyed by collection with a `bootAction`, so it loads when this is shown and stops\n * mattering when it is not.\n *\n * Revoking is granting with nothing: one call, so the two cannot drift.\n */\nfunction accessEditor(g, ui, collectionId) {\n if (!g) return div({ className: 'acl' }, span({ className: 'mono muted' }, 'Loading access…'));\n if (g.error) return div({ className: 'acl' }, span({ className: 'mono muted' }, g.error));\n const grants = g.grants || [];\n const set = (grant) => ui.engine.dispatch(new SetGrantAction(collectionId, grant));\n\n const line = (grant) => {\n const held = new Set(grant.capabilities || []);\n const who = grant.type === 'anyone' ? 'Everyone' : `${grant.type}: ${grant.subject}`;\n return div({ className: 'acl-row' },\n span({ className: 'acl-who' }, who),\n ...CAPS.map((cap) => button({\n className: `btn small ${held.has(cap) ? 'on' : ''}`,\n title: cap === 'admin' ? 'admin implies every other capability' : `toggle ${cap}`,\n }, cap).on({\n click: () => set({\n type: grant.type,\n subject: grant.subject,\n capabilities: held.has(cap)\n ? (grant.capabilities || []).filter((c) => c !== cap)\n : [...(grant.capabilities || []), cap],\n }),\n })),\n // Revoke is the same call with an empty list.\n button({ className: 'btn small', title: 'remove this grant entirely' }, '\\u00d7')\n .on({ click: () => set({ type: grant.type, subject: grant.subject, capabilities: [] }) }),\n );\n };\n\n // Drive administrators, from the deployment's own configuration. Shown because leaving\n // them out makes the list a lie — they hold admin on every collection — and shown\n // WITHOUT controls because `setGrant` cannot touch them: a revoke button here would be\n // one that silently does nothing.\n const admins = (g.admins || []).map((who) => div({ className: 'acl-row acl-fixed' },\n span({ className: 'acl-who' }, who),\n span({ className: 'mono muted' }, 'admin · set by this deployment'),\n ));\n\n return div({ className: 'acl' },\n ...admins,\n ...(grants.length ? grants.map(line) : (admins.length ? [] : [span({ className: 'mono muted' }, 'Nobody yet.')])),\n div({ className: 'acl-row acl-add' },\n select({ className: 'acl-type' }, option({ value: 'user' }, 'user'), option({ value: 'role' }, 'role'), option({ value: 'anyone' }, 'anyone')),\n input({ className: 'acl-subject', placeholder: 'email, or a role name' }),\n button({ className: 'btn small' }, 'Grant read').on({\n click: (e) => {\n const rowEl = e.target.closest('.acl-add');\n const type = rowEl.querySelector('.acl-type').value;\n const subject = rowEl.querySelector('.acl-subject').value.trim();\n if (type !== 'anyone' && !subject) return;\n set({ type, subject: type === 'anyone' ? '' : subject, capabilities: ['read'] });\n },\n }),\n ),\n );\n}\n\n/**\n * What this deployment can actually do with bytes.\n *\n * The driver registry is the list a collection form offers, and it is deployment\n * configuration: `TROVE_STORAGE_DRIVERS` narrows it, and a driver missing from here is the\n * reason a collection cannot be made on it. The capability flags below explain behaviour\n * that otherwise looks arbitrary — why a download is proxied rather than direct, why a\n * usage figure is missing.\n */\nfunction storageSection(caps, state, ui) {\n const s = caps?.storage || {};\n const drivers = caps?.storageDrivers || [];\n const usage = state.ex?.usage;\n const can = (on) => span({ className: `mono ${on ? '' : 'muted'}` }, on ? 'yes' : 'no');\n return div({ className: 'group' },\n h3('Storage'),\n p({ className: 'sub' }, 'The backing stores this deployment offers, and what they support.'),\n row('Drivers offered', 'What a new collection may be created on.',\n drivers.length ? drivers.map((d) => d.label || d.key).join(', ') : 'none registered'),\n row('Direct downloads', 'A presigned URL sends bytes from the store, not through the drive.', can(s.presignDownload)),\n row('Direct uploads', 'A presigned PUT sends bytes to the store, not through the drive.', can(s.presignUpload)),\n row('Multipart', 'Large files go up in parts, resumably.', can(s.multipart)),\n row('Range requests', 'Seeking inside a file without fetching the whole thing.', can(s.range)),\n usage?.total\n ? row('Space', 'Reported by the backing store.', `${bytes(usage.available)} free of ${bytes(usage.total)}`)\n : row('Space', 'This store does not report a total, which object stores generally cannot.', 'not reported'),\n // The check and its remedy already exist as a command — this is where someone would\n // look for it, which is the whole complaint the ticket makes.\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Check the backing stores'),\n div({ className: 'd' }, 'Asks whether each store can actually be reached from here — the failure that makes every file open to a spinner.'),\n ),\n div({ className: 'control' },\n button({ className: 'btn small' }, 'Run check')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.checkStorage')) })),\n ),\n );\n}\n\n/**\n * What extends this drive, and what each extension is permitted.\n *\n * Indexers matter here for a reason that is easy to miss: an indexer reads file CONTENTS,\n * including from an encrypted collection, because indexing happens on the drive's side of\n * the encryption. Anyone weighing what encryption protects needs to know which ones are\n * installed, so the same list appears on the collection form.\n */\nfunction extensionsSection(caps, state) {\n const indexers = caps?.indexers || [];\n const plugins = state.plugins || [];\n return div({ className: 'group' },\n h3('Extensions'),\n p({ className: 'sub' }, 'What reads and adds to this drive.'),\n div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, 'Indexers'),\n div({ className: 'd' }, 'They read file contents to make them searchable — including in an encrypted collection, since indexing happens on the drive’s side of the encryption.'),\n ),\n div({ className: 'control' },\n span({ className: 'mono' }, indexers.length ? indexers.map((i) => i.displayName || i.id).join(', ') : 'none')),\n ),\n plugins.length\n ? div({}, ...plugins.map((pl) => div({ className: 'setting' },\n div({ className: 'info' },\n div({ className: 't' }, pl.manifest?.displayName || pl.id),\n div({ className: 'd' }, (pl.grants || []).length\n ? `May: ${(pl.grants || []).join(', ')}`\n : 'Granted nothing — it runs in its sandbox and can only draw.'),\n ),\n div({ className: 'control' }, span({ className: `mono ${pl.status === 'active' ? '' : 'muted'}` }, pl.status || 'idle')),\n )))\n : row('Plugins', 'Installed by an administrator, from a signed package.', 'none installed'),\n );\n}\n\n/**\n * What the drive is doing, and what it has not finished.\n *\n * The panel that shows running work already exists and is reached from the status bar,\n * which is fine when something is running and undiscoverable when nothing is. The counts\n * here are the discoverable version; the panel is still where the detail lives.\n */\nfunction workSection(state, ui) {\n const act = state.act || { tasks: [], issues: [] };\n const running = (act.tasks || []).filter((t) => t.status === 'running');\n return div({ className: 'group' },\n h3('Work'),\n p({ className: 'sub' }, 'Background jobs and anything that needs attention.'),\n row('Running now', 'Scans, reindexes and rotations happening on the server.',\n running.length ? `${running.length}` : 'nothing running'),\n row('Needs attention', 'Standing problems — they persist until fixed, unlike a toast.',\n act.issues?.length ? `${act.issues.length}` : 'none'),\n // `stacked`: three buttons do not fit the 200px control column — see styles.css.\n div({ className: 'setting stacked' },\n div({ className: 'info' },\n div({ className: 't' }, 'Maintenance'),\n div({ className: 'd' }, 'A scan picks up files changed in the bucket by something other than Trove. A reindex rebuilds search from scratch.'),\n ),\n div({ className: 'control admin-actions' },\n button({ className: 'btn small' }, 'Activity panel')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.showActivity')) }),\n button({ className: 'btn small' }, 'Scan')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.scanCollection')) }),\n button({ className: 'btn small' }, 'Reindex')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.rebuildIndex')) }),\n ),\n ),\n );\n}\n",
102
102
  "// Following a `trove:` link from a document.\n//\n// Resolution is deliberately lazy — at click time, not at render time. A document can\n// hold dozens of links; resolving them all on every render would be a request per link,\n// and the answer can change between renders anyway (the target may be created, renamed,\n// or deleted while the document is open). So a link is rendered from its text alone, and\n// only what the user actually follows costs a round trip.\n//\n// A broken link is a normal, expected state — names are the legible way to write a link,\n// and renaming breaks them. It has to say so clearly, and say WHY, because \"nothing\n// happened\" is the worst possible response to a click.\n\nimport { parseTroveUri } from '@3sln/trove/core/links.js';\nimport { OpenFileAction } from './actions.js';\n\n/**\n * Open what a `trove:` URI points at.\n * @param {object} ui the workbench ui helper\n * @param {string} uri the link as written in the document\n * @param {{from?: object}} [opts] the item the link was followed FROM, for messages\n */\nexport async function openTroveLink(ui, uri, { from } = {}) {\n const ref = parseTroveUri(uri);\n const notify = ui.platform.notifications;\n if (!ref) {\n notify.warn(`\"${uri}\" isn’t a valid Trove link.`);\n return null;\n }\n try {\n const res = await ui.platform.api.stat(uri);\n if (!res?.node) throw new Error('not found');\n ui.engine.dispatch(new OpenFileAction(res.node));\n return res.node;\n } catch (err) {\n notify.warn(describeBrokenLink(ref, err, from));\n return null;\n }\n}\n\n/**\n * Why a link didn't open, in terms of the link the user is looking at. A 403 is a\n * different situation from a 404 and must not be reported as one: \"no such item\" when\n * the item exists but isn't yours is both wrong and a small information leak in reverse.\n */\nfunction describeBrokenLink(ref, err, from) {\n const where = from?.name ? ` (linked from \"${from.name}\")` : '';\n if (err?.status === 403 || err?.code === 'forbidden') {\n return `You don’t have access to that item in \"${ref.collection}\"${where}.`;\n }\n if (ref.by === 'name') {\n return `Nothing named \"${ref.value}\" in \"${ref.collection}\"${where} — it may have been renamed or deleted.`;\n }\n return `That item no longer exists in \"${ref.collection}\"${where}.`;\n}\n",
103
103
  "// The markdown opener. Markdown is load-bearing now: with no folder hierarchy, a\n// document that links its sources IS the grouping, so these files have to render as\n// documents with working links rather than as a wall of `<pre>`.\n//\n// A `trove:` link navigates in-app (see ../../../bl/links.js for resolution); an http(s)\n// link opens in a new tab with `rel=\"noopener noreferrer\"`; anything else — `javascript:`,\n// `data:` — is rendered as inert text, because a document is untrusted content that any\n// user of the drive can write.\n//\n// The parser is deliberately small: headings, lists, block quotes, fenced code, inline\n// code/emphasis/links, and paragraphs. It builds VDOM nodes directly and never produces\n// an HTML string, so there is no innerHTML to get wrong.\n//\n// It is also BOUNDED. The input is a file someone uploaded, so its size and shape are\n// not ours to choose: a document with tens of thousands of emphasis spans used to\n// recurse once per span and overflow the stack mid-render, which left the viewer on a\n// spinner forever with nothing said. Inline scanning is now iterative, and both the\n// document length and the node count are capped — a truncated document with a visible\n// notice beats a hung one.\n\nimport { dd, mapCell } from '../../../runtime.js';\nimport { icon } from '../../icon.js';\nimport { parseTroveUri } from '@3sln/trove/core/links.js';\nimport { openTroveLink } from '../../../bl/links.js';\nimport { FileText } from '../../../bl/queries.js';\nimport { watchQuery } from '../../../bl/watchQuery.js';\n\nconst { div, span, h1, h2, h3, p, ul, ol, li, pre, code, a, em, strong, blockquote, hr, br } = dd;\n\nexport function markdownOpener(node, ui) {\n // Bounded at the TRANSFER, not just the render: MAX_CHARS below stops us laying out a\n // huge document, but without this the whole file is still pulled into the tab first.\n const src = mapCell(watchQuery(ui.engine, FileText.of(node.id, MAX_CHARS, node.size)), (r) => r.text);\n return dd.alias(() =>\n ui.watch(\n src,\n // A throw in here is NOT covered by the `error:` handler below — that one is for\n // the observable failing, not for the mapper. Rendering untrusted content is\n // exactly where a throw is plausible, and an uncaught one leaves the placeholder\n // on screen forever, so it is caught where it happens.\n (text) => {\n try {\n return div({ className: 'viewer markdown' }, div({ className: 'md' }, ...renderMarkdown(text, node, ui)));\n } catch (err) {\n console.error('markdown render failed', err);\n return errorView(`This document couldn’t be displayed: ${err.message}`);\n }\n },\n {\n placeholder: () => div({ className: 'viewer' }, div({ className: 'loading' }, div({ className: 'spinner' }), span('Loading…'))),\n error: (e) => errorView(e.message),\n },\n ),\n )();\n}\n\nfunction errorView(message) {\n return div({ className: 'viewer' }, div({ className: 'fallback' }, icon('warn', { size: 40 }), span(message)));\n}\n\n// Bounds. A document past these renders as much as fits, with a notice — the parse is\n// linear, so these are about the size of the resulting DOM, not about parse time.\nconst MAX_CHARS = 512 * 1024;\nconst MAX_BLOCKS = 5_000;\nconst MAX_INLINE_NODES = 2_000; // per block\n\n// --- block level -------------------------------------------------------------\n\nexport function renderMarkdown(text, node, ui) {\n const raw = String(text ?? '');\n const truncated = raw.length > MAX_CHARS;\n const lines = (truncated ? raw.slice(0, MAX_CHARS) : raw).split(/\\r?\\n/);\n const out = [];\n let i = 0;\n\n while (i < lines.length) {\n if (out.length >= MAX_BLOCKS) return [...out, tooLarge()];\n const line = lines[i];\n\n // Fenced code — taken verbatim, including any markdown inside it.\n const fence = /^\\s*(```+|~~~+)(.*)$/.exec(line);\n if (fence) {\n const marker = fence[1][0].repeat(3);\n const body = [];\n i++;\n while (i < lines.length && !lines[i].trimStart().startsWith(marker)) body.push(lines[i++]);\n i++; // closing fence (or EOF — an unterminated fence still renders)\n out.push(pre({ className: 'md-code' }, code(body.join('\\n'))));\n continue;\n }\n\n if (!line.trim()) { i++; continue; }\n\n const heading = /^(#{1,6})\\s+(.*)$/.exec(line);\n if (heading) {\n const level = heading[1].length;\n const factory = level === 1 ? h1 : level === 2 ? h2 : h3;\n out.push(factory({ className: `md-h md-h${level}` }, ...inline(heading[2], node, ui)));\n i++;\n continue;\n }\n\n if (/^\\s*(-{3,}|\\*{3,}|_{3,})\\s*$/.test(line)) { out.push(hr({ className: 'md-hr' })); i++; continue; }\n\n if (/^\\s*>/.test(line)) {\n const body = [];\n while (i < lines.length && /^\\s*>/.test(lines[i])) body.push(lines[i++].replace(/^\\s*>\\s?/, ''));\n out.push(blockquote({ className: 'md-quote' }, ...renderMarkdown(body.join('\\n'), node, ui)));\n continue;\n }\n\n const bullet = /^\\s*([-*+]|\\d+[.)])\\s+/.exec(line);\n if (bullet) {\n const ordered = /\\d/.test(bullet[1]);\n const items = [];\n while (i < lines.length) {\n const m = /^\\s*([-*+]|\\d+[.)])\\s+(.*)$/.exec(lines[i]);\n if (!m || /\\d/.test(m[1]) !== ordered) break;\n items.push(li({ className: 'md-li' }, ...inline(m[2], node, ui)));\n i++;\n }\n out.push((ordered ? ol : ul)({ className: 'md-list' }, ...items));\n continue;\n }\n\n // Paragraph: consecutive non-blank lines that don't start another block.\n const para = [];\n while (i < lines.length && lines[i].trim() && !startsBlock(lines[i])) para.push(lines[i++]);\n const joined = para.join('\\n');\n const kids = [];\n joined.split('\\n').forEach((l, n) => {\n if (n) kids.push(br());\n kids.push(...inline(l, node, ui));\n });\n out.push(p({ className: 'md-p' }, ...kids));\n }\n return truncated ? [...out, tooLarge()] : out;\n}\n\n// Say what happened, rather than silently rendering a prefix as if it were the whole\n// document — a reader who can't tell it was cut off will believe the rest isn't there.\nfunction tooLarge() {\n return p({ className: 'md-truncated' },\n 'This document is too large to display in full. Download it to read the rest.');\n}\n\nfunction startsBlock(line) {\n return /^(#{1,6}\\s|\\s*>|\\s*([-*+]|\\d+[.)])\\s|\\s*(```|~~~))/.test(line)\n || /^\\s*(-{3,}|\\*{3,}|_{3,})\\s*$/.test(line);\n}\n\n// --- inline level ------------------------------------------------------------\n\n// Ordered by precedence: code spans win over emphasis (so `*` inside backticks is\n// literal), and explicit links win over bare autolinks.\nconst INLINE = [\n { re: /`([^`]+)`/, node: (m) => code({ className: 'md-inline-code' }, m[1]) },\n { re: /\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+\"[^\"]*\")?\\)/, node: (m, node, ui) => link(m[2], m[1] || m[2], node, ui) },\n { re: /(\\*\\*|__)(.+?)\\1/, node: (m, node, ui, d) => strong(...inline(m[2], node, ui, d + 1)) },\n { re: /(\\*|_)(.+?)\\1/, node: (m, node, ui, d) => em(...inline(m[2], node, ui, d + 1)) },\n // Bare URLs, so a pasted trove: reference is clickable without link syntax.\n { re: /(trove:[^\\s<>\"'`)\\]}]+|https?:\\/\\/[^\\s<>\"'`)\\]}]+)/, node: (m, node, ui) => link(trimTrailing(m[1]), trimTrailing(m[1]), node, ui) },\n];\n\n/**\n * Scan one line into inline nodes. Iterative on purpose: the obvious recursive form\n * (split on the first match, recurse on both sides) descends once per span, so a line\n * with thousands of them overflows the stack — and the input is a file someone\n * uploaded, so \"thousands of them\" is their choice, not ours.\n *\n * Emphasis still nests, via a bounded recursion on the span's *contents* only. That\n * depth is limited by how deeply markers are nested rather than by how many spans a\n * line contains, so it stays shallow for anything a person would write, and `depth`\n * stops a pathological document regardless.\n */\nfunction inline(text, node, ui, depth = 0) {\n if (!text) return [];\n if (depth > 12) return [text]; // deeper than any real markup; render it literally\n const out = [];\n let rest = text;\n while (rest) {\n if (out.length >= MAX_INLINE_NODES) { out.push(rest); break; }\n let best = null;\n for (const rule of INLINE) {\n const m = rule.re.exec(rest);\n if (m && (best === null || m.index < best.m.index)) best = { m, rule };\n }\n if (!best) { out.push(rest); break; }\n const { m, rule } = best;\n if (m.index) out.push(rest.slice(0, m.index));\n out.push(rule.node(m, node, ui, depth));\n rest = rest.slice(m.index + m[0].length);\n }\n return out;\n}\n\nfunction trimTrailing(url) {\n return url.replace(/[.,;:!?]+$/, '');\n}\n\n/**\n * One link. A `trove:` reference navigates inside the app and is resolved lazily on\n * click — resolving every link up front would mean a request per link on every render,\n * and a link's target can appear or disappear between renders anyway.\n *\n * Only trove: and http(s) are rendered as links at all. A `javascript:` or `data:` URL\n * is shown as plain text: markdown here is untrusted content written by whoever can\n * write to the drive, and an allowlist is the only way to be sure about a scheme.\n */\nfunction link(href, label, node, ui) {\n const trove = parseTroveUri(href);\n if (trove) {\n return a({ className: 'md-link md-trove', href: '#', title: href }, label).on({\n click: (e) => {\n e.preventDefault();\n openTroveLink(ui, href, { from: node });\n },\n });\n }\n if (/^https?:\\/\\//i.test(href)) {\n return a({ className: 'md-link', href, target: '_blank', rel: 'noopener noreferrer', title: href }, label);\n }\n return span({ className: 'md-deadlink', title: `Unsupported link: ${href}` }, label);\n}\n",
104
104
  "// Built-in openers, registered through the same contribution system plugins use.\n// Each declares a selector (extensions / mime) and a component(node, ui) → vnode.\n// The editor area picks the highest-priority opener whose selector matches.\n\nimport { cell, dd, watch } from '../../../runtime.js';\nimport { icon } from '../../icon.js';\nimport { bytes } from '../../format.js';\nimport { markdownOpener } from './markdown.js';\nimport { attachMedia } from '../../media.js';\nimport { FileText } from '../../../bl/queries.js';\nimport { watchQuery } from '../../../bl/watchQuery.js';\nimport { ExecCommandAction } from '../../../bl/actions.js';\n\nconst { div, pre, img, span, button, video, audio } = dd;\n\n// Built-ins register the same way a plugin's manifest declares an opener — same\n// registry, same `match` selector, same priority ordering. The only difference is\n// that a built-in supplies a `component` (it runs in the host) where a plugin\n// supplies an `entry` module (it runs in its own sandboxed frame).\nconst BUILT_IN = {\n 'core.audio': {\n title: 'Audio Player', priority: 20,\n match: { mime: ['audio/*'], ext: ['.mp3', '.flac', '.wav', '.opus', '.ogg', '.m4a', '.m4b'] },\n component: audioOpener,\n },\n 'core.video': {\n title: 'Video Player', priority: 20,\n match: { mime: ['video/*'], ext: ['.mp4', '.webm', '.mkv', '.mov'] },\n component: videoOpener,\n },\n 'core.image': {\n title: 'Image Viewer', priority: 20,\n match: { mime: ['image/*'], ext: ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg', '.avif'] },\n component: imageOpener,\n },\n // Markdown outranks the plain text viewer: a document that links its sources is how\n // things are grouped now, so those links have to be clickable by default.\n 'core.markdown': {\n title: 'Markdown', priority: 30,\n match: { ext: ['.md', '.markdown'], mime: ['text/markdown'] },\n component: markdownOpener,\n },\n 'core.text': {\n title: 'Text Viewer', priority: 10,\n match: {\n mime: ['text/*', 'application/json'],\n ext: ['.txt', '.md', '.json', '.js', '.mjs', '.ts', '.jsx', '.tsx', '.css', '.html', '.xml', '.yaml', '.yml', '.toml', '.ini', '.log', '.csv', '.py', '.rb', '.go', '.rs', '.sh', '.c', '.h', '.cpp', '.java'],\n },\n component: textOpener,\n },\n};\n\nexport function registerBuiltinOpeners(platform) {\n for (const [name, spec] of Object.entries(BUILT_IN)) {\n platform.contributions.register(name, { type: 'opener', ...spec });\n }\n}\n\n/** Render a node with a resolved opener; falls back gracefully. */\nexport function renderOpener(node, openerId, ui) {\n const opener = ui.platform.contributions.get(openerId);\n if (opener?.component) {\n try {\n return opener.component(node, ui);\n } catch (err) {\n return errorView(err.message);\n }\n }\n if (opener?.pluginId) return pluginOpenerView(opener, node, ui);\n return fallbackOpener(node, ui);\n}\n\n// ---- component openers -----------------------------------------------------\n\n// How much of a text file the viewer will pull and draw. A drive holds logs, CSV\n// exports and database dumps in the hundreds of megabytes; reading one whole just to\n// show its beginning buffers the entire file in the tab and then asks the browser to\n// lay out ten million characters. Both halves are bounded here — the Range request\n// means the bytes never arrive, not merely that they aren't drawn.\nconst TEXT_VIEW_BYTES = 512 * 1024;\n\nfunction textOpener(node, ui) {\n const src = watchQuery(ui.engine, FileText.of(node.id, TEXT_VIEW_BYTES, node.size));\n return dd.alias(() =>\n ui.watch(\n src,\n ({ text, truncated, total }) => div({ className: 'viewer text' },\n pre(text),\n // Say what is missing rather than trailing off. A viewer that silently shows\n // the first slice of a file is worse than one that refuses: the reader believes\n // they have seen the end of it.\n truncated\n ? div({ className: 'md-truncated' },\n `Showing the first ${Math.round(text.length / 1024)} KB${total ? ` of ${(total / 1048576).toFixed(1)} MB` : ''}. `,\n span('Download the file to read all of it.'))\n : null,\n ),\n {\n placeholder: () => div({ className: 'viewer' }, div({ className: 'loading' }, div({ className: 'spinner' }), span('Loading…'))),\n error: (e) => errorView(e.message),\n },\n ),\n )();\n}\n\n// A media element (img/audio/video) sets its `src` to a download URL that can 404 or\n// hold undecodable bytes. Those failures surface only as an async `error` event on the\n// element itself (media error events don't bubble), which would otherwise leave a\n// broken glyph / black box with no message. `mediaWithError` passes an `onError` the\n// caller MUST wire onto the actual media element, and swaps in the download fallback\n// (with a reason) the moment it fires.\nconst MEDIA_ERR = \"This file couldn't be loaded — it may be missing or in an unsupported format.\";\nfunction mediaWithError(node, ui, makeEl) {\n const state = cell({ error: null });\n const onError = (msg) => state.setValue({ error: msg || MEDIA_ERR });\n const el = makeEl(onError);\n return dd.alias(() =>\n watch(state, (s) => (s.error ? fallbackOpener(node, ui, s.error) : el)),\n )();\n}\n\n/**\n * The `src` is not set here.\n *\n * It is minted — a URL that carries its own grant, because a media element fetches\n * without our Authorization header — and then KEPT current: it expires, and a paused\n * film resumed the next morning has to swap its source without losing its place. All of\n * that is `attachMedia`; see ui/media.js.\n */\nconst sourced = (el, node, ui, onError) => el.on({\n $attach: (dom) => { dom._detachMedia = attachMedia(dom, node, ui, { onError }); },\n $detach: (dom) => { dom._detachMedia?.(); dom._detachMedia = null; },\n}).opaque();\n\nfunction imageOpener(node, ui) {\n return mediaWithError(node, ui, (onError) =>\n div({ className: 'viewer image' }, sourced(img({ alt: node.name }), node, ui, onError)),\n );\n}\n\nfunction audioOpener(node, ui) {\n return mediaWithError(node, ui, (onError) =>\n div({ className: 'viewer', $styling: { display: 'grid', 'place-items': 'center', gap: '16px', padding: '40px' } },\n icon('file-audio', { size: 48 }),\n span({ $styling: { color: 'var(--text-dim)' } }, node.name),\n sourced(audio({ controls: true, $styling: { width: 'min(520px, 90%)' } }), node, ui, onError),\n ),\n );\n}\n\nfunction videoOpener(node, ui) {\n return mediaWithError(node, ui, (onError) =>\n div({ className: 'viewer', $styling: { display: 'grid', 'place-items': 'center', background: '#000' } },\n sourced(video({ controls: true, $styling: { 'max-width': '100%', 'max-height': '100%' } }), node, ui, onError),\n ),\n );\n}\n\nfunction fallbackOpener(node, ui, reason) {\n return div({ className: 'viewer' },\n div({ className: 'fallback' },\n icon(reason ? 'warn' : 'file', { size: 44 }),\n span({ $styling: { 'font-weight': 600 } }, node.name),\n span(`${node.contentType || 'Unknown type'} · ${bytes(node.size)}`),\n span({ $styling: { color: 'var(--text-faint)', 'max-width': '340px' } },\n reason || 'No preview available for this file type. Install a plugin that handles it, or download the file.'),\n button({ className: 'btn primary' }, icon('download', { size: 15 }), 'Download')\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('explorer.download', node)) }),\n ),\n );\n}\n\nfunction pluginOpenerView(opener, node, ui) {\n // A plugin opener renders in its OWN sandboxed iframe (spawned by mountViewer with\n // the plugin's capabilities). That iframe is not a child here — it's a host-owned\n // position:fixed overlay whose box tracks this .pv-host element (moving an <iframe>\n // in the DOM would reload it). $attach hands .pv-host to mountViewer as the tracking\n // target; $detach lets it dock or tear down. `.opaque()` keeps dodo from reconciling\n // these (host-managed) nodes so their lifecycle hooks stay stable across re-renders.\n // A .pv-status overlay shows a spinner until the plugin opens the file (the iframe\n // is transparent while loading) and an error if it never does.\n return div({ className: 'viewer plugin-viewer' },\n div({ className: 'pv-status' }).on({\n $attach: (el) => {\n el.innerHTML = '<div class=\"loading\"><div class=\"spinner\"></div><span>Opening…</span></div>';\n el._ready = () => { el.style.display = 'none'; };\n el._error = (msg) => { el.style.display = 'grid'; el.innerHTML = ''; el.appendChild(errorEl(msg)); };\n },\n }).opaque(),\n div({ className: 'pv-host' }).on({\n $attach: (el) => {\n const status = el.parentElement?.querySelector('.pv-status');\n el._detach = ui.platform.plugins.mountViewer(opener.pluginId, el, node, opener.id, {\n onReady: () => status?._ready?.(),\n onError: (msg) => status?._error?.(msg || 'This viewer failed to load'),\n });\n },\n $detach: (el) => { el._detach?.(); el._detach = null; },\n }).opaque(),\n );\n}\n\n// A plain DOM error node for the imperatively-managed .pv-status overlay.\nfunction errorEl(message) {\n const wrap = document.createElement('div');\n wrap.className = 'fallback';\n const s = document.createElement('span');\n s.textContent = message || 'Failed to open';\n wrap.appendChild(s);\n return wrap;\n}\n\nfunction errorView(message) {\n return div({ className: 'viewer' }, div({ className: 'fallback' }, icon('warn', { size: 40 }), span(message || 'Failed to open')));\n}\n",
@@ -108,11 +108,11 @@
108
108
  "// Small transient overlays: modal dialog (prompt/confirm), right-click context\n// menu, toast notifications, the upload/transfer tray, and the plugin popup\n// panel (which hosts a plugin's own iframe, Chrome-extension style).\n\nimport { dd } from '../../runtime.js';\nimport { icon, iconForNode } from '../icon.js';\nimport { bytes } from '../format.js';\nimport { pluginReview } from './pluginReview.js';\nimport { typeKeyFor, typeLabelFor } from '../../bl/openers.js';\nimport { draftFor, promptValueOf, PROMPT } from '../../bl/viewState.js';\nimport { CancelTransferAction, ClearFinishedTransfersAction, CloseContextMenuAction, CloseDialogAction, ClosePluginPanelAction, CreateCollectionFromFormAction, DismissNotificationAction, DismissTransferAction, OpenInPanelAction, PatchDraftAction, RememberOpenerAction, RetryTransferAction, SetViewStateAction, UpdateDialogAction } from '../../bl/actions.js';\nimport { activate } from '../activate.js';\n\nconst { div, span, button, input, h3, p, select, option, label, textarea } = dd;\n\n// ---- Dialog ----------------------------------------------------------------\nexport function dialog(state, ui) {\n const d = state.overlay.dialog;\n if (!d) return null;\n if (d.kind === 'collection') return collectionDialog(d, ui, state.caps, state.view);\n if (d.kind === 'plugin-review') return pluginReview(d, ui, state.view);\n if (d.kind === 'opener-chooser') return openerChooserDialog(d, ui);\n // Both kinds carry ACTIONS — what happens if you say yes — rather than a callback. A\n // prompt's typed value is engine state (see bl/viewState.js), so its actions read what\n // was typed instead of being handed it, and the dialog spec holds no functions.\n //\n // A confirm closes itself here; a prompt's action closes first and then acts, because it\n // has to read the value before the dialog goes.\n const value = promptValueOf(state.view, d);\n const submit = () => {\n if (d.kind === 'confirm') ui.engine.dispatch(new CloseDialogAction());\n activate(ui, { actions: d.confirmActions });\n };\n return div({},\n div({ className: 'scrim' }).on({ click: () => ui.engine.dispatch(new CloseDialogAction()) }),\n div({ className: 'dialog' },\n h3(d.title),\n d.body ? div({ className: 'body' }, d.body) : null,\n d.kind === 'prompt'\n ? div({ className: 'field' },\n d.label ? span({ $styling: { 'font-size': '12px', color: 'var(--text-dim)' } }, d.label) : null,\n input({ className: 'input', value, placeholder: d.placeholder || '', autofocus: true })\n .on({\n input: (e) => ui.engine.dispatch(new SetViewStateAction(PROMPT, { ref: d, value: e.target.value })),\n keydown: (e) => { if (e.key === 'Enter') submit(); if (e.key === 'Escape') ui.engine.dispatch(new CloseDialogAction()); },\n $attach: (el) => queueMicrotask(() => { el.focus(); el.select(); }),\n }),\n )\n : null,\n div({ className: 'row-actions' },\n button({ className: 'btn' }, 'Cancel').on({ click: () => ui.engine.dispatch(new CloseDialogAction()) }),\n button({ className: `btn ${d.danger ? 'danger' : 'primary'}` }, d.confirmLabel || 'OK').on({ click: submit }),\n ),\n ),\n );\n}\n\n// Choose which viewer opens a file when several openers match. Reactive via the\n// workbench dialog state (updateDialog), so radio/checkbox selection survives\n// re-renders. \"Remember\" persists a per-file-type association in settings.\nfunction openerChooserDialog(d, ui) {\n const selected = d.openerId || d.current || d.openers[0]?.id;\n const remember = !!d.remember;\n const confirm = () => {\n if (remember && selected) {\n ui.engine.dispatch(new RememberOpenerAction(typeKeyFor(d.node), selected));\n }\n ui.engine.dispatch(new CloseDialogAction());\n ui.engine.dispatch(new OpenInPanelAction(d.node, selected, { reset: !!d.reset }));\n };\n return div({},\n div({ className: 'scrim' }).on({ click: () => ui.engine.dispatch(new CloseDialogAction()) }),\n div({ className: 'dialog opener-chooser' },\n h3(`Open “${d.node.name}” with…`),\n div({ className: 'opener-list' },\n ...d.openers.map((o) =>\n label({ className: `opener-opt ${o.id === selected ? 'sel' : ''}` },\n input({ type: 'radio', name: 'opener-choice', checked: o.id === selected })\n .on({ change: () => ui.engine.dispatch(new UpdateDialogAction({ openerId: o.id })) }),\n icon(o.icon || iconForNode(d.node), { size: 18 }),\n div({ className: 'oo-main' },\n span({ className: 'oo-title' }, o.title || o.id),\n // Resolved by whoever assembled the list — see describeOpener. Asking the\n // plugin host for a display name mid-render was the last thing keeping\n // `platform` in this dialog.\n span({ className: 'oo-src' }, o.source),\n ),\n ).on({ click: () => ui.engine.dispatch(new UpdateDialogAction({ openerId: o.id })) }),\n ),\n ),\n label({ className: 'opener-remember' },\n input({ type: 'checkbox', checked: remember }).on({ change: (e) => ui.engine.dispatch(new UpdateDialogAction({ remember: e.target.checked })) }),\n span(`Always use this for ${typeLabelFor(d.node)}`),\n ),\n div({ className: 'row-actions' },\n button({ className: 'btn' }, 'Cancel').on({ click: () => ui.engine.dispatch(new CloseDialogAction()) }),\n button({ className: 'btn primary' }, 'Open').on({ click: confirm }),\n ),\n ),\n );\n}\n\n// A collection is a backing-store config, and which stores exist is the SERVER's answer.\n//\n// This form used to hardcode its own list — Filesystem / NAS, S3, Memory — and the fields\n// for each. On Cloudflare Workers that offered a filesystem the runtime cannot provide, so\n// the form could produce a collection the server would refuse to build. Now the drivers and\n// their fields come from /api/capabilities, which reports what was actually registered.\n//\n// The form persists across re-renders (keyed to the dialog instance) so switching driver\n// keeps what has been typed.\n// The collection dialog's unsubmitted form. Engine state, because changing the storage\n// driver changes which fields are on screen — see bl/viewState.js.\nconst COL_FORM = 'collectionDialog';\nfunction collectionDialog(d, ui, caps, view) {\n const drivers = caps?.storageDrivers || [];\n\n // Derived, not written. This used to install the empty form during the render that\n // noticed the dialog had changed — a render with a side effect. `draftFor` answers with\n // the default when the held draft belongs to a different dialog instance, so nothing is\n // written until the user types something.\n const blankForm = {\n name: '', description: '', driver: drivers[0]?.key || '',\n // Off by default and deliberately so: encryption changes what the drive can do for you\n // (see the exposure notes below) and should be a decision, not a default someone\n // discovers later.\n encrypt: false, encryptWhat: 'all', encryptList: '',\n };\n const colState = draftFor(view, COL_FORM, d, { form: blankForm });\n const form = colState.form;\n const driver = drivers.find((x) => x.key === form.driver) || drivers[0];\n // Every field writes through the cell. Only the driver changes which fields are on\n // screen, but writing them all the same way means there is no second rule to remember —\n // and a text field that only mattered on submit was the reason `form` could be mutated\n // in place at all.\n // Merged against STORED state, not against the `form` this render closed over — see\n // PatchDraftAction. Changing two fields before the next render used to lose one.\n const set = (k) => (e) => {\n const value = e.target.type === 'checkbox' ? e.target.checked : e.target.value;\n ui.engine.dispatch(new PatchDraftAction(COL_FORM, colState.ref, { [k]: value }, blankForm));\n };\n\n const submit = () => {\n // Only the fields this driver declared, so a leftover value from a driver the user\n // switched away from is not smuggled into the store config.\n const store = { driver: form.driver };\n for (const f of driver?.fields || []) {\n const v = form[f.name];\n if (v !== undefined && v !== '') store[f.name] = f.type === 'number' ? Number(v) : v;\n }\n ui.engine.dispatch(new CreateCollectionFromFormAction({\n name: form.name, description: form.description, store,\n encryption: encryptionOf(form),\n }));\n };\n\n const field = (lbl, k, ph = '') => div({ className: 'field', $styling: { 'margin-bottom': '10px' } },\n label(lbl), input({ className: 'input', placeholder: ph }).on({ input: set(k) }));\n\n // The server refuses a configuration that would match nothing, and saying so here is the\n // difference between a form that explains itself and an API error after the fact.\n const encryptionProblem = form.encrypt && form.encryptWhat !== 'all' && !parseList(form.encryptList).length\n ? (form.encryptWhat === 'extensions'\n ? 'Name at least one extension, or choose every file.'\n : 'Name at least one media type, or choose every file.')\n : null;\n\n const ready = !!form.name.trim() && !!form.driver && !encryptionProblem\n && (driver?.fields || []).every((f) => !f.required || String(form[f.name] ?? '').trim());\n\n return div({},\n div({ className: 'scrim' }).on({ click: () => ui.engine.dispatch(new CloseDialogAction()) }),\n div({ className: 'dialog', $styling: { width: 'min(480px, 94vw)' } },\n h3('New collection'),\n div({ className: 'body' }, 'A collection is a backing store you own. Configure where its files live.'),\n field('Name', 'name', 'Team Vault'),\n drivers.length\n ? div({ className: 'field', $styling: { 'margin-bottom': '10px' } },\n label('Backing store'),\n select({ className: 'input' },\n ...drivers.map((x) => option({ value: x.key, selected: form.driver === x.key }, x.label)),\n ).on({ change: set('driver') }))\n // No drivers at all means the deployment registered none, which is a server\n // misconfiguration — saying so beats an empty dropdown.\n : div({ className: 'body' }, 'This server has no storage drivers registered, so a collection cannot be created.'),\n driver ? storeFields(driver, form, set) : null,\n encryptionSection(form, set, caps, encryptionProblem),\n div({ className: 'row-actions' },\n button({ className: 'btn' }, 'Cancel').on({ click: () => ui.engine.dispatch(new CloseDialogAction()) }),\n button({ className: 'btn primary', $attrs: ready ? {} : { disabled: 'true' } }, 'Create collection')\n .on({ click: () => ready && submit() }),\n ),\n ),\n );\n}\n\n/** The rules as the API wants them, or null when encryption is off. */\nfunction encryptionOf(form) {\n if (!form.encrypt) return null;\n const list = parseList(form.encryptList);\n return {\n enabled: true,\n rules: form.encryptWhat === 'all'\n ? { all: true }\n : form.encryptWhat === 'extensions'\n ? { extensions: list }\n : { mimeTypes: list },\n };\n}\n\n/** A comma or space separated list, emptied of blanks. */\nfunction parseList(text) {\n return String(text || '').split(/[\\s,]+/).map((x) => x.trim()).filter(Boolean);\n}\n\n/**\n * Turning encryption on, and saying what it does.\n *\n * The scope notes sit HERE rather than in a help page, because the moment someone enables\n * this is the moment the scope matters. What it protects is the storage provider seeing\n * file contents; what it does not protect against is anything that reads through the drive,\n * which includes every indexer. Someone who believes they have just made their files\n * unreadable to the server has been misled by omission.\n */\nfunction encryptionSection(form, set, caps, problem) {\n const indexers = (caps?.indexers || []).filter((i) => i.readsContent !== false);\n return div({ className: 'field enc-section', $styling: { 'margin-bottom': '10px' } },\n label({ className: 'enc-toggle' },\n input({ type: 'checkbox', checked: !!form.encrypt }).on({ change: set('encrypt') }),\n span('Encrypt files in this collection'),\n ),\n !form.encrypt\n ? div({ className: 'enc-hint' }, 'Files are stored exactly as uploaded.')\n : div({ className: 'enc-body' },\n div({ className: 'field' },\n label('What to encrypt'),\n select({ className: 'input' },\n option({ value: 'all', selected: form.encryptWhat === 'all' }, 'Every file'),\n option({ value: 'extensions', selected: form.encryptWhat === 'extensions' }, 'Only these extensions'),\n option({ value: 'mimeTypes', selected: form.encryptWhat === 'mimeTypes' }, 'Only these media types'),\n ).on({ change: set('encryptWhat') })),\n form.encryptWhat !== 'all'\n ? div({ className: 'field' },\n input({\n className: 'input', value: form.encryptList,\n placeholder: form.encryptWhat === 'extensions' ? '.pdf, .docx, .key' : 'image, application/pdf',\n }).on({ input: set('encryptList') }),\n // A media type matches by its leading part too, which is how someone actually\n // thinks about \"encrypt my photos\".\n div({ className: 'enc-hint' }, form.encryptWhat === 'extensions'\n ? 'Separated by commas. The leading dot is optional.'\n : 'Separated by commas. “image” covers every image type.'))\n : null,\n problem ? div({ className: 'enc-problem' }, icon('warn', { size: 13 }), span(problem)) : null,\n div({ className: 'enc-scope' },\n div({ className: 'es-title' }, 'What this does'),\n div({ className: 'es-line' }, 'Files are sealed in your browser before they are uploaded, so the storage provider only ever holds ciphertext.'),\n div({ className: 'es-title' }, 'What it does not do'),\n div({ className: 'es-line' }, 'It is not end-to-end. The drive holds the key and decrypts for anything that reads through it — previews, downloads, and search indexing.'),\n indexers.length\n ? div({ className: 'es-line' }, `These read file contents in the clear: ${indexers.map((i) => i.title || i.id).join(', ')}.`)\n : null,\n div({ className: 'es-line note' }, 'This applies to files uploaded from now on. Turning it off later does not decrypt anything already sealed.'),\n ),\n ),\n );\n}\n\n/** The chosen driver's declared fields, rendered from its descriptor. */\nfunction storeFields(driver, form, set) {\n if (!driver.fields.length) {\n return div({ className: 'body', $styling: { 'font-size': '12px' } },\n driver.description || 'This store needs no configuration.');\n }\n return div({},\n driver.description\n ? div({ className: 'body', $styling: { 'font-size': '12px', 'margin-bottom': '10px' } }, driver.description)\n : null,\n ...driver.fields.map((f) => (f.type === 'boolean'\n ? div({ className: 'field', $styling: { 'margin-bottom': '10px' } },\n label({}, input({ type: 'checkbox' }).on({ change: set(f.name) }), ` ${f.label}`),\n f.help ? div({ className: 'body', $styling: { 'font-size': '11.5px' } }, f.help) : null)\n : div({ className: 'field', $styling: { 'margin-bottom': '10px' } },\n label(f.label + (f.required ? '' : ' (optional)')),\n input({\n className: 'input', placeholder: f.placeholder, autocomplete: 'off',\n // A field the driver marked secret is a password field, so a shoulder or a\n // screen share does not read an access key out of the form.\n type: f.type === 'password' || f.secret ? 'password' : (f.type === 'number' ? 'number' : 'text'),\n }).on({ input: set(f.name) }),\n f.help ? div({ className: 'body', $styling: { 'font-size': '11.5px' } }, f.help) : null))),\n );\n}\n\n// ---- Context menu ----------------------------------------------------------\nexport function contextMenu(state, ui) {\n const m = state.overlay.contextMenu;\n if (!m || !m.items?.length) return null;\n // Clamp on both edges. Anchoring a menu ABOVE its trigger (the status bar opens\n // upward) produces a negative top, and only the far edge used to be clamped.\n // The height is whatever the menu needs OR whatever the window allows, whichever is\n // smaller — past that the menu scrolls (see `.menu`), so pushing it further up buys\n // nothing and would just leave a gap at the bottom.\n const wanted = Math.min(m.items.length * 34 + 20, window.innerHeight - 24);\n const x = Math.max(8, Math.min(m.x, window.innerWidth - 220));\n const y = Math.max(8, Math.min(m.y, window.innerHeight - wanted));\n return div({},\n div({ className: 'scrim', $styling: { background: 'transparent' } }).on({ click: () => ui.engine.dispatch(new CloseContextMenuAction()), contextmenu: (e) => { e.preventDefault(); ui.engine.dispatch(new CloseContextMenuAction()); } }),\n div({ className: 'menu', $styling: { left: x + 'px', top: y + 'px' } },\n ...m.items.map((it, i) =>\n it.sep\n ? div({ className: 'sep' })\n // A real <button>, not a click-handling div: menu entries were unreachable by\n // keyboard and invisible to the TV shell's spatial navigation, which only\n // considers focusable elements.\n : button({ className: `mi ${it.danger ? 'danger' : ''}`, autofocus: i === 0 },\n it.icon ? icon(it.icon, { size: 15 }) : null,\n span(it.label),\n it.kbd ? span({ className: 'kbd' }, it.kbd) : null,\n ).on({\n click: () => { ui.engine.dispatch(new CloseContextMenuAction()); activate(ui, it); },\n // The first item is focused on open, so Escape has to get you back out.\n keydown: (e) => { if (e.key === 'Escape') { e.preventDefault(); ui.engine.dispatch(new CloseContextMenuAction()); } },\n $attach: (el) => { if (i === 0) queueMicrotask(() => el.focus()); },\n }),\n ),\n ),\n );\n}\n\n// ---- Toasts ----------------------------------------------------------------\nexport function toasts(state, ui) {\n const list = state.notif || [];\n if (!list.length) return null;\n return div({ className: 'toasts' },\n ...list.slice(-5).map((n) =>\n div({ className: `toast ${n.level}` },\n div({ className: 'bar' }),\n div({ className: 'msg' }, n.message),\n button({ className: 'x' }, icon('close', { size: 14 })).on({ click: () => ui.engine.dispatch(new DismissNotificationAction(n.id)) }),\n ).key(n.id),\n ),\n );\n}\n\n// ---- Transfer tray ---------------------------------------------------------\nexport function transferTray(state, ui) {\n const items = state.tr.items;\n if (!items.length) return null;\n return div({ className: 'tray' },\n div({ className: 'head' },\n icon('upload', { size: 14 }),\n span({ $styling: { 'margin-left': '6px' } }, 'Transfers'),\n div({ className: 'actions' },\n button({ className: 'iconbtn', title: 'Clear finished' }, icon('check', { size: 14 }))\n .on({ click: () => ui.engine.dispatch(new ClearFinishedTransfersAction()) }),\n ),\n ),\n div({ className: 'items' },\n ...items.map((t) =>\n div({ className: `xfer ${t.status}` },\n div({ className: 'top' },\n icon(t.status === 'error' ? 'warn' : t.status === 'done' ? 'check' : 'upload', { size: 14 }),\n span({ className: 'name' }, t.name),\n t.status === 'active'\n ? button({ className: 'iconbtn', title: 'Cancel' }, icon('close', { size: 13 })).on({ click: () => ui.engine.dispatch(new CancelTransferAction(t.id)) })\n : span({ className: 'pct' }, t.status === 'done' ? bytes(t.total) : t.status),\n ),\n t.status === 'active'\n ? div({ className: 'progress' }, div({ $styling: { width: `${Math.round(t.ratio * 100)}%` } }))\n : t.error ? div({ $styling: { 'font-size': '11px', color: 'var(--danger)', 'margin-top': '4px' } }, t.error) : null,\n t.status === 'active' ? div({ className: 'pct', $styling: { 'margin-top': '4px' } }, `${bytes(t.loaded)} / ${bytes(t.total)}`) : null,\n // Offered on anything that stopped short, cancelled included — the transport\n // already retries what is worth retrying on its own, so a row that reached this\n // state failed for a reason another automatic attempt would not fix. A lost\n // upload session is the case in point: correctly non-retryable, and correctly\n // something the user can choose to start over.\n (t.status === 'error' || t.status === 'cancelled') && t.retryable\n ? div({ className: 'xfer-actions' },\n button({ className: 'btn small' }, icon('refresh', { size: 12 }), span('Retry'))\n .on({ click: () => ui.engine.dispatch(new RetryTransferAction(t.id)) }),\n button({ className: 'btn small ghost' }, 'Dismiss')\n .on({ click: () => ui.engine.dispatch(new DismissTransferAction(t.id)) }),\n )\n : null,\n ).key(t.id),\n ),\n ),\n );\n}\n\n// ---- Plugin popup panel ----------------------------------------------------\nexport function pluginPanel(state, ui) {\n const pid = state.overlay.pluginPanel;\n if (!pid) return null;\n const plugin = (state.plugins || []).find((p) => p.id === pid);\n return div({ className: 'plugin-panel', $styling: { width: '380px' } },\n div({ className: 'head' },\n icon('plug', { size: 14 }),\n span(plugin?.name || pid),\n button({ className: 'iconbtn x' }, icon('close', { size: 14 })).on({ click: () => ui.engine.dispatch(new ClosePluginPanelAction()) }),\n ),\n // The host mounts the plugin's iframe into this element on attach.\n div({ className: 'host' }).on({\n $attach: (el) => {\n el._detach = ui.platform.plugins.mountPanel(pid, el, { width: 380, height: 460 });\n },\n $detach: (el) => el._detach?.(),\n }),\n );\n}\n",
109
109
  "// The Activity panel — what is running, and what is stuck.\n//\n// Two sections, because they are two different kinds of fact and the user acts on them\n// differently. Running work is watched and possibly cancelled; a standing problem is\n// retried or dismissed. Merging them into one \"notifications\" list would lose that:\n// a task that finished is over, while an issue that is listed is still true right now.\n//\n// A task that doesn't know its total renders as an indeterminate bar rather than a\n// guess. Nothing here fabricates a percentage.\n\nimport { dd } from '../../runtime.js';\nimport { icon } from '../icon.js';\nimport { bytes } from '../format.js';\nimport { CancelTaskAction, CopyTextAction, DismissIssueAction, DismissTaskAction, ExecCommandAction, RetryIssueAction, ToggleActivityPanelAction } from '../../bl/actions.js';\n\nconst { div, button, span, h3, p, pre } = dd;\n\nconst STATUS_ICON = { running: 'refresh', done: 'check', failed: 'close', cancelled: 'close' };\n\n/**\n * Clipboard, with the value shown if the write is refused.\n *\n * Clipboard permission is denied often enough that a button which silently does nothing\n * reads as broken — and the remedy is the one thing on this panel the user has to get out\n * of the app and into a terminal.\n */\nfunction copyText(text, ui) {\n ui.engine.dispatch(new CopyTextAction(text));\n}\n\nfunction amount(task) {\n if (task.total == null) return null;\n return task.unit === 'bytes'\n ? `${bytes(task.done || 0)} of ${bytes(task.total)}`\n : `${task.done || 0} of ${task.total}${task.unit ? ` ${task.unit}` : ''}`;\n}\n\nfunction taskRow(task, ui) {\n const running = task.status === 'running';\n const determinate = running && task.total != null && task.total > 0;\n const pct = determinate ? Math.min(100, Math.round(((task.done || 0) / task.total) * 100)) : 0;\n return div({ className: `act-task act-${task.status}`, 'data-task-id': task.id },\n div({ className: 'act-row' },\n running\n ? div({ className: 'spinner', $styling: { width: '12px', height: '12px' } })\n : icon(STATUS_ICON[task.status] || 'info', { size: 13 }),\n div({ className: 'act-body' },\n div({ className: 'act-title' }, task.title),\n task.detail ? div({ className: 'act-detail' }, task.detail) : null,\n task.error ? div({ className: 'act-error' }, task.error) : null,\n ),\n running && task.cancellable\n ? button({ className: 'act-action', title: 'Cancel' }, icon('close', { size: 12 })).on({ click: () => ui.engine.dispatch(new CancelTaskAction(task.id)) })\n : !running\n ? button({ className: 'act-action', title: 'Dismiss' }, icon('close', { size: 12 })).on({ click: () => ui.engine.dispatch(new DismissTaskAction(task.id)) })\n : null,\n ),\n running\n // An indeterminate bar animates without claiming a position. The alternative —\n // picking a number — would be a lie dressed as information.\n ? div({ className: `act-bar ${determinate ? '' : 'indeterminate'}` },\n div({ className: 'act-fill', $styling: determinate ? { width: `${pct}%` } : {} }))\n : null,\n running && amount(task) ? div({ className: 'act-amount' }, amount(task)) : null,\n );\n}\n\nfunction issueRow(issue, ui) {\n const since = new Date(issue.firstAt || issue.lastAt).toLocaleString();\n return div({ className: `act-issue act-sev-${issue.severity || 'error'}`, 'data-issue-id': issue.id },\n div({ className: 'act-row' },\n icon(issue.severity === 'warning' ? 'info' : 'close', { size: 13 }),\n div({ className: 'act-body' },\n div({ className: 'act-title' }, issue.title),\n issue.detail ? div({ className: 'act-detail' }, issue.detail) : null,\n // The fix, kept apart from the description and rendered as-is. A remedy is often\n // a policy document or a shell command, and a problem report that describes the\n // fix in prose leaves the reader to retype it.\n issue.remedy ? pre({ className: 'act-remedy' }, issue.remedy) : null,\n div({ className: 'act-meta' }, issue.count > 1 ? `${issue.count} times, since ${since}` : `since ${since}`),\n ),\n ),\n div({ className: 'act-actions' },\n issue.remedy\n ? button({ className: 'btn small ghost' }, 'Copy fix')\n .on({ click: () => copyText(issue.remedy, ui) })\n : null,\n // Retry only when the server said pressing it will actually do something.\n issue.retryable\n ? button({ className: 'btn small act-retry' }, icon('refresh', { size: 12 }), span('Retry'))\n .on({ click: () => ui.engine.dispatch(new RetryIssueAction(issue.id)) })\n : null,\n button({ className: 'btn small ghost act-dismiss' }, 'Dismiss')\n .on({ click: () => ui.engine.dispatch(new DismissIssueAction(issue.id)) }),\n ),\n );\n}\n\nexport default function activityPanel(state, ui) {\n const act = state.act || { tasks: [], issues: [] };\n if (!act.open) return null;\n const running = act.tasks.filter((t) => t.status === 'running');\n const recent = act.tasks.filter((t) => t.status !== 'running');\n\n return div({ className: 'activity-panel' },\n div({ className: 'act-head' },\n h3('Activity'),\n button({ className: 'act-action', title: 'Close' }, icon('close', { size: 13 }))\n .on({ click: () => ui.engine.dispatch(new ToggleActivityPanelAction(false)) }),\n ),\n\n // \"Nothing is wrong\" and \"we couldn't ask\" look identical unless one says so. Both\n // loads are reported, because either can fail alone.\n act.tasksError || act.issuesError\n ? div({ className: 'act-offline' }, icon('info', { size: 12 }),\n span(`Couldn't reach the server — this list may be out of date (${act.issuesError || act.tasksError})`))\n : null,\n\n div({ className: 'act-section' },\n div({ className: 'act-section-title' }, 'Running'),\n running.length\n ? div(...running.map((t) => taskRow(t, ui)))\n : p({ className: 'act-empty' }, 'Nothing running.'),\n ),\n\n act.issues.length\n ? div({ className: 'act-section' },\n div({ className: 'act-section-title' }, `Needs attention (${act.issues.length})`),\n div(...act.issues.map((i) => issueRow(i, ui))),\n )\n : div({ className: 'act-section' },\n div({ className: 'act-section-title' }, 'Needs attention'),\n // An unreadable list is not an empty one, and must never render as \"all clear\".\n p({ className: 'act-empty' },\n act.issuesError ? 'Could not load the list of problems.' : act.issuesLoading ? 'Checking…' : 'No standing problems.'),\n ),\n\n recent.length\n ? div({ className: 'act-section' },\n div({ className: 'act-section-title' }, 'Recently finished'),\n div(...recent.map((t) => taskRow(t, ui))),\n )\n : null,\n\n div({ className: 'act-foot act-actions' },\n button({ className: 'btn small ghost act-rebuild' }, icon('refresh', { size: 12 }), span('Rebuild search index'))\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.rebuildIndex')) }),\n button({ className: 'btn small ghost act-scan' }, icon('refresh', { size: 12 }), span('Scan for outside changes'))\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.scanCollection')) }),\n // On demand as well as on a schedule, because the moment an admin wants to know\n // whether they fixed the bucket is right after they changed it — not up to five\n // minutes later. It also checks against THIS browser's origin, which the scheduled\n // run can only do if the deployment configured one.\n button({ className: 'btn small ghost act-storage' }, icon('plug', { size: 12 }), span('Check storage'))\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.checkStorage')) }),\n ),\n );\n}\n",
110
110
  "// The phone shell: a thin top bar, a bottom tab bar, and two sheets.\n//\n// A left rail costs 52px of a 390px-wide screen and a status bar costs a row of chrome\n// that is unreadable at that size anyway — on a phone both are worse than useless. So\n// the rail's destinations become bottom tabs (thumb-reachable, which the top of the\n// screen is not), everything past the first few becomes one \"More\" sheet, and the whole\n// status bar folds behind a single icon in the top bar.\n//\n// The icon is not decoration: it changes to say what is happening. Work running shows a\n// spinner, a standing problem shows a badge, and neither is something the user has to go\n// looking for. Everything else — item counts, free space, backend — is a tap away rather\n// than permanently on screen, because on a phone it is reference material, not status.\n\nimport { dd } from '../../runtime.js';\nimport { icon } from '../icon.js';\nimport { bytes } from '../format.js';\nimport { usageChip } from './statusBar.js';\nimport { CloseSheetAction, ExecCommandAction, OpenSheetAction, ToggleActivityPanelAction, ToggleInboxAction } from '../../bl/actions.js';\n\nconst { div, button, span, img } = dd;\n\n// The tabs that earn a permanent slot. Everything else lives in More — a bottom bar with\n// six items is a bottom bar nobody can hit.\nconst TABS = [\n { id: 'home', icon: 'search', label: 'Files', command: 'workbench.view.home' },\n { id: 'upload', icon: 'upload', label: 'Upload', command: 'explorer.upload' },\n { id: 'plugins', icon: 'plug', label: 'Plugins', command: 'workbench.view.plugins' },\n];\n\n// How to DRAW each condition. Which condition is the one worth showing — offline over a\n// standing problem, a standing problem over work in progress — is decided by the\n// `statusFacts` query, because that ordering is a claim about what a person most needs to\n// know rather than a question about glyphs. See bl/status.js.\nconst GLYPHS = {\n offline: { icon: 'info', tone: 'warn' },\n issues: { icon: 'warn', tone: 'danger' },\n working: { spinner: true, tone: '' },\n lowSpace: { icon: 'info', tone: 'warn' },\n idle: { icon: 'info', tone: '' },\n};\n\nexport function phoneTopBar(state, ui) {\n const f = state.facts;\n const c = f.condition;\n const g = { ...(GLYPHS[c.kind] || GLYPHS.idle), label: c.label, badge: c.kind === 'issues' ? c.count : 0 };\n // Where you are, at the coarsest level. Deliberately NOT the open file's name: the\n // viewer's own breadcrumb sits directly beneath this bar and already says that, and two\n // rows of chrome repeating \"notes.txt\" costs a fifth of the screen to say it twice.\n const title = state.wb.activity === 'settings' ? 'Settings'\n : state.wb.activity === 'plugins' ? 'Plugins'\n : f.collectionLabel;\n return div({ className: 'phonebar top' },\n button({ className: 'pb-brand', title: 'Trove — home' }, img({ src: '/icon.svg', alt: 'Trove' }))\n .on({ click: () => ui.engine.dispatch(new ExecCommandAction('workbench.view.home')) }),\n div({ className: 'pb-title' }, title),\n button({ className: `pb-status ${g.tone}`, title: g.label, $attrs: { 'aria-label': g.label } },\n g.spinner\n ? div({ className: 'spinner', $styling: { width: '15px', height: '15px' } })\n : icon(g.icon, { size: 18 }),\n g.badge ? span({ className: 'pb-badge' }, String(g.badge > 9 ? '9+' : g.badge)) : null,\n ).on({ click: () => ui.engine.dispatch(new OpenSheetAction('status')) }),\n );\n}\n\nexport function phoneBottomBar(state, ui) {\n const active = state.wb.activity;\n const sheet = state.wb.sheet;\n const unread = state.so.notifications.unread;\n return div({ className: 'phonebar bottom' },\n ...TABS.map((t) => button({\n className: `pb-tab ${!sheet && active === t.id ? 'active' : ''}`,\n $attrs: { 'aria-label': t.label },\n }, icon(t.icon, { size: 21 }), span({ className: 'pb-label' }, t.label))\n .on({ click: () => { ui.engine.dispatch(new CloseSheetAction()); ui.engine.dispatch(new ExecCommandAction(t.command)); } })),\n // Settings is reached FROM the More sheet, so while you are in it \"More\" is where\n // you are — otherwise all four tabs read as inactive and the bar claims you are\n // nowhere.\n button({\n className: `pb-tab ${sheet === 'more' || (!sheet && !TABS.some((t) => t.id === active)) ? 'active' : ''}`,\n $attrs: { 'aria-label': 'More' },\n },\n icon('dots', { size: 21 }),\n unread ? span({ className: 'pb-badge' }, String(unread > 9 ? '9+' : unread)) : null,\n span({ className: 'pb-label' }, 'More'),\n ).on({ click: () => ui.engine.dispatch(new OpenSheetAction('more')) }),\n );\n}\n\n/** A row in a sheet: an icon, a label, and either a value or a chevron. */\nfunction sheetRow({ icon: name, label, value, danger, onClick }) {\n const body = [\n icon(name, { size: 18 }),\n span({ className: 'sr-label' }, label),\n value != null ? span({ className: 'sr-value' }, value) : null,\n onClick ? icon('chevron-right', { size: 16, className: 'sr-go' }) : null,\n ];\n return onClick\n ? button({ className: `sheet-row ${danger ? 'danger' : ''}` }, ...body).on({ click: onClick })\n : div({ className: 'sheet-row static' }, ...body);\n}\n\nexport function phoneSheet(state, ui) {\n const which = state.wb.sheet;\n if (!which) return null;\n return div({ className: 'sheet-wrap' },\n div({ className: 'scrim' }).on({ click: () => ui.engine.dispatch(new CloseSheetAction()) }),\n div({ className: 'sheet' },\n div({ className: 'sheet-grip' }).on({ click: () => ui.engine.dispatch(new CloseSheetAction()) }),\n which === 'status' ? statusSheet(state, ui) : moreSheet(state, ui),\n ),\n );\n}\n\nfunction statusSheet(state, ui) {\n const f = state.facts;\n const go = (cmd) => () => { ui.engine.dispatch(new CloseSheetAction()); ui.engine.dispatch(new ExecCommandAction(cmd)); };\n return div({ className: 'sheet-body' },\n div({ className: 'sheet-title' }, f.collectionLabel),\n\n // Problems and running work first: they are the reason someone opened this.\n f.issues.length\n ? sheetRow({\n icon: 'warn', danger: true,\n label: `${f.issues.length} need${f.issues.length === 1 ? 's' : ''} attention`,\n onClick: () => { ui.engine.dispatch(new CloseSheetAction()); ui.engine.dispatch(new ToggleActivityPanelAction(true)); },\n })\n : null,\n f.running.length || f.uploading.length\n ? sheetRow({\n icon: 'refresh',\n label: `${f.running.length + f.uploading.length} running`,\n onClick: () => { ui.engine.dispatch(new CloseSheetAction()); ui.engine.dispatch(new ToggleActivityPanelAction(true)); },\n })\n : null,\n !f.off.online ? sheetRow({ icon: 'info', label: 'Offline', value: `${f.off.pins.length} pinned` }) : null,\n f.off.queued ? sheetRow({ icon: 'upload', label: 'Waiting to sync', value: String(f.off.queued) }) : null,\n\n sheetRow({\n icon: 'files',\n label: 'Items',\n value: f.partial\n ? `${f.shown.toLocaleString()} of ${f.totalKnown ? f.totalItems.toLocaleString() : 'more'}`\n : f.totalItems.toLocaleString(),\n }),\n // `+` where the figure covers only what has loaded, matching the desktop bar.\n sheetRow({ icon: 'file', label: 'Size', value: `${bytes(f.totalBytes)}${f.totalKnown || !f.partial ? '' : '+'}` }),\n // Only where the backend can actually answer — see usageChip.\n f.usage?.total\n ? div({ className: 'sheet-row static usage' },\n icon('download', { size: 18 }),\n span({ className: 'sr-label' }, 'Free space'),\n usageChip(f))\n : null,\n state.caps ? sheetRow({\n icon: state.caps.storage?.presignDownload ? 'download' : 'files',\n label: 'Transfers',\n value: state.caps.storage?.presignDownload ? 'Direct to storage' : 'Through the server',\n }) : null,\n state.caps?.features?.semanticSearch ? sheetRow({ icon: 'star', label: 'Search', value: 'Semantic + keyword' }) : null,\n\n div({ className: 'sheet-actions' },\n button({ className: 'btn small ghost' }, icon('refresh', { size: 13 }), span('Scan for changes')).on({ click: go('workbench.scanCollection') }),\n button({ className: 'btn small ghost' }, icon('refresh', { size: 13 }), span('Activity'))\n .on({ click: () => { ui.engine.dispatch(new CloseSheetAction()); ui.engine.dispatch(new ToggleActivityPanelAction(true)); } }),\n ),\n );\n}\n\nfunction moreSheet(state, ui) {\n const go = (cmd) => () => { ui.engine.dispatch(new CloseSheetAction()); ui.engine.dispatch(new ExecCommandAction(cmd)); };\n const me = state.so.me;\n const unread = state.so.notifications.unread;\n return div({ className: 'sheet-body' },\n // No identity, no profile row — the same rule the desktop rail follows. An anonymous\n // deployment has no account to show and nothing to sign into.\n me && !me.anonymous\n ? div({ className: 'sheet-me' },\n me.picture ? img({ src: me.picture, alt: '', className: 'avatar-img' }) : span({ className: 'avatar-txt' }, (me.name || me.id || '?')[0].toUpperCase()),\n div({}, div({ className: 'sm-name' }, me.name || me.id), me.email ? div({ className: 'sm-sub' }, me.email) : null))\n : null,\n\n sheetRow({ icon: 'bell', label: unread ? `Notifications (${unread})` : 'Notifications', onClick: () => { ui.engine.dispatch(new CloseSheetAction()); ui.engine.dispatch(new ToggleInboxAction(true)); } }),\n sheetRow({ icon: 'refresh', label: 'Activity & problems', onClick: () => { ui.engine.dispatch(new CloseSheetAction()); ui.engine.dispatch(new ToggleActivityPanelAction(true)); } }),\n sheetRow({ icon: 'info', label: 'Details & conversation', onClick: go('workbench.toggleInfoPanel') }),\n sheetRow({ icon: 'trash', label: 'Trash', onClick: go('explorer.showTrash') }),\n sheetRow({ icon: 'refresh', label: 'Refresh', onClick: go('explorer.refresh') }),\n sheetRow({ icon: 'command', label: 'All commands', onClick: go('workbench.showCommandPalette') }),\n sheetRow({ icon: 'gear', label: 'Settings', onClick: go('workbench.openSettings') }),\n );\n}\n",
111
- "// Root composition. Assembles the `ui` helper (stable for the app's life), zips every\n// query the shell reads into one snapshot, and renders the workbench from it.\n//\n// Components are pure: they receive (state, ui) and dispatch. This module knows about\n// every QUERY at once — which is a different thing from what it used to know, when it\n// held the bag of services every component reached through.\n\nimport { dd, derive, constant, watch } from '../../runtime.js';\nimport { region } from '../region.js';\nimport { watchQuery } from '../../bl/watchQuery.js';\nimport * as q from '../../bl/queries.js';\nimport { CloseSearchModalAction, ExecCommandAction, NavigateAction } from '../../bl/actions.js';\nimport activityBar from '../components/activityBar.js';\nimport statusBar from '../components/statusBar.js';\nimport launcher from '../components/launcher.js';\nimport settingsView from '../components/settingsView.js';\nimport collectionGate from '../components/collectionGate.js';\nimport pluginsView from '../components/pluginsView.js';\nimport adminView from '../components/adminView.js';\nimport editorArea from '../components/editorArea.js';\nimport commandPalette from '../components/commandPalette.js';\nimport { dialog, contextMenu, toasts, transferTray, pluginPanel } from '../components/overlays.js';\nimport activityPanel from '../components/activityPanel.js';\nimport { infoPanel } from '../components/social.js';\nimport { phoneTopBar, phoneBottomBar, phoneSheet } from '../components/phoneChrome.js';\n\nconst { alias, div } = dd;\n\nexport default function workbench({ engine, platform }) {\n // What a component is handed, and it is nearly nothing now.\n //\n // `engine` is the thing components talk to: `dispatch` for an action, `query` for a\n // question. It was removed once for being unreferenced, which was true and backwards —\n // nothing referenced it precisely BECAUSE `go` and `exec` stood in for it, and `exec`\n // called the command service directly, so every menu item, keybinding and palette entry\n // a person triggered was invisible to the engine.\n //\n // Both are gone. `go(action)` was `engine.dispatch(action)` with a shorter name, and a\n // shorter name for the one door is how the door stops being obvious. Call sites say\n // `ui.engine.dispatch(new SomeAction(...))` now: longer, and it names what happens.\n //\n // `platform` is still passed, for four uses that are genuinely imperative: two plugin\n // iframe mounts, the media URL machinery, and the opener lookup in openers/index.js —\n // which stays because an opener may resolve to a plugin iframe rather than to a render\n // function, and mounting one is an effect, not a view.\n //\n // Note what is NOT a reason: carrying a function. A query hands over the view renderers\n // (see the `views` query) because a renderer is pure — it builds a vnode from what it is\n // given. The rule is about SIDE EFFECTS escaping through a callable, not about callables.\n //\n // See docs/tickets/009. `app` used to be here too — the whole bag of services — and is\n // gone: nothing in `ui/` reads a service directly any more.\n const ui = {\n engine, platform,\n // Rendering a cell is a UI concern, not a platform subsystem to reach through.\n watch,\n };\n\n // One derived snapshot of every slice the shell reads. `derive` invalidates when any\n // of them does and recomputes once on the next read, so fifteen changes in a frame\n // still cost one render.\n const combined = derive(\n // EVERY input is a query. Half of these used to read the service cell directly, which\n // looked equivalent and was not: a query may PROJECT, and the projection is where\n // `offline.pinnedIds` and `voice.canListen` come from. Reading the raw cell got the\n // service's state without them, so a pinned file's menu still offered to pin it and the\n // microphone button never appeared — silently, because an undefined field just reads as\n // false. Going through the engine uniformly is what makes \"the same slice\" mean the\n // same thing everywhere.\n [\n watchQuery(engine, q.workbench),\n watchQuery(engine, q.overlay),\n watchQuery(engine, q.navigation),\n watchQuery(engine, q.explorer),\n watchQuery(engine, q.search),\n watchQuery(engine, q.context),\n watchQuery(engine, q.settings),\n watchQuery(engine, q.offline),\n watchQuery(engine, q.viewport),\n watchQuery(engine, q.voice),\n // What the UI is in the middle of doing — see bl/viewState.js.\n watchQuery(engine, q.viewState),\n // What the server can do. Its resource hands out a cell that starts null and fills\n // in, so this is a normal value while the request is in flight rather than turning\n // the whole snapshot PENDING and blanking the shell.\n watchQuery(engine, q.capabilities),\n // Command id -> its shortcut label, for anything that shows one next to an action.\n watchQuery(engine, q.commandKeys),\n // What the launcher shows, twice: the home screen and the double-shift overlay are\n // both mounted when the overlay is up, and they differ in what picking a row does —\n // the overlay resets the viewer stack and then dismisses itself. That is the only\n // input that is about which INSTANCE is rendering, so it is the query's one\n // parameter, and interning means at most two live realizations.\n watchQuery(engine, q.launcherContent(false)),\n watchQuery(engine, q.launcherContent(true)),\n // How results can be drawn, and every opener that could run. Both used to be worked\n // out mid-render from `platform` — three registry reads that nothing invalidated on,\n // so the launcher and the viewer nav only kept up because this snapshot is coarse\n // enough to redraw them anyway. As a query the dependency is declared, which is what\n // makes it safe to give either of them a region later.\n watchQuery(engine, q.views),\n watchQuery(engine, q.openers),\n ],\n // No `_bump` any more. It existed to defeat `watch`'s shallow-equality check for a\n // forced re-render that left no trace in the snapshot — a counter smuggled into the\n // state to get past an optimisation designed to skip pointless renders. With the state\n // that needed it in a cell, every render has a reason again.\n (wb, overlay, nav, ex, se, ctx, settings, off, vp, voice, view, caps, commandKeys,\n content, modalContent, views, openers) =>\n ({ wb, overlay, nav, ex, se, ctx, settings, off, vp, voice, view, caps, commandKeys,\n content, modalContent, views, openers }),\n );\n\n // The chrome, subscribed to what it reads instead of to everything.\n //\n // These four render the same facts in different shapes — `statusFacts` is shared between\n // them — so they share a query set. Splitting them out is what takes `tr` off the main\n // snapshot: an upload progress tick used to invalidate the one watch that builds the whole\n // shell, so moving one number in the transfer tray reconstructed every row of the file\n // list beneath it. Now it reaches the chrome and the tray, and nothing else.\n const chrome = {\n ex: q.explorer, tr: q.transfers, act: q.activity, off: q.offline,\n so: q.social, wb: q.workbench, statusItems: q.statusItems, caps: q.capabilities,\n // The numbers and the one-line verdict both shells report. Derived by the query rather\n // than by the status bar and imported from there by the phone chrome, which is what it\n // was — a business-layer derivation living in a component. See bl/status.js.\n facts: q.statusFacts,\n };\n // A query boots asynchronously — it awaits a container lease first — so a region is\n // PENDING for the first frame or two and `watch` renders its placeholder. For a bar with\n // a fixed height that has to be an empty bar rather than nothing, or the layout jumps\n // once on load and settles.\n const regions = {\n statusBar: region(engine, chrome, (s) => statusBar(s, ui), { placeholder: () => div({ className: 'statusbar' }) }),\n phoneTopBar: region(engine, chrome, (s) => phoneTopBar(s, ui), { placeholder: () => div({ className: 'phonebar top' }) }),\n phoneBottomBar: region(engine, chrome, (s) => phoneBottomBar(s, ui), { placeholder: () => div({ className: 'phonebar bottom' }) }),\n // Both render nothing when there is nothing to show, so an absent first frame is what\n // they would have drawn anyway.\n phoneSheet: region(engine, chrome, (s) => phoneSheet(s, ui)),\n transferTray: region(engine, { tr: q.transfers }, (s) => transferTray(s, ui)),\n // Both read one slice each, and both change often enough to matter: a toast arriving\n // or auto-dismissing used to rebuild the entire shell — including every row of the\n // file list — to add a line in the corner.\n toasts: region(engine, { notif: q.notifications }, (s) => toasts(s, ui)),\n activityPanel: region(engine, { act: q.activity }, (s) => activityPanel(s, ui)),\n // Screens that are usually NOT on screen. Their state still invalidated the shell from\n // wherever they were: minting an API key or a plugin reporting in rebuilt the file\n // list. Each reads a couple of slices, so each is a cheap region.\n settingsView: region(engine, {\n settings: q.settings, settingsGroups: q.settingsGroups, keys: q.apiKeys,\n caps: q.capabilities, ex: q.explorer, assoc: q.openerAssociations,\n }, (s) => settingsView(s, ui)),\n pluginsView: region(engine, { plugins: q.plugins, settings: q.settings },\n (s) => pluginsView(s, ui)),\n // Gathers what already exists rather than fetching anything new — see adminView.js.\n adminView: region(engine, {\n caps: q.capabilities, ex: q.explorer, plugins: q.plugins, act: q.activity, so: q.social,\n }, (s) => adminView(s, ui)),\n infoPanel: region(engine, { so: q.social, off: q.offline, nav: q.navigation },\n (s) => infoPanel(s, ui)),\n // The rail. It renders the notification bell and the identity chip, both of which read\n // the social slice — which is how `so` was still reaching the shell after infoPanel\n // moved out. Missed by looking at infoPanel alone; the bell is imported INTO the bar\n // from social.js, so a grep for the component name does not find it.\n activityBar: region(engine, { wb: q.workbench, plugins: q.plugins, so: q.social },\n (s) => activityBar(s, ui)),\n // The palette is the first thing to read a composed view rather than a service's state:\n // `commands` arrives with keybinding labels resolved and availability decided, so the\n // component stopped asking the keybinding and command services anything mid-render.\n // `matches` is the list already ranked against what has been typed — the palette does\n // no scoring of its own any more. See bl/match.js for why there was more than one.\n commandPalette: region(engine, { overlay: q.overlay, se: q.search, matches: q.paletteMatches },\n (s) => commandPalette(s, ui)),\n };\n\n return alias(() => watch(combined, (state) => view(state, ui, regions)));\n}\n\nfunction view(state, ui, regions) {\n const mode = state.vp?.mode || 'desktop';\n const phone = mode === 'phone';\n return div({ className: `shell ${mode} ${state.settings['workbench.density'] === 'compact' ? 'compact' : ''}` },\n // On a phone the rail becomes a bottom bar and the status bar folds behind one icon\n // in a top bar — see phoneChrome. Everything between them is identical, which is the\n // point: only the chrome changes shape, not the app.\n phone ? regions.phoneTopBar() : null,\n div({ className: 'body' },\n phone ? null : regions.activityBar(),\n mainArea(state, ui, regions),\n ),\n phone ? regions.phoneBottomBar() : regions.statusBar(),\n phone ? regions.phoneSheet() : null,\n // Overlays.\n searchModal(state, ui),\n regions.commandPalette(),\n dialog(state, ui),\n contextMenu(state, ui),\n pluginPanel(state, ui),\n regions.toasts(),\n regions.transferTray(),\n regions.activityPanel(),\n );\n}\n\nfunction mainArea(state, ui, regions) {\n // Before a collection is known there is nothing to draw: every scoped request names one\n // in its path, so a file list, a search box and an Upload button would all be lying.\n // Settings stays reachable — an admin with no collections still needs to get at it.\n if (state.ex?.gate && state.wb.activity !== 'settings') return collectionGate(state, ui);\n\n switch (state.wb.activity) {\n case 'settings': return regions.settingsView();\n case 'plugins': return regions.pluginsView();\n case 'admin': return regions.adminView();\n default: {\n // Home: the top of the panel stack — the launcher (base search) or, once a\n // file is open, its opener full-width (optionally split with the info panel).\n if (!state.nav.activeTabId) return launcher(state, ui);\n if (!state.wb.infoPanel) return editorArea(state, ui);\n // A 340px rail beside a 390px screen leaves nothing on either side. On a phone the\n // details panel takes the whole panel instead — it has its own close button, so\n // there is still a way back to the file.\n return state.vp?.mode === 'phone'\n ? regions.infoPanel()\n : div({ className: 'editor-split' }, editorArea(state, ui), regions.infoPanel());\n }\n }\n}\n\n// Double-shift search: the launcher as a modal overlay. Picking an item resets the\n// viewer stack (starts over) — the launcher reads state.wb.searchModal to know.\nfunction searchModal(state, ui) {\n if (!state.wb.searchModal) return div();\n return div({ className: 'search-modal' },\n div({ className: 'scrim' }).on({ click: () => ui.engine.dispatch(new CloseSearchModalAction()) }),\n div({ className: 'search-modal-panel' }, launcher(state, ui, { modal: true })),\n );\n}\n\nexport { NavigateAction };\n",
111
+ "// Root composition. Assembles the `ui` helper (stable for the app's life), zips every\n// query the shell reads into one snapshot, and renders the workbench from it.\n//\n// Components are pure: they receive (state, ui) and dispatch. This module knows about\n// every QUERY at once — which is a different thing from what it used to know, when it\n// held the bag of services every component reached through.\n\nimport { dd, derive, constant, watch } from '../../runtime.js';\nimport { region } from '../region.js';\nimport { watchQuery } from '../../bl/watchQuery.js';\nimport * as q from '../../bl/queries.js';\nimport { CloseSearchModalAction, ExecCommandAction, NavigateAction } from '../../bl/actions.js';\nimport activityBar from '../components/activityBar.js';\nimport statusBar from '../components/statusBar.js';\nimport launcher from '../components/launcher.js';\nimport settingsView from '../components/settingsView.js';\nimport collectionGate from '../components/collectionGate.js';\nimport pluginsView from '../components/pluginsView.js';\nimport adminView from '../components/adminView.js';\nimport editorArea from '../components/editorArea.js';\nimport commandPalette from '../components/commandPalette.js';\nimport { dialog, contextMenu, toasts, transferTray, pluginPanel } from '../components/overlays.js';\nimport activityPanel from '../components/activityPanel.js';\nimport { infoPanel } from '../components/social.js';\nimport { phoneTopBar, phoneBottomBar, phoneSheet } from '../components/phoneChrome.js';\n\nconst { alias, div } = dd;\n\nexport default function workbench({ engine, platform }) {\n // What a component is handed, and it is nearly nothing now.\n //\n // `engine` is the thing components talk to: `dispatch` for an action, `query` for a\n // question. It was removed once for being unreferenced, which was true and backwards —\n // nothing referenced it precisely BECAUSE `go` and `exec` stood in for it, and `exec`\n // called the command service directly, so every menu item, keybinding and palette entry\n // a person triggered was invisible to the engine.\n //\n // Both are gone. `go(action)` was `engine.dispatch(action)` with a shorter name, and a\n // shorter name for the one door is how the door stops being obvious. Call sites say\n // `ui.engine.dispatch(new SomeAction(...))` now: longer, and it names what happens.\n //\n // `platform` is still passed, for four uses that are genuinely imperative: two plugin\n // iframe mounts, the media URL machinery, and the opener lookup in openers/index.js —\n // which stays because an opener may resolve to a plugin iframe rather than to a render\n // function, and mounting one is an effect, not a view.\n //\n // Note what is NOT a reason: carrying a function. A query hands over the view renderers\n // (see the `views` query) because a renderer is pure — it builds a vnode from what it is\n // given. The rule is about SIDE EFFECTS escaping through a callable, not about callables.\n //\n // See docs/tickets/009. `app` used to be here too — the whole bag of services — and is\n // gone: nothing in `ui/` reads a service directly any more.\n const ui = {\n engine, platform,\n // Rendering a cell is a UI concern, not a platform subsystem to reach through.\n watch,\n };\n\n // One derived snapshot of every slice the shell reads. `derive` invalidates when any\n // of them does and recomputes once on the next read, so fifteen changes in a frame\n // still cost one render.\n const combined = derive(\n // EVERY input is a query. Half of these used to read the service cell directly, which\n // looked equivalent and was not: a query may PROJECT, and the projection is where\n // `offline.pinnedIds` and `voice.canListen` come from. Reading the raw cell got the\n // service's state without them, so a pinned file's menu still offered to pin it and the\n // microphone button never appeared — silently, because an undefined field just reads as\n // false. Going through the engine uniformly is what makes \"the same slice\" mean the\n // same thing everywhere.\n [\n watchQuery(engine, q.workbench),\n watchQuery(engine, q.overlay),\n watchQuery(engine, q.navigation),\n watchQuery(engine, q.explorer),\n watchQuery(engine, q.search),\n watchQuery(engine, q.context),\n watchQuery(engine, q.settings),\n watchQuery(engine, q.offline),\n watchQuery(engine, q.viewport),\n watchQuery(engine, q.voice),\n // What the UI is in the middle of doing — see bl/viewState.js.\n watchQuery(engine, q.viewState),\n // What the server can do. Its resource hands out a cell that starts null and fills\n // in, so this is a normal value while the request is in flight rather than turning\n // the whole snapshot PENDING and blanking the shell.\n watchQuery(engine, q.capabilities),\n // Command id -> its shortcut label, for anything that shows one next to an action.\n watchQuery(engine, q.commandKeys),\n // What the launcher shows, twice: the home screen and the double-shift overlay are\n // both mounted when the overlay is up, and they differ in what picking a row does —\n // the overlay resets the viewer stack and then dismisses itself. That is the only\n // input that is about which INSTANCE is rendering, so it is the query's one\n // parameter, and interning means at most two live realizations.\n watchQuery(engine, q.launcherContent(false)),\n watchQuery(engine, q.launcherContent(true)),\n // How results can be drawn, and every opener that could run. Both used to be worked\n // out mid-render from `platform` — three registry reads that nothing invalidated on,\n // so the launcher and the viewer nav only kept up because this snapshot is coarse\n // enough to redraw them anyway. As a query the dependency is declared, which is what\n // makes it safe to give either of them a region later.\n watchQuery(engine, q.views),\n watchQuery(engine, q.openers),\n ],\n // No `_bump` any more. It existed to defeat `watch`'s shallow-equality check for a\n // forced re-render that left no trace in the snapshot — a counter smuggled into the\n // state to get past an optimisation designed to skip pointless renders. With the state\n // that needed it in a cell, every render has a reason again.\n (wb, overlay, nav, ex, se, ctx, settings, off, vp, voice, view, caps, commandKeys,\n content, modalContent, views, openers) =>\n ({ wb, overlay, nav, ex, se, ctx, settings, off, vp, voice, view, caps, commandKeys,\n content, modalContent, views, openers }),\n );\n\n // The chrome, subscribed to what it reads instead of to everything.\n //\n // These four render the same facts in different shapes — `statusFacts` is shared between\n // them — so they share a query set. Splitting them out is what takes `tr` off the main\n // snapshot: an upload progress tick used to invalidate the one watch that builds the whole\n // shell, so moving one number in the transfer tray reconstructed every row of the file\n // list beneath it. Now it reaches the chrome and the tray, and nothing else.\n const chrome = {\n ex: q.explorer, tr: q.transfers, act: q.activity, off: q.offline,\n so: q.social, wb: q.workbench, statusItems: q.statusItems, caps: q.capabilities,\n // The numbers and the one-line verdict both shells report. Derived by the query rather\n // than by the status bar and imported from there by the phone chrome, which is what it\n // was — a business-layer derivation living in a component. See bl/status.js.\n facts: q.statusFacts,\n };\n // A query boots asynchronously — it awaits a container lease first — so a region is\n // PENDING for the first frame or two and `watch` renders its placeholder. For a bar with\n // a fixed height that has to be an empty bar rather than nothing, or the layout jumps\n // once on load and settles.\n const regions = {\n statusBar: region(engine, chrome, (s) => statusBar(s, ui), { placeholder: () => div({ className: 'statusbar' }) }),\n phoneTopBar: region(engine, chrome, (s) => phoneTopBar(s, ui), { placeholder: () => div({ className: 'phonebar top' }) }),\n phoneBottomBar: region(engine, chrome, (s) => phoneBottomBar(s, ui), { placeholder: () => div({ className: 'phonebar bottom' }) }),\n // Both render nothing when there is nothing to show, so an absent first frame is what\n // they would have drawn anyway.\n phoneSheet: region(engine, chrome, (s) => phoneSheet(s, ui)),\n transferTray: region(engine, { tr: q.transfers }, (s) => transferTray(s, ui)),\n // Both read one slice each, and both change often enough to matter: a toast arriving\n // or auto-dismissing used to rebuild the entire shell — including every row of the\n // file list — to add a line in the corner.\n toasts: region(engine, { notif: q.notifications }, (s) => toasts(s, ui)),\n activityPanel: region(engine, { act: q.activity }, (s) => activityPanel(s, ui)),\n // Screens that are usually NOT on screen. Their state still invalidated the shell from\n // wherever they were: minting an API key or a plugin reporting in rebuilt the file\n // list. Each reads a couple of slices, so each is a cheap region.\n settingsView: region(engine, {\n settings: q.settings, settingsGroups: q.settingsGroups, keys: q.apiKeys,\n caps: q.capabilities, ex: q.explorer, assoc: q.openerAssociations,\n }, (s) => settingsView(s, ui)),\n pluginsView: region(engine, { plugins: q.plugins, settings: q.settings },\n (s) => pluginsView(s, ui)),\n // Gathers what already exists rather than fetching anything new — see adminView.js.\n adminView: region(engine, {\n caps: q.capabilities, ex: q.explorer, plugins: q.plugins, act: q.activity, so: q.social,\n wb: q.workbench,\n }, (s) => adminView(s, ui)),\n infoPanel: region(engine, { so: q.social, off: q.offline, nav: q.navigation },\n (s) => infoPanel(s, ui)),\n // The rail. It renders the notification bell and the identity chip, both of which read\n // the social slice — which is how `so` was still reaching the shell after infoPanel\n // moved out. Missed by looking at infoPanel alone; the bell is imported INTO the bar\n // from social.js, so a grep for the component name does not find it.\n activityBar: region(engine, { wb: q.workbench, plugins: q.plugins, so: q.social },\n (s) => activityBar(s, ui)),\n // The palette is the first thing to read a composed view rather than a service's state:\n // `commands` arrives with keybinding labels resolved and availability decided, so the\n // component stopped asking the keybinding and command services anything mid-render.\n // `matches` is the list already ranked against what has been typed — the palette does\n // no scoring of its own any more. See bl/match.js for why there was more than one.\n commandPalette: region(engine, { overlay: q.overlay, se: q.search, matches: q.paletteMatches },\n (s) => commandPalette(s, ui)),\n };\n\n return alias(() => watch(combined, (state) => view(state, ui, regions)));\n}\n\nfunction view(state, ui, regions) {\n const mode = state.vp?.mode || 'desktop';\n const phone = mode === 'phone';\n return div({ className: `shell ${mode} ${state.settings['workbench.density'] === 'compact' ? 'compact' : ''}` },\n // On a phone the rail becomes a bottom bar and the status bar folds behind one icon\n // in a top bar — see phoneChrome. Everything between them is identical, which is the\n // point: only the chrome changes shape, not the app.\n phone ? regions.phoneTopBar() : null,\n div({ className: 'body' },\n phone ? null : regions.activityBar(),\n mainArea(state, ui, regions),\n ),\n phone ? regions.phoneBottomBar() : regions.statusBar(),\n phone ? regions.phoneSheet() : null,\n // Overlays.\n searchModal(state, ui),\n regions.commandPalette(),\n dialog(state, ui),\n contextMenu(state, ui),\n pluginPanel(state, ui),\n regions.toasts(),\n regions.transferTray(),\n regions.activityPanel(),\n );\n}\n\nfunction mainArea(state, ui, regions) {\n // Before a collection is known there is nothing to draw: every scoped request names one\n // in its path, so a file list, a search box and an Upload button would all be lying.\n // Settings stays reachable — an admin with no collections still needs to get at it.\n if (state.ex?.gate && state.wb.activity !== 'settings') return collectionGate(state, ui);\n\n switch (state.wb.activity) {\n case 'settings': return regions.settingsView();\n case 'plugins': return regions.pluginsView();\n case 'admin': return regions.adminView();\n default: {\n // Home: the top of the panel stack — the launcher (base search) or, once a\n // file is open, its opener full-width (optionally split with the info panel).\n if (!state.nav.activeTabId) return launcher(state, ui);\n if (!state.wb.infoPanel) return editorArea(state, ui);\n // A 340px rail beside a 390px screen leaves nothing on either side. On a phone the\n // details panel takes the whole panel instead — it has its own close button, so\n // there is still a way back to the file.\n return state.vp?.mode === 'phone'\n ? regions.infoPanel()\n : div({ className: 'editor-split' }, editorArea(state, ui), regions.infoPanel());\n }\n }\n}\n\n// Double-shift search: the launcher as a modal overlay. Picking an item resets the\n// viewer stack (starts over) — the launcher reads state.wb.searchModal to know.\nfunction searchModal(state, ui) {\n if (!state.wb.searchModal) return div();\n return div({ className: 'search-modal' },\n div({ className: 'scrim' }).on({ click: () => ui.engine.dispatch(new CloseSearchModalAction()) }),\n div({ className: 'search-modal-panel' }, launcher(state, ui, { modal: true })),\n );\n}\n\nexport { NavigateAction };\n",
112
112
  "// Booting a workbench — the whole client, as a function you call with what you want\n// added to it.\n//\n// This used to be `main.js`: a fixed sequence that registered a fixed set of openers\n// and mounted. Which is fine until someone wants to SHIP a different drive — a hosted\n// build with a rich media player, an image-caption indexer and a gallery view — and\n// finds the only way in is to fork the package. Every contribution the built-ins use\n// goes through the same registry a plugin's does, so there was never a technical reason\n// for that; there was only a hard-coded list.\n//\n// import { createWorkbench } from '@3sln/trove/web/workbench.js';\n//\n// createWorkbench({\n// openers: [{ id: 'acme.player', title: 'Player', priority: 60,\n// match: { mime: ['video/*'] }, component: player }],\n// views: [{ id: 'acme.gallery', title: 'Gallery', icon: 'grid', priority: 70,\n// match: { mime: ['image/*'] }, render: gallery }],\n// });\n//\n// Two ways to displace a built-in, both falling out of how the registry already works:\n// register a HIGHER PRIORITY (selection sorts by it, and the user can still pick the\n// plain one from the chooser), or register the SAME ID (the registry is a map, so it is\n// replaced outright). Prefer the first — it leaves the original reachable.\n//\n// These openers and views run IN PROCESS. That is the difference between a build of the\n// app and a plugin, and it cuts both ways: full access to the platform, and no sandbox\n// to catch a mistake. Anything a user installs is a plugin and stays in its frame.\n\nimport { dd, effect } from './runtime.js';\nimport { createPlatform } from './platform/index.js';\nimport { createApp } from './bl/index.js';\nimport { NavigateAction, UploadFilesAction, OpenInitialCollectionAction, OpenSearchModalAction, OpenInPanelAction } from './bl/actions.js';\nimport { parsePackage } from './platform/pluginPackage.js';\nimport workbenchComposition from './ui/compositions/workbench.js';\nimport { registerBuiltinOpeners } from './ui/components/openers/index.js';\nimport { registerBuiltinViews } from './ui/components/views/index.js';\nimport { attachMedia } from './ui/media.js';\n\n/**\n * Build the platform, mount the workbench, and wire the cross-cutting behaviours that\n * belong to no single component — theme, global keybindings, OS drag-and-drop upload,\n * capability probing, the plugin catalog.\n *\n * @param {object} [options]\n * @param {Element} [options.root] where to mount (default `.workbench`)\n * @param {string} [options.baseUrl] API origin (default same-origin)\n * @param {Array} [options.openers] extra openers: `{ id, title, match, priority?, component }`\n * @param {Array} [options.views] extra views: `{ id, title, icon?, match?, priority?, render, move? }`\n * @param {Array} [options.settings] extra setting schemas, for whatever those contribute\n * @param {boolean} [options.serviceWorker] register /sw.js (default true)\n * @returns {{platform: object, engine: object, app: object}}\n */\nexport function createWorkbench({\n root = document.querySelector('.workbench'),\n baseUrl = '',\n openers = [],\n views = [],\n settings = [],\n serviceWorker = true,\n} = {}) {\n const platform = createPlatform({ baseUrl });\n const { engine, app } = createApp(platform);\n\n // Built-in openers and views are UI, so they register from the composition layer\n // (which is allowed to know both platform and ui) rather than from bl/.\n registerBuiltinOpeners(platform);\n registerBuiltinViews(platform);\n // Then whatever this build adds, so a same-id registration replaces the built-in\n // rather than being replaced by it.\n register(platform, 'opener', openers);\n register(platform, 'view', views);\n if (settings.length) platform.settings.register(settings);\n\n // Plugins are installed by the user (from a .zip or a URL) and persisted locally;\n // restore any that were installed on this device, then run.\n platform.plugins.restore();\n\n // --- mount ----------------------------------------------------------------\n const App = workbenchComposition({ engine, platform });\n dd.reconcile(root, [App()]);\n\n // --- theme ----------------------------------------------------------------\n const applyTheme = () => {\n document.documentElement.dataset.theme = platform.settings.get('workbench.theme') || 'dark';\n };\n applyTheme();\n effect(platform.settings.observe(), () => applyTheme());\n\n // --- form factor ----------------------------------------------------------\n // Watch the window so rotating a phone, or dragging a desktop window narrow, re-picks\n // the shell. Also stamps data-layout on <html> for the CSS half of the same decision.\n platform.viewport.install();\n // Ask once whether this browser can transcribe on-device, so the launcher knows\n // whether to offer a microphone. Nothing is downloaded and no permission is requested\n // — see platform/voice.js.\n platform.voice.refresh().catch(() => {});\n // Remote-control navigation, which switches itself on and off with the TV layout.\n platform.spatialNav.install();\n\n // --- keybindings ----------------------------------------------------------\n platform.keybindings.install(window);\n\n // --- viewer stack ↔ browser history ---------------------------------------\n // Browser back/forward. The panel stack is the only thing that mirrors itself into\n // history, so this reaches it directly rather than through a shell object.\n window.addEventListener('popstate', (e) => app.navigation.onPopState(e));\n installDoubleShift(engine);\n\n // --- service worker (offline shell + pinned files + push) -----------------\n if (serviceWorker && 'serviceWorker' in navigator) {\n window.addEventListener('load', () => navigator.serviceWorker.register('/sw.js').catch(() => {}));\n }\n\n installDragAndDrop(engine, app);\n\n // --- initial load ---------------------------------------------------------\n (async () => {\n try {\n // What the server can do is an engine query now — see bl/queries.js. It used to be\n // assigned onto `platform` here and followed by `workbench.touch()`, a poke at an\n // unrelated store purely to make the shell redraw, because writing a plain field\n // invalidates nothing. The query has somewhere for the value to arrive, so the fetch\n // belongs to it and this no longer has to announce it.\n } catch (err) {\n platform.notifications.error(`Cannot reach the Trove server: ${err.message}`);\n }\n // Land on a collection the user can actually read — see OpenInitialCollectionAction.\n engine.dispatch(new OpenInitialCollectionAction());\n })();\n\n // Expose for debugging / e2e.\n window.__trove = {\n platform, engine, app,\n // Test/automation hook: install a package from raw zip bytes.\n test: {\n parsePackage,\n assessTrust: (pkg) => platform.plugins.assessTrust(pkg),\n install: (pkg, opts) => platform.plugins.install(pkg, opts),\n NavigateAction,\n // Keeping a media element pointed at a URL that still works is the half of signed\n // URLs that only shows up over time, so it is drivable from a probe.\n attachMedia,\n },\n };\n\n return { platform, engine, app };\n}\n\n/**\n * Register a build's own contributions.\n *\n * `id` is required and it is not a formality: an unaddressed contribution cannot be\n * remembered as someone's default opener, cannot be pinned as their view, and cannot be\n * named in a keymap. Failing here is far better than shipping a build whose media\n * player silently forgets which one the user chose.\n */\nfunction register(platform, type, list) {\n for (const c of list) {\n if (!c?.id) throw new Error(`A ${type} passed to createWorkbench needs an \"id\"`);\n const { id, ...spec } = c;\n platform.contributions.register(id, { type, ...spec });\n }\n}\n\n// Double-shift → modal search overlay (Raycast-style). Two Shift presses within 400ms,\n// with no other key between, open it.\nfunction installDoubleShift(engine) {\n let lastShift = 0;\n window.addEventListener('keydown', (e) => {\n if (e.key === 'Shift' && !e.repeat) {\n const now = Date.now();\n if (now - lastShift < 400) { engine.dispatch(new OpenSearchModalAction()); lastShift = 0; }\n else lastShift = now;\n } else if (e.key !== 'Shift') {\n lastShift = 0;\n }\n });\n}\n\n// Dropping files anywhere on the window uploads them to the open collection.\nfunction installDragAndDrop(engine, app) {\n let dragDepth = 0;\n window.addEventListener('dragenter', (e) => {\n if (!e.dataTransfer?.types.includes('Files')) return;\n dragDepth++;\n document.body.classList.add('dragging-file');\n });\n window.addEventListener('dragover', (e) => {\n if (e.dataTransfer?.types.includes('Files')) e.preventDefault();\n });\n window.addEventListener('dragleave', () => {\n if (--dragDepth <= 0) {\n dragDepth = 0;\n document.body.classList.remove('dragging-file');\n }\n });\n window.addEventListener('drop', (e) => {\n if (!e.dataTransfer?.files?.length) return;\n e.preventDefault();\n dragDepth = 0;\n document.body.classList.remove('dragging-file');\n // No collection named: UploadFilesAction resolves the open one itself and refuses\n // visibly when there isn't one. Reading it here only to hand it straight back was the\n // drop target knowing where files go, which is the action's business.\n engine.dispatch(new UploadFilesAction(e.dataTransfer.files));\n });\n}\n",
113
113
  "// The open-source build's entry point: a workbench with nothing added to it.\n//\n// Everything that used to live here is `createWorkbench` (./workbench.js), which takes\n// the openers and views a build wants to ship. A hosted or bespoke build imports that\n// instead of this file and passes its own — no fork, and the same registry the plugins\n// use.\n\nimport { createWorkbench } from './workbench.js';\n\ncreateWorkbench();\n"
114
114
  ],
115
- "mappings": "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SACA,UACA,YACA,WACA,WACA,SACA,UACA,UACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,OACA,WACA,cACA,MACA,OACA,MACA,MACA,cACA,UACA,MACA,MACA,MACA,KACA,OACA,MACA,KACA,QACA,KACA,MACA,QACA,QACA,QACA,OACA,OACA,MACA,KACA,OACA,OACA,QACA,KACA,KACA,QACA,SACA,QACA,UACA,OACA,OACA,QACA,KACA,OACA,QACA,SACA,OACA,OACA,SACA,SACA,SACA,UACA,UACA,SACA,WACA,UACA,UACA,OACA,QACA,UACA,WACA,OACA,YACA,SACA,SACA,MACA,SACA,MACA,SACA,MACA,UACA,YACA,YACA,QACA,SACA,SACA,UACA,SACA,YACA,UACA,UACA,YACA,UACA,YACA,WACA,UACA,WACA,QACA,YACA,YACA,SACA,UACE,GC/GJ,SAAS,EAAiB,CAAC,GAAK,UAAU,CAAC,EAAG,CAC5C,eAAe,IAAM,CACnB,GAAI,CAAC,GAAQ,QAAS,EAAG,EAC1B,EAGH,SAAS,EAAkB,CAAC,EAAG,CAC7B,MAAO,KACL,EACE,MACA,CACE,SAAU,CACR,mBAAoB,OACpB,MAAO,OACP,QAAS,MACT,cAAe,UACjB,CACF,EACA,EAAE,SAAU,KAAM,UAAU,GAAO,SAAW,OAAO,CAAK,GAAG,EAC7D;AAAA;AAAA,EACA,GAAO,OAAS,EAClB,EAGJ,SAAS,EAAa,CAAC,EAAO,CAC5B,OACE,GAAS,MAAQ,OAAO,EAAM,UAAY,YAAc,OAAO,EAAM,YAAc,WAahF,SAAS,EAAQ,CAAC,EAAc,CACrC,IAAM,EAAS,GAAc,CAAY,EAAI,CAAC,KAAM,CAAY,EAAI,EAC9D,EAAO,GAAQ,KACrB,GAAI,CAAC,GAAc,CAAI,EACrB,MAAU,MAAM,qEAAqE,EAGvF,MAAO,CAIL,SAAU,OAAO,EAAK,WAAa,WAAa,EAAK,SAAW,GAChE,YAAa,GAAmB,EAAK,CAAC,KACnC,EACH,UAIG,EAAK,QACV,ECpDK,IAAM,GAAU,OAAO,uBAAuB,EAE/C,GAAU,OAAO,uBAAuB,EAGvC,SAA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",
116
- "debugId": "EBBC87CA5F602D4E64756E2164756E21",
115
+ "mappings": "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SACA,UACA,YACA,WACA,WACA,SACA,UACA,UACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,OACA,WACA,cACA,MACA,OACA,MACA,MACA,cACA,UACA,MACA,MACA,MACA,KACA,OACA,MACA,KACA,QACA,KACA,MACA,QACA,QACA,QACA,OACA,OACA,MACA,KACA,OACA,OACA,QACA,KACA,KACA,QACA,SACA,QACA,UACA,OACA,OACA,QACA,KACA,OACA,QACA,SACA,OACA,OACA,SACA,SACA,SACA,UACA,UACA,SACA,WACA,UACA,UACA,OACA,QACA,UACA,WACA,OACA,YACA,SACA,SACA,MACA,SACA,MACA,SACA,MACA,UACA,YACA,YACA,QACA,SACA,SACA,UACA,SACA,YACA,UACA,UACA,YACA,UACA,YACA,WACA,UACA,WACA,QACA,YACA,YACA,SACA,UACE,GC/GJ,SAAS,EAAiB,CAAC,GAAK,UAAU,CAAC,EAAG,CAC5C,eAAe,IAAM,CACnB,GAAI,CAAC,GAAQ,QAAS,EAAG,EAC1B,EAGH,SAAS,EAAkB,CAAC,EAAG,CAC7B,MAAO,KACL,EACE,MACA,CACE,SAAU,CACR,mBAAoB,OACpB,MAAO,OACP,QAAS,MACT,cAAe,UACjB,CACF,EACA,EAAE,SAAU,KAAM,UAAU,GAAO,SAAW,OAAO,CAAK,GAAG,EAC7D;AAAA;AAAA,EACA,GAAO,OAAS,EAClB,EAGJ,SAAS,EAAa,CAAC,EAAO,CAC5B,OACE,GAAS,MAAQ,OAAO,EAAM,UAAY,YAAc,OAAO,EAAM,YAAc,WAahF,SAAS,EAAQ,CAAC,EAAc,CACrC,IAAM,EAAS,GAAc,CAAY,EAAI,CAAC,KAAM,CAAY,EAAI,EAC9D,EAAO,GAAQ,KACrB,GAAI,CAAC,GAAc,CAAI,EACrB,MAAU,MAAM,qEAAqE,EAGvF,MAAO,CAIL,SAAU,OAAO,EAAK,WAAa,WAAa,EAAK,SAAW,GAChE,YAAa,GAAmB,EAAK,CAAC,KACnC,EACH,UAIG,EAAK,QACV,ECpDK,IAAM,GAAU,OAAO,uBAAuB,EAE/C,GAAU,OAAO,uBAAuB,EAGvC,SAA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",
116
+ "debugId": "276B23E7AF0BABFD64756E2164756E21",
117
117
  "names": []
118
118
  }