@arbidocs/react

中文文档
0.5.133发布于 2026/11/07MITTypeScriptESM + CJS近 30 天下载 5.1万

ARBI SDK 的反应钩和提供者

中文使用文档
文档目录13 节
  1. 快速启动
  2. 1. 设立东道机构
  3. 2. 建立流畅的聊天
  4. 钩子
  5. 人工活性编辑( I) @arbidocs/react/artifacts (中文(简体) )
  6. PDF 文档工具 @arbidocs/react/document-tools (中文(简体) )
  7. 流回调
  8. 查询客户端
  9. 离线邮件和日历
  10. 实时连接
  11. 缓存无效
  12. 同伴依赖关系
  13. 任务、代理、技能、联系人和人工智能的使用

@ arbidocs/ 反应

用于构建ARBI动力应用软件的反钩和提供商. 包括 @arbidocs/sdk 财务报告和审定财务报表 @tanstack/react-query -一个装置就能让你得到一切.

快速启动

npm install @arbidocs/react

1. 设立东道机构

import { QueryClientProvider } from '@tanstack/react-query'
import { ArbiHost, createArbiQueryClient } from '@arbidocs/react'
import { Arbi } from '@arbidocs/sdk/browser'

const { queryClient } = createArbiQueryClient()
const arbi = new Arbi({ url: 'https://www.arbidocs.com' })

function App() {
  return (
    <QueryClientProvider client={queryClient}>
      <ArbiHost config={{ arbi }}>
        <Chat />
      </ArbiHost>
    </QueryClientProvider>
  )
}

<ArbiHost config> 是主机将配置交给钩子的地方: arbi,以及 可选择 session, (中文(简体) ), documents, (中文(简体) ), calendar, (中文(简体) ), mail, (中文(简体) ), account 财务报告和审定财务报表 dictate (每个加一个) 默认). @arbidocs/blocks 与块域一起再导出; 块址使用该块域 (见其研究).

assistantName 人们在聊天时称助理为: @<name> 在引用菜单中,一个共享线程的草稿开始,一个消息的名称被路由到 助理人员useAssistantName()) (中文(简体) ). 它默认为"ARBI". 以另一个名称键入 @ARBI 仍可联系助理(assistantLabels),并提及以更早的名字存储 仍然显示为筹码.

2. 建立流畅的聊天

import { useState, useRef } from 'react'
import { useArbi, useDocuments, useAssistantQuery } from '@arbidocs/react'

function Chat() {
  const arbi = useArbi()
  const [workspaceId, setWorkspaceId] = useState<string>()

  if (!workspaceId) {
    return (
      <button
        onClick={async () => {
          await arbi.login('[email protected]', 'password')
          const ws = await arbi.workspaces.list()
          await arbi.selectWorkspace(ws[0].external_id)
          setWorkspaceId(ws[0].external_id)
        }}
      >
        Connect
      </button>
    )
  }

  return <ChatWindow workspaceId={workspaceId} />
}

function ChatWindow({ workspaceId }: { workspaceId: string }) {
  const { data: docs } = useDocuments(workspaceId)
  const mutation = useAssistantQuery()
  const [input, setInput] = useState('')
  const [response, setResponse] = useState('')
  const lastId = useRef<string | null>(null)

  return (
    <div>
      <div>{response}</div>
      <form
        onSubmit={(e) => {
          e.preventDefault()
          setResponse('')
          mutation.mutate({
            question: input,
            docIds: docs?.map((d) => d.external_id) ?? [],
            previousResponseId: lastId.current,
            onToken: (t) => setResponse((r) => r + t),
            onStreamStart: ({ assistant_message_ext_id }) => {
              lastId.current = assistant_message_ext_id
            },
          })
          setInput('')
        }}
      >
        <input value={input} onChange={(e) => setInput(e.target.value)} />
        <button type="submit" disabled={mutation.isPending}>
          Send
        </button>
      </form>
    </div>
  )
}

就是这样——三个钩子,你有一个流畅的RAG聊天.

钩子

钩子回返自动启用时
useArbi()Arbi 实例永远
useWorkspaces()用户的工作空间登录
useCurrentWorkspace()选定的工作空间( E)workspaceId, (中文(简体) ), workspaceStatus,其列表条目)和我 role 编号 : isMember 在其中( e)登录
useActiveConfigId()配置新工作与( 所选的, 否则是回复信件的, 否则是最后一个)永远
useShellWorkspaces(options)同样,在一个列表和 select 提供(不需要供应商)永远
useDocuments(workspaceId)工作空间文件选择工作空间
useConversations(workspaceId)工作空间对话选择工作空间
useTags(workspaceId)工作空间标签选择工作空间
useTags(workspaceId, { kind, parentId, ids, include: ['links'], linksLimit })标记已过滤, 包含每个人的文档、 事实和线索( 表格行)选择工作空间
useTagKindSchema(kind) 编号 : useUpdateTagKindSchema()工作空间中的一类字段( 表列); 设置选择工作空间
useSetTagValues()将标记的值合并到同类字段打电话 .mutate()
useFactsSearch({ workspaceId })事实 Smart Search: 查询框,上次搜索的点击(hybrid), search() 财务报告和审定财务报表 clear(),为本届会议保留 FACTS_SEARCH_VIEW选择工作空间
useAssistantQuery()流变打电话 .mutate()
useHealth()后端状态过 { enabled: true }
useProfile() 编号 : useUpdateProfile()用户名称、图片和电子邮件; 保存名称或图片登录
useRequestEmailChange() 编号 : useConfirmEmailChange()通过校验码进行电子邮件更改打电话 .mutate()
usePasswordChange()更改主密码( 一个请求: 密码只包入账户密钥)打电话 .mutate()
useNotificationPreferences(keys)电子邮件通知开关, 乐观保存登录
useSessions() 编号 : useTerminateSession() 编号 : useLogoutAllSessions()活跃的会话,一端,在任何地方签名登录
useDeleteAccount()关闭账户( 软删除)打电话 .mutate()
useModelConnections() 编号 : useDirectModelUsage()主代理的模型连接(box and personal)和过去30天的直接通话登录
useSaveModelConnection() 编号 : useRemoveModelConnection() 编号 : useUnlockModelConnections()保存个人连接( 其密钥被封入身份后, 在此会话上解锁) , 删除一个, 解锁个人密钥打电话 .mutate()
useFeature(name) 编号 : useFeatureSwitch(name)用户是否打开一个功能( T)<ArbiHost config={{ features }}>; 未列出:在),以及如何切换永远

账户钩子对没有主机的SDK无控制器 arbi (单位:千美元)useNameEditor, (中文(简体) ), useEmailChange, (中文(简体) ), usePasswordChangeForm, (中文(简体) ), useDeleteAccountFlow, (中文(简体) ), useAvatarCrop, (中文(简体) ), toNotificationPreferences:他们拥有表态,并将保存作为函数. 块 /connect 条目将批量编成设置页面(见设置页面配方 docs/design/blocks-package.md) (中文(简体) ).

特征. 主机列出用户可以切换的产品部分,以及每个切换器在哪里 保存 : 用户设置的布尔字段( 跟着用户) 或此设备 (单位:千美元)createLocalFeatureStore({ key, migrate }),同步读取 localStorage· ; migrate 将一个早期的建筑的值带入一次). useFeature(name) 任意读取; 主机特性 因此,没有列出任何内容的网站.

const device = createLocalFeatureStore({ key: 'my-site-features' })
<ArbiHost config={{ features: {
  skills: { userSetting: 'show_skills', default: false },
  calls: { local: device, default: false },
} }}>

选中的工作空间 . 会议 workspaceId 财务报告和审定财务报表 workspaceStatus 住在工作区 存储; useSwitchWorkspace 移动它们 useOpenSelectedWorkspace 选择后重新打开 重装 给每分页保存的会话一个, 重新装入保留在工作区 (单位:千美元)createArbiSessionStore({}, { workspace: createArbiWorkspaceStore({ storage: browserWorkspaceStorage() }) })(三); reset() 签到后,下一个人开始 工作空间列表. readWorkspaceLastOpened() 命令“最近的工作空间”列表.

线索分页. 公开对话是布局的 tabs.threads (按打开的顺序,于 多数 MAX_THREAD_TABS),与 tabs.activeThread 屏幕上的那个threadTabId它的对话, 或者说 new) (中文(简体) ). 每个标签都保留它留给的作曲家(ArbiThreadTabView:它的行,编辑,模型 和卷轴位置,它的草稿是聊天的,每对话一次) selectThreadTab 把它带回来 财务报告和审定财务报表 openThreadTab 打开最新消息的线索。 他们被保存在交叉 重装与 版式为 persist从来没有用什么打字.

说吧. 公开对话及其作曲家 每次对话的转折 上下文文档和事实,以及代理栏的队列和运行控制在聊天店中直播 (单位:千美元)createArbiChatStore({ layout, persist, draftStorage })),它随布局线条标签移动 并告诉读者每个标签更改一次。 与一个 persist (单位:千美元)createStoragePersist({ parse: parseSavedChat })公开对话及其台词、上下文、每个代理聊天的代理和 被选中的模型在重新装入后幸存下来; 草稿被分开保存, 被密封到个人身上 (单位:千美元)createSealedDraftStorage),并且只用于打开标签. createArbiSessionStore 在记忆中使用。 A 类 东道主自有状态的会话由各部分组成(composeArbiSessionStore({ layout, workspace, chat, documents })) (中文(简体) ).

文档. 正在查看的文档和查看者自己的状态(其标签、比较、标签) 请求的文本大小、 要打开的文字注释、 未保存的编辑、 弹出窗口、 文档 选中并选择一旦列出的文档、 粘贴在聊天上的文档、 草稿开始于 客户端( e)startDraftDocument(kind), (中文(简体) ), updateDraftDocument, (中文(简体) ), setDraftDocumentKind, (中文(简体) ), clearDraftDocument),取景器中取取出段落的引文("取取取取")setPassageCitation)和 相关文档在文档存储处(createArbiDocumentSessionStore({ persist, showViewer })) (中文(简体) ). showViewer 是主机如何显示会议刚刚获得的文件的查看器(一个新的 草案, showNewDocument )),用于聊天文档. 与一个 persist (单位:千美元)load 是同步的,从 localStorage 例如,与 parseSavedDocuments),视图文件及其 页面、 被绑定的文档、 查看器的标签和文本大小会在任何内容之前重新装入 使。 。 .

对话设置. useConversationSettings() 是公开对话的标题和分享 (单位:千美元)saveTitle, (中文(简体) ), share, (中文(简体) ), unshare页:1 PATCH 中,服务器从 对话的工作空间)和配置模型的下个回合运行(resetToDefaults 滴数 被选中的那个).

人工活性编辑( I)@arbidocs/react/artifacts(中文(简体) )

useArtifactSession({ workspaceId, docId }) 装入一个文物, 持有编辑缓冲器, 保存为 新的不可更改版本(儿童文件通过 parent_ext_id),列出版本行并比较 有音轨变化的任何两个版本。 它返回道具为 @arbidocs/blocks/artifacts 组件 : view (计: ArtifactEditor, (中文(简体) ), editorProps 财务报告和审定财务报表 redlineProps。下面的碎片是 SDK自由并可以自行使用: useArtifactEditSession (缓冲、基线、下流、拯救、), 比较), useRedline (用可插接的、有能力工作的) RedlineEngine, (中文(简体) ), buildVersionChain 财务报告和审定财务报表 versionLabel。 。 。 . useArtifactText, (中文(简体) ), useArtifactVersions 财务报告和审定财务报表 useSaveArtifactVersion 这是 SDK装订.

useArtifactText(docId) 返回干净的标记下和 a status (单位:千美元)loading, (中文(简体) ), parsing, (中文(简体) ), ready, (中文(简体) ), error:新鲜上传被解析了几秒钟,其间后端回答404,422或 500,所以它以越来越大的延后(限制)进行回击 并且无法逃脱后端的被击倒 (单位:千美元)unescapeMarkdown;只用于从马克下沉储存的文物). useStreamedArtifact({ artifacts, workspaceId, settled }) 覆盖代理草稿的流、持久性和编辑寿命(phase数字 : streaming, (中文(简体) ), persisting, (中文(简体) ), parsing, (中文(简体) ), ready, (中文(简体) ), error),将草案与 cleanDraftMarkdown (单位:千美元)unwrapCitationLinks, (中文(简体) ), stripAgentPreamble, (中文(简体) ), promoteBoldTitle在此之前 存储.

PDF 文档工具@arbidocs/react/document-tools(中文(简体) )

注释、标记、冻结、电子签名、签名检查和制作套件的数据方面: DocumentToolsProvider (主机的API客户端,用户和回调; deploymentDomain 默认为 主机 arbi因为, useDeploymentDomain(), (中文(简体) ), fetchDocumentPdf (一个版本的) /view PDF , (中文(简体) ), useDocumentMarkup, (中文(简体) ), createMarkupStore (单位:千美元) AnnotationStore 在服务器上标记 409合并),,, fetchMarkupPdf, (中文(简体) ), useDocumentSignatures, (中文(简体) ), useSignDocument, (中文(简体) ), useSignatureVerification 财务报告和审定财务报表 buildProduction 编号 : saveProductionFiles。UI是 @arbidocs/blocks/document-tools; 见 “在另一个前端使用文档工具” @arbidocs/blocks 读取.

流回调

把这些递给 mutation.mutate() 并行 question 财务报告和审定财务报表 docIds数字 :

回电说明
onToken(token)每个文本随其流而块化
onStreamStart({ assistant_message_ext_id })Stream 开始 —— 保存ID 用于后续查询
onAgentStep(step)代理工具的使用(搜索、阅读等)
onError(message)流出时出错
onComplete()流线完成

查询客户端

createArbiQueryClient() 是每个ARBI主机股票的客户端(ARBI前端,以及块站点) 结束 defaultHost: 读取新鲜5分钟并保留了30个,用后退重试了两次,但从未 4xx(除408/429外)或读出退出; 写作从未重审; 写作被拒绝时 账户的删除正在等待,或者被客户端的设置断开器删除,告诉用户. 签了字就空了 queryClient.clear() (同一个例子,所以每个钩子都留着).

createArbiQueryClient({ persist: true }) ưμ㼯a persistOptions 页:1 <PersistQueryClientProvider> (单位:千美元)@tanstack/react-query-persist-client:文档元数据, 工作空间列表、设置、项目和应享权利都保存在这个设备上,用于离线启动 (从不包含文档内容),已排队下线(registerArbiMutationDefaults) (中文(简体) ). 打电话 claimOfflineQueue(userExtId) 在每个登录时, 所以一个前一个账户的队列里不会重播 .

ArbiWebSocketProvider 继续回放查询 onlineManager 与浏览器的网络同步 现场连接( 启动后一个空投的套接字计数) 和该人的“ 工作离线” 选择(useWorkOffline,一个短暂的会话视图, WORK_OFFLINE_VIEW) (中文(简体) ). useReconnect 拿着 最便宜的回路:它清除了"工作下线",说没有网络,或者重新装入.

离线邮件和日历

邮件保存在设备上, 封存到用户的密钥上, 绑入账户 只能由他们读取:在线阅读和搜索最近的信件(默认为最后7天); 每个设备,关闭 / 1 / 7 / 30 / 90天, useOfflineMailSettings),一个发送信号的收发箱 完全一次并按顺序重接(每个都保留其 request_id),稿件下线,以及 已下线的更改( 读取、 标记、 移动、 回收站、 删除) : queueMailChange, (中文(简体) ), usePendingMailChanges, (中文(简体) ), 重新连接时按顺序应用。 在"工作离线"下面什么也没有 默认邮件客户端( 无) 东道主 mail(已读取) offlineMailReads,以及 defaultHost 内 @arbidocs/blocks 挂载运行时间, 并在签出时擦除邮件 。 一个拥有自己客户端和会话的主机添加 三块:

import { createMailClient, offlineMailReads, useOfflineMailRuntime, wipeOfflineMail } from '@arbidocs/react'

const client = createMailClient((path, init) => getArbi().mail.fetch(path, init), {
  ...offlineMailReads(getArbi), // reads answer from the device offline
})
useOfflineMailRuntime({ openOutbox }) // mounted once: sends the Outbox, applies changes, syncs
await wipeOfflineMail() // at sign-out

谈话(useMailConversations, (中文(简体) ), useMailThread设备上的逐行组合为 服务器是groupMailConversations, (中文(简体) ), mailConversationKey(三); useNativeThreadKeys 旧密钥 在背景中将本地邮件输入对话 .

邮箱用到 offlineMailSupport (单位:千美元)@arbidocs/blocks/connect作为设备存储器 默认; 每设备设置为 ConnectedMailOfflineSettings。 。 。 .

日历保存方式相同(它自己的被封存的数据库):读取由设备解答 离线, 和事件写出离线 等待在一个发件箱中, 重新播放一次 回到网上.

import { calendarOfflineSupport, useCalendarOfflineRuntime, wipeCalendarOffline } from '@arbidocs/react'

<ArbiHost config={{ calendar: { offline: calendarOfflineSupport } }}>…</ArbiHost>
useCalendarOfflineRuntime() // mounted once: replays the outbox on reconnect
await wipeCalendarOffline() // at sign-out

实时连接

<ArbiWebSocketProvider> 持有重新连接的套接字并应用每个站点的应用:

  • 任务和存在;
  • 聊天和打电话;
  • 通知行;
  • 完成运行( e)response_complete:对话停止产生,后续离开 队列框, 背景运行被保存的文档被再次读取, 运行失败的 AI 使用 转到聊天主机 onQuotaExceeded· ;
  • 对话、邮件草稿和技能活动.

转动后的信件会从服务器到达该人的其他标签(conversation.message_posted) (中文(简体) ).

主机处理其他信件类型 handlers类型,在 useArbiWebSocket 订阅者 :

<ArbiWebSocketProvider enabled={signedIn} handlers={useRemoteControlHandlers()}>

遥控. 一个 agt-… 请求驱动 UI 的助手( E)remote_control)是经同意的. 它的状态是一个会话瞬间视图( E)REMOTE_CONTROL_VIEW,从未保存;块的远程控制 在每次登录、签出、到期和用户变更时重新发送: useRemoteControl(selector) 读取 这, remoteControlActions(session) 改变它(reset() 回到开始, 财务报告和审定财务报表 toRemoteControlRequest(message, isSequenceId) 将信件缩小为可运行的请求。 这个 操作者、迅速同意和引导光标是 @arbidocs/blocks' (单位:千美元)useRemoteControlHandlers, (中文(简体) ), ConnectedRemoteControlConsent) (中文(简体) ).

缓存无效

import { arbiQueryKeys } from '@arbidocs/react'
import { useQueryClient } from '@tanstack/react-query'

const queryClient = useQueryClient()
queryClient.invalidateQueries({ queryKey: arbiQueryKeys.documents(workspaceId) })

同伴依赖关系

  • react 第18条

任务、代理、技能、联系人和人工智能的使用

Hooks for a "AI workers" and a message screen. 虎克为"AI 劳动力"和一条信息屏. 写入无效通过 arbiQueryKeys这样 useTasks, (中文(简体) ), useAgents, (中文(简体) ), useConfigs 财务报告和审定财务报表 useChats 自己来刷新.

const create = useCreateTask() // mutateAsync(CreateTaskRequest) -> TaskResponse
const run = useRunTask() // approves a run parked for access (temporary grant), then runs
const runs = useTaskRuns(taskId) // polls while a run is in flight
const save = useSaveAgentConfig() // { agentExtId, sections: { Agents: { PERSONA, ... } } }
const grant = useGrantAgentAccess() // { agentExtId, workspaceId, mode?: { kind: 'standing' | 'temporary' } }
const contacts = useContacts() // + useInviteContacts(), useCreateContact(), useUpdateContact(), useDeleteContact()

表格对请求绘图taskComposerToCreateRequest, (中文(简体) ), composePersona, ) 属于 @arbidocs/blocks/agents. AI的使用报告于 英镑 (按增值税计算),不是美元:使用 formatGbp(n) (单位:千美元)£0.47, (中文(简体) ), £12.40,整磅为 £10)和 metered 打开旗子 useProjectUsage (单位:千美元)false = 此部署不记录使用。 信使(a) 边面板,或信件页面上的列表和线程部分)是 ConnectedMessenger 内 @arbidocs/blocks/connect。见 docs/design/blocks-package.md ("hooks and maping a host 不应重写").

useSessionPageTab(page, fallback) 读取和写入主机会话中选中的页面标签 views.tabs保存在导航和再装入中 主机提供默认标签 . 使用 useSessionView(key, fallback) 持续页面首选项和 useTransientView 页:1 只有会话过滤器或一拍请求 。 三者都使用与工具包相同的会话布局.

版本与发布记录

@arbidocs/react 共发布 487 个版本,首次发布于 2026/02/11;过去 12 个月发布了 487 个版本。

版本发布日期距今
0.5.133latest2026/11/07今天
0.5.1322026/11/061 天前
0.5.1312026/11/061 天前
0.5.1302026/11/052 天前
0.5.1292026/11/052 天前
0.5.1282026/11/052 天前

关于 @arbidocs/react 的常见问题

@arbidocs/react 是什么?

ARBI SDK 的反应钩和提供者

如何安装 @arbidocs/react?

在项目目录运行 npm install @arbidocs/react,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=18)、react-dom(>=18)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@arbidocs/react 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@arbidocs/react 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@arbidocs/react 可以商用吗?

@arbidocs/react 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@arbidocs/react 的下载量有多少?

根据 npm 官方下载统计,@arbidocs/react 在 2026/10/07 – 2026/11/05 这 30 天内被下载 50,995 次,日均约 1,700 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@arbidocs/react 还在维护吗?

最新版本 0.5.133 发布于 2026/11/07(今天);至今共发布 487 个版本,其中过去 12 个月发布了 487 个;首次发布于 2026/02/11。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。