[{"data":1,"prerenderedAt":732},["ShallowReactive",2],{"docs-doc-zh-CN-contributing":3,"docs-list-zh-CN":641},{"doc":4,"locale":639,"available":640},{"id":5,"title":6,"body":7,"description":628,"extension":629,"group":432,"meta":630,"navigation":631,"order":632,"path":633,"section":634,"seo":635,"stem":636,"updated":637,"__hash__":638},"docs_zh\u002Fdocs\u002Fcontributing.md","参与开发",{"type":8,"value":9,"toc":616},"minimark",[10,22,26,110,113,133,140,143,146,179,194,205,208,211,244,266,273,276,283,336,340,357,360,363,371,374,456,470,473,480,491,497,500,507,534,537,540,592,595,598,601,612],[11,12,13,14,21],"p",{},"「星际枢纽」的代码、文档与界面翻译都来自社区。本页说明可以从哪里入手，以及提交之前需要过的检查。开始之前，请先阅读",[15,16,20],"a",{"href":17,"rel":18},"https:\u002F\u002Fgithub.com\u002FMengLuoRJ\u002Fscnexus\u002Fblob\u002Fmain\u002FCODE_OF_CONDUCT.md",[19],"nofollow","贡献者公约","，它适用于本项目的所有协作场合。",[23,24,25],"h2",{"id":25},"可以贡献什么",[27,28,29,43,53,64,79,99],"ul",{},[30,31,32,36,37,42],"li",{},[33,34,35],"strong",{},"报告缺陷","：在",[15,38,41],{"href":39,"rel":40},"https:\u002F\u002Fgithub.com\u002FMengLuoRJ\u002Fscnexus\u002Fissues",[19],"问题区","提交，附上版本号、系统版本与复现步骤；界面问题请附截图。",[30,44,45,48,49,52],{},[33,46,47],{},"功能建议","：同样在",[15,50,41],{"href":39,"rel":51},[19],"提交，说清使用场景与现在的做法，比罗列功能更有用。",[30,54,55,58,59,63],{},[33,56,57],{},"提交代码","：向 ",[60,61,62],"code",{},"main"," 分支提交 Pull Request，开发环境与检查项见下文「开发环境」与「提交前的检查」两节。",[30,65,66,69,70,73,74,78],{},[33,67,68],{},"界面翻译","：文案在 ",[60,71,72],{},"packages\u002Fapp-renderer-v2\u002Fsrc\u002Flocales","，三种语言同步维护，细则见",[15,75,77],{"href":76},"\u002Fdocs\u002Flocalization","贡献翻译","。",[30,80,81,84,85,90,91,94,95,98],{},[33,82,83],{},"修订文档","：在 ",[15,86,89],{"href":87,"rel":88},"https:\u002F\u002Fgithub.com\u002FMengLuoRJ\u002Fscnexus-docs",[19],"scnexus-docs"," 提交；中文与英文分别放在 ",[60,92,93],{},"content\u002Fzh-CN"," 与 ",[60,96,97],{},"content\u002Fen"," 两个目录。",[30,100,101,104,105,109],{},[33,102,103],{},"回答问题","：交流群与 Discord，入口见",[15,106,108],{"href":107},"\u002Fdocs\u002Foverview","快速开始","页末。",[23,111,112],{"id":112},"仓库分工",[27,114,115,125],{},[30,116,117,124],{},[33,118,119],{},[15,120,123],{"href":121,"rel":122},"https:\u002F\u002Fgithub.com\u002FMengLuoRJ\u002Fscnexus",[19],"scnexus","：桌面应用本体，包含 Electron 主进程、preload、界面与作品包标准。",[30,126,127,132],{},[33,128,129],{},[15,130,89],{"href":87,"rel":131},[19],"：本站的文档与页面。",[11,134,135,136,78],{},"服务端与官网的代码不在开源范围内，相关问题仍可在问题区反馈，或发送邮件至 ",[15,137,139],{"href":138},"mailto:support@scnexus.net","support@scnexus.net",[23,141,142],{"id":142},"开发环境",[11,144,145],{},"桌面应用是 pnpm monorepo，需要 Node.js 26 与 pnpm 11 及以上版本：",[147,148,153],"pre",{"className":149,"code":150,"language":151,"meta":152,"style":152},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","pnpm install\npnpm run dev\n","bash","",[60,154,155,168],{"__ignoreMap":152},[156,157,160,164],"span",{"class":158,"line":159},"line",1,[156,161,163],{"class":162},"sbgvK","pnpm",[156,165,167],{"class":166},"s_sjI"," install\n",[156,169,171,173,176],{"class":158,"line":170},2,[156,172,163],{"class":162},[156,174,175],{"class":166}," run",[156,177,178],{"class":166}," dev\n",[11,180,181,182,187,188,193],{},"各包的职责与代码约定见仓库根目录的 ",[15,183,186],{"href":184,"rel":185},"https:\u002F\u002Fgithub.com\u002FMengLuoRJ\u002Fscnexus\u002Fblob\u002Fmain\u002FAGENTS.md",[19],"AGENTS.md","；构建、Electron 冒烟与打包验证的命令见 ",[15,189,192],{"href":190,"rel":191},"https:\u002F\u002Fgithub.com\u002FMengLuoRJ\u002Fscnexus\u002Fblob\u002Fmain\u002Fdocs\u002Fbuilding.md",[19],"docs\u002Fbuilding.md","。技术栈为 Electron 45 + Vite 8 + Vue 3（组合式 API）+ Nuxt UI 4 + Tailwind CSS 4，测试使用 Vitest。",[11,195,196,197,200,201,204],{},"文档站是独立的 Nuxt 项目，",[60,198,199],{},"pnpm install"," 后 ",[60,202,203],{},"pnpm dev"," 即可预览。",[23,206,207],{"id":207},"提交前的检查",[11,209,210],{},"代码改动提交前在仓库根目录执行：",[147,212,214],{"className":149,"code":213,"language":151,"meta":152,"style":152},"pnpm run typecheck\npnpm run lint\npnpm run test\n",[60,215,216,225,234],{"__ignoreMap":152},[156,217,218,220,222],{"class":158,"line":159},[156,219,163],{"class":162},[156,221,175],{"class":166},[156,223,224],{"class":166}," typecheck\n",[156,226,227,229,231],{"class":158,"line":170},[156,228,163],{"class":162},[156,230,175],{"class":166},[156,232,233],{"class":166}," lint\n",[156,235,237,239,241],{"class":158,"line":236},3,[156,238,163],{"class":162},[156,240,175],{"class":166},[156,242,243],{"class":166}," test\n",[27,245,246,253,259],{},[30,247,248,249,252],{},"测试可以只跑改动涉及的部分（例如 ",[60,250,251],{},"pnpm run test:main","），但类型检查与静态检查必须完整通过。",[30,254,255,256,78],{},"只改文档或配置时，至少执行 ",[60,257,258],{},"pnpm run format:check",[30,260,261,262,265],{},"界面改动请在 ",[33,263,264],{},"1000×700"," 的主窗口尺寸下确认布局，这是设计基准。",[11,267,268,269,272],{},"文档站改动先跑 ",[60,270,271],{},"pnpm typecheck","，再在本地页面确认链接与渲染结果。",[23,274,275],{"id":275},"代码约定",[11,277,278,279,282],{},"完整规范见 ",[15,280,186],{"href":184,"rel":281},[19],"，以下是容易被忽略的几条：",[27,284,285,291,297,307,313,330],{},[30,286,287,290],{},[33,288,289],{},"边界清晰","：主进程负责窗口、文件、游戏进程与持久化，渲染进程只做界面；跨进程一律走 IPC，不互相导入源码。",[30,292,293,296],{},[33,294,295],{},"类型不是安全边界","：主进程在运行时校验参数与调用来源，共享的 TypeScript 类型只用于开发期。",[30,298,299,302,303,306],{},[33,300,301],{},"界面写法统一","：单文件组件使用 ",[60,304,305],{},"\u003Cscript lang=\"ts\" setup>"," 与组合式 API，状态走 Pinia 的组合式 store。",[30,308,309,312],{},[33,310,311],{},"提示分层","：操作结果用 toast，需要用户决策用对话框，持续性说明用内联提示。",[30,314,315,318,319,322,323,322,326,329],{},[33,316,317],{},"三套语言同步","：新增或修改文案时 ",[60,320,321],{},"zh","、",[60,324,325],{},"en",[60,327,328],{},"zh-Hant"," 的键必须一致。",[30,331,332,335],{},[33,333,334],{},"不做多余抽象","：优先沿用相邻代码的写法，不为一次性逻辑设计结构，也不顺手重构能正常运行的代码。",[23,337,339],{"id":338},"提交-pull-request","提交 Pull Request",[27,341,342,348,351,354],{},[30,343,344,345,347],{},"所有 Pull Request 提交至 ",[60,346,62],{}," 分支。",[30,349,350],{},"一次 PR 只做一件事：功能改动与翻译、格式化分开提交，方便单独审阅。",[30,352,353],{},"描述里写清改动内容、原因与验证方式；本地跑过的命令直接贴出来。",[30,355,356],{},"界面改动附上截图或录屏，说明在 1000×700 下的表现。",[23,358,359],{"id":359},"文档贡献",[11,361,362],{},"本站正文按语言分目录，同一路径的两个文件即同一篇的中英文版本：",[147,364,369],{"className":365,"code":367,"language":368},[366],"language-text","content\u002F\n├── zh-CN\u002F\n│   ├── guide\u002F       # 星际枢纽文档\n│   ├── editor\u002F      # 编辑器文档\n│   └── reference\u002F   # 参考资料\n└── en\u002F              # 与 zh-CN 相同的目录结构\n","text",[60,370,367],{"__ignoreMap":152},[11,372,373],{},"每篇文档的 frontmatter 决定它在侧栏中的位置：",[375,376,377,390],"table",{},[378,379,380],"thead",{},[381,382,383,387],"tr",{},[384,385,386],"th",{},"字段",[384,388,389],{},"作用",[391,392,393,404,414,436,446],"tbody",{},[381,394,395,401],{},[396,397,398],"td",{},[60,399,400],{},"title",[396,402,403],{},"页面标题与侧栏条目",[381,405,406,411],{},[396,407,408],{},[60,409,410],{},"description",[396,412,413],{},"页面描述，用于搜索结果与 SEO",[381,415,416,421],{},[396,417,418],{},[60,419,420],{},"group",[396,422,423,424,322,427,322,430,322,433],{},"侧栏分组：",[60,425,426],{},"start",[60,428,429],{},"usage",[60,431,432],{},"contribute",[60,434,435],{},"reference",[381,437,438,443],{},[396,439,440],{},[60,441,442],{},"order",[396,444,445],{},"同一分组内的排序，数字小的在前",[381,447,448,453],{},[396,449,450],{},[60,451,452],{},"updated",[396,454,455],{},"最后更新日期，显示在标题下方",[11,457,458,459,462,463,466,467,469],{},"正文里的站内链接写站内绝对路径（如 ",[60,460,461],{},"\u002Fguide\u002Fcampaign","），不要带语言前缀，也无需写 ",[60,464,465],{},".md"," 后缀。新增页面时记得同时给出 ",[60,468,442],{},"，否则会落到分组末尾。",[23,471,472],{"id":472},"社区行为准则",[11,474,475,476,479],{},"参与本项目即表示同意遵守",[15,477,20],{"href":17,"rel":478},[19],"（改编自 Contributor Covenant 2.1）：",[27,481,482,485,488],{},[30,483,484],{},"尊重不同的主张、观点与感受，对事不对人；提出并接受建设性意见。",[30,486,487],{},"不欢迎的行为包括色情化的语言或图像、侮辱与人身攻击、公开或私下骚扰、未经许可公布他人私人信息。",[30,489,490],{},"违规内容可能被删除、编辑或拒绝，处理方式按情节分为纠正、警告、临时封禁与永久封禁。",[11,492,493,494,496],{},"辱骂、骚扰或其他不可接受的行为可发送邮件至 ",[15,495,139],{"href":138}," 报告，所有投诉都会被及时、公平地处理，报告者的隐私与安全会被尊重。",[23,498,499],{"id":499},"报告安全问题",[11,501,502,503,506],{},"安全漏洞",[33,504,505],{},"不要","通过公开的 issue、讨论区或群聊报告。",[27,508,509,524],{},[30,510,511,512,515,516,519,520,523],{},"优先使用仓库的 ",[33,513,514],{},"GitHub Private Vulnerability Reporting","（",[60,517,518],{},"Security"," → ",[60,521,522],{},"Report a vulnerability","）；",[30,525,526,527,529,530,533],{},"该渠道不可用时，发送邮件至 ",[15,528,139],{"href":138},"，标题加上 ",[60,531,532],{},"[SCNexus Security]"," 前缀。",[11,535,536],{},"报告中请写明受影响的版本或提交、操作系统与构建方式、影响与触发条件、复现步骤或验证代码；请勿附带真实的账号凭据、个人信息或第三方内容。",[11,538,539],{},"以下问题属于受理范围：",[27,541,542,556,562,568,574,580,586],{},[30,543,544,547,548,551,552,555],{},[33,545,546],{},"IPC 与进程隔离","：绕过 preload 桥接、突破 ",[60,549,550],{},"contextIsolation"," 或 ",[60,553,554],{},"sandbox","、从渲染进程触达 Node.js 接口。",[30,557,558,561],{},[33,559,560],{},"本地服务暴露","：未授权或跨源访问本机回环服务、令牌泄漏、监听非回环地址。",[30,563,564,567],{},[33,565,566],{},"压缩包与文件处理","：路径穿越、解压时的符号链接滥用、压缩炸弹、越界写入。",[30,569,570,573],{},[33,571,572],{},"凭据与会话","：凭据存储缺陷、同机读取他人账号数据、账号间会话混淆、令牌写入日志。",[30,575,576,579],{},[33,577,578],{},"渲染内容安全","：CSP 绕过、远程内容处理不当、跳转到不可信来源。",[30,581,582,585],{},[33,583,584],{},"更新完整性","：篡改更新元数据或更新包。",[30,587,588,591],{},[33,589,590],{},"依赖与供应链","：应用代码可达的脆弱依赖。",[11,593,594],{},"需要物理接触已解锁设备、依赖被篡改的安装包或关闭签名校验的问题，以及仅由自动化扫描器给出、没有影响证明的报告，不在受理范围内。第三方组件本身的问题请报告给上游。",[11,596,597],{},"收到报告后，我们通常在五个工作日内确认，随后与报告者一起确认受影响版本、评估严重程度、准备修复并商定披露时间；修复发布时会（在报告者同意的前提下）致谢。本项目不设漏洞赏金。",[23,599,600],{"id":600},"许可",[11,602,603,604,607,608,611],{},"桌面应用以 ",[33,605,606],{},"BSD 3-Clause"," 发布，完整文本见仓库的 ",[60,609,610],{},"LICENSE","。在该许可下，你可以自由使用、修改与再分发代码，也可以用于商业目的；分发时须保留版权声明、许可条款与免责声明。你提交的代码将按同一许可发布。",[613,614,615],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":152,"searchDepth":236,"depth":236,"links":617},[618,619,620,621,622,623,624,625,626,627],{"id":25,"depth":170,"text":25},{"id":112,"depth":170,"text":112},{"id":142,"depth":170,"text":142},{"id":207,"depth":170,"text":207},{"id":275,"depth":170,"text":275},{"id":338,"depth":170,"text":339},{"id":359,"depth":170,"text":359},{"id":472,"depth":170,"text":472},{"id":499,"depth":170,"text":499},{"id":600,"depth":170,"text":600},"参与「星际枢纽」开发的方式：仓库分工、开发环境、提交前检查、代码与文档约定、行为准则，以及安全问题的报告渠道。","md",{},true,200,"\u002Fdocs\u002Fcontributing","app",{"title":6,"description":628},"docs\u002Fcontributing","2026-11-01","9qLJ05SF_Pme8e0ONx60bZu-OU-106iHqa1qSvuJZdc","zh-CN",[639,325],[642,647,649,653,658,662,666,671,675,679,684,688,693,698,703,708,713,718,723,728,729],{"path":643,"title":644,"description":645,"order":159,"group":426,"section":646,"contentLocale":639},"\u002Fdocs\u002Feditor","创作流程概览","从在《星际争霸II》编辑器中制作，到打包、分发与更新，说明星际枢纽在创作流程里承担的环节。","editor",{"path":107,"title":108,"description":648,"order":159,"group":426,"section":634,"contentLocale":639},"「星际枢纽」是一款专为星际社区服务的枢纽应用",{"path":650,"title":651,"description":652,"order":159,"group":435,"section":435,"contentLocale":639},"\u002Fdocs\u002Freference","概述","收录导入、安装与分发内容时依赖的压缩包与安装源约定。",{"path":654,"title":655,"description":656,"order":657,"group":429,"section":634,"contentLocale":639},"\u002Fdocs\u002Fcampaign","战役管理","把自制战役导入战役库、激活到游戏，并随时恢复官方战役",10,{"path":659,"title":660,"description":661,"order":657,"group":429,"section":646,"contentLocale":639},"\u002Fdocs\u002Fpackaging","打包安装包","把编辑器产出的地图、模组与 package.json 组织成一个能被星际枢纽自动识别并安装的压缩包。",{"path":663,"title":664,"description":665,"order":657,"group":435,"section":435,"contentLocale":639},"\u002Fdocs\u002Fscnexus-package","星际枢纽压缩包标准","星际枢纽作品包的目录结构、package.json 清单字段、地图与模组资源声明、启动器与包内资料的写法。",{"path":667,"title":668,"description":669,"order":670,"group":435,"section":435,"contentLocale":639},"\u002Fdocs\u002Fccm-package","CCM 压缩包标准","CCM 用 metadata.txt 描述战役的键值格式、目录布局与安装落点，以及星际枢纽读取这类包时的处理方式。",20,{"path":672,"title":673,"description":674,"order":670,"group":429,"section":634,"contentLocale":639},"\u002Fdocs\u002Fcustomize","自制作品","把地图与模组直接装进游戏，指定启动器地图后一键启动",{"path":676,"title":677,"description":678,"order":670,"group":429,"section":646,"contentLocale":639},"\u002Fdocs\u002Ftoolbox","创作工具 · 编码转换","把中文等非 ASCII 文本转成 Galaxy 代码里可用的转义写法，可选直接转码、字符串、文本与触发调试四种输出。",{"path":680,"title":681,"description":682,"order":683,"group":435,"section":435,"contentLocale":639},"\u002Fdocs\u002Fgithub-source","GitHub 安装源标准","把公开 GitHub 仓库当作安装源时，仓库需要满足的清单与结构要求，以及地址与分支的写法。",30,{"path":685,"title":686,"description":687,"order":683,"group":429,"section":634,"contentLocale":639},"\u002Fdocs\u002Fweekly-mutations","每周突变","查看本周突变的地图、因子与社区评分，并查阅全部突变因子",{"path":689,"title":690,"description":691,"order":692,"group":429,"section":634,"contentLocale":639},"\u002Fdocs\u002Freplays","录像管理","按星际资料与录像类型索引录像，支持去重、批量导出与对局数据查看",40,{"path":694,"title":695,"description":696,"order":697,"group":429,"section":634,"contentLocale":639},"\u002Fdocs\u002Fworkshop","创意工坊","浏览社区作品、查看详情并下载已审核的发布版本",50,{"path":699,"title":700,"description":701,"order":702,"group":429,"section":634,"contentLocale":639},"\u002Fdocs\u002Fcreator","创作者中心与上传管理","创建作品、维护资料、上传新版本并跟踪上传任务",60,{"path":704,"title":705,"description":706,"order":707,"group":429,"section":634,"contentLocale":639},"\u002Fdocs\u002Fdownloads","下载管理","从 GitHub 或创意工坊取回内容，确认后安装到游戏",70,{"path":709,"title":710,"description":711,"order":712,"group":429,"section":634,"contentLocale":639},"\u002Fdocs\u002Ftools","创作工具","编码转换等本地辅助工具，输入不会上传也不会保存",80,{"path":714,"title":715,"description":716,"order":717,"group":429,"section":634,"contentLocale":639},"\u002Fdocs\u002Fai-assistant","智能助手","把本地数据与本机 AI 客户端连起来的受控 MCP 服务",90,{"path":719,"title":720,"description":721,"order":722,"group":429,"section":634,"contentLocale":639},"\u002Fdocs\u002Faccount","账号与个人中心","登录、资料与等级成长，以及两步验证的开启与维护",100,{"path":724,"title":725,"description":726,"order":727,"group":429,"section":634,"contentLocale":639},"\u002Fdocs\u002Fsettings","设置","语言、游戏目录、功能开关与日志隐私，四个标签页逐项说明",110,{"path":633,"title":6,"description":628,"order":632,"group":432,"section":634,"contentLocale":639},{"path":76,"title":77,"description":730,"order":731,"group":432,"section":634,"contentLocale":639},"界面翻译文件的位置与键名规则、提交流程、本地验证方法，以及新增一门界面语言需要改动的代码位置。",210,1793550745232]