Skip to content

[Root] Frontstage TSX 代码区块作者平台:OpenAPI 源码、区块联动与运行工作台 #1393

Description

@JAVA-LW

2026-07-21 Superseding Delta:接口连接器仅做源码生成

本节是当前活动 contract;正文中所有 persisted binding、binding alias、已绑定接口、取消绑定、allowedInterfaces、按 alias dispatch 与 binding persistence 验收均被本节取代,不兼容旧 contract。

最终结果

Catalog detail
  → Studio 生成完整 DTO + 命名函数并插入当前光标
  → ctx.interfaces.call/stream({ interfaceId, schemaDigest }, request)
  → Worker/Host 透传 source descriptor
  → Backend 校验 Page/Tab 访问 + Catalog bindable/digest
  → 高风险 Draft Run 即时确认与一次性 grant
  → 原目标 route 权限 + JSON/media/SSE + trace
  • Page Document 不再保存或 round-trip block.interfaces;源码是作者调用真值,Capability Catalog 是 operation/schema/risk/media 真值。
  • 函数名只属于本地源码,不进入 Runtime/API identity。
  • Studio 删除已绑定接口、取消绑定、重新插入与绑定并插入;选择接口后按钮仅为插入代码,不调用 onSaveBlock,不改写 main。
  • Draft Run 第一次触发高风险 interface effect 时由 UI 确认一次;Host 即时查 Catalog,并为每次实际写调用签发、消费精确绑定 actor/workspace/page/tab/block/run/draft/interface/digest 的 grant。grant 不提升目标 API 权限。
  • Backend 继续独立验证 Page/Tab 访问;不读取 Document interfaces。旧 binding_alias body、unknown interface_id、stale digest 与 non-bindable 均 fail closed。

新增 Root AC

编号 可观察结果 负责 Delivery 状态
AC-020 call/stream 使用 interfaceId + schemaDigest 源码描述符;Worker、trace、API 使用同一 identity,无 alias allowlist #1396/#1399/#1400 green
AC-021 Studio 单击插入完整代码,不保存 binding;无已绑定/取消绑定 UI;main 不被改写 #1396 green
AC-022 Page Document 不输出 interfaces;旧字段不 round-trip;Backend 不解析 document binding #1396 green
AC-023 Page/Tab 访问、Catalog bindable/digest、目标 route ACL 保持;旧 body/unknown/stale/non-bindable 拒绝 #1396 green
AC-024 高风险 effect 每个 Draft Run 首次确认一次;每次写调用使用独立一次性 grant,replay/mismatch/expiry 拒绝且不提权 #1396 green
AC-025 JSON/204、binary/zip 与 SSE 均使用源码描述符,trace 记录 interface identity 并保留脱敏/取消/清理 #1396/#1399/#1400 green

Work Packet Ledger Delta

  • P18 / complete / Source-described callable contract:commit fa6bbec
  • P19 / complete / Runtime authorization and transport:commit fa6bbec
  • P20 / complete / Studio codegen-only:commit fa6bbec

集中 Test Batch Delta

  • Controlled negative:旧 binding_alias body、unknown interface_id、stale digest、non-bindable、grant replay/expiry/mismatch;Page Document 无 interfaces 可合法运行。
  • Green:JSON/204/status/error/host injection/401/403,binary envelope,SSE open/next/cancel/cleanup,trace 脱敏,三参数 codegen,connector 不调用 onSaveBlock,document 不输出 interfaces。
  • Regression:api-server canonical callable routes;page-runtime worker/mediator/bridge/draft-run;api-client;Frontstage codegen/Studio/document/restricted runtime/page-canvas/Draft Run;manifest types、targeted lint/typecheck;浏览器桌面与 390px。

当前 Control Ledger

  • 当前状态:DEV_ACCEPTED → AWAITING_USER_VISUAL_VERIFICATION。
  • protected baseline:beta@ef2a89b
  • local assembly:codex/issue-1393-codegen-only。
  • Scout:单一只读 Scout 完成,未修改文件、Issue、服务或测试。
  • Packet:P18/P19/P20 complete,assembly fa6bbec
  • Test Batch:page-runtime 214、api-client 164、Frontstage 59、api-server route 6 全绿;公共 protocol/runtime/api-client build 全绿。全 App build 与 i18n 仅剩 beta 既有无关基线错误。
  • 停止:必须解析源码或恢复持久 binding 才能授权;media/SSE 需要第二份持久映射;Page/Tab 访问无法独立保留;必须兼容旧 contract;发现真实用户 document 需要迁移。

Issue 元数据

  • 计划类型:Issue Tree
  • 树角色:Root(唯一计划、进度与用户验收真值)
  • 分级:grade:g3
  • 任务形态:hybrid-foundation
  • 当前阶段:phase:implementation
  • protected baseline:beta@0bef709c56ff9f6e561b107d45d68a5613489f77
  • assembly:codex/issue-1393-openapi-all@ea195c9d0/home/taichuy/git/1flowbase_git_workspace/issue-1393-openapi-all

当前最终结果

Frontstage TSX 作者平台继续使用已经集成的 BlockModule + main、类型化 ports/signals、Draft Run 与 Window Workspace。2026-07-21 用户批准以下 superseding delta:

Shared OpenAPI Capability Catalog
  = 全部静态 /api/console/** OpenAPI operations
  + 全部动态 /api/runtime/models/** CRUD operations
  • 2026-07-21 用户再次确认:不建设 Frontstage 私有 Callable Catalog;以 MCP Tools 已有 interface-capabilities 目录、DTO 与选择交互为基础,提升为 MCP / Frontstage 共享的 OpenAPI Capability Catalog。
  • MCP 和 Studio 共享相同能力目录构建、参数/返回 Schema、risk 与 bindable 判定,但通过各自权限入口消费:MCP 使用 mcp.catalog.view,Studio 使用 frontstage.page.design
  • 不再维护 Frontstage 业务接口白名单,也不按当前页面访问者的目标 API 权限过滤设计目录。
  • 能否绑定由 frontstage.page.design 与 Page Document 写权限决定。
  • 能否执行由运行时当前访问者进入原目标 route 后的 session/PAT、CSRF、Settings permission、workspace/resource/runtime ACL 决定。
  • 写操作单次 grant 只确认副作用,不授予目标 API 权限。
  • Agent Flow application-key、任意 URL/credential/DOM/storage/secret 仍为非目标。

OpenAPI 与协议 contract

  • OpenAPI operation/schema/media type 是目录、函数入参和返回值唯一真值;缺失时修后端 annotation,不由前端猜测。
  • JSON/no-content:Promise<T> / Promise<void>
  • multipart/octet-stream:受控 FileRef/BinaryResource envelope;Host 负责读取、编码、上限、取消和清理。
  • binary/zip response:保留 status/content_type/file_name/resource;大对象不进入 Signal 总线。
  • SSE:ctx.interfaces.stream<T>(alias, request): AsyncIterable<T>;Host 负责连接、背压、取消和 run/session 生命周期。
  • Capability Catalog 只负责发现和绑定真值;dispatch/write-grant 是运行边界,不拥有第二份目录。内部不可伪造 dispatch depth 防止无限递归。
  • 宿主只注入可证明的 workspace/page/tab/session 参数;源码不能覆盖。其余 path/query/header/body 保持原 OpenAPI 字段。

UI contract

  • Studio 复用 MCP Tools 的紧凑 searchable Select 交互;下拉项与选中值只显示 METHOD /path
  • 删除 name/risk/operation_id/path 重复摘要卡片。
  • name、operation_id、method、path、description 继续作为隐藏搜索字段。
  • 长路径单行省略并可查看完整值;risk 仅在写运行授权时展示。

Root 验收点账本

既有 AC-001~AC-011 的已集成行为继续作为回归,不恢复旧 defineBlock/query/action/Drawer contract。

编号 可观察结果 负责 Delivery 状态
AC-012 MCP 与 Studio 消费同一个 Shared OpenAPI Capability Catalog;静态 Console operation ID 集合一致且无 Frontstage 私有目录/业务白名单 #1396 pending
AC-013 每个 published Runtime Model 都发布 list/get/create/update/delete;执行权限由原 Runtime route 决定 #1396 pending
AC-014 catalog 与绑定配置要求 frontstage.page.design;grant 只确认副作用且不提升权限;dispatch 使用当前页面访问者会话进入目标 route,401/403 原样可观察 #1396 pending
AC-015 JSON、204、合法业务 header、host injection、schema/status/error 与递归 depth 均有真实 allow/deny fixture #1396 pending
AC-016 multipart、octet、binary 与 zip operation 可生成并执行受控资源函数 #1399 pending
AC-017 两条真实 Console SSE route 进入 OpenAPI/Callable,生成 AsyncIterable 并支持背压/取消/清理 #1400 pending
AC-018 Studio 使用 MCP Tools 式紧凑搜索选择器;目录与选中值只显示 METHOD /path,隐藏字段仍可搜索,390px 无横向溢出 #1396 pending
AC-019 生成、绑定、重开持久化、运行观测与当前光标插入在所有 protocol family 下保持一致 #1396/#1399/#1400 pending

Delivery Map

Delivery 纵向结果 状态
#1396 全量 Console/Runtime CRUD 目录、JSON/no-content 调用、代码生成与极简 selector implementation
#1399 multipart/octet/binary/zip 受控资源调用 implementation
#1400 SSE AsyncIterable 与生命周期 implementation
#1395 类型化 outputs/inputs 与 Tab/Page Signal integrated regression
#1394 Draft Run Console 与 Window Workspace integrated regression

Scout evidence

  • 唯一只读 Scout SCOUT_DONE;未修改文件、未运行测试。
  • ApiDoc::paths 中静态 Console operation:255 个唯一 ID、无重复;GET 110、POST 85、PUT 23、PATCH 15、DELETE 22。
  • response:229 JSON、24 no-content、2 binary/zip 缺准确 media schema。
  • request:98 JSON、1 octet;3 个真实 multipart handler 缺 requestBody OpenAPI。
  • 2 条真实 Console SSE route 尚未进入 ApiDoc::paths
  • 通用 dispatcher 已重新进入完整 console_router 并复制当前认证/CSRF headers,但当前只发送 JSON、只解析 JSON/no-content。
  • Dynamic Runtime Model 已能生成五 CRUD,但 Frontstage 再次硬过滤为 list/get。
  • MCP Tools 已通过 /api/console/mcp/interface-capabilities 消费静态 OpenAPI、动态 Runtime Model CRUD、parameter/result schema、risk/bindable,并已有 METHOD path searchable Select;缺口是该通用目录仍由 MCP 私有 owner 承载。
  • Callable catalog 由 design permission 保护;dispatch/grant 刻意不要求访问者拥有设计权限,目标 route 仍负责当前访问者的 ACL / CSRF;递归由内部 depth 限制。

Work Packet Ledger

  • P12 / ready / OpenAPI protocol truth:补齐 multipart/binary/zip/SSE annotation 与唯一 inventory fixture。Owned:相关 route annotation、openapi/mod.rsopenapi_docs.rs、route-doc tests。Stop if:必须改变公开 route/认证。
  • P13 / active / Shared Capability Catalog:把 MCP 私有 interface-capabilities 构建提升到共享 OpenAPI owner;MCP 与 Frontstage 使用同一 DTO/Schema/risk/bindable 真值,保留各自权限入口并排除 Published Workflow。Owned:openapi_interface/catalog*、MCP/Frontstage capability routes、backend fixtures。
  • P14 / pending P13 / Unary dispatcher:JSON/no-content/status/error/schema/CSRF 与原 route permission。Owned:openapi_interface/dispatcher*、canonical integration tests。
  • P15 / pending P12-P14 / Controlled media:multipart/octet/binary/zip media envelope 和真实 fixtures。Owned:backend dispatcher/protocol、api-client/page protocol/runtime/codegen 最近路径。
  • P16 / pending P14 / Full codegen and selector:全量 DTO/codegen、METHOD+path UI、binding persistence 与 390px。Owned:frontstage api-client/jsx-studio 最近路径。
  • P17 / pending P12-P14 / SSE stream:OpenAPI stream metadata、backend stream bridge、Page Runtime stream effect/cancel/backpressure、codegen 与 fixtures。

各 Packet 同时提交指定 fixture,但不逐包 QA;Root 全部装配后冻结一次 assembly。

集中 Test Batch

  • Backend:route-doc inventory/authenticity;canonical Frontstage catalog/dispatch/write-grant;runtime model CRUD;JSON/204/multipart/octet/binary/zip/SSE allow/deny、schema、CSRF、permission、recursive depth。
  • Protocol/runtime:interface call/stream effect、FileRef/BinaryResource、bounded queue、cancel/run cleanup、source policy 与 [Root] Frontstage 代码区块浏览器运行时编排与加载体验 #1382 regression。
  • Frontend:api-client、page protocol/runtime、page document/binding/codegen/editor projection、selector/search/persistence、Draft Run interface observations。
  • Source integration:相关 Rust fmt/targeted Cargo(同一时刻一个);一个 frontend targeted batch、单文件 lint、typecheck、i18n-hygiene。
  • Browser:冻结 assembly 独立端口;桌面与 390px 验证 JSON read/write、文件、binary、SSE、METHOD+path、权限拒绝与无 page error/overflow。
  • workspace clippy/full backend/coverage 延后 CI;产物写入 tmp/test-governance/

Control Ledger

  • 当前状态:REFRAME_APPROVED → BUILD_BATCH
  • 当前 Packet:P13 shared capability refactor。
  • assembled commits:32d6bd9ab4e62cbc7ad0ec67b8c8eab75455ea195c9d0;其中 Frontstage 私有 catalog 部分待在本 Packet 中移除。
  • 活动 agent:none;Scout 已结束。
  • 重型进程:none。
  • 下一状态事件:P13 shared refactor committed,然后装配 Studio MCP-style selector 与重新冻结 Test Batch。
  • Observation counters:packets=7、needs_split=0、assembly_conflicts=0、agent_contexts=4、validation_runs=1、qa_cycles=1。

停止与重构条件

  • 必须开放任意 URL/credential/DOM/secret 或改变 Agent Flow application-key 边界。
  • media/schema 只能由前端猜测;或 stream 无法绑定既有 run/session owner。
  • 需要改变 [Root] Frontstage 代码区块浏览器运行时编排与加载体验 #1382 Worker budget/lifecycle、Page Signal 持久化或真实用户数据。
  • Packet 无法声明单一结果/owned write set,或同一根因集中 QA 第二次失败。

生命周期

执行顺序:One Read-only Scout → Packetize All → Build All → Freeze Assembly → One Fresh QA → User Acceptance。

Root 一次批准已覆盖 #1396#1399#1400;不逐 Delivery 重复请求用户批准。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:apiPublic API or protocol contract workarea:backendBackend API, service, repository, or runtime workarea:frontendFrontend UI or interaction workarea:runtimeRuntime and execution behaviorcontractContract or API semantics changegrade:g3Cross-domain decision or implementation workneeds-backendNeeds backend workneeds-frontendNeeds frontend workneeds-qaNeeds QA or acceptance validationparent-issueParent tracking issuephase:implementationImplementation in progressplan:treeLong plan with one Root and vertical Delivery issuespriority:p1High priorityrisk:highHigh risk if implemented incorrectlysize:lLarge implementation and review sizetype:featureFeature or new capability

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions