跳到正文
Scopwis
开发

架构

Scopwis 是一个以 Rust 为信任边界、以 Flutter 为跨平台客户端的自主分析执行系统。

主要组件

层技术职责
ServerRust、Tokio、AxumAPI、认证、session、task、ownership
数据访问OpenDAL + provider adapter授权对象和表
查询DataFusion + Arrow类型化分析计划和列式结果
分析已注册 Rust 方法Mining、诊断、forecast、prediction
AgentModelProvider + ReAct runtime规划和 tool 选择
报表ReportSpec声明式、可校验交付物
UIFlutter + Forui + Scopwis tokenWeb/Desktop/Mobile 工作区
CLI/TUIRust、clap、ratatuiTerminal client

执行流

用户问题
  ↓
授权数据发现
  ↓
metadata + semantics
  ↓
通过校验的 AgentPlan
  ↓
typed query / registered method
  ↓
Query / Mining artifact
  ↓
evidence-backed Analysis Artifact
  ↓
答案
  └─ 只有用户要求时才生成 ReportSpec

模型负责提出路径,但不拥有授权、query 编译、artifact provenance 或 report validation。

产品工作面

一级工作入口是 分析、数据挖掘、报表。设置是独立 application-level configuration surface。数据浏览和任务历史属于上下文工具,不再继续膨胀一级导航。

存储与 Artifact

Server 拥有的持久化状态位于配置的数据根目录。不可变 artifact metadata / lineage 与大 payload 分开,因此即使有界 payload 过期,证据历史仍然可以保留。

会话保留遵守账户所有权。进程达到 50 条会话上限时,新会话只能替换当前账户最旧的历史。如果该账户没有可替换的历史,则返回容量错误;删除自有会话可以释放名额。已有自有会话仍可继续追问。 重启恢复遵守相同所有权规则;无所有权文件的旧版目录需要先显式授权旧版 ownership migration,才能清理溢出的历史。

已完成的 Agent 任务历史保留在磁盘中。启动时逐条校验持久化记录,仅保留终态摘要;请求具体任务时再读取完整答案和事件。活跃记录保留重启后报告任务中断所需的状态。

私有会话和任务记录在物化前执行结构预算预检,包括会被忽略的兼容 metadata。任务预览在启动和冷读取时都落实公开的 kind、ID、revision、producer 和最多 64 个 input 的边界。结构放大或畸形记录会使恢复失败,不删除历史或临时证据。

任务的已知 metadata、错误、进度事件和 response 轻量字段在写入、恢复及旧版迁移前,必须满足声明的 Unicode 字符上限和枚举。可选任务字段应省略,不能提供 null;缺省 artifact 和 retryability 保留契约默认值。有界私有扩展及历史 metric 缺省计数继续兼容。非法实时终态候选会被整体丢弃,从上一份有效快照形成安全的 INTERNAL 失败;有效候选仅因写盘失败时则使用 AGENT_TASK_PERSIST_FAILED,保留已验证事件。自动裁剪计划和合并重复综合步骤使用普通 completed 进度事件,归一化语义保留在摘要中,不创造新 wire 状态。这些字段检查不对历史计划重新施加当前运行权限。

持久化任务变更在等待有界 IO 容量前拥有堆上的工作单元,捕获完整快照不会放大嵌套 async 等待状态。未 poll 的事务可以直接丢弃而不执行;工作线程已开始后,取消 HTTP 等待者不会在持久化提交和注册/worker handoff 完成前释放串行锁。

跨平台边界

Flutter 负责展示与交互;Rust 负责身份、授权、数据访问、计算、Agent orchestration 和报表校验。Native bridge 使用有界 batch 传输数据,而不是逐行 FFI;Web 通常使用类型化 HTTP/SSE/Arrow API。

报表响应在读取 HTTP 流时、JSON 解码前执行大小限制:成功的报表 payload 上限为 64 MiB,错误 envelope 上限为 64 KiB。替换或关闭报表请求会取消响应体订阅,过期结果无法覆盖当前视图。

原生模型传输在向 Agent 提交任何调用前校验完整工具调用 envelope。必需工具字段畸形时拒绝整条响应,不会静默丢弃某个调用后执行剩余调用。

Responses、Anthropic 和 Gemini 原生 JSON 在构建树前还要通过共享的 64 MiB 结构计费门禁,独立于 16 MiB 编码体积限制。未知 metadata 和 Responses 内嵌参数同样受限;这是确定性资源准入策略,不是 RSS 保证。

实现级契约见仓库 docs/specs/。

输入关键词搜索中文文档。