跳转至

P6 p6-v1 契约与生产基线

状态:P6-0 已完成,作为 P6-1 及以后实现的冻结输入

更新时间:2026-08-18

基线事实

本记录只描述 P6-0 的只读盘点与备份结果,不宣称 P6 应用功能已经上线。

  • Runtime 容器健康;当前运行镜像 image ID 为 sha256:cb3e420e741d2946987ddddc512b400e0294aa3d130c8105025900385f136e5d
  • 回滚标签 ghcr.io/michaellab7284/agentmeshos-ai-runtime:rollback 存在,image ID 为 sha256:cdda586121aa540c3107e48d0228c6332837087e5a9cbf0bda2be3b449b8767c
  • 生产 SQLite 为 /var/lib/agentmeshos/ai-runtime/runtime.db,权限 0600。P6-0 前一致性备份为 /var/lib/agentmeshos/ai-runtime/backups/runtime-pre-p6-schema-20260817T172321Z.db,SHA-256 为 258840338301564580ac7e0520a3e0fa90fc56f259468bdb9d5d35633580bae7,原库与备份 PRAGMA quick_check 均为 ok
  • 当前库仅包含 P1-P5 表,不存在 application_* 表或应用注册记录。P6-1 必须增量建表,不能重写已有表。

实现依据与兼容边界

现有实现 P6 复用方式 禁止事项
Store.initialize() 同一 SQLite 初始化事务中的 CREATE TABLE IF NOT EXISTS、列存在性检查、CREATE INDEX IF NOT EXISTS 第二数据库、破坏性迁移、P1-P5 回填
/boss/v1require_boss 所有应用读写沿用管理员认证与 Pydantic 校验 匿名写入和第二控制面
P5 动作请求表 应用动作按归属、动作、请求键保存可重放结果 浏览器缓存作为幂等事实
Console openConsoleModal() 启停、取消、重跑统一使用居中自定义弹窗 alertpromptconfirm
StorageAdapter / Cloudreve Adapter 后续文件引用只经 cloud.yohan.fun HTTPS 的主节点受控读取 Console API、Worker、SSH、Tailnet、Nomad 或共享路径传业务文件字节

P6 不改变 OmniRoute 对 Provider/模型路由/额度/健康的权威,不建立应用私有 Token 池。unlimited 没有 Runtime 隐藏限制。Nomad 仍是唯一调度器;P6-1 不创建模型调用、Worker、Nomad Job 或自动启用的应用。

p6-v1 Manifest 与能力目录

首版 Manifest 是代码内置、只读、版本化声明。注册时 Runtime 分配永不复用的 application_id;稳定 application_key 只能标识同一发布应用。

字段 冻结值或约束
application_key local-review
manifest_schema_version / application_version p6-v1;每次运行冻结摘要与 SHA-256
input_types text/plaintext/markdownapplication/jsonapplication/pdf;P6-1 只登记,不解析文件
data_classifications publicprivate;默认 private,不允许跨应用读取
capability_ids local-text-extract/v1local-json-validate/v1local-pdf-text-extract/v1local-review-result-check/v1
tool_allowlist runtime.local_review;P6-1 不执行
result_contract local-review-result-v1;P6-1 不生成结果

未登记能力、动态 Manifest、外部网络来源、文件字节上传、任意命令、Provider/网络/系统操作必须拒绝。

增量迁移设计

P6-1 在 Store.initialize() 中以可重复 DDL 创建下列表,使用现有 JSON 文本、Unix 秒时间戳和 UUID 风格 ID。平台对象维持松耦合关联,避免重写旧表或错误级联删除。

主键和关键约束 保留边界
application_registrations application_id 主键;application_key 唯一;version 乐观锁;状态 disabled/enabled/maintenance/error 停用只改状态,历史可读
application_runs application_run_id 主键;application_id;状态;request_fingerprintrerun_of_run_id 重跑必建新行,不重放模型调用
application_inputs input_id 主键;application_run_id;仅文本摘要或已登记文件引用、哈希、大小 不存文件字节、路径或凭据
application_results result_id 主键;application_run_idresult_version 唯一;JSON 不超过 1 MiB 旧结果只追加
application_object_links (application_run_id, object_type, object_id, relation) 唯一 仅关联现有平台对象
application_action_requests (application_id, application_run_id, action, client_request_id) 主键;含请求指纹 同键同指纹重放,异体冲突
application_events event_id 主键,按运行和时间索引 追加式人类摘要和安全引用

迁移验收必须覆盖旧 SQLite、空库、二次初始化、非法 Manifest、非法状态、重复键冲突、P1-P5 表计数和 quick_check。回滚版本不删除新表,只关闭写入口。

API 草案

所有端点位于 /boss/v1,使用 X-AgentMeshOS-Boss-Key 管理员认证。写请求必须带当前 version(状态变更)和符合现有规则的 client_request_id。P6-2 将把错误规范化为 {code, message, next_step, error_id},不得用笼统 409 掩盖原因。

openapi: 3.1.0
info: {title: AgentMeshOS P6 Application API, version: p6-v1-draft}
paths:
  /boss/v1/applications: {get: {summary: 读取应用列表}}
  /boss/v1/applications/{application_id}: {get: {summary: 读取安全 Manifest 摘要与状态}}
  /boss/v1/applications/{application_id}/enable: {post: {summary: 启用应用}}
  /boss/v1/applications/{application_id}/disable: {post: {summary: 停用应用但保留历史}}
  /boss/v1/applications/{application_id}/runs: {get: {summary: 范围内运行历史}, post: {summary: 创建受限输入运行}}
  /boss/v1/applications/{application_id}/runs/{application_run_id}: {get: {summary: 读取人类结果与下一步}}
  /boss/v1/applications/{application_id}/runs/{application_run_id}/cancel: {post: {summary: 取消当前运行}}
  /boss/v1/applications/{application_id}/runs/{application_run_id}/rerun: {post: {summary: 创建新的受控重跑}}

夹具、开关与出口

  • Runtime 夹具沿用 tmp_path / "runtime.db"TestClient(create_app(...));新增 test_p6_applications_store.pytest_p6_applications_api.py
  • Console 夹具沿用 browser-contract.cjs,必须覆盖应用 A/B 隔离、晚到响应、自定义弹窗和 390x844 无横向溢出。
  • 新开关为 AI_RUNTIME_P6_APPLICATIONS_ENABLEDAI_RUNTIME_P6_APPLICATION_CENTER_ENABLED,默认 false;前者关闭时写入口返回明确 503,后者关闭时隐藏 Console 入口,均不删除历史。

P6-0 已完成。当前只进入 P6-1:实现增量 Store 和默认停用的内置注册表。