/** * macOS 安装包内容策略。 * * `check-macos-bundle.mjs` 会扫描随包 resources。Node runtime 与 Claude Agent SDK * sidecar 都需要 `node_modules` 形式的目录,但其它构建残留或第三方依赖不能被 * 静默带入安装包,因此这里只放行两棵明确的生产子树。 */ const NODE_RUNTIME_NODE_MODULES = 'game-runtime/node/node_modules'; const CLAUDE_AGENT_NODE_MODULES = 'claude-agent/node_modules'; const CLAUDE_AGENT_SCOPE = `${CLAUDE_AGENT_NODE_MODULES}/@anthropic-ai`; const CLAUDE_AGENT_PACKAGE_PATTERN = /^(?:claude-agent-sdk|claude-agent-sdk-darwin-(?:arm64|x64))(?:\/.*)?$/u; function isAllowedClaudeAgentNodeModulesPath(file) { if (file === CLAUDE_AGENT_NODE_MODULES || file === CLAUDE_AGENT_SCOPE) { return true; } if (!file.startsWith(`${CLAUDE_AGENT_SCOPE}/`)) { return false; } return CLAUDE_AGENT_PACKAGE_PATTERN.test( file.slice(`${CLAUDE_AGENT_SCOPE}/`.length), ); } export function isAllowedBundledNodeModulesPath(file) { return ( file === NODE_RUNTIME_NODE_MODULES || file === `${NODE_RUNTIME_NODE_MODULES}/npm` || file.startsWith(`${NODE_RUNTIME_NODE_MODULES}/npm/`) || isAllowedClaudeAgentNodeModulesPath(file) ); } export function listForbiddenBundledResourceFiles(files) { return files.filter( (file) => /(^|\/)(\.env[^/]*|auth\.json|target|\.git)(\/|$)|\.(exe|dll)$/u.test( file, ) || (/(^|\/)node_modules(\/|$)/u.test(file) && !isAllowedBundledNodeModulesPath(file)), ); }