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/v1 与 require_boss |
所有应用读写沿用管理员认证与 Pydantic 校验 | 匿名写入和第二控制面 |
| P5 动作请求表 | 应用动作按归属、动作、请求键保存可重放结果 | 浏览器缓存作为幂等事实 |
Console openConsoleModal() |
启停、取消、重跑统一使用居中自定义弹窗 | alert、prompt、confirm |
| 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/plain、text/markdown、application/json、application/pdf;P6-1 只登记,不解析文件 |
data_classifications |
public、private;默认 private,不允许跨应用读取 |
capability_ids |
local-text-extract/v1、local-json-validate/v1、local-pdf-text-extract/v1、local-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_fingerprint;rerun_of_run_id |
重跑必建新行,不重放模型调用 |
application_inputs |
input_id 主键;application_run_id;仅文本摘要或已登记文件引用、哈希、大小 |
不存文件字节、路径或凭据 |
application_results |
result_id 主键;application_run_id;result_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.py和test_p6_applications_api.py。 - Console 夹具沿用
browser-contract.cjs,必须覆盖应用 A/B 隔离、晚到响应、自定义弹窗和390x844无横向溢出。 - 新开关为
AI_RUNTIME_P6_APPLICATIONS_ENABLED与AI_RUNTIME_P6_APPLICATION_CENTER_ENABLED,默认false;前者关闭时写入口返回明确503,后者关闭时隐藏 Console 入口,均不删除历史。
P6-0 已完成。当前只进入 P6-1:实现增量 Store 和默认停用的内置注册表。