手册 / 约定与参考

约定与参考

v2.15.0

UX 视觉风格、实体 URL / channel 约定、org-scoped 编号、Worker Discovery、ID 格式 —— 开发与使用中需要了解的跨切约定汇总。

§ 1 UX 约定

Web Console 遵循 Swiss Minimalist Style(瑞士极简主义)设计体系,以功能性、高对比度与大量留白为核心特征。所有组件设计满足 WCAG AAA 无障碍标准。

Grid 布局

字体层级

类型层级通过 size + weight + spacing 区分,不依赖颜色来表达层级关系:

用途字体大小 (rem)字重
页面标题 (h1)Space Grotesk1.5700
页面副标题Space Grotesk1.25600
区段标签DM Sans1.125500
正文 / 表格DM Sans0.875400
代码 / ID / 时间戳JetBrains Mono0.75 – 0.875400

数据列(侧栏计数 badge、fleet 指标、时间戳等)使用 font-variant-numeric: tabular-nums 保证数字等宽对齐。

Dark Mode

默认 light mode,dark mode 通过 <html class="dark"> 切换。全部颜色以 CSS 自定义属性(semantic token)表达,dark mode 只需翻转一组变量值。Dark mode 使用降饱和色调(desaturated tonal variants),而非简单反色。

交互 / 反模式

§ 2 实体 URL / Channel 约定

ownerRef 格式

每个 Conversation 通过 owner_ref 字段关联到其拥有者(owning object),格式为 URI 字符串:

Conversation kindownerRef 格式说明
taskpm://tasks/{task_id}Task 1:1 绑定
issuepm://issues/{issue_id}Issue 1:1 绑定
planpm://plans/{plan_id}Plan 1:1 绑定
channelid://organizations/{org_id}Channel 归属 Org
dm(空)DM 无 ownerRef
跨 BC 弱引用:ownerRef 是 Conversation BC 对 ProjectManager / Identity BC 对象的软引用(soft constraint),不声明 FK。Channel 可额外携带一个 nullable project_ref 软标签,仅作分组用途,不代表归属关系。

Conversation Kind 一览(6 种)

kind场景创建时机
channel用户建立的话题频道(业务一等公民)用户主动创建;name 全局唯一
dm用户与 supervisor / agent 的一对一私信用户开 DM 或 supervisor 主动 push 时懒创建
taskTask 专属消息时间线Task 创建时同事务建
issueIssue 专属议事时间线Issue 创建时同事务建
adhoc短期一次性对话系统触发,TTL 默认 24h
notification系统通知 / 周期 reviewSupervisor 发起,通常单向

URL Deeplink 格式

前端路由采用 org-scoped 路径,所有 org-scoped 资源都显式挂在 org slug 下:

/{org-slug}/tasks                      # 任务列表
/{org-slug}/tasks/{task-id}            # 任务详情
/{org-slug}/issues                     # 议题列表
/{org-slug}/issues/{issue-id}          # 议题详情
/{org-slug}/plans/{plan-id}            # Plan 详情
/organizations/{org-slug}/projects/... # 项目相关页面
无隐含状态原则:API 与前端路由中 org 上下文必须显式体现在路径中(/api/orgs/{slug}/...),不依赖 session / query 参数推断当前 org。

§ 3 T<n> / I<n> Org-scoped 引用

Task 和 Issue 在组织内拥有递增的 org-scoped 序号,用于人类友好引用:

实体引用格式示例
TaskT<n>T1, T2, T84, T245
IssueI<n>I1, I2, I19, I456
PlanP<n>P1, P42

实现机制

与内部 ID 的关系

T<n> / I<n> 是用户面 / 业务面的引用,底层实体主键仍是 ULID。两者映射存储在 DB 中:

# 用户看到的(UI / API / 面包屑 / @mention)
T84 — org-scoped 人类友好引用

# 内部存储(DB 主键、跨 BC 引用、文件系统布局)
01JEXAMPLE0000000000000000 — ULID
判据:终端用户会看到它吗?会 → 用 T<n> / I<n>(org_ref)。只有运维读 ~/.agent-center 才看到 → ULID 亦可。

§ 4 Discovery

Worker 支持项目自动发现机制,通过 WorkerDiscovery 配置驱动:

配置结构

{
  "scan_paths":    ["/home/user/projects", "/opt/repos"],
  "exclude":       ["node_modules", ".git", "vendor"],
  "scan_interval": "1h"
}
字段类型说明
scan_pathsstring[]Worker 扫描的本地目录列表,寻找项目仓库
excludestring[]排除的目录名 / 模式
scan_intervalstring扫描周期,duration 格式(默认 "1h"

Project Mapping 机制

配置入口:通过 CLI agent-center worker config set 或 Web Console → Environment → Worker 详情页修改 discovery / concurrency 参数。

§ 5 ID 格式

ULID 主键

所有实体主键使用应用层生成的 ULID(Universally Unique Lexicographically Sortable Identifier),不使用数据库自增主键。ULID 兼具全局唯一性与按时间排序能力。

01JEXAMPLE0000000000000000
└──────────┘└────────────┘
  timestamp     random

ID 分层:业务面 vs 内部面

使用 ID出现位置
业务 / 用户可见member-idagent-<8hex>,Phabricator 式 hash)UI、REST API、@mention token、ref token
内部 / 运维ULIDDB 主键列、worker 文件系统布局、跨 BC 引用

member-id ↔ ULID 的映射存储在 DB 中;UI / REST API / @mention / ref token 一律不暴露 ULID

IdentityRef 值对象

身份引用(identity reference)采用 kind-prefixed 格式,必须携带类型前缀:

格式说明示例
user:<id>人类用户user:hayang
agent:<id>Agent 实例agent:01JXYZ...
system系统自身system
校验规则:IdentityRef 必须为 system 或以 user: / agent: 开头且非空。裸 ID(不带前缀)会被 Validate() 拒绝。每个产出 identity-ref 的 tool / DTO 必须输出完整可消费形态(含前缀),消费端不应自行拼接前缀。

实体 ID vs 身份 ID

两者的引用规则不同

← 返回手册首页