@arbidocs/react 0.5.61 → 0.5.63

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.
Files changed (103) hide show
  1. package/dist/ProductionDialog.d-CpzslFn0.d.cts +51 -0
  2. package/dist/ProductionDialog.d-CpzslFn0.d.ts +51 -0
  3. package/dist/annotations/freeze/index.cjs +14 -14
  4. package/dist/annotations/freeze/index.js +3 -3
  5. package/dist/annotations/index.d.cts +3 -2
  6. package/dist/annotations/index.d.ts +3 -2
  7. package/dist/artifacts/index.cjs +12 -12
  8. package/dist/artifacts/index.js +5 -5
  9. package/dist/bundle-IC65W2AO.cjs +14 -0
  10. package/dist/{bundle-DCWPYNGD.cjs.map → bundle-IC65W2AO.cjs.map} +1 -1
  11. package/dist/bundle-YNOX7VIL.js +5 -0
  12. package/dist/{bundle-JCKKGEJE.js.map → bundle-YNOX7VIL.js.map} +1 -1
  13. package/dist/calls/livekit/index.cjs +54 -54
  14. package/dist/calls/livekit/index.js +6 -6
  15. package/dist/{chunk-S2W3ZOWG.js → chunk-2LV53J46.js} +85 -16
  16. package/dist/chunk-2LV53J46.js.map +1 -0
  17. package/dist/{chunk-H3HYKAS5.cjs → chunk-3BFSALPC.cjs} +3 -3
  18. package/dist/{chunk-H3HYKAS5.cjs.map → chunk-3BFSALPC.cjs.map} +1 -1
  19. package/dist/{chunk-2NFUEC5O.js → chunk-3NBPMR3X.js} +3 -3
  20. package/dist/{chunk-2NFUEC5O.js.map → chunk-3NBPMR3X.js.map} +1 -1
  21. package/dist/chunk-4DTTEUVY.js +1042 -0
  22. package/dist/chunk-4DTTEUVY.js.map +1 -0
  23. package/dist/{chunk-U64WCQP3.js → chunk-AOEJ744V.js} +25 -14
  24. package/dist/chunk-AOEJ744V.js.map +1 -0
  25. package/dist/{chunk-4E737GNX.cjs → chunk-BLBXADTN.cjs} +86 -73
  26. package/dist/chunk-BLBXADTN.cjs.map +1 -0
  27. package/dist/{chunk-X7JXQT6F.cjs → chunk-DVL7EFZZ.cjs} +42 -46
  28. package/dist/chunk-DVL7EFZZ.cjs.map +1 -0
  29. package/dist/{chunk-VAMPYLQ4.cjs → chunk-DZUBZ45Y.cjs} +78 -2
  30. package/dist/chunk-DZUBZ45Y.cjs.map +1 -0
  31. package/dist/{chunk-OSWKXZTJ.js → chunk-ER4LFZG3.js} +12 -16
  32. package/dist/chunk-ER4LFZG3.js.map +1 -0
  33. package/dist/{chunk-5HDC43MF.js → chunk-G4Z3IP4J.js} +72 -3
  34. package/dist/chunk-G4Z3IP4J.js.map +1 -0
  35. package/dist/chunk-GOJHU7RZ.cjs +1122 -0
  36. package/dist/chunk-GOJHU7RZ.cjs.map +1 -0
  37. package/dist/{chunk-G76ASVVH.cjs → chunk-GQAXAZN7.cjs} +25 -14
  38. package/dist/chunk-GQAXAZN7.cjs.map +1 -0
  39. package/dist/{chunk-TUPSNW3B.cjs → chunk-LMW46NBD.cjs} +11 -11
  40. package/dist/{chunk-TUPSNW3B.cjs.map → chunk-LMW46NBD.cjs.map} +1 -1
  41. package/dist/{chunk-KRH55LXW.js → chunk-NCMSQACC.js} +37 -24
  42. package/dist/chunk-NCMSQACC.js.map +1 -0
  43. package/dist/{chunk-A2XSLTIP.js → chunk-NIKPG4PW.js} +3 -3
  44. package/dist/{chunk-A2XSLTIP.js.map → chunk-NIKPG4PW.js.map} +1 -1
  45. package/dist/{chunk-B6I2HRRF.cjs → chunk-PC4O3JDV.cjs} +3 -3
  46. package/dist/{chunk-B6I2HRRF.cjs.map → chunk-PC4O3JDV.cjs.map} +1 -1
  47. package/dist/{chunk-M2SZQBCO.js → chunk-SI7DJWBT.js} +3 -3
  48. package/dist/{chunk-M2SZQBCO.js.map → chunk-SI7DJWBT.js.map} +1 -1
  49. package/dist/{chunk-3QK4VVPG.cjs → chunk-TGSEQGM3.cjs} +3 -3
  50. package/dist/{chunk-3QK4VVPG.cjs.map → chunk-TGSEQGM3.cjs.map} +1 -1
  51. package/dist/{chunk-LCSUCZVX.cjs → chunk-ZNQPUPX6.cjs} +118 -41
  52. package/dist/chunk-ZNQPUPX6.cjs.map +1 -0
  53. package/dist/{chunk-CMNZI4WQ.js → chunk-ZTPJNKF2.js} +4 -4
  54. package/dist/{chunk-CMNZI4WQ.js.map → chunk-ZTPJNKF2.js.map} +1 -1
  55. package/dist/document-tools/core.cjs +408 -0
  56. package/dist/document-tools/core.cjs.map +1 -0
  57. package/dist/document-tools/core.d.cts +957 -0
  58. package/dist/document-tools/core.d.ts +957 -0
  59. package/dist/document-tools/core.js +15 -0
  60. package/dist/document-tools/core.js.map +1 -0
  61. package/dist/document-tools/index.cjs +347 -1130
  62. package/dist/document-tools/index.cjs.map +1 -1
  63. package/dist/document-tools/index.d.cts +12 -950
  64. package/dist/document-tools/index.d.ts +12 -950
  65. package/dist/document-tools/index.js +13 -1034
  66. package/dist/document-tools/index.js.map +1 -1
  67. package/dist/index.cjs +1510 -1255
  68. package/dist/index.cjs.map +1 -1
  69. package/dist/{index.d-BLw5AN0H.d.cts → index.d-AT7wdTWC.d.cts} +50 -2
  70. package/dist/{index.d-BLw5AN0H.d.ts → index.d-AT7wdTWC.d.ts} +50 -2
  71. package/dist/{index.d-DPVj21h1.d.ts → index.d-B0dosFZc.d.cts} +6 -6
  72. package/dist/{index.d-DPVj21h1.d.cts → index.d-B0dosFZc.d.ts} +6 -6
  73. package/dist/index.d.cts +145 -69
  74. package/dist/index.d.ts +145 -69
  75. package/dist/index.js +346 -121
  76. package/dist/index.js.map +1 -1
  77. package/dist/{query-keys.d-DEEMzkLz.d.cts → query-keys.d-BFKQVevT.d.cts} +21 -12
  78. package/dist/{query-keys.d-DEEMzkLz.d.ts → query-keys.d-BFKQVevT.d.ts} +21 -12
  79. package/dist/shell/index.cjs +68 -40
  80. package/dist/shell/index.d.cts +1 -1
  81. package/dist/shell/index.d.ts +1 -1
  82. package/dist/shell/index.js +3 -3
  83. package/dist/store.d-DkFXbWDk.d.ts +35 -0
  84. package/dist/store.d-GADDvC7w.d.cts +35 -0
  85. package/dist/ui/index.cjs +149 -149
  86. package/dist/ui/index.d.cts +1 -1
  87. package/dist/ui/index.d.ts +1 -1
  88. package/dist/ui/index.js +2 -2
  89. package/package.json +11 -3
  90. package/dist/ProductionDialog.d-BDJwBSzj.d.ts +0 -84
  91. package/dist/ProductionDialog.d-DjRQFmQw.d.cts +0 -84
  92. package/dist/bundle-DCWPYNGD.cjs +0 -14
  93. package/dist/bundle-JCKKGEJE.js +0 -5
  94. package/dist/chunk-4E737GNX.cjs.map +0 -1
  95. package/dist/chunk-5HDC43MF.js.map +0 -1
  96. package/dist/chunk-G76ASVVH.cjs.map +0 -1
  97. package/dist/chunk-KRH55LXW.js.map +0 -1
  98. package/dist/chunk-LCSUCZVX.cjs.map +0 -1
  99. package/dist/chunk-OSWKXZTJ.js.map +0 -1
  100. package/dist/chunk-S2W3ZOWG.js.map +0 -1
  101. package/dist/chunk-U64WCQP3.js.map +0 -1
  102. package/dist/chunk-VAMPYLQ4.cjs.map +0 -1
  103. package/dist/chunk-X7JXQT6F.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/notifications/notify-store.ts"],"names":["saved"],"mappings":"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","file":"chunk-5HDC43MF.js","sourcesContent":["/**\n * The one notification history: every `notify.*` call pops a transient toast (rendered by\n * <Toaster/>, on sonner) and, unless `{ record: false }`, records an entry. The same entries feed\n * the topbar bell (<NotificationBell/>), its unread badge and a host's notification page; backend\n * bridges reconcile their own slices into it with {@link syncSource}.\n *\n * notify.success('Saved') // toast + entry\n * notify.error('Upload failed', { record: false }) // toast only\n * notify.info('Opening workspace…', { ambient: true }) // a log line: never badges\n *\n * sonner owns the transient toast lifecycle (stacking, timing, dismissal); this store owns the\n * history, the mute switch and what a host configures once (workspace glyph and link, see\n * {@link configureNotify}; persistence, see {@link persistNotifyHistory}). Brand-neutral: no seed\n * data, no app imports. For full sonner power the raw `toast` is re-exported.\n */\nimport { type ReactNode } from 'react'\nimport { renderToStaticMarkup } from 'react-dom/server'\n// This module IS the sanctioned toast engine home — the app-level rule that\n// steers callers to notify() doesn't apply here.\n// eslint-disable-next-line no-restricted-imports\nimport { toast } from 'sonner'\nimport { create } from 'zustand'\n\nexport { toast }\n\nexport type NotifyVariant = 'success' | 'error' | 'info' | 'warning'\n\nexport interface AppNotification {\n id: string\n title: string\n description?: string\n variant: NotifyVariant\n /** Epoch ms the entry was recorded. */\n ts: number\n read: boolean\n /** Optional in-app link the entry deep-links to (passed to the bell's onNavigate). */\n href?: string\n /** Optional click action — wins over `href` when both are present. Session\n * history only: never persisted, so a closure is safe here. */\n onSelect?: () => void\n /** The label of the action `onSelect` runs (\"Reply\", \"View\"). */\n actionLabel?: string\n /** Workspace the entry belongs to. */\n workspaceId?: string\n /** Markup of a rich (non-string) toast message, for a log that shows it as it was toasted. */\n html?: string\n /** Routine session activity (\"Opening workspace…\", \"Saved\") — kept for the\n * log but not something that demands attention: excluded from the unread\n * badge and from the bell's list. */\n ambient?: boolean\n /** Where the entry comes from. Session entries (`notify.*`) have none; a\n * backend bridge stamps its own (e.g. 'server') so {@link syncSource} can\n * replace exactly its slice on every refetch without touching the rest. */\n source?: string\n}\n\nexport interface NotifyOptions {\n /** Shown under the title in the toast; a string description is also recorded. */\n description?: ReactNode\n /** Record an entry in the history (default true). False pops the toast only — for an event\n * whose entry arrives another way (a server-persisted notification synced by a bridge). */\n record?: boolean\n /** Pop the transient toast (default true unless muted). False records the entry only. */\n toast?: boolean\n /** Recorded title for a rich (non-string) toast title. Default: the string title, else the\n * rich title's text. */\n recordTitle?: string\n /** Recorded markup for a rich toast title (default: the title rendered to static markup). */\n html?: string\n href?: string\n /** Workspace the notification belongs to: its glyph shows in the toast and its link is the\n * entry's default `href` (both as configured with {@link configureNotify}). */\n workspaceId?: string\n duration?: number\n /** A toast action button (sonner). Clicking the entry runs it too. */\n action?: { label: ReactNode; onClick: () => void }\n /** Override the toast glyph (sonner). */\n icon?: ReactNode\n /** Extra class on the toast (sonner). */\n className?: string\n /** Record as routine session activity (see {@link AppNotification.ambient}): born read. */\n ambient?: boolean\n}\n\n/** Session entries kept (oldest dropped first) — a safety net against pathological growth; a\n * large upload can log many entries, so it is generous. Source slices are bounded by their source. */\nexport const MAX_SESSION_NOTIFICATIONS = 5000\n\ninterface NotifyState {\n notifications: AppNotification[]\n /** Toasts are muted: entries are still recorded — the history is what the user comes back to. */\n muted: boolean\n setMuted: (muted: boolean) => void\n markRead: (id: string) => void\n markAllRead: () => void\n removeNotification: (id: string) => void\n removeNotifications: (ids: readonly string[]) => void\n clearNotifications: () => void\n /** Replace the history (e.g. seed a demo/initial set). */\n seed: (items: AppNotification[]) => void\n /** Record an entry (used by `notify.*`; sonner renders the toast). */\n record: (note: AppNotification) => void\n /** Reconcile one source's slice with fresh truth (e.g. a backend list on\n * every refetch): entries stamped with `source` are replaced wholesale —\n * including their read state, which the source owns — while entries from\n * other sources (session activity) stay untouched. Newest first. */\n syncSource: (source: string, items: AppNotification[]) => void\n}\n\nlet seq = 0\nconst uid = () => `n${Date.now().toString(36)}${(seq++).toString(36)}`\n\n/** Keep at most {@link MAX_SESSION_NOTIFICATIONS} session entries (newest first). */\nfunction capSession(items: AppNotification[]): AppNotification[] {\n let session = 0\n return items.filter((n) => n.source || ++session <= MAX_SESSION_NOTIFICATIONS)\n}\n\nexport const useNotify = create<NotifyState>((set) => ({\n notifications: [],\n muted: false,\n setMuted: (muted) => set({ muted }),\n markRead: (id) =>\n set((s) => ({\n notifications: s.notifications.map((n) => (n.id === id ? { ...n, read: true } : n)),\n })),\n markAllRead: () =>\n set((s) => ({ notifications: s.notifications.map((n) => ({ ...n, read: true })) })),\n removeNotification: (id) =>\n set((s) => ({ notifications: s.notifications.filter((n) => n.id !== id) })),\n removeNotifications: (ids) => {\n const drop = new Set(ids)\n set((s) => ({ notifications: s.notifications.filter((n) => !drop.has(n.id)) }))\n },\n clearNotifications: () => set({ notifications: [] }),\n seed: (items) => set({ notifications: items }),\n record: (note) => set((s) => ({ notifications: capSession([note, ...s.notifications]) })),\n syncSource: (source, items) =>\n set((s) => ({\n notifications: [\n ...items.map((n) => ({ ...n, source })),\n ...s.notifications.filter((n) => n.source !== source),\n ].sort((a, b) => b.ts - a.ts),\n })),\n}))\n\n/** What a host configures once for every `notify.*` call. */\nexport interface NotifyConfig {\n /** The toast glyph of a notification that names a workspace. */\n workspaceIcon?: (workspaceId: string) => ReactNode\n /** The default link of an entry that names a workspace. */\n workspaceHref?: (workspaceId: string) => string | undefined\n /** The default of {@link NotifyOptions.ambient} for calls that do not say: a host whose own\n * toasts are mostly confirmations (\"Saved\") records them as log lines, and passes\n * `ambient: false` for what should claim attention. Default false. */\n ambient?: boolean\n}\n\nlet config: NotifyConfig = {}\n\n/** Set the host's workspace glyph and link (merged into what is configured). */\nexport function configureNotify(next: NotifyConfig): void {\n config = { ...config, ...next }\n}\n\nfunction richMarkup(title: ReactNode): string | undefined {\n try {\n return renderToStaticMarkup(title)\n } catch {\n return undefined\n }\n}\n\nconst textOf = (html: string | undefined) =>\n (html ?? '')\n .replace(/<[^>]+>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n\n/** Ergonomic helper — `notify.success('Saved')` — toast (sonner) + optional entry. */\nfunction make(variant: NotifyVariant) {\n return (title: ReactNode, opts: NotifyOptions = {}): string => {\n const { workspaceId } = opts\n const ambient = opts.ambient ?? config.ambient ?? false\n if (opts.toast !== false && !useNotify.getState().muted) {\n toast[variant](title, {\n description: opts.description,\n duration: opts.duration,\n action: opts.action,\n icon: opts.icon ?? (workspaceId ? config.workspaceIcon?.(workspaceId) : undefined),\n className: opts.className,\n })\n }\n const id = uid()\n if (opts.record !== false) {\n const html =\n opts.html ?? (typeof title === 'string' || title == null ? undefined : richMarkup(title))\n useNotify.getState().record({\n id,\n // A rich toast still needs a READABLE title — \"Passage copied: gamma-services p.1\",\n // not \"Notification\" — so it comes from the rendered markup, tags stripped.\n title:\n opts.recordTitle ?? (typeof title === 'string' ? title : textOf(html) || 'Notification'),\n description: typeof opts.description === 'string' ? opts.description : undefined,\n variant,\n ts: Date.now(),\n // Ambient activity is a log line, not a claim on attention: it never wears an unread dot.\n read: ambient,\n // Clicking the entry goes where the notification points: its action (when it has one),\n // an explicit link, or the workspace it happened in.\n href: opts.href ?? (workspaceId ? config.workspaceHref?.(workspaceId) : undefined),\n onSelect: opts.action?.onClick,\n actionLabel: opts.action ? String(opts.action.label) : undefined,\n workspaceId,\n html,\n ambient,\n })\n }\n return id\n }\n}\nexport const notify = {\n success: make('success'),\n error: make('error'),\n info: make('info'),\n warning: make('warning'),\n}\n\n/** Replace the history — inject a seed/initial set. */\nexport function seedNotifications(items: AppNotification[]): void {\n useNotify.getState().seed(items)\n}\n\ninterface SavedHistory {\n muted?: boolean\n notifications?: AppNotification[]\n}\n\n/**\n * Keep the session history and the mute switch across reloads in `storage` under `key`: restores\n * them now and saves every change. Source slices are not saved (their source re-syncs them), and\n * neither are actions — a closure does not survive a reload. Returns the unsubscribe.\n */\nexport function persistNotifyHistory(\n key: string,\n storage: Pick<Storage, 'getItem' | 'setItem'> | undefined = globalThis.localStorage\n): () => void {\n if (!storage) return () => {}\n try {\n const saved = JSON.parse(storage.getItem(key) ?? 'null') as SavedHistory | null\n if (saved) {\n const known = new Set(useNotify.getState().notifications.map((n) => n.id))\n useNotify.setState((s) => ({\n muted: saved.muted ?? s.muted,\n notifications: capSession(\n [\n ...s.notifications,\n ...(saved.notifications ?? []).filter((n) => !n.source && !known.has(n.id)),\n ].sort((a, b) => b.ts - a.ts)\n ),\n }))\n }\n } catch {\n // Unreadable or blocked storage: start empty.\n }\n let saved: AppNotification[] = []\n let savedMuted: boolean | undefined\n return useNotify.subscribe((s) => {\n const session = s.notifications.filter((n) => !n.source)\n // A backend re-sync or a read change elsewhere leaves the session slice as it was.\n if (\n s.muted === savedMuted &&\n session.length === saved.length &&\n session.every((n, i) => n === saved[i])\n )\n return\n saved = session\n savedMuted = s.muted\n // JSON drops the undefined fields: an action's closure cannot be saved, nor its label alone.\n const notifications = session.map((n) => ({\n ...n,\n onSelect: undefined,\n actionLabel: undefined,\n }))\n try {\n storage.setItem(key, JSON.stringify({ muted: s.muted, notifications }))\n } catch {\n // Full or blocked storage: the in-memory history still works.\n }\n })\n}\n\n/** Unread count selector for the topbar bell — ambient session activity never\n * demands attention, so it never counts. */\nexport const selectUnread = (s: NotifyState): number =>\n s.notifications.filter((n) => !n.read && !n.ambient).length\n\n/** Default glyph colour per variant (raw palette, override via `toneClassNames`). */\nexport const DEFAULT_NOTIFY_TONE: Record<NotifyVariant, string> = {\n success: 'text-green-600',\n error: 'text-destructive',\n warning: 'text-amber-500',\n info: 'text-blue-500',\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/query-keys.ts"],"names":[],"mappings":"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","file":"chunk-G76ASVVH.cjs","sourcesContent":["/**\n * The one query-key factory of the ARBI front end: every React Query key and mutation key the\n * packages and the app use is built here, under `['arbi', …]`. Literal key arrays anywhere else\n * fail the `arbi/query-keys-from-factory` lint rule and `query-keys.guard.test.ts`, so a key can't\n * drift from the queries it names (a stale literal reads or invalidates nothing, silently).\n *\n * Dependency-free on purpose (types only): e2e helpers import it and pass keys into the page.\n */\n\nimport type {\n CalendarWindow,\n ListEventsParams,\n OverlayLayerName,\n RoomQuery,\n} from '@arbidocs/sdk/browser'\n\nexport const arbiQueryKeys = {\n fileShares: () => ['arbi', 'fileShares'] as const,\n fileShare: (id: string) => ['arbi', 'fileShare', id] as const,\n fileSharePdf: (id: string, status?: string) => ['arbi', 'fileSharePdf', id, status] as const,\n workspaces: () => ['arbi', 'workspaces'] as const,\n /** Every workspace's member list: what a workspace switch drops. */\n allWorkspaceUsers: () => ['arbi', 'workspaceUsers'] as const,\n workspaceUsers: (workspaceId: string) => ['arbi', 'workspaceUsers', workspaceId] as const,\n /** Every workspace's documents list: the prefix a write patches when it does not know the workspace. */\n allDocuments: () => ['arbi', 'documents'] as const,\n documents: (workspaceId: string) => ['arbi', 'documents', workspaceId] as const,\n /** One document (a viewer's); writes keep it current next to the list. */\n document: (docId: string) => ['arbi', 'document', docId] as const,\n documentsById: (docIds: string[]) =>\n ['arbi', 'documentsById', [...docIds].sort().join(',')] as const,\n /** Every workspace's near-duplicate pairs. */\n allSimilarDocuments: () => ['arbi', 'similarDocuments'] as const,\n similarDocuments: (workspaceId: string, threshold: number) =>\n ['arbi', 'similarDocuments', workspaceId, threshold] as const,\n /** Every version list: the prefix a new version invalidates. */\n allDocumentVersions: () => ['arbi', 'documentVersions'] as const,\n documentVersions: (docId: string) => ['arbi', 'documentVersions', docId] as const,\n conversations: (workspaceId: string) => ['arbi', 'conversations', workspaceId] as const,\n /** Every workspace's conversation list (and threads): the prefix a conversation write invalidates. */\n allConversations: () => ['arbi', 'conversations'] as const,\n /** A conversation's threads, under the conversations prefix (ids are unique across workspaces). */\n conversationThreads: (conversationId: string) =>\n ['arbi', 'conversations', conversationId, 'threads'] as const,\n /** One stored message with everything the server keeps on it (its trace and metadata). */\n messageDetails: (messageId: string) => ['arbi', 'messageDetails', messageId] as const,\n /** The backend's built-in slash commands. */\n assistantCommands: () => ['arbi', 'assistantCommands'] as const,\n /** Every workspace's tags (lists, tables and kinds): what a cross-workspace change refreshes. */\n allTags: () => ['arbi', 'tags'] as const,\n tags: (workspaceId: string) => ['arbi', 'tags', workspaceId] as const,\n /** Under the workspace's tags: the kinds' fields (refreshed with the tags). */\n tagKinds: (workspaceId: string) => ['arbi', 'tags', workspaceId, 'kinds'] as const,\n /** Every filtered list (a table of tags): what a tag write refreshes, the whole list aside. */\n tagLists: (workspaceId: string) => ['arbi', 'tags', workspaceId, 'list'] as const,\n /** Under the workspace's tags: a tag, doctag or fact write that invalidates `tags` refreshes it. */\n tagList: (workspaceId: string, query: string) =>\n ['arbi', 'tags', workspaceId, 'list', query] as const,\n /** A kind's fields, under the workspace's tags. */\n tagKind: (workspaceId: string, kind: string) =>\n ['arbi', 'tags', workspaceId, 'kind', kind] as const,\n /** A task's history, under the conversations prefix: every conversation write refreshes it. */\n conversationActivity: (conversationId: string) =>\n ['arbi', 'conversations', conversationId, 'activity'] as const,\n /** Under the conversations prefix: every step action or conversation write refreshes it. */\n conversationUsage: (conversationId: string) =>\n ['arbi', 'conversations', conversationId, 'usage'] as const,\n thumbnails: (docIds: string[]) => ['arbi', 'thumbnails', [...docIds].sort().join(',')] as const,\n /** Every stage of a document's parsed content. */\n parsedDocument: (docId: string) => ['arbi', 'parsedDoc', docId] as const,\n parsedDoc: (docId: string, stage: string) => ['arbi', 'parsedDoc', docId, stage] as const,\n agents: () => ['arbi', 'agents'] as const,\n sessions: () => ['arbi', 'sessions'] as const,\n health: () => ['arbi', 'health'] as const,\n workflows: () => ['arbi', 'workflows'] as const,\n /** Under `workflows()`: a workflow write or run refreshes its runs too. */\n workflowRuns: (workflowId: string) => ['arbi', 'workflows', workflowId, 'runs'] as const,\n /** Every workspace's facts: the prefix a fact write invalidates. */\n allFacts: () => ['arbi', 'facts'] as const,\n facts: (workspaceId: string) => ['arbi', 'facts', workspaceId] as const,\n configs: () => ['arbi', 'configs'] as const,\n activity: () => ['arbi', 'activity'] as const,\n /** Every transfer query (jobs, lists, plans): what a finished job refreshes. */\n allWorkspaceTransfers: () => ['arbi', 'workspaceTransfers'] as const,\n /** The caller's recent transfer jobs out of a workspace. */\n workspaceTransfers: (workspaceId: string) =>\n ['arbi', 'workspaceTransfers', 'list', workspaceId] as const,\n /** One transfer job's progress. */\n workspaceTransfer: (transferId: string) =>\n ['arbi', 'workspaceTransfers', 'job', transferId] as const,\n /** What a scope (serialised) would take in a workspace, for a mode. */\n workspaceTransferPlan: (workspaceId: string, scope: string, mode: string) =>\n ['arbi', 'workspaceTransfers', 'plan', workspaceId, scope, mode] as const,\n /** A workspace's activity feed (all its pages). */\n workspaceActivity: (workspaceId: string) => ['arbi', 'workspaceActivity', workspaceId] as const,\n projects: () => ['arbi', 'projects'] as const,\n /** A filtered project list, under `projects()`. */\n projectsFiltered: (stage?: string, leadUser?: string) =>\n ['arbi', 'projects', 'list', stage ?? '', leadUser ?? ''] as const,\n /** Under `projects()`: a project update refreshes its events too. */\n projectEvents: (projectExtId: string) => ['arbi', 'projects', projectExtId, 'events'] as const,\n projectUsage: (projectExtId: string, monthsBack: number) =>\n ['arbi', 'projectUsage', projectExtId, monthsBack] as const,\n projectConversationUsage: (projectExtId: string, monthsBack: number) =>\n ['arbi', 'projectUsage', projectExtId, 'byConversation', monthsBack] as const,\n projectInvoices: (projectExtId: string) => ['arbi', 'projectInvoices', projectExtId] as const,\n /** The plans and add-ons on sale. */\n products: () => ['arbi', 'products'] as const,\n /** Prices of a purchase or a change (quotes, previews); nothing is bought. */\n billingQuotes: () => ['arbi', 'billingQuote'] as const,\n userUsageToday: () => ['arbi', 'userUsageToday'] as const,\n currentUser: () => ['arbi', 'currentUser'] as const,\n firmPool: () => ['arbi', 'firmPool'] as const,\n contacts: () => ['arbi', 'contacts'] as const,\n /** Every chat query (the list and each open thread). */\n chats: () => ['arbi', 'chats'] as const,\n /** My chats, raw (titles and last messages are ciphertext), most recently active first. */\n chatList: () => ['arbi', 'chats', 'list'] as const,\n /** One thread's loaded messages, decrypted, oldest first (`ChatThreadData`). */\n chatThread: (chatExtId: string) => ['arbi', 'chats', 'thread', chatExtId] as const,\n /** My own agent's progress on my last message to it (`agent_dm_status`), per agent. */\n agentDmStatus: (agentExtId: string) => ['arbi', 'chats', 'agentStatus', agentExtId] as const,\n /** The paid features this person may use (`/v1/user/entitlements`). */\n entitlements: () => ['arbi', 'entitlements'] as const,\n skills: () => ['arbi', 'skills'] as const,\n /** A skill's main file (SKILL.md), as text. */\n skillSource: (docExtId: string) => ['arbi', 'skills', 'source', docExtId] as const,\n /** An agent's pinned config; `undefined` = the library default config. */\n agentConfig: (agentExtId?: string) => ['arbi', 'agentConfig', agentExtId ?? 'default'] as const,\n agentWorkspaces: (agentExtId: string) => ['arbi', 'agentWorkspaces', agentExtId] as const,\n /** An agent's own login, polled while its controls are open. */\n agentSession: (agentExtId: string) => ['arbi', 'agentSession', agentExtId] as const,\n agentChats: (agentExtId: string) => ['arbi', 'agentChats', agentExtId] as const,\n authorizeLimits: () => ['arbi', 'authorizeLimits'] as const,\n mcpTools: () => ['arbi', 'mcpTools'] as const,\n models: () => ['arbi', 'models'] as const,\n availableModels: () => ['arbi', 'availableModels'] as const,\n modelConnections: (userId?: string) => ['arbi', 'modelConnections', userId] as const,\n directModelUsage: (userId?: string) => ['arbi', 'directModelUsage', userId] as const,\n /** The signed-in user's own profile (name, picture, email). */\n profile: () => ['arbi', 'profile'] as const,\n identity: () => ['arbi', 'identity'] as const,\n /** The signed-in user's settings record (notification preferences, flags). */\n userSettings: () => ['arbi', 'userSettings'] as const,\n /** Every notification list: the prefix a delete, a read receipt or an arrival invalidates. */\n allNotifications: () => ['arbi', 'notifications'] as const,\n /** The newest `limit` notifications, received and sent. */\n notifications: (limit: number) => ['arbi', 'notifications', limit] as const,\n /** The documents a workspace may use as its Word house template. */\n houseTemplateCandidates: (workspaceId: string) =>\n ['arbi', 'houseTemplateCandidates', workspaceId] as const,\n // ── Storage, archive ────────────────────────────────────────────────────────────────────────\n /** Every storage view (projects, items, names, Recently deleted): what a restore or delete refreshes. */\n storage: () => ['arbi', 'storage'] as const,\n /** What each project stores; no params: every such list. */\n storageProjects: (params?: object) =>\n params === undefined\n ? (['arbi', 'storage', 'projects'] as const)\n : (['arbi', 'storage', 'projects', params] as const),\n /** The largest items stored; no params: every such list. */\n storageItems: (params?: object) =>\n params === undefined\n ? (['arbi', 'storage', 'items'] as const)\n : (['arbi', 'storage', 'items', params] as const),\n /** Decrypted document names of storage items. */\n storageItemNames: (params?: object) =>\n params === undefined\n ? (['arbi', 'storage', 'names'] as const)\n : (['arbi', 'storage', 'names', params] as const),\n /** The deployment's storage day by day. */\n storageSnapshots: (params?: object) =>\n params === undefined\n ? (['arbi', 'storage', 'snapshots'] as const)\n : (['arbi', 'storage', 'snapshots', params] as const),\n /** A workspace's Recently deleted documents; no id: every workspace's. */\n workspaceTrash: (workspaceId?: string) =>\n workspaceId === undefined\n ? (['arbi', 'storage', 'workspaceTrash'] as const)\n : (['arbi', 'storage', 'workspaceTrash', workspaceId] as const),\n /** A workspace's archive state; no id: every workspace's. */\n workspaceArchive: (workspaceId?: string) =>\n workspaceId === undefined\n ? (['arbi', 'workspaceArchive'] as const)\n : (['arbi', 'workspaceArchive', workspaceId] as const),\n // ── Databases ───────────────────────────────────────────────────────────────────────────────\n /** Every database query of the open workspace. */\n databases: () => ['arbi', 'databases'] as const,\n databaseList: () => ['arbi', 'databases', 'list'] as const,\n /** One database; no id: every one read. */\n database: (databaseId?: string) =>\n databaseId === undefined\n ? (['arbi', 'databases', 'one'] as const)\n : (['arbi', 'databases', 'one', databaseId] as const),\n /** A database's rows (a search); no id: every database's, no params: every search of one. */\n databaseRows: (databaseId?: string, params?: object) =>\n databaseId === undefined\n ? (['arbi', 'databases', 'rows'] as const)\n : params === undefined\n ? (['arbi', 'databases', 'rows', databaseId] as const)\n : (['arbi', 'databases', 'rows', databaseId, params] as const),\n /** The saved dashboards of a store's scope (a workspace). */\n dashboards: (scope: string) => ['arbi', 'dashboards', scope] as const,\n /** A database's rows grouped and measured (a chart); no id: every database's. */\n databaseAggregate: (databaseId?: string, request?: object) =>\n databaseId === undefined\n ? (['arbi', 'databases', 'aggregate'] as const)\n : (['arbi', 'databases', 'aggregate', databaseId, request ?? {}] as const),\n // ── Configs, health ─────────────────────────────────────────────────────────────────────────\n /** Under `configs()`: the saved configuration versions. */\n configVersions: () => ['arbi', 'configs', 'versions'] as const,\n /** Under `configs()`: the JSON schema of every config model. */\n configSchema: () => ['arbi', 'configs', 'schema'] as const,\n /** Under `configs()`: one configuration. */\n config: (configId: string) => ['arbi', 'configs', 'one', configId] as const,\n /** The remote model providers' health. */\n remoteModels: () => ['arbi', 'remoteModels'] as const,\n // ── Conversations ───────────────────────────────────────────────────────────────────────────\n /** Under the conversations prefix: what a parked run waits for the owner to allow. */\n conversationPendingAuth: (conversationId: string) =>\n ['arbi', 'conversations', conversationId, 'pending-auth'] as const,\n // ── Document tools ──────────────────────────────────────────────────────────────────────────\n /** Signatures on a document (a version); no id: every document's. */\n documentSignatures: (docId?: string, version?: number | null) =>\n docId === undefined\n ? (['arbi', 'documentSignatures'] as const)\n : (['arbi', 'documentSignatures', docId, version ?? null] as const),\n /** The certificate of a signature reference. */\n signatureVerification: (reference: string) =>\n ['arbi', 'signatureVerification', reference] as const,\n /** Every signature request list: what a request write refreshes. */\n signatureRequests: () => ['arbi', 'signatureRequests'] as const,\n signatureRequestsForDocument: (docId: string) =>\n ['arbi', 'signatureRequests', 'document', docId] as const,\n signatureRequestsAwaitingMe: () => ['arbi', 'signatureRequests', 'awaiting-me'] as const,\n signatureRequest: (requestId: string) => ['arbi', 'signatureRequests', 'one', requestId] as const,\n signatureCandidates: () => ['arbi', 'signatureRequests', 'candidates'] as const,\n /** The user's saved (informal) signature. */\n savedSignature: () => ['arbi', 'savedSignature'] as const,\n /** An html/react artifact's source. */\n artifactSource: (docId: string) => ['arbi', 'artifactSource', docId] as const,\n /** An artifact's text, under its parsed content (refreshed with it). */\n artifactText: (docId: string) => ['arbi', 'parsedDoc', docId, 'marker', 'artifact-text'] as const,\n /** An image document's bytes as an object URL. */\n assetImage: (docId: string) => ['arbi', 'assetImage', docId] as const,\n // ── Misc ────────────────────────────────────────────────────────────────────────────────────\n /** An agent config's model tier (the builder's badge). */\n agentConfigModel: (configId: string) => ['arbi', 'agentConfigModel', configId] as const,\n /** Under `billingQuotes()`: the price of a plan change. */\n billingPreview: (projectExtId: string, change: unknown) =>\n ['arbi', 'billingQuote', 'preview', projectExtId, change] as const,\n billingPlanQuote: (projectExtId: string | null, body: unknown) =>\n ['arbi', 'billingQuote', 'plan', projectExtId, body] as const,\n billingAddonQuote: (projectExtId: string, kind: string) =>\n ['arbi', 'billingQuote', 'addon', projectExtId, kind] as const,\n /** Under `contacts()`: a search of the people one can reach. */\n contactSearch: (term: string) => ['arbi', 'contacts', 'search', term] as const,\n /** Under the workspace's facts: a filtered list. */\n factList: (workspaceId: string, filter: unknown) =>\n ['arbi', 'facts', workspaceId, filter] as const,\n /** Under `skills()`: the list, hidden ones included or not. */\n skillList: (includeHidden: boolean) => ['arbi', 'skills', includeHidden] as const,\n /** Under the project's events: one kind, one page size. */\n projectEventList: (projectExtId: string, kind: string, limit: number | 'default') =>\n ['arbi', 'projects', projectExtId, 'events', kind, limit] as const,\n /** The documents pinned for offline reading on this device. */\n offlineDocuments: () => ['arbi', 'offlineDocuments'] as const,\n /** Notifications of one kind for a deployment's user (polled). */\n typedNotifications: (kind: string, apiUrl: string, userId: string | undefined) =>\n ['arbi', 'typedNotifications', kind, apiUrl, userId ?? ''] as const,\n}\n\n/**\n * Keys of the mutations a host may need to follow (its own caches outside these hooks), e.g. with\n * a `MutationCache` subscription: a workflow run creates a task in the host's own task list.\n */\nexport const arbiMutationKeys = {\n /** A member's role changed. */\n setWorkspaceMemberRoles: () => ['arbi', 'workspaces', 'roles'] as const,\n runWorkflow: () => ['arbi', 'workflows', 'run'] as const,\n updateTagKindSchema: () => ['arbi', 'tags', 'kinds', 'update'] as const,\n createTag: () => ['arbi', 'tags', 'create'] as const,\n updateTag: () => ['arbi', 'tags', 'update'] as const,\n deleteTag: () => ['arbi', 'tags', 'delete'] as const,\n extractEntities: () => ['arbi', 'tags', 'entities', 'extract'] as const,\n updateDocuments: () => ['arbi', 'documents', 'update'] as const,\n deleteDocuments: () => ['arbi', 'documents', 'delete'] as const,\n uploadDocuments: () => ['arbi', 'documents', 'upload'] as const,\n uploadUrls: () => ['arbi', 'documents', 'uploadUrls'] as const,\n assignDocTags: () => ['arbi', 'doctags', 'assign'] as const,\n removeDocTags: () => ['arbi', 'doctags', 'remove'] as const,\n updateDocTag: () => ['arbi', 'doctags', 'update'] as const,\n generateDocTags: () => ['arbi', 'doctags', 'generate'] as const,\n /** Members added to or removed from a workspace (leaving included). */\n workspaceMembership: () => ['arbi', 'workspaces', 'members'] as const,\n /** A chat turn being sent (the app's send pipeline). */\n sendMessage: () => ['arbi', 'conversations', 'send'] as const,\n}\n\n/**\n * Query keys of the calendar hooks, all under `['arbi', 'calendar']`. The calendar is the user's,\n * not a workspace's; only the overlays carry the open workspace.\n */\nexport const calendarQueryKeys = {\n all: () => ['arbi', 'calendar'] as const,\n settings: () => ['arbi', 'calendar', 'settings'] as const,\n calendars: () => ['arbi', 'calendar', 'calendars'] as const,\n /** Every event list: the prefix an event write invalidates. */\n events: () => ['arbi', 'calendar', 'events'] as const,\n eventList: (p: ListEventsParams) =>\n [\n 'arbi',\n 'calendar',\n 'events',\n { start: p.start, end: p.end, calendars: p.calendars?.join(',') ?? null },\n ] as const,\n /** Every single event read. */\n eventDetails: () => ['arbi', 'calendar', 'event'] as const,\n event: (id: string, recurrenceId?: string | null) =>\n ['arbi', 'calendar', 'event', id, recurrenceId ?? null] as const,\n shares: (calId: string) => ['arbi', 'calendar', 'shares', calId] as const,\n invitations: () => ['arbi', 'calendar', 'invitations'] as const,\n holidayCountries: () => ['arbi', 'calendar', 'holiday-countries'] as const,\n allRooms: () => ['arbi', 'calendar', 'rooms'] as const,\n rooms: (q: RoomQuery) => ['arbi', 'calendar', 'rooms', q] as const,\n freebusy: (attendees: string[], start: string, end: string) =>\n ['arbi', 'calendar', 'freebusy', attendees.join(','), start, end] as const,\n allLookups: () => ['arbi', 'calendar', 'lookup'] as const,\n lookup: (uid: string) => ['arbi', 'calendar', 'lookup', uid] as const,\n overlays: (workspaceId: string | null, w?: CalendarWindow, layers?: OverlayLayerName[]) =>\n [\n 'arbi',\n 'calendar',\n 'overlays',\n workspaceId,\n w ? { start: w.start, end: w.end, layers: layers?.join(',') } : null,\n ] as const,\n accounts: () => ['arbi', 'calendar', 'accounts'] as const,\n caldavProfiles: () => ['arbi', 'calendar', 'caldav-profiles'] as const,\n bookingPages: () => ['arbi', 'calendar', 'booking-pages'] as const,\n /** The offline outbox (writes made offline, not yet sent). */\n outbox: () => ['arbi', 'calendar', 'outbox'] as const,\n}\n\n/** Query keys of the call hooks, all under `['arbi', 'calls']`. Calls are the user's, not a workspace's. */\nexport const callQueryKeys = {\n all: () => ['arbi', 'calls'] as const,\n config: () => ['arbi', 'calls', 'config'] as const,\n call: (callExtId: string) => ['arbi', 'calls', 'call', callExtId] as const,\n /** Everything about a call's recordings: the prefix a recording event invalidates. */\n recordingsOf: (callExtId: string) => ['arbi', 'calls', 'recordings', callExtId] as const,\n recordings: (callExtId: string) => ['arbi', 'calls', 'recordings', callExtId, 'list'] as const,\n recording: (callExtId: string, recordingExtId: string) =>\n ['arbi', 'calls', 'recordings', callExtId, 'one', recordingExtId] as const,\n inviteLinks: (callExtId: string) => ['arbi', 'calls', 'invite-links', callExtId] as const,\n}\n\nexport const connectorQueryKeys = {\n all: () => ['arbi', 'connectors'] as const,\n catalog: () => ['arbi', 'connectors', 'catalog'] as const,\n mine: () => ['arbi', 'connectors', 'mine'] as const,\n mailboxFolders: (vendor: string) => ['arbi', 'connectors', 'folders', vendor] as const,\n mailboxSyncProgress: (vendor: string, workspaceExtId: string) =>\n ['arbi', 'connectors', 'sync-progress', vendor, workspaceExtId] as const,\n allMailboxSyncProgress: () => ['arbi', 'connectors', 'sync-progress'] as const,\n driveFolders: (vendor: string) => ['arbi', 'connectors', 'drive-folders', vendor] as const,\n driveFolderChildren: (vendor: string, itemId: string) =>\n ['arbi', 'connectors', 'drive-folder-children', vendor, itemId] as const,\n driveFolderDocCount: (vendor: string, itemId: string) =>\n ['arbi', 'connectors', 'drive-folder-doc-count', vendor, itemId] as const,\n driveSyncEstimate: (vendor: string) =>\n ['arbi', 'connectors', 'drive-sync-estimate', vendor] as const,\n driveSyncProgress: (vendor: string) =>\n ['arbi', 'connectors', 'drive-sync-progress', vendor] as const,\n allDriveSyncProgress: () => ['arbi', 'connectors', 'drive-sync-progress'] as const,\n slack: () => ['arbi', 'connectors', 'slack'] as const,\n}\n\nexport const mailQueryKeys = {\n all: () => ['arbi', 'mail'] as const,\n policy: () => ['arbi', 'mail', 'policy'] as const,\n accounts: () => ['arbi', 'mail', 'accounts'] as const,\n unlock: (accountId: string | undefined, sessionKey: string | null) =>\n ['arbi', 'mail', 'unlock', accountId, sessionKey ?? ''] as const,\n allFolders: () => ['arbi', 'mail', 'folders'] as const,\n folders: (accountId: string | undefined) => ['arbi', 'mail', 'folders', accountId] as const,\n allMessages: () => ['arbi', 'mail', 'messages'] as const,\n messages: (\n accountId: string | undefined,\n folderId: string | undefined,\n query: string,\n cursor: string | null\n ) => ['arbi', 'mail', 'messages', accountId, folderId, query, cursor] as const,\n message: (accountId: string | undefined, messageId: string | null | undefined) =>\n ['arbi', 'mail', 'message', accountId, messageId] as const,\n /** The projects an email's AI work can be billed to. */\n projects: () => ['arbi', 'mail', 'projects'] as const,\n /** A saved draft prepared for editing. */\n draftCompose: (accountId: string | undefined, draftId: string | undefined) =>\n ['arbi', 'mail', 'draft-compose', accountId, draftId] as const,\n attachmentText: (accountId: string, messageId: string, attachmentId: string) =>\n ['arbi', 'mail', 'attachment-text', accountId, messageId, attachmentId] as const,\n}\n\n/** `pdf`: the document as a PDF; `original`: the stored file (an image, a recording, a sheet). */\nexport type DocumentBytesKind = 'pdf' | 'original'\n\n/** Every version and kind of a document's bytes: the prefix a new version invalidates. */\nexport const documentBytesKey = (\n documentRef: string,\n version?: number | null,\n kind?: DocumentBytesKind\n) =>\n version === undefined\n ? (['arbi', 'documentBytes', documentRef] as const)\n : (['arbi', 'documentBytes', documentRef, version, kind ?? 'pdf'] as const)\n\n/** Whether `queryKey` lies under `prefix` (a factory key): React Query's own prefix match. */\nexport function isUnderQueryKey(queryKey: readonly unknown[], prefix: readonly unknown[]): boolean {\n return prefix.every((part, i) => queryKey[i] === part)\n}\n"]}