OpenParable
Skip to content
← Back to skills

yokiframe-command-bridge

Testing & Quality

通过 YokiFrame 文件命令桥查询和调试框架 Kit 状态、snapshot、命令响应、文件桥健康、Unity/Godot engine registry、TableKit/Luban 环境、GraphKit 编辑器产物边界,以及 System、Architecture、FsmKit、EventKit、PoolKit、LogKit、ResKit、SingletonKit、ManagedRuntimeKit、ActionKit、AudioKit、SaveKit、LocalizationKit、SceneKit、SpatialKit、UIKit 的命令桥入口。

View on GitHub ↗
QUICK START

How to use this skill

Bring this guide into your coding agent with a prompt tailored to the tool you use.

  1. Open your project in Codex.
  2. Copy and paste the prompt below.
  3. Review files and risks before approving any action.
Prompt to paste
Inspect the Agent Skill at https://github.com/HinataYoki/YokiFrame/blob/HEAD/Core/Editor/Skills/yokiframe-command-bridge/SKILL.md and all supporting files. Report provenance, permissions, scripts, dependencies, and security risks. Propose an exact installation into .agents/skills/yokiframe-command-bridge, but wait for my approval before writing files or running scripts.

Copying this prompt does not install or run the skill. Review third-party files before use.

YokiFrame CommandBridge - AI 文件命令桥

CommandBridge 使用 .yokiframe/ 文件 I/O 协议。AI 或 Tauri 写入命令 JSON,Unity/Godot Adapter 轮询处理,结果写入 JSON 响应文件。不要使用 WebSocket、TCP、Named Pipes 或 Unity MCP 替代框架状态查询。

快速流程

  1. 从 .yokiframe/engines/<engineId>/engine.json 发现在线引擎;Unity Editor 通常是 unity-editor。
  2. 查询当前状态优先读 snapshot:
.yokiframe/engines/<engineId>/snapshots/<Kit>/state.json
  1. 只有需要请求响应、详情、历史、显式操作、monitor 控制或 snapshot 缺失/过期时才发送命令。
  2. 原子写入命令:
.yokiframe/engines/<engineId>/commands/<requestId>.json
  1. 读取响应:
.yokiframe/engines/<engineId>/results/<requestId>-response.json
  1. 超时时先发送 System/bridge_status,再看 engine-scoped commands/processing、commands/deadletter 和 response 的 error.code。

当前命令/响应不再走 root .yokiframe/commands 或 .yokiframe/results fallback;没有可用 engine registry 时应报告连接错误,而不是写 root 命令。

命令 Envelope

requestId、engineId、source、kit、action 必须是 1-128 位安全 ASCII 标识符,只允许字母、数字、.、_、-;禁止 ., ..、空格、路径分隔符、冒号、引号和 Unicode。

{
  "protocolVersion": 2,
  "engineId": "unity-editor",
  "source": "codex",
  "createdAtUtc": "2026-06-24T00:00:00Z",
  "requestId": "codex-system-ping-001",
  "kit": "System",
  "action": "ping",
  "payload": {}
}

写入时先写 <requestId>.json.tmp,UTF-8 flush/close 后 rename 成 <requestId>.json。Windows 上读取响应时,如果文件已出现但仍被 Unity 短暂占用,应延迟几十毫秒重试。

当前覆盖

2026-06-24 Play Mode 命令桥验证覆盖:

System, Architecture, FsmKit, EventKit, PoolKit, LogKit, ResKit, SingletonKit,
ManagedRuntimeKit, ActionKit, AudioKit, SaveKit, LocalizationKit, SceneKit, SpatialKit, UIKit

已验证 snapshot:

FsmKit, EventKit, PoolKit, ResKit, SingletonKit, AudioKit, LogKit,
SaveKit, LocalizationKit, SceneKit, SpatialKit, UIKit, ActionKit

TableKit 和 GraphKit 是 Tauri 编辑器工具流,不是 Runtime command handler;AI 只读 engine.json 的 optional dependency、Tauri 页面状态和项目生成目录,不发送 TableKit/*、GraphKit/* 命令,不读取 TableKit/state 或 GraphKit/state。

命令速查

KitActionsSnapshot
Systemping, status, bridge_status, list_commands, open_code_location-
Architecturestats, get_workbench_snapshot, list_architectures, get_architecture_detail-
FsmKitlist_all, get_state, get_history, get_state_events, get_workbench_snapshotFsmKit/state
EventKitlist_registrations, get_workbench_snapshot, get_event, get_recent_events, fire_event, monitor_startEventKit/state
PoolKitstats, get_workbench_snapshot, list_pools, get_pool_detail, get_event_history, set_tracking, clear_history, check_leakPoolKit/state
LogKitstats, get_settings, set_settings, reset_settings, get_history, get_workbench_snapshot, clear_history, open_log_folder, decrypt_log_file, read_log_fileLogKit/state
ResKitstats, get_workbench_snapshot, list_resources, get_resource_detail, diagnose_resource, get_unload_history, clear_history, set_trackingResKit/state
SingletonKitstats, get_workbench_snapshot, list_singletons, get_singleton_detailSingletonKit/state
ManagedRuntimeKitget_workbench_snapshot, list_backends, validate, select_backend, run_action, get_backend_settings, save_backend_settings-
ActionKitstats, get_workbench_snapshot, set_stack_trace, clear_stack_traceActionKit/state
AudioKitstats, list_voices, list_buses, get_history, get_workbench_snapshot, clear_history, stop_voice, stop_all, stop_bus, set_master_volume, set_bus_volume, mute_master, mute_busAudioKit/state
SaveKitstats, list_slots, get_workbench_snapshot, delete_slot, disable_auto_saveSaveKit/state
LocalizationKitstats, list_languages, get_workbench_snapshot, set_languageLocalizationKit/state
SceneKitstats, list_scenes, get_workbench_snapshot, unload_sceneSceneKit/state
SpatialKitstats, list_indexes, get_workbench_snapshotSpatialKit/state
UIKitstats, list_panels, list_stacks, get_workbench_snapshot, get_editor_tool_state, save_editor_tool_settings, create_panel_prefab, generate_code_for_selection, add_bind_to_selection, remove_bind_from_selection, get_ui_root_settings, save_ui_root_settings, reset_ui_root_settingsUIKit/state

Kit 调试入口

  • Architecture:get_workbench_snapshot 看架构/模型/系统/服务总览,get_architecture_detail 使用 list_architectures 返回的 fullName。
  • FsmKit:优先 FsmKit/state,单 FSM payload 使用 {"fsmName":"PlayerFSM"}。
  • EventKit:优先 get_workbench_snapshot;get_event 可用 {"channel":"Type","eventKey":"PlayerSpawnedEvent"};fire_event 是运行时变更命令。
  • PoolKit:优先 PoolKit/state;set_tracking payload 为 {"trackingEnabled":true,"eventHistoryEnabled":true,"stackTraceEnabled":false};check_leak 只是仍借出对象候选。
  • LogKit:优先 LogKit/state、stats、get_settings、get_history;Unity Editor 额外支持 open_log_folder、decrypt_log_file、read_log_file。
  • ResKit:单资源 payload 使用 {"path":"Configs/GameConfig","typeName":"MyConfig"};set_tracking 使用 {"loadLocationTrackingEnabled":true}。
  • SingletonKit:详情 payload 使用 {"fullName":"..."} 或 {"typeName":"..."};只显示已登记实例。
  • ManagedRuntimeKit:get_workbench_snapshot 返回当前后端、后端列表、工作流动作和可选后端设置;get_backend_settings/save_backend_settings 读写宿主后端暴露的设置 JSON,例如 Unity LeanCLR 的 ProjectSettings/LeanCLR.asset;run_action 使用 {"backendId":"LeanCLR","actionId":"enable_backend","payload":{"confirmed":true}} 这类 payload。Unity LeanCLR 的 IL2CPP 安装、Player Build 等变更型动作必须有明确用户确认;Godot 通过自己的后端暴露同名动作槽位,不套用 Unity IL2CPP 替换流程。
  • ActionKit:set_stack_trace 使用 {"enabled":true},默认关闭,排查后用 clear_stack_trace。
  • AudioKit:停止、音量和静音命令会改变运行时状态,只在用户明确要求或测试场景中执行。
  • SaveKit:delete_slot 和 disable_auto_save 是维护命令;存档业务 payload 不通过文件桥暴露。
  • LocalizationKit:set_language 使用 {"language":"English"} 或 {"languageId":2},只在用户要求切换语言时执行。
  • SceneKit:unload_scene 使用 {"sceneName":"Menu"} 或 {"name":"Menu"},只在用户要求维护场景时执行。
  • SpatialKit:命令桥只读,不通过 .yokiframe 插入、更新、删除或查询实体。
  • UIKit:运行时只读;Unity Editor 工具命令需要明确用户意图。save_editor_tool_settings 保存当前项目的 Prefab/脚本目录、命名空间、程序集和代码模板,供工作台、Inspector 和快捷菜单共用;Prefab/Bind 命令依赖当前 Selection;UIRoot settings 命令读写 Assets/Settings/Resources/UIKitSettings.asset,保存后在下一次 UIRoot 初始化时生效。

TableKit / GraphKit / Luban

TableKit 是 Luban 配置表 Tauri 编辑器流程,不是 Runtime Kit。排查时读取:

.yokiframe/engines/<engineId>/engine.json

关注:

{
  "optionalDependencies": {
    "luban": {
      "available": true,
      "define": "YOKIFRAME_LUBAN_SUPPORT"
    }
  }
}

若可用,再检查项目配置代码输出目录,通常是 Assets/Scripts/TableKit/,是否存在 Luban 生成代码和 TableKit.cs。运行时找不到表时继续检查数据输出目录、RuntimePathPattern 和 ResKit Provider。

GraphKit 是 Tauri 图编辑页面,不是 Runtime Kit。它编辑 graph project、node types、ports、fields、blackboard、placemats、notes、edges、subgraph/portal,并导出:

Luban Definition XML
Luban Data XML
GraphRuntime contract JSON

排查 GraphKit 时看 Tauri GraphKit 页面、导出的 XML/contract、TableKit 生成产物和项目侧 graph runtime/handler 代码。不要发送 GraphKit/* 命令。

压力测试与验证

项目验证脚本:

powershell -ExecutionPolicy Bypass -File .\.aibridge\scripts\run-command-bridge-validation.ps1 -SkipCompile -WarmupSeconds 8 -StressCommandCount 300

报告路径:

.yokiframe/tests/command-bridge-validation-report.json

健康压力结果应满足 pending/processing 为 0、deadletter 为 0、没有 BridgeBusy、没有 payload/result size failure、没有持续 backpressure。

安全规则

  • 命令/响应文件是可靠控制面,不是高频运行时数据总线。
  • UI 当前状态优先 telemetry/snapshot,不要高频 send_command。
  • TableKit/GraphKit 问题优先看 Tauri 页面与生成产物,不走 runtime command。
  • 不手动删除 processing、archive、deadletter 或 results,除非用户明确要求恢复/清理。
  • 变更型命令必须有明确用户意图或隔离测试场景。
  • 路径、registry 或协议字段异常时,停止并检查 System/bridge_status 与 engine registry。