test-msw-vfs-cli
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMSW 에셋 CLI 래퍼 — @choigawoon/msw-vfs-cli
@choigawoon/msw-vfs-cliMSW资产CLI封装工具 — @choigawoon/msw-vfs-cli
@choigawoon/msw-vfs-cli.map.ui.gamelogic.modelworld.yaml@choigawoon/msw-vfs-cli@0.5.3npx通过这一单一CLI工具,即可完成对////文件的读取、浏览、编辑和转换操作。由于通过调用,无需本地安装——首次调用时npm会自动缓存该工具。
@choigawoon/msw-vfs-cli@0.5.3.map.ui.gamelogic.modelworld.yamlnpx버전 핀 — 한 곳에서 관리
版本锁定 — 统一管理
- Pin:
@choigawoon/msw-vfs-cli@0.5.3 - Sources of truth (셋 다 일치해야 함):
- 이 파일 상단의 버전 표기
- 의
scripts/msw-vfs.js상수PKG - 의
scripts/msw-vfs-batch.js상수PKG
- 동일한 CLI 버전이 뷰어(의
packages/viewer/src/lib/vfs.ts) 에서도 요구된다. 스킬·CLI·뷰어 셋 모두 같은 마이너(REQUIRED_CLI_VERSION) 안에서 움직여야^0.5.0/read-entity같은 L2 호출과 데몬 session recorder 가 맞물린다.edit-component
- 锁定版本:
@choigawoon/msw-vfs-cli@0.5.3 - 唯一可信来源(三者必须保持一致):
- 本文件顶部标注的版本
- 中的
scripts/msw-vfs.js常量PKG - 中的
scripts/msw-vfs-batch.js常量PKG
- 查看器(中的
packages/viewer/src/lib/vfs.ts)也要求使用相同的CLI版本。技能、CLI、查看器三者必须在同一个次要版本(REQUIRED_CLI_VERSION)范围内运行,才能确保^0.5.0/read-entity等L2调用与守护进程session recorder正常协同工作。edit-component
AI 호출 가시성 — --ai
플래그
--aiAI调用可见性 — --ai
参数
--ai단발 래퍼 는 매 호출에 를 자동으로 붙인다 (CLI 0.5.3+ 의 client-identity 플래그). 의미:
scripts/msw-vfs.js--ai- 데몬이 살아 있으면 호출이 에 자동 기록됨.
~/.msw-vfs/sessions/s_<ts>_<id>.jsonl - 동일 데몬에 붙은 뷰어 () 의 Activity 패널에 실시간으로 뜸 (client 뱃지 =
@choigawoon/msw-vfs-viewer).ai - 데몬이 없으면 로컬 fallback — 동작은 그대로, 기록만 안 됨.
배치 래퍼 () 는 예외: 서브커맨드가 in-process 파이프라 데몬 를 거치지 않는다. 따라서 batch 호출은 recorder 가시성이 없다 — 기록이 필요하면 단발 래퍼를 쓴다. (동시에 캐시 효과는 단발도 데몬 위에서 동등하게 누림.)
scripts/msw-vfs-batch.jsserve/rpc单次调用封装脚本会自动为每次调用添加****参数(CLI 0.5.3+新增的客户端身份标识参数)。其作用如下:
scripts/msw-vfs.js--ai- 如果守护进程正在运行,调用记录会自动保存到中。
~/.msw-vfs/sessions/s_<ts>_<id>.jsonl - 连接到同一守护进程的查看器()的Activity面板会实时显示该调用(客户端标识为
@choigawoon/msw-vfs-viewer)。ai - 如果守护进程未运行,则会启用本地回退机制——功能正常运行,但不会生成调用记录。
批量调用封装脚本()例外: 子命令通过进程内管道运行,不经过守护进程的接口。因此批量调用不会被记录器追踪——如果需要记录,请使用单次调用封装脚本。(同时,单次调用和批量调用在守护进程上的缓存效果一致。)
scripts/msw-vfs-batch.jsserve/rpc실행 방식 — 에이전트 위임
执行方式 — 委托给Agent
이 스킬이 트리거되면 직접 CLI 를 실행하지 말고, 에이전트에 위임한다.
msw-blob-vfs-readerAgent(
subagent_type="msw-devtools:msw-blob-vfs-reader",
description="맵/UI 분석",
prompt="<사용자 요청 + 대상 파일 경로를 포함한 구체적 지시>"
)이유: / 출력은 대량이며 메인 컨텍스트를 오염시킨다. 에이전트가 sonnet 모델로 분석 후 요약만 돌려주므로 컨텍스트 효율이 높다.
.map.ui예외 — 에이전트 위임 없이 직접 실행하는 경우:
- 사용자가 명시적으로 "여기서 직접 해줘"라고 요청한 경우
- 분석 결과를 바탕으로 즉시 편집 작업이 이어지는 경우 (편집 컨텍스트가 필요)
当触发本技能时,请勿直接执行CLI,而是委托给 Agent。
msw-blob-vfs-readerAgent(
subagent_type="msw-devtools:msw-blob-vfs-reader",
description="地图/UI分析",
prompt="<包含用户请求及目标文件路径的具体指令>"
)原因: /文件的输出内容量大,会污染主上下文。Agent会通过sonnet模型进行分析后仅返回摘要,从而提升上下文使用效率。
.map.ui例外情况 — 无需委托Agent直接执行的场景:
- 用户明确要求“直接在这里处理”时
- 需要基于分析结果立即执行编辑操作时(需要保留编辑上下文)
기본 호출 — 단발 (1 쿼리)
基础调用 — 单次(1个查询)
bash
node <plugin>/skills/test-msw-vfs-cli/scripts/msw-vfs.js <file> <subcmd> [args...]- 래퍼가 로 실행 — 별도 설치 불필요.
npx -y @choigawoon/msw-vfs-cli@0.5.3 - stdio 는 pass-through. 출력은 CLI 가 직접 쓰는 포맷(text + JSON 혼합).
- 은
<file>/.map/.ui/.gamelogic중 하나. YAML/world 모드는.model선행 필요.--type
bash
node <plugin>/skills/test-msw-vfs-cli/scripts/msw-vfs.js <file> <subcmd> [args...]- 封装脚本会通过执行——无需单独安装。
npx -y @choigawoon/msw-vfs-cli@0.5.3 - 标准输入输出直接传递,输出格式为CLI原生格式(文本+JSON混合)。
- 为
<file>/.map/.ui/.gamelogic中的一种。若为YAML/world模式,需先添加.model参数。--type
배치 호출 — N 쿼리 (serve)
批量调用 — N个查询(serve)
동일 파일에 여러 쿼리를 던질 때 파이프를 쓰면 Node 콜드 스타트 + JSON 파싱 비용이 한 번으로 상각된다.
servebash
undefined当对同一文件执行多个查询时,使用管道可避免多次Node冷启动和JSON解析的开销。
servebash
undefined파일로부터
从文件读取
node <plugin>/skills/test-msw-vfs-cli/scripts/msw-vfs-batch.js queries.jsonl
node <plugin>/skills/test-msw-vfs-cli/scripts/msw-vfs-batch.js queries.jsonl
stdin
从标准输入读取
cat queries.jsonl | node <plugin>/skills/test-msw-vfs-cli/scripts/msw-vfs-batch.js
undefinedcat queries.jsonl | node <plugin>/skills/test-msw-vfs-cli/scripts/msw-vfs-batch.js
undefined요청 포맷 (newline-JSON, 한 줄 1 쿼리)
请求格式(换行分隔JSON,每行1个查询)
json
{"id":"a","argv":["/abs/map01.map","summary"]}
{"id":"b","argv":["/abs/map01.map","read-entity","/maps/map01/Hero"]}
{"id":"c","argv":["/abs/map01.map","grep-entities","BossRush"]}argv[0]{id,stdout,stderr,code}json
{"id":"a","argv":["/abs/map01.map","summary"]}
{"id":"b","argv":["/abs/map01.map","read-entity","/maps/map01/Hero"]}
{"id":"c","argv":["/abs/map01.map","grep-entities","BossRush"]}argv[0]{id,stdout,stderr,code}⚠️ 명령 선택의 선결 조건 — entry 타입 먼저 확인
⚠️ 命令选择前提 — 先确认文件类型
모든 명령이 모든 파일에 동작하지 않는다. 명령을 고르기 전에 먼저 파일 확장자를 보고 분기한다.
| Entry | 쓸 수 있는 명령군 | 트리/엔티티 명령 가능? |
|---|---|---|
| L1 VFS + L2 Entity + YAML export/import | ✅ |
| | ❌ — 트리 없음 |
| | ❌ |
.modelValues[]lstreeread-entitylist-entitiesedit-entityadd-component$ msw-vfs DefaultPlayer.model list-entities
msw-vfs: 'list-entities' is not a .model command —
.model has no children; a .model produces one entity at runtime.并非所有命令都适用于所有文件。选择命令前,请先根据文件扩展名进行区分。
| 文件类型 | 可用命令集 | 是否支持树形/实体命令? |
|---|---|---|
| L1 VFS + L2 Entity + YAML导出/导入 | ✅ |
| | ❌ — 无树形结构 |
| 仅支持 | ❌ |
.modelValues[]lstreeread-entitylist-entitiesedit-entityadd-component$ msw-vfs DefaultPlayer.model list-entities
msw-vfs: 'list-entities' is not a .model command —
.model has no children; a .model produces one entity at runtime..model
작업 라우팅 치트시트
.model.model
操作路由速查表
.model| 의도 | | |
|---|---|---|
| 메타데이터 / 컴포넌트 카운트 | | |
| 들어있는 값들 나열 | (개념상 다름) | |
| 값 하나 읽기 | | |
| 값 변경 | | |
| 값 제거 | — | |
| 모델이 만들 엔티티 트리를 펼쳐 보고 싶음 | (해당 없음) | |
| 操作意图 | 若为 | 若为 |
|---|---|---|
| 查看元数据/组件数量 | | |
| 列出所有值 | (概念不同) | |
| 读取单个值 | | |
| 修改值 | | |
| 删除值 | — | |
| 查看模型将生成的实体树 | (无对应操作) | 通过 |
흔한 환각 — 존재하지 않는 명령들
常见误区 — 不存在的命令
다음 이름들은 그럴듯하지만 CLI 에 존재하지 않는다. 호출 전에 의심하라:
- ❌ — 어디에도 없음. "엔티티가 가진 컴포넌트들"을 보려면
list-components/.map에서.ui(전체 컴포넌트 묶음 반환).read-entity <path> --deep에서는.model의 JSON 안info배열을 본다.Components - ❌ on
list-entities— 위 규칙대로 거부됨..model - ❌ on
edit-component—.model의 컴포넌트 값은.model으로 편집한다 (set <name>으로 어느 컴포넌트의 값인지 한정).--target-type - ❌ 가 빠진 명령 —
summary에서도.model는 동작한다 (component_counts 포함).summary
확신이 안 서면 반드시 를 먼저 본다. 도움말이 entity-tree 섹션과 섹션을 분리해 보여준다.
msw-vfs --help.model자세한 호환성 표는 docs/vfs-commands.md 최상단 "명령 ↔ entry 타입 호환성" 섹션.
以下命令名称看似合理,但实际上CLI中并不存在。调用前请务必确认:
- ❌ — 不存在任何场景。若要查看「实体包含的组件」,在
list-components/.map文件中使用**.ui(返回完整组件集合);在read-entity <path> --deep文件中查看.model**返回JSON中的info数组。Components - ❌ 在文件中使用
.model— 按照上述规则会被拒绝。list-entities - ❌ 在文件中使用
.model—edit-component的组件值需通过.model命令编辑(通过set <name>指定所属组件)。--target-type - ❌ 文件不支持
.model—summary文件同样支持.model命令(包含component_counts)。summary
若不确定,请务必先执行。帮助文档会分别展示entity-tree相关命令和相关命令。
msw-vfs --help.model详细兼容性表格请查看docs/vfs-commands.md顶部的「命令 ↔ 文件类型兼容性」章节。
두 레이어 — L1(VFS) vs L2(Entity) — entity-tree entry 전용
两层架构 — L1(VFS) vs L2(Entity) — 仅适用于entity-tree类型文件
위 표대로/.model에는 적용되지 않는다.world.yaml/.map/.ui안에서 같은 데이터를 두 각도로 노출한다는 의미..gamelogic
선택 기준:
- 탐색·검색·grep → L1 (/
ls/tree/glob/grep/read/stat)summary - 엔티티 단위 읽기·편집·CRUD → L2 (/
read-entity/list-entities/find-entities/grep-entities/edit-entity/edit-component/add-entity/ …)remove-entity
세부 명령 카탈로그는 upstream 또는 .
COMMANDS.mdmsw-vfs --help如上述表格所示,不适用于/.model文件。仅针对world.yaml/.map/.ui文件,从两个维度展示同一数据。.gamelogic
选择标准:
- 浏览、搜索、grep → L1(/
ls/tree/glob/grep/read/stat)summary - 实体级读取、编辑、CRUD → L2(/
read-entity/list-entities/find-entities/grep-entities/edit-entity/edit-component/add-entity/…)remove-entity
详细命令目录请查看上游或执行。
COMMANDS.mdmsw-vfs --help원칙
操作原则
- /
.map를 Read 툴로 직접 열지 않는다. 단일 거대 JSON 이라 컨텍스트 초과. 반드시 CLI 를 경유..ui - 탐색은 lazy 하게 — 부터 한 층씩.
ls /부터 치지 않는다.tree --depth 3 - 편집은 L2 기본 — 엔티티 메타는 , 컴포넌트 값은
edit-entity. L1edit-component은 같은edit <path>.json컴포넌트가 한 엔티티에 2 개 이상인 모호성 탈출구일 때만.@type - 편집 전에 반드시 로 현재 상태 확인 → 패치 생성 → 편집 →
read-entity또는 재-validate로 검증.read-entity - 대량 엔티티 연속 질의는 batch — 파일마다 매번 단발 호출하면 콜드 스타트 × N.
- 请勿直接用Read工具打开/
.map文件。这类文件是单一巨型JSON,会导致上下文过载。必须通过CLI工具处理。.ui - 浏览操作需循序渐进 — 从开始逐层深入,不要直接使用
ls /。tree --depth 3 - 编辑操作默认使用L2 — 实体元数据使用,组件值使用
edit-entity。仅当同一实体包含多个同edit-component组件存在歧义时,才使用L1的@type作为兜底方案。edit <path>.json - 编辑前务必通过确认当前状态 → 生成修改补丁 → 执行编辑 → 通过
read-entity或重新执行validate验证结果。read-entity - 大量实体连续查询请使用批量调用 — 若对每个文件都单独调用单次命令,会产生N次冷启动开销。
읽기 전용이 아니다 — 편집도 지원
支持编辑操作 — 并非只读
이전 버전 스킬과 달리 이제 CLI 가 다음을 지원한다:
- 엔티티 메타 편집:
edit-entity <path> --set enable=false - 컴포넌트 값 편집:
edit-component <entity> <@type> --set Position='[1,0,0]' - 엔티티 CRUD: /
add-entity/remove-entityrename-entity - 컴포넌트 CRUD: /
add-componentremove-component - 값 편집:
.model(타입 추론 +set <name> <json>강제)--type - YAML 왕복: /
export-yaml/import-yamlbuild-world
편집 전 백업 / 커밋은 호출자 책임 — CLI 는 로 다른 경로에 쓰는 옵션을 제공.
--output / -o与旧版本技能不同,当前CLI支持以下编辑操作:
- 实体元数据编辑:
edit-entity <path> --set enable=false - 组件值编辑:
edit-component <entity> <@type> --set Position='[1,0,0]' - 实体CRUD:/
add-entity/remove-entityrename-entity - 组件CRUD:/
add-componentremove-component - 值编辑:
.model(自动类型推断 +set <name> <json>强制指定)--type - YAML双向转换:/
export-yaml/import-yamlbuild-world
编辑前的备份/提交由调用者负责——CLI提供选项,可将修改后的内容保存到其他路径。
--output / -o포맷 참고
格式参考
- /
.map/.ui—.gamelogic배열 + entity → component 트리 (format-refs/map-authoring.md, format-refs/ui-authoring.md)Entities[] - —
.model오버라이드 테이블을 갖는 entity 템플릿 (format-refs/model-authoring.md)Values[] - 수동 편집 가이드: docs/manual-editing.md
- VFS ↔ YAML 파이프라인: docs/vfs-yaml-pipeline.md
- 업스트림: https://github.com/choigawoon/msw-vfs-cli (MIT, v0.5.3)
- /
.map/.ui—.gamelogic数组 + entity → component树形结构(format-refs/map-authoring.md, format-refs/ui-authoring.md)Entities[] - — 包含
.model覆盖表的实体模板(format-refs/model-authoring.md)Values[] - 手动编辑指南:docs/manual-editing.md
- VFS ↔ YAML流水线:docs/vfs-yaml-pipeline.md
- 上游仓库:https://github.com/choigawoon/msw-vfs-cli(MIT协议,v0.5.3)