Anima URI
Anima URI
Section titled “Anima URI”面向壳 UI(深链、浮层、剪贴板)以及未来 Markdown / 富文本点击处理的稳定、可解析实体定位符。
协议: anima:(无 //)。示例:
anima:42?component=task_item&present=overlay- 之后从文本(Markdown、通知)识别并打开实体,经
openEntityResource - 今日即可分享 / 深链 / 跨模块打开
- PG / 栖息地中的结构化外键仍是数字 id — Anima URI 不是持久化格式
本任务交付:语法 + parse/format + 浮层注册表 + task_item 样例。尚未: 聊天室 Markdown 链接拦截。
anima:{id}[?component={component}][&present=navigate|overlay]| 部分 | 含义 |
|---|---|
id | entities.id(正整数) |
component | 作为视图切面的组件标签(哪个浮层 / 模块映射)。可选;省略时打开会解析 primary_component |
present | navigate = 切换壳模块并选中;overlay = 打开已注册浮层。默认依组件而定(如 task_item → overlay) |
habitat_instance_id | 可选。Habitat 实例 id(fa_inst_…)。省略 = 本机;异机值仅保留解析,暂不远程打开。见 habitat-identity.md |
无短别名(如 task 无效)。取值必须是完整组件名。
不要使用 anima://… 作为规范形式(id 会被误解析为 URL host;anima://42:task_item 是非法 URL)。
同一 id 配不同 component= 可打开不同浮层(实体可携带多个 components[])。注册表键是组件标签,不是壳模块 id。
分层 vs 持久化
Section titled “分层 vs 持久化”| 层 | 存储 | Anima URI |
|---|---|---|
| PG / 栖息地 body / RPC | 实体 id(如番茄钟 task_item_id) | 永不作为外键字符串 |
| 壳 UI | — | formatAnimaUri / parseAnimaUri / openEntityResource |
Anima URI 是壳 / UI 定位协议,不是数据库外键。用户撰写的正文里碰巧出现的 anima:… 是内容,不是结构化关系。
每个可展示组件可 registerEntityOverlay(component, OverlayComponent)。
present=overlay → 解析组件(默认 primary_component)→ 查注册表 → EntityOverlayHost。
present=navigate → 经 navigateAppModulePath 将组件映射到壳路径。EntityOverlayHost 在可映射时提供统一「在模块中打开」按钮(关浮层后 present=navigate)。
| component | 壳路径 |
|---|---|
task_item | /tasks?item={id}&present=… |
task_list | /tasks?list={id} |
project | /projects?project={id} |
calendar_event | /calendar?event={id} |
note | /note?id={id} |
diary_entry | /diary?id={id} |
email_account | /email?account={id} |
anima:的 OS 协议 / intent 处理- 非实体资源(对话等)
- 在外键字段存储 Anima URI 字符串
- 聊天室完整 Markdown 点击拦截
另见 entity-model.md。
助手 / 用户消息正文用 [[anima:{id}]] 或 [[anima:{id}?component=…]] 引用实体。聊天室 Markdown 将其转为可点击 chip(首屏 #id,后台按 entity.get 异步补最多 10 字摘要:优先 title,否则 content),用户与助手气泡均渲染。点击调用 openEntityResource。URI 省略 component 时经 entity.get 解析 primary_component(任务 → task_item 浮层,语义记忆 → semantic_memory 浮层等;窄布局为底部 Sheet)。输入框键入 [[ 弹出实体选择器(user/agent 合并、不限种类),选中插入 [[anima:{id}]]。
LLM / Agent
Section titled “LLM / Agent”系统提示段 anima-uri-protocol:标记 = 任意实体的 entities.id(不限记忆)。解析:toolset_load(["entity"]) → entity_get({id}) → 按 primary_component(或 ?component=)再调领域工具。语义记忆引用义务仍由 memory-citation 约束(仅当回复使用了语义记忆时末尾追加)。
壳侧点击 chip:openEntityResource;有专用浮层(task_item / semantic_memory / calendar_event)用专用面板,否则 通用实体叠加层(GenericEntityOverlay:标题 / 摘要 / 正文 / 类型与组件等基础字段)。primary_component 缺失时仍打开通用浮层。