@ alwith/ 模块驱动
预发共享驱动模块. 这个软件包将前端和私人本地 Drive 图书馆(native/); Tauri 插件 alwith-drive (crates.io)携带公共类型,打出的命令和交易的Rust API. 前端和库版本总是相匹配. 该引擎取自AL With桌面; desktop-provenance.json (kept in the source,未发布)记录出源修订.
入境点
@alwith/module-drive:生成协议类型,传输接口和控制器.@alwith/module-drive/react:控制器订阅,发射装置/设置/状态面板,权限,徽章,质量-删除确认,本地化和被绑入帮助器. 注入主机阴影控制与导航.@alwith/module-drive/content:评论,Markdown/HTML集成,协作,前题,版本,知识活,聊天建议,跨项目移动和文件链接帮助者.@alwith/module-drive/tauri数字 :createTauriDriveTransport()超过插件的命令和drive:event。 。 。 .@alwith/module-drive/commands: 生成了已键入的插件命令和事件.@alwith/module-drive/styles.css:有范围化的语义-token风格.
东道方合同
登记册 .plugin(alwith_drive::init(Config::new(|app| ...).event_windows(["main"]).development_directory(development_directory))); 关闭打开一个 DriveService 从应用程序数据,共享所有者注册,默认本地目录,保留遗留的应用程序目录,设备身份和一个系统浏览器打开器. 启动失败由每个命令保存并返回 。 插件发送 drive:event 以新快照(生成/序列合同)取代一个已忽略的用户跳出的事件; 失败的运输流(队列溢出) 被报告为出错, 绝不是重同步 。 赠款 alwith-drive:default (单位:千美元)allow-request用于使用 Drive 的窗口. alwith-drive:allow-session-request (MCP和合作证书: mcpSessionConfig, (中文(简体) ), collabSession和 alwith-drive:allow-collaborative-write (单位:千美元)writeCollaborativeDocument)是单独的权限;授予每个应用程序与用户的 Drive 会话信任的窗口,例如桌面聊天窗口. 插件不将其限制在窗口标签上 。 保存从快照、日志和持续前端状态的证书 .
在获取初始快照前订阅 . createDriveController 缓冲此间隔并调和生成/序列间隙。 窗口的处理会停止它的收听器,而不是应用程序服务. 出发前 app.state::<Drive>()数字 : begin_shutdown() 一次,然后等待着 shutdown() (取消交易、排水和停止同步、结束事件交付),然后退出; is_stopped() 告诉出口钩让出口通过.
所有可以相接 Drive 根的本地文件系统突变必须贯穿 DriveService::with_filesystem (或 with_collaborative_filesystem, (中文(简体) ), with_move_to_filesystem)在主机路径授权后;放下未来会取消交易。 传递精确的写入目的地并删除源路径 。 它以完整的同步回合来序列本地更改,检查索引为只读/协作状态,并记录成功的去除意图. 这个粗糙的协调员可以在转移时延迟操作. 它不是一个OS sandbox:外部编辑和代理使用普通文件系统权限.
新的根必须默认为空. 主机可选择加入 DriveService::with_existing_default_root() ,以仅在已配置的默认根上采用已存在的文件。 这不会移动或删除文件,也不会放松对已注册根或自定义目录的所有权检查. 由cononical root,count/server和主机数据目录持续拥有所有权;重叠的root和被另一个剖面重用被拒绝. 遗留客户端不参与注册:共享默认目录需要相同的服务器/账户和严格的相继操作,之前的同步进程完全停止. 主机从 AL 升级并带有桌面通过 OpenOptions::new().legacy_desktop(LegacyDesktopProfile { store, settings, index }) 改为 DriveService::open数字 : store 属于桌面 drive.json 已命名仓库( e)baseUrl, (中文(简体) ), token, (中文(简体) ), deviceId, (中文(简体) ), localRoot, (中文(简体) ), userName, (中文(简体) ), settings 联合国 settings.json (单位:千美元)drive.* (按键)和 index 联合国 drive/index.sqlite3当插件没有时 profile.json 然而, Drive 报告桌面配置已配置; 第一个需要它的操作( 通常为 start)识别账户,采用"桌面"目录,将索引(有WAL文件)移入配置文件,并用"桌面"的偏好,下载阈值,服务器配置和本地服务器覆盖来写入配置文件. 没有网络,操作就失败了,进口就待处理; logout 拒绝它。 桌面除索引之外的其他文件从未被更改,一个书面的配置文件,在或不签名的情况下,永远结束导入.
证书被存储在原生原子剖面文件(Unix上只有所有者的权限);保护主机OS上包含的应用数据目录. 日志保存本地文件 。 退位保留了被取出引擎的清理/剩余行为. 测试撤销时使用专用账户和临时目录.
当前边界
在获得实际服务和多客户接受之前,这仍然是一体化候选人。 专门小组单独提供 launcher, (中文(简体) ), settings 财务报告和审定财务报表 status 模式; 主机提供本地目录选择、导航、设置路由和外部打开。 它利用现有的工作空间,而不是制造出第二棵树. 下载偏好在保留暂停状态的同时修改了引擎的加载.
通过挂起选择内容集成 DriveContentProvider,将管理过的文档以 CommentSurface合并 drivePreviewIntegrations 输入共享编辑器主机。 供应 saveDocument 并跟踪协作所有权。 路线授权协作原子写入 with_collaborative_filesystem; 普通写作仍然受约束 with_filesystem。锁定源编辑与协作预览权限分开。 内容条目需要它的可选的 Milkdown, Yjs 和编辑端对等依赖性.
挂载 DriveMassDeleteDialog 在主窗口中独立于面板可见度. ChatCondenseEntry 选择主机首选项存储其30天 snooze; 将批准的工作传递给 DriveCondense.initialJob。将对话框所有权保留在临时上下文菜单之外。 主机选择他们的OS链接方案;避免声称另一个应用程序的注册协议.
存档默认已禁用 。 主办方通过现有对话拥有者获得明确同意,进行出口对话,并提供 expectedGeneration 每个上传。 本地代码在过滤和上传前重新检查同意,私会排除,工作空间标记和生成. 存档元数据包含散列和状态,而不是第二个对话商店. 为每个明确的会话工作空间确定知识和MCP配置。 在启动本地引擎前配置一个技能目录 .
清除意图是继承的内置引擎状态;不提供崩溃安全删除/移动恢复。 共享服务没有添加数据库迁移计划。 编辑器主机必须保存脏缓冲并检查预期的文件版本. 原生的工作空间大小限制在下载后仍然适用. 只云文件不能在本地编辑;协作文件需要明确的所有者适配器而不是普通的源写.
生成的JSON数字字段使用JavaScript数字,匹配了已存在的传输. JavaScript安全整数范围以外的值不支持;远程标识符保存字符串变体.
发展
bun install
bun run bindings # regenerates src/generated/commands.ts and src/contract.ts from the plugin
bun test src
cargo test --manifest-path rust/Cargo.toml
bun run build
使用仓库 scripts/build-npm.ts 建会者. 当地图书馆建成后, ALWITH_NATIVE_DIRECTORY=<target/debug> cargo test --manifest-path rust/Cargo.toml -- --ignored 练习客户端对抗它。 只有在明确发布决定和真实的原生,多进程和被支持的平台验证后才能发布.
桌面能力
DriveService::open(options, OpenOptions)添加主机选择 :session_archive_directory(内在会话存档),default_preferences(未选择任何配置文件的首选项;桌面使用)knowledgeInject: true和legacy_desktop(上经.DriveService::new(options)保持之前的行为.- 会话归档: 与
session_archive_directory,在对话目录开始时驱动该目录,每5分钟一次archiveSyncNow时sessionArchive正在打开, 跳过标为私下的会话 。 每发子弹archive活动(syncing真实的,然后是假的archiveStatus报告本地档案。 没有目录, 主机会继续导出对话archiveSession,以及archiveSyncNow是一个错误. - 服务器覆盖 :
serverOverrides编号 :setServerOverrides { overrides }读取和更改webBaseUrl, (中文(简体) ),collabRelayUrl, (中文(简体) ),transferConcurrency(第1至64段)maxUploadMb(0无限制). 他们坚持在签注范围之外。 地址仅在服务器未发布客户端配置时才应用;maxUploadMb输出到服务器限制。 运行中的引擎会重新启动, 并保留暂停状态 . moveToCloudDirectory { sources, directory }将驱动项移动到未降落在本地的云文件夹并回答cloudMove { moved, error }。 。 。 .recheckCloudOnly答题cloudOnlyRecheck及其计数,引擎重新检查时会发出cloudOnly事件(合同生成2).searchUsers { query, limit? }:1至50个用户,缺席时为20个.knowledgeContext每个工作空间缓存10分钟,然后通过任何配置、偏好或引擎变化来清除.