diff --git a/docs/IOS-TESTFLIGHT.md b/docs/IOS-TESTFLIGHT.md new file mode 100644 index 0000000..b63f93a --- /dev/null +++ b/docs/IOS-TESTFLIGHT.md @@ -0,0 +1,46 @@ +# HoloLake Era iPhone / TestFlight 承接记录 + +状态日期:2026-07-18 +当前版本:0.1.7 +Bundle ID:`com.guanghulab.hololake` + +## 为什么这样做 + +手机版不是把 Mac 三栏界面等比例缩小,而是保留第五域的同一套频道语义,为手机增加固定的五入口导航:零点原核、第五域、心跳核心、光之湖人格体、服务器节点。知识库仍是频道工作区中的能力,不重新变回软件主体。 + +## 真实文件入口 + +- 手机频道结构:`src/components/HoloLakeHome.tsx` +- 手机响应式样式与安全区:`src/App.css` +- 手机导航回归测试:`src/components/HoloLakeHome.test.tsx` +- iOS 专用 Tauri 配置:`src-tauri/tauri.ios.conf.json` +- XcodeGen 工程源:`src-tauri/gen/apple/project.yml` +- 已生成 Xcode 工程:`src-tauri/gen/apple/HoloLake.xcodeproj` +- iOS 权限基线:`src-tauri/capabilities/mobile.json` + +旧的 `src-tauri/gen/apple/laputa.xcodeproj` 和 `laputa_iOS` 目录来自 Tolaria 基座,仅作为历史生成结构保留;TestFlight 的新承接入口是 `HoloLake.xcodeproj` / `HoloLake_iOS`,不得再用旧包名 `club.refactoring.tolaria` 发布。 + +## 已验证 + +- Web/TypeScript 生产构建通过:`npm run build` +- 第五域与手机频道导航测试通过:`src/components/HoloLakeHome.test.tsx`,8 项通过 +- `aarch64-apple-ios` 与 `aarch64-apple-ios-sim` Rust 目标已安装 +- Xcode 工程已经以 HoloLake 名称、0.1.7 版本和独立 Bundle ID 生成 + +## 尚未闭环的外部条件 + +1. Apple Developer 订阅已付款,但 Xcode 当前仍只显示 `Personal Team`;正式付费团队同步后才能建立发行签名并上传 TestFlight。 +2. 本机 Xcode 的 iOS 26.5.1 + iOS 26.5 Simulator 组件未安装,官方界面显示占用 8.52 GB;应在冰朔确认磁盘占用后下载。 +3. iOS Rust 原生检查已进入 Tauri Swift 层,但 SwiftPM 从 GitHub 拉取 `Brendonovich/swift-rs` 时网络连接失败。这是依赖下载阻断,不是当前代码编译错误;网络恢复后重跑原生检查。 +4. 创建 Apple Development / Distribution 证书属于持久凭据操作,必须在正式团队出现后由冰朔当场确认,再在 Xcode 的 `Manage Certificates…` 中执行。 + +## 下一实例最短继续路径 + +1. 打开 Xcode → Settings → Apple Accounts,确认是否出现非 `Personal Team` 的正式团队。 +2. 经冰朔确认后,安装 Xcode → Settings → Components 中的 iOS 26.5.1 + Simulator。 +3. 网络可访问 GitHub 后运行: + `cargo check --manifest-path src-tauri/Cargo.toml --target aarch64-apple-ios` +4. 用 `src-tauri/gen/apple/HoloLake.xcodeproj` 的 `HoloLake_iOS` scheme 做真机归档。 +5. 正式团队出现且冰朔确认创建证书后,创建 App Store Connect 应用记录并上传 TestFlight 内测构建。 + +TestFlight 上线前不得把“前端构建通过”“Xcode 工程已生成”写成“手机版已发布”。 diff --git a/docs/TEAM-FOUNDATION-HANDOFF.md b/docs/TEAM-FOUNDATION-HANDOFF.md new file mode 100644 index 0000000..a12ddc9 --- /dev/null +++ b/docs/TEAM-FOUNDATION-HANDOFF.md @@ -0,0 +1,113 @@ +# 光湖团队 GLS 基座与企业四域开发承接 + +> 文档编号:HLP-DOC-TEAM-0001 +> 状态:2026-07-18 实现基线 +> 产品仓库:`REPO-008 bingshuo/hololake-platform` + +## 1. 已确认的产品顺序 + +光湖只有一个 App 和一个持续演进的产品仓库,但团队基座与冰朔个人内测版是不同发行模式,不得把两边的可见内容混装。 + +企业侧的开发顺序是: + +```text +GLS 团队基座 +→ 团队重塑 Notion 原型的页面关系与编号 +→ 光湖主域 / 光湖分域 / 光湖零域 / 光湖零感域 +→ 团队成员从零感域进入自己的个人频道 +→ 公众从公共域进入行业与模块 +``` + +零点原核频道是企业端与冰朔第五域都会连接的桥,但不等于把冰朔第五域、永恒湖心或个人频道复制到企业团队包。 + +## 2. 团队第一版的严格边界 + +团队第一版只展示 `GLS-SYS-ARCH-001` 公开系统架构。以下内容不得进入团队首版可见界面: + +- 第五域个人频道结构; +- 永恒湖心、心跳核心、光之湖人格体路径; +- 冰朔短剧视频、服务器登记和个人模块; +- 未重塑页面关系的 Notion 导出内容。 + +这不是删除 Tolaria 基座能力,而是冻结团队首版的产品入口,避免团队在错误页面关系上继续开发。 + +## 3. 真实源码入口 + +- 团队 GLS 页面:`src/TeamFoundationApp.tsx` +- 团队独立渲染入口:`src/team-foundation-main.tsx` +- 团队独立 HTML:`team-foundation.html` +- 团队 Tauri 身份:`src-tauri/tauri.team.conf.json` +- GLS 唯一内置数据:`src-tauri/resources/public-architecture/gls-system-architecture.json` +- 团队构建收尾:`scripts/finalize-team-foundation-build.mjs` +- Mac 打包:`scripts/build-macos-internal.sh` +- Windows JD 节点打包:`scripts/build-windows-jd-cross.sh` +- 包内容硬门:`scripts/verify-internal-package-content.mjs` +- 自动测试:`src/TeamFoundationApp.test.tsx` + +团队包使用独立 Bundle ID:`com.guanghulab.hololake.team-foundation`,可以与冰朔个人内测版并存。 + +## 4. Notion 原型素材源 + +冰朔桌面上的全量导出: + +`/Users/bingshuolingdianyuanhe/Desktop/notion.zip` + +2026-07-18 只读核验结果:外层约 497 MB,内部为两个 Notion 分卷压缩包。该文件是企业四域原型素材,不是可直接部署的页面树,也不进入团队安装包。 + +后续重塑必须先输出“页面关系映射表”,至少区分:原页面 ID、标题、父页面、目标域、目标频道、可见性、事实源、废弃/合并关系。未完成映射前不得批量导入仓库。 + +## 5. 已完成验证与产物 + +- 团队页面与冰朔频道测试合计 9 项通过; +- `npm run build:team-foundation` 通过,只编译团队独立入口; +- 团队 dist 私人内容扫描通过; +- GLS 与公开研发仓库内容门通过; +- Mac 应用 ad-hoc 签名验证通过; +- Mac DMG 校验通过,桌面复制后二次 SHA-256 通过。 + +Mac 团队基座包: + +`/Users/bingshuolingdianyuanhe/Desktop/HoloLake-Era-0.1.7-Team-Foundation-Mac-aarch64.dmg` + +外接盘归档: + +`/Volumes/JZAO/HoloLake/artifacts/team-foundation/HoloLake-Era-0.1.7-Team-Foundation-Mac-aarch64.dmg` + +## 6. Windows 未闭环项 + +Windows 包必须在 `JD-FD-PRIMARY` Linux 节点执行,不在 Mac 上伪造: + +```bash +COREPACK_HOME= \ +CARGO_TARGET_DIR= \ +HOLOLAKE_SKIP_INSTALL=0 \ +npm run package:team:windows +``` + +输出目标名:`HoloLake-Era-0.1.7-Team-Foundation-Windows-x64-setup.exe`。 + +完成标准包括 PE32+ x86-64、NSIS 安装包、内容门、SHA-256、服务器归档和回传后二次校验。当前 Mac 没有 JD 节点 SSH 通道,所以 Windows 包尚未生成;不得写成双平台已经交付。 + +## 7. 外接盘构建约束 + +JZAO 原文件系统会产生 `._` AppleDouble 文件,Rust/Tauri 会把它们误读为配置。Mac 原生缓存因此放在 JZAO 上的 APFS 稀疏映像: + +- 映像:`/Volumes/JZAO/HoloLake/HoloLakeBuild.sparsebundle` +- 挂载点:`/Volumes/HoloLakeBuild` +- Cargo 缓存:`/Volumes/HoloLakeBuild/target/team` + +iOS 26.5 模拟器导出包也保存在 JZAO: + +`/Volumes/JZAO/HoloLake/Xcode-Platforms/iphonesimulator_26.5_23F77.exportedBundle` + +Xcode 下载后曾自动在内置盘注册一份;已用 `simctl runtime delete` 精确移除,当前内置运行时列表为空。需要模拟器时必须重新讨论导入后的内置盘占用。 + +## 8. 下一实例最短读取顺序 + +1. 本文 `HLP-DOC-TEAM-0001`; +2. `docs/IOS-TESTFLIGHT.md`; +3. `docs/HOLOLAKE-LANGUAGE-WORLD-SYSTEM.md`; +4. `docs/skills/internal-release-packaging/SKILL.md`; +5. 上述真实源码入口与测试。 + +不得从 Notion 导出包猜页面关系,不得把团队 GLS 基座说成企业四域已经开发完成,也不得把 Mac 包成功说成 Windows/TestFlight 已完成。 diff --git a/package.json b/package.json index 3c49f3d..51e9bd3 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "scripts": { "dev": "vite", "build": "tsc -b && vite build", + "build:team-foundation": "VITE_HOLOLAKE_DISTRIBUTION=team-foundation tsc -b && VITE_HOLOLAKE_DISTRIBUTION=team-foundation vite build && node scripts/finalize-team-foundation-build.mjs", "agent-docs": "node scripts/build-agent-docs.mjs", "bundle-mcp": "node scripts/bundle-mcp-server.mjs", "docs:dev": "vitepress dev site --host 127.0.0.1", @@ -31,6 +32,8 @@ "test:internal-release": "node --test scripts/internal-release-version.test.mjs", "package:internal:macos": "./scripts/build-internal-release.sh macos", "package:internal:windows": "./scripts/build-internal-release.sh windows", + "package:team:macos": "HOLOLAKE_TAURI_CONFIG=src-tauri/tauri.team.conf.json HOLOLAKE_APP_NAME='HoloLake Era Team Foundation' HOLOLAKE_INSTALLER_BASENAME='HoloLake-Era-{version}-Team-Foundation-Mac-aarch64' ./scripts/build-internal-release.sh macos", + "package:team:windows": "HOLOLAKE_TAURI_CONFIG=src-tauri/tauri.team.conf.json HOLOLAKE_INSTALLER_BASENAME='HoloLake-Era-{version}-Team-Foundation-Windows-x64-setup' ./scripts/build-internal-release.sh windows", "prepare": "husky" }, "dependencies": { diff --git a/scripts/build-macos-internal.sh b/scripts/build-macos-internal.sh index c772572..3f70840 100755 --- a/scripts/build-macos-internal.sh +++ b/scripts/build-macos-internal.sh @@ -9,19 +9,37 @@ cd "$repo_root" target="${HOLOLAKE_MAC_TARGET:-aarch64-apple-darwin}" version="$(node scripts/internal-release-version.mjs src-tauri/tauri.conf.json "${HOLOLAKE_VERSION:-}")" output_dir="${HOLOLAKE_OUTPUT_DIR:-$repo_root/artifacts/internal/$version}" -bundle_dir="$repo_root/src-tauri/target/$target/release/bundle/macos" -app="$bundle_dir/HoloLake Era.app" +target_root="${CARGO_TARGET_DIR:-$repo_root/src-tauri/target}" +bundle_dir="$target_root/$target/release/bundle/macos" +app="$bundle_dir/${HOLOLAKE_APP_NAME:-HoloLake Era}.app" installer="$output_dir/HoloLake-Era-$version-Mac-internal-aarch64.dmg" +tauri_config="${HOLOLAKE_TAURI_CONFIG:-}" +if [[ -n "${HOLOLAKE_INSTALLER_BASENAME:-}" ]]; then + installer_basename="${HOLOLAKE_INSTALLER_BASENAME//\{version\}/$version}" + installer="$output_dir/${installer_basename}.dmg" +fi -command -v pnpm >/dev/null || { echo "pnpm is required." >&2; exit 2; } +if command -v pnpm >/dev/null 2>&1; then + pnpm_cmd=(pnpm) +elif command -v corepack >/dev/null 2>&1; then + pnpm_cmd=(corepack pnpm) +else + echo "pnpm or corepack is required." >&2 + exit 2 +fi command -v hdiutil >/dev/null || { echo "hdiutil is required." >&2; exit 2; } mkdir -p "$output_dir" -pnpm install --frozen-lockfile -pnpm tauri build --target "$target" --bundles app +if [[ "${HOLOLAKE_SKIP_INSTALL:-0}" != "1" ]]; then + "${pnpm_cmd[@]}" install --frozen-lockfile +fi +[[ -x "$repo_root/node_modules/.bin/tauri" ]] || { echo "Local Tauri CLI is missing; install dependencies first." >&2; exit 2; } +tauri_args=(build --target "$target" --bundles app) +if [[ -n "$tauri_config" ]]; then tauri_args+=(--config "$tauri_config"); fi +"$repo_root/node_modules/.bin/tauri" "${tauri_args[@]}" [[ -d "$app" ]] || { echo "No macOS application bundle was produced: $app" >&2; exit 1; } -pnpm verify:internal-package "$app" +node scripts/verify-internal-package-content.mjs "$app" codesign --force --deep --sign - "$app" codesign --verify --deep --strict "$app" hdiutil create -volname "HoloLake Era $version Internal" -srcfolder "$app" -ov -format UDZO "$installer" diff --git a/scripts/build-windows-jd-cross.sh b/scripts/build-windows-jd-cross.sh index b0f94a9..59d154e 100755 --- a/scripts/build-windows-jd-cross.sh +++ b/scripts/build-windows-jd-cross.sh @@ -19,6 +19,7 @@ fi command -v node >/dev/null || { echo "Node.js is required." >&2; exit 2; } version="$(node scripts/internal-release-version.mjs src-tauri/tauri.conf.json "${HOLOLAKE_VERSION:-}")" +tauri_config="${HOLOLAKE_TAURI_CONFIG:-}" export PATH="$HOME/.cargo/bin:$PATH" if ! command -v cargo >/dev/null 2>&1; then @@ -44,15 +45,20 @@ command -v cargo-xwin >/dev/null || cargo install cargo-xwin --locked pnpm install --frozen-lockfile # Tauri's Linux CLI intentionally only exposes Linux bundle targets. Compile the # Windows application with cargo-xwin, then hand the resulting payload to NSIS. -pnpm tauri build --runner cargo-xwin --target "$target" --no-bundle +tauri_args=(build --runner cargo-xwin --target "$target" --no-bundle) +if [[ -n "$tauri_config" ]]; then tauri_args+=(--config "$tauri_config"); fi +pnpm tauri "${tauri_args[@]}" -release_dir="$repo_root/src-tauri/target/$target/release" +target_root="${CARGO_TARGET_DIR:-$repo_root/src-tauri/target}" +release_dir="$target_root/$target/release" app_exe="$release_dir/tolaria.exe" [[ -f "$app_exe" ]] || { echo "No Windows executable was produced: $app_exe" >&2; exit 1; } bundle_dir="$release_dir/bundle/nsis" stage_dir="$bundle_dir/stage" -installer="$bundle_dir/HoloLake-Era_${version}_x64-internal-setup.exe" +installer_basename="${HOLOLAKE_INSTALLER_BASENAME:-HoloLake-Era_${version}_x64-internal-setup}" +installer_basename="${installer_basename//\{version\}/$version}" +installer="$bundle_dir/${installer_basename}.exe" rm -rf "$stage_dir" mkdir -p "$stage_dir/resources" "$bundle_dir" cp "$app_exe" "$stage_dir/HoloLake Era.exe" diff --git a/scripts/finalize-team-foundation-build.mjs b/scripts/finalize-team-foundation-build.mjs new file mode 100644 index 0000000..b4d3ef7 --- /dev/null +++ b/scripts/finalize-team-foundation-build.mjs @@ -0,0 +1,3 @@ +import { rename } from 'node:fs/promises' + +await rename('dist/team-foundation.html', 'dist/index.html') diff --git a/src-tauri/gen/apple/HoloLake.xcodeproj/project.pbxproj b/src-tauri/gen/apple/HoloLake.xcodeproj/project.pbxproj new file mode 100644 index 0000000..341a674 --- /dev/null +++ b/src-tauri/gen/apple/HoloLake.xcodeproj/project.pbxproj @@ -0,0 +1,798 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 10BC764F3DECE7B9FDC8F1EB /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 12F6AA9DA589FC51C9D843C3 /* WebKit.framework */; }; + 10CF0B2A75125AB882A4104B /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60D77C95CDA4878AC31E06FC /* Metal.framework */; }; + 1E3F1D473076F96C5929CEE7 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E5CBD70FB2815D19C3F0190 /* CoreGraphics.framework */; }; + 30810FE969AAA1DFE091637C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3BBE6E79A4BF3832CE315919 /* Assets.xcassets */; }; + 574E9FC1DB877392B7BF5918 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = 0F60A50A996D2D783A5FD25F /* assets */; }; + 6BA90420617661093E6C004A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 476D4C25E501B2DB819B83EF /* Security.framework */; }; + 888E277D0583DEC4A5F817FA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28F8BF20C12EF3B0D970C4BE /* QuartzCore.framework */; }; + 890AF7B1E9D69D4FBA033F99 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26BB1CFE5D89468C0954F3D7 /* UIKit.framework */; }; + 9E4FC2FF2D11E16C85D0CA22 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6A8D7ABE8518DC962AEE83D2 /* main.mm */; }; + A22C9A35CAAB2DF45F783F3B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A9D939D7C6842A013F9E9D2D /* LaunchScreen.storyboard */; }; + BFA08714B1F1FFA160554E4E /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C68619FE2409BD0403F0F822 /* MetalKit.framework */; }; + E52656C9AA3CE79F8BD9C340 /* libapp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 907D2515583F8E3DAA94C653 /* libapp.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 0050B284AED1F6607547DDDF /* cache.rs */ = {isa = PBXFileReference; path = cache.rs; sourceTree = ""; }; + 0075CBC9552C222333830937 /* menu.rs */ = {isa = PBXFileReference; path = menu.rs; sourceTree = ""; }; + 010158A81A8DD44ABBAA4BCC /* codex_cli.rs */ = {isa = PBXFileReference; path = codex_cli.rs; sourceTree = ""; }; + 015F375350B0DCCF932CD855 /* path_identity.rs */ = {isa = PBXFileReference; path = path_identity.rs; sourceTree = ""; }; + 01A36EEB3D914E2049B80F8C /* folder_and_file_kind.rs */ = {isa = PBXFileReference; path = folder_and_file_kind.rs; sourceTree = ""; }; + 057242D51175B2DA743FFEEC /* rename_cmds.rs */ = {isa = PBXFileReference; path = rename_cmds.rs; sourceTree = ""; }; + 057E964B8FFDE93C6C0DE7F0 /* paths.rs */ = {isa = PBXFileReference; path = paths.rs; sourceTree = ""; }; + 06D4D353ACDD7DA2F35B49E8 /* delete.rs */ = {isa = PBXFileReference; path = delete.rs; sourceTree = ""; }; + 082E515A19172B9A0992BA4F /* conflict.rs */ = {isa = PBXFileReference; path = conflict.rs; sourceTree = ""; }; + 09754A5CDE571D89F3563080 /* migration.rs */ = {isa = PBXFileReference; path = migration.rs; sourceTree = ""; }; + 09D44DF00534FAA275529BF9 /* remote_config.rs */ = {isa = PBXFileReference; path = remote_config.rs; sourceTree = ""; }; + 0BF29A2DBD08245184C62509 /* view_value_conversions.rs */ = {isa = PBXFileReference; path = view_value_conversions.rs; sourceTree = ""; }; + 0F60A50A996D2D783A5FD25F /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = SOURCE_ROOT; }; + 0FCCFC9E2A1E037C3491E7F5 /* pi_events.rs */ = {isa = PBXFileReference; path = pi_events.rs; sourceTree = ""; }; + 1179CD8FF58077DDF7E99299 /* mod.rs */ = {isa = PBXFileReference; path = mod.rs; sourceTree = ""; }; + 121AED7D3C84479EC638C2E8 /* antigravity_cli.rs */ = {isa = PBXFileReference; path = antigravity_cli.rs; sourceTree = ""; }; + 128C9606725F612692B8438E /* getting_started.rs */ = {isa = PBXFileReference; path = getting_started.rs; sourceTree = ""; }; + 12F6AA9DA589FC51C9D843C3 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; + 1315706C702DC2397F3B802E /* scan_cmds.rs */ = {isa = PBXFileReference; path = scan_cmds.rs; sourceTree = ""; }; + 14962FC08F5BBCA3DFF34DD4 /* copilot_cli.rs */ = {isa = PBXFileReference; path = copilot_cli.rs; sourceTree = ""; }; + 14C532D36F6C1157D9C129D1 /* upstream.rs */ = {isa = PBXFileReference; path = upstream.rs; sourceTree = ""; }; + 1BB054E84CD7A1962922A3E2 /* provider.rs */ = {isa = PBXFileReference; path = provider.rs; sourceTree = ""; }; + 1C41778F8CEEEBAC8FCC5F13 /* ai_models.rs */ = {isa = PBXFileReference; path = ai_models.rs; sourceTree = ""; }; + 1CBDAF21C861C3AB97AC482D /* memory.rs */ = {isa = PBXFileReference; path = memory.rs; sourceTree = ""; }; + 20AE80661DFE787E09398F4F /* antigravity_discovery.rs */ = {isa = PBXFileReference; path = antigravity_discovery.rs; sourceTree = ""; }; + 22092BA85067CC737DBBAD05 /* commit.rs */ = {isa = PBXFileReference; path = commit.rs; sourceTree = ""; }; + 22EBF553582EACF370284B42 /* display_metadata.rs */ = {isa = PBXFileReference; path = display_metadata.rs; sourceTree = ""; }; + 26948CCB253A8A9438E1DFF6 /* folders.rs */ = {isa = PBXFileReference; path = folders.rs; sourceTree = ""; }; + 26BB1CFE5D89468C0954F3D7 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 2869AD5AF9EBC3A2F6F89A96 /* system_metadata_tests.rs */ = {isa = PBXFileReference; path = system_metadata_tests.rs; sourceTree = ""; }; + 28F8BF20C12EF3B0D970C4BE /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 2E55F0E500944FFBEDF36439 /* credentials.rs */ = {isa = PBXFileReference; path = credentials.rs; sourceTree = ""; }; + 2F38683CB597F0CC57478E4A /* main.rs */ = {isa = PBXFileReference; path = main.rs; sourceTree = ""; }; + 2FC6224DED146A056DBEFAFA /* title_sync.rs */ = {isa = PBXFileReference; path = title_sync.rs; sourceTree = ""; }; + 3202961ACB715D8D472F795C /* pi_config.rs */ = {isa = PBXFileReference; path = pi_config.rs; sourceTree = ""; }; + 348A425343E36A5B9DC950F4 /* sheet.rs */ = {isa = PBXFileReference; path = sheet.rs; sourceTree = ""; }; + 354F27756754D7E66226E8C8 /* view_cmds.rs */ = {isa = PBXFileReference; path = view_cmds.rs; sourceTree = ""; }; + 363304D4E0297987B24BB926 /* status.rs */ = {isa = PBXFileReference; path = status.rs; sourceTree = ""; }; + 3BBE6E79A4BF3832CE315919 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 3CD4014D86632C50AF20DE59 /* ai_agents.rs */ = {isa = PBXFileReference; path = ai_agents.rs; sourceTree = ""; }; + 3D266F3E587C8CAFD43897AB /* window_state.rs */ = {isa = PBXFileReference; path = window_state.rs; sourceTree = ""; }; + 3EF2534081FDE3316E028081 /* dates.rs */ = {isa = PBXFileReference; path = dates.rs; sourceTree = ""; }; + 3FE3C66FF30B84195FA98C1A /* opencode_events.rs */ = {isa = PBXFileReference; path = opencode_events.rs; sourceTree = ""; }; + 41B8445BDA2EEFFB636C2F27 /* lifecycle_cmds.rs */ = {isa = PBXFileReference; path = lifecycle_cmds.rs; sourceTree = ""; }; + 4207C0C689A9DEF15CA8888C /* vault.rs */ = {isa = PBXFileReference; path = vault.rs; sourceTree = ""; }; + 42D0C09784FF734A5CC92E40 /* entry.rs */ = {isa = PBXFileReference; path = entry.rs; sourceTree = ""; }; + 458437264D37E162C02F7E01 /* vault_watcher.rs */ = {isa = PBXFileReference; path = vault_watcher.rs; sourceTree = ""; }; + 463BC00E27FDD63E84BFDACD /* parsing.rs */ = {isa = PBXFileReference; path = parsing.rs; sourceTree = ""; }; + 476D4C25E501B2DB819B83EF /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 4A46898BA1C969B2646B4B80 /* pdf_export.rs */ = {isa = PBXFileReference; path = pdf_export.rs; sourceTree = ""; }; + 4C1FDAEA4662D9A6260A58DE /* hermes_discovery.rs */ = {isa = PBXFileReference; path = hermes_discovery.rs; sourceTree = ""; }; + 4D52F451E32D5D9CA7AFB9AA /* author.rs */ = {isa = PBXFileReference; path = author.rs; sourceTree = ""; }; + 4E947F33478FAB67227CFCCB /* mod.rs */ = {isa = PBXFileReference; path = mod.rs; sourceTree = ""; }; + 4F0D35BE7398C3602AB06629 /* command.rs */ = {isa = PBXFileReference; path = command.rs; sourceTree = ""; }; + 5450814D3827CCD69F01A241 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bindings.h; sourceTree = ""; }; + 5766FC68AFF52E5D601A2201 /* image.rs */ = {isa = PBXFileReference; path = image.rs; sourceTree = ""; }; + 5986643AE3444A64F2EC3699 /* HoloLake_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = HoloLake_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 5A06AA9064684BD5F26156B3 /* lib.rs */ = {isa = PBXFileReference; path = lib.rs; sourceTree = ""; }; + 5B0390DD26F6B3080CFE1531 /* opencode.rs */ = {isa = PBXFileReference; path = opencode.rs; sourceTree = ""; }; + 5BFC39CB9F1243B4474C3BB6 /* app_updater.rs */ = {isa = PBXFileReference; path = app_updater.rs; sourceTree = ""; }; + 5D6A7764044526D11B69B748 /* pulse.rs */ = {isa = PBXFileReference; path = pulse.rs; sourceTree = ""; }; + 60D77C95CDA4878AC31E06FC /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; + 66E7FE04B14503C592B73CD0 /* view_relationships.rs */ = {isa = PBXFileReference; path = view_relationships.rs; sourceTree = ""; }; + 675DE5C585D832EC23F4BFF3 /* archival_metadata.rs */ = {isa = PBXFileReference; path = archival_metadata.rs; sourceTree = ""; }; + 68EDAECA09ECC7BC74B1088C /* subprocess.rs */ = {isa = PBXFileReference; path = subprocess.rs; sourceTree = ""; }; + 6A8D7ABE8518DC962AEE83D2 /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = ""; }; + 6B7EB67FFE128AB20A135E6E /* folders.rs */ = {isa = PBXFileReference; path = folders.rs; sourceTree = ""; }; + 6D03B0E75CD5CDAFA20644BC /* connect.rs */ = {isa = PBXFileReference; path = connect.rs; sourceTree = ""; }; + 6E98CFB59596D798EB7DCB34 /* type_templates.rs */ = {isa = PBXFileReference; path = type_templates.rs; sourceTree = ""; }; + 6F0DA82A2114B791EDAB7300 /* real_vault_consistency.rs */ = {isa = PBXFileReference; path = real_vault_consistency.rs; sourceTree = ""; }; + 6F4D5A90038E5C644B0B92A5 /* hermes_cli.rs */ = {isa = PBXFileReference; path = hermes_cli.rs; sourceTree = ""; }; + 700C8B5C02E5F70B26055FFD /* remote_branch_tests.rs */ = {isa = PBXFileReference; path = remote_branch_tests.rs; sourceTree = ""; }; + 73CCD2E1120A28AD85F99137 /* type_and_links.rs */ = {isa = PBXFileReference; path = type_and_links.rs; sourceTree = ""; }; + 74958B90904CF6F4DD914C06 /* frontmatter_regression_tests.rs */ = {isa = PBXFileReference; path = frontmatter_regression_tests.rs; sourceTree = ""; }; + 76DEFD594E4794AA24544225 /* parsing_tests.rs */ = {isa = PBXFileReference; path = parsing_tests.rs; sourceTree = ""; }; + 7A12A53788441DDEC467ADF9 /* complex_frontmatter.rs */ = {isa = PBXFileReference; path = complex_frontmatter.rs; sourceTree = ""; }; + 7B0BC7CD8DCDBD326123B1E1 /* trash.rs */ = {isa = PBXFileReference; path = trash.rs; sourceTree = ""; }; + 7BF95AB601E1EA43C76FEE79 /* telemetry.rs */ = {isa = PBXFileReference; path = telemetry.rs; sourceTree = ""; }; + 7D2B082E58B3456C21A81C48 /* config_seed.rs */ = {isa = PBXFileReference; path = config_seed.rs; sourceTree = ""; }; + 7D8F18C847A1FF6B2BDB0356 /* ai.rs */ = {isa = PBXFileReference; path = ai.rs; sourceTree = ""; }; + 816915173E861F05D186A727 /* pi_discovery.rs */ = {isa = PBXFileReference; path = pi_discovery.rs; sourceTree = ""; }; + 818CA203C2C91ABABF95A8CB /* mod.rs */ = {isa = PBXFileReference; path = mod.rs; sourceTree = ""; }; + 81F8B518EC2593A40DAA5503 /* remote.rs */ = {isa = PBXFileReference; path = remote.rs; sourceTree = ""; }; + 85A5FC54DAD705312260A21A /* scan_and_file_access.rs */ = {isa = PBXFileReference; path = scan_and_file_access.rs; sourceTree = ""; }; + 87147D77664A5051BBA28592 /* mod.rs */ = {isa = PBXFileReference; path = mod.rs; sourceTree = ""; }; + 8961178AD8EA4CC56A023659 /* view_date_filters.rs */ = {isa = PBXFileReference; path = view_date_filters.rs; sourceTree = ""; }; + 8D2E06DCBF77C0D6AC0FB24C /* mod_tests.rs */ = {isa = PBXFileReference; path = mod_tests.rs; sourceTree = ""; }; + 8E5CBD70FB2815D19C3F0190 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 8FD8EFD959EE4C4185BD712D /* windows_cmd_shim.rs */ = {isa = PBXFileReference; path = windows_cmd_shim.rs; sourceTree = ""; }; + 9049C59DDCC9763ACB36C5F3 /* opencode_discovery.rs */ = {isa = PBXFileReference; path = opencode_discovery.rs; sourceTree = ""; }; + 907D2515583F8E3DAA94C653 /* libapp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapp.a; sourceTree = ""; }; + 96BDADEAB5BE019394D4DF4C /* opencode_cli.rs */ = {isa = PBXFileReference; path = opencode_cli.rs; sourceTree = ""; }; + 9992DE2C71B8768B3E090D80 /* clone.rs */ = {isa = PBXFileReference; path = clone.rs; sourceTree = ""; }; + 9A57A197EBB4AEAC23ED6F36 /* git.rs */ = {isa = PBXFileReference; path = git.rs; sourceTree = ""; }; + 9A611472FDB8AC605F500C3F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 9B5BEB3EE5C7932B4E065849 /* clipboard.rs */ = {isa = PBXFileReference; path = clipboard.rs; sourceTree = ""; }; + 9C68630C9CBDDB447BC5E879 /* app_icon.rs */ = {isa = PBXFileReference; path = app_icon.rs; sourceTree = ""; }; + 9D7F16C81C610385B6CA9B46 /* search.rs */ = {isa = PBXFileReference; path = search.rs; sourceTree = ""; }; + 9EAFBB5DB3A9DC0A7B2E8FF6 /* frontmatter.rs */ = {isa = PBXFileReference; path = frontmatter.rs; sourceTree = ""; }; + A01712BAB3D6830A0BC75710 /* remote_status.rs */ = {isa = PBXFileReference; path = remote_status.rs; sourceTree = ""; }; + A0FB232A6B19885BD9BDCA62 /* boundary.rs */ = {isa = PBXFileReference; path = boundary.rs; sourceTree = ""; }; + A16DE2463D72666355CA347B /* antigravity_config.rs */ = {isa = PBXFileReference; path = antigravity_config.rs; sourceTree = ""; }; + A1AE659A16F1D92E77E9E687 /* views.rs */ = {isa = PBXFileReference; path = views.rs; sourceTree = ""; }; + A64C1E3DB12B7D51417FBED4 /* vault_list.rs */ = {isa = PBXFileReference; path = vault_list.rs; sourceTree = ""; }; + A8647B6883D11614B6E97DB3 /* copilot_discovery.rs */ = {isa = PBXFileReference; path = copilot_discovery.rs; sourceTree = ""; }; + A8F3EABFCD65C8663D7D2FDC /* rename.rs */ = {isa = PBXFileReference; path = rename.rs; sourceTree = ""; }; + A8F4939901A70030BD872898 /* rename_transaction.rs */ = {isa = PBXFileReference; path = rename_transaction.rs; sourceTree = ""; }; + A9D939D7C6842A013F9E9D2D /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; + AE2B2E577D7A7ABD77E37F57 /* relationship_key_tests.rs */ = {isa = PBXFileReference; path = relationship_key_tests.rs; sourceTree = ""; }; + B0488C703D2C6B46C91C47DA /* ai_agent_processes.rs */ = {isa = PBXFileReference; path = ai_agent_processes.rs; sourceTree = ""; }; + B2ABF84048E93D7CD435A4FA /* opencode_config.rs */ = {isa = PBXFileReference; path = opencode_config.rs; sourceTree = ""; }; + B43462DD1247187BEC7B2867 /* mcp_config.rs */ = {isa = PBXFileReference; path = mcp_config.rs; sourceTree = ""; }; + B87EE0F054D9C201C322C9B1 /* opencode_events_tests.rs */ = {isa = PBXFileReference; path = opencode_events_tests.rs; sourceTree = ""; }; + B88D960D36A57345E09B5B80 /* keys.rs */ = {isa = PBXFileReference; path = keys.rs; sourceTree = ""; }; + B9F7A500BB678F7C6C5EFA99 /* history.rs */ = {isa = PBXFileReference; path = history.rs; sourceTree = ""; }; + BA4747AF028A869AA1A1A6DC /* basics.rs */ = {isa = PBXFileReference; path = basics.rs; sourceTree = ""; }; + BBE04C1F55BC29695FEE4539 /* runtime.rs */ = {isa = PBXFileReference; path = runtime.rs; sourceTree = ""; }; + BC1398337782B4F13550069B /* modified_dates_tests.rs */ = {isa = PBXFileReference; path = modified_dates_tests.rs; sourceTree = ""; }; + BD49C0127DD47B9259DDB6DC /* relationships.rs */ = {isa = PBXFileReference; path = relationships.rs; sourceTree = ""; }; + C0126E76F91A13BBDBC5904C /* view_migration.rs */ = {isa = PBXFileReference; path = view_migration.rs; sourceTree = ""; }; + C2AD8E13B962ECF439B7E1E5 /* yaml.rs */ = {isa = PBXFileReference; path = yaml.rs; sourceTree = ""; }; + C3ED1D8403428C88C5F63503 /* kiro_discovery.rs */ = {isa = PBXFileReference; path = kiro_discovery.rs; sourceTree = ""; }; + C55B8EDBBEB11312B57B7591 /* ops.rs */ = {isa = PBXFileReference; path = ops.rs; sourceTree = ""; }; + C66F99524B45C69B7210BDEE /* version.rs */ = {isa = PBXFileReference; path = version.rs; sourceTree = ""; }; + C68619FE2409BD0403F0F822 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; + C6CD6117887727F3A4D96F57 /* cli_agent_runtime.rs */ = {isa = PBXFileReference; path = cli_agent_runtime.rs; sourceTree = ""; }; + C7F71AD744A1B18D2DACDC62 /* ai_model_tools.rs */ = {isa = PBXFileReference; path = ai_model_tools.rs; sourceTree = ""; }; + CAA8F8764EF165BAD372E0AB /* file_cmds.rs */ = {isa = PBXFileReference; path = file_cmds.rs; sourceTree = ""; }; + CBE02C8F152E451278EA827C /* view_tests.rs */ = {isa = PBXFileReference; path = view_tests.rs; sourceTree = ""; }; + CECEC916A37B4A001FEEFF9A /* file.rs */ = {isa = PBXFileReference; path = file.rs; sourceTree = ""; }; + D1CBEA64917CE1F1C3A5589D /* file_url.rs */ = {isa = PBXFileReference; path = file_url.rs; sourceTree = ""; }; + D3757B9773F2FA1B992C7EB1 /* shell_env.rs */ = {isa = PBXFileReference; path = shell_env.rs; sourceTree = ""; }; + D860F78F8B5272FDB3AE6247 /* git_clone.rs */ = {isa = PBXFileReference; path = git_clone.rs; sourceTree = ""; }; + D8B35D0B4002E064A68C5918 /* ops_update_tests.rs */ = {isa = PBXFileReference; path = ops_update_tests.rs; sourceTree = ""; }; + DB739EBCB89E3A26BD0494C8 /* extraction.rs */ = {isa = PBXFileReference; path = extraction.rs; sourceTree = ""; }; + DC2E71B56C45C04CAE6565F0 /* git_connect.rs */ = {isa = PBXFileReference; path = git_connect.rs; sourceTree = ""; }; + DC4FA3AE9642BBE51F638B89 /* runtime.rs */ = {isa = PBXFileReference; path = runtime.rs; sourceTree = ""; }; + DC6FADA70D52DCF194FF7D6C /* system.rs */ = {isa = PBXFileReference; path = system.rs; sourceTree = ""; }; + E479065A9C78E592C84F4944 /* remote_url.rs */ = {isa = PBXFileReference; path = remote_url.rs; sourceTree = ""; }; + E4FA358B012D1EDF0267B63F /* claude_invocation.rs */ = {isa = PBXFileReference; path = claude_invocation.rs; sourceTree = ""; }; + EA0CD2EF0B8E39E98114B8B1 /* laputa_iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = laputa_iOS.entitlements; sourceTree = ""; }; + EBBF2E18D884BEAE0BB5EABE /* pi_events_tests.rs */ = {isa = PBXFileReference; path = pi_events_tests.rs; sourceTree = ""; }; + EC2E3E3FD74DE9987F1F326B /* mcp.rs */ = {isa = PBXFileReference; path = mcp.rs; sourceTree = ""; }; + ECE47DEFF64DBD80238E7C96 /* kiro_cli.rs */ = {isa = PBXFileReference; path = kiro_cli.rs; sourceTree = ""; }; + F2C168663A35EAABC3AC0E00 /* filename_rules.rs */ = {isa = PBXFileReference; path = filename_rules.rs; sourceTree = ""; }; + F304454433962A99CF538071 /* line_stream.rs */ = {isa = PBXFileReference; path = line_stream.rs; sourceTree = ""; }; + F4EDF4DE2E778C5A03B94435 /* linux_appimage.rs */ = {isa = PBXFileReference; path = linux_appimage.rs; sourceTree = ""; }; + F4F90594F8CD2DB418876246 /* settings.rs */ = {isa = PBXFileReference; path = settings.rs; sourceTree = ""; }; + F6671256B6EF31BA8EEB7622 /* app_config.rs */ = {isa = PBXFileReference; path = app_config.rs; sourceTree = ""; }; + F6CCA1B5F651CD7BE868E102 /* claude_cli.rs */ = {isa = PBXFileReference; path = claude_cli.rs; sourceTree = ""; }; + F77DDF68DB111E6E824780D4 /* frontmatter_cmds.rs */ = {isa = PBXFileReference; path = frontmatter_cmds.rs; sourceTree = ""; }; + F7833823F42B1D5F9031B534 /* app_icon.rs */ = {isa = PBXFileReference; path = app_icon.rs; sourceTree = ""; }; + FB24334BDF17362ADB6AFAF8 /* journal_type_visibility.rs */ = {isa = PBXFileReference; path = journal_type_visibility.rs; sourceTree = ""; }; + FB6CC358F33CD2DDB4DFB1FE /* ignored.rs */ = {isa = PBXFileReference; path = ignored.rs; sourceTree = ""; }; + FCC12D491DEEA8F9048BEB3C /* pi_cli.rs */ = {isa = PBXFileReference; path = pi_cli.rs; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + C5C4481C06CDA35095034A53 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E52656C9AA3CE79F8BD9C340 /* libapp.a in Frameworks */, + 1E3F1D473076F96C5929CEE7 /* CoreGraphics.framework in Frameworks */, + 10CF0B2A75125AB882A4104B /* Metal.framework in Frameworks */, + BFA08714B1F1FFA160554E4E /* MetalKit.framework in Frameworks */, + 888E277D0583DEC4A5F817FA /* QuartzCore.framework in Frameworks */, + 6BA90420617661093E6C004A /* Security.framework in Frameworks */, + 890AF7B1E9D69D4FBA033F99 /* UIKit.framework in Frameworks */, + 10BC764F3DECE7B9FDC8F1EB /* WebKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0EEEEBEC725F0B590CDC8EA7 /* git */ = { + isa = PBXGroup; + children = ( + 4D52F451E32D5D9CA7AFB9AA /* author.rs */, + 9992DE2C71B8768B3E090D80 /* clone.rs */, + 4F0D35BE7398C3602AB06629 /* command.rs */, + 22092BA85067CC737DBBAD05 /* commit.rs */, + 082E515A19172B9A0992BA4F /* conflict.rs */, + 6D03B0E75CD5CDAFA20644BC /* connect.rs */, + 2E55F0E500944FFBEDF36439 /* credentials.rs */, + 3EF2534081FDE3316E028081 /* dates.rs */, + D1CBEA64917CE1F1C3A5589D /* file_url.rs */, + B9F7A500BB678F7C6C5EFA99 /* history.rs */, + 87147D77664A5051BBA28592 /* mod.rs */, + 1BB054E84CD7A1962922A3E2 /* provider.rs */, + 5D6A7764044526D11B69B748 /* pulse.rs */, + 700C8B5C02E5F70B26055FFD /* remote_branch_tests.rs */, + 09D44DF00534FAA275529BF9 /* remote_config.rs */, + A01712BAB3D6830A0BC75710 /* remote_status.rs */, + E479065A9C78E592C84F4944 /* remote_url.rs */, + 81F8B518EC2593A40DAA5503 /* remote.rs */, + 363304D4E0297987B24BB926 /* status.rs */, + 14C532D36F6C1157D9C129D1 /* upstream.rs */, + ); + path = git; + sourceTree = ""; + }; + 24D40E45930F3723C3E550D0 /* commands */ = { + isa = PBXGroup; + children = ( + 7D8F18C847A1FF6B2BDB0356 /* ai.rs */, + F7833823F42B1D5F9031B534 /* app_icon.rs */, + 9B5BEB3EE5C7932B4E065849 /* clipboard.rs */, + 06D4D353ACDD7DA2F35B49E8 /* delete.rs */, + 6B7EB67FFE128AB20A135E6E /* folders.rs */, + D860F78F8B5272FDB3AE6247 /* git_clone.rs */, + DC2E71B56C45C04CAE6565F0 /* git_connect.rs */, + 9A57A197EBB4AEAC23ED6F36 /* git.rs */, + 1CBDAF21C861C3AB97AC482D /* memory.rs */, + 4E947F33478FAB67227CFCCB /* mod.rs */, + 4A46898BA1C969B2646B4B80 /* pdf_export.rs */, + DC4FA3AE9642BBE51F638B89 /* runtime.rs */, + 348A425343E36A5B9DC950F4 /* sheet.rs */, + DC6FADA70D52DCF194FF7D6C /* system.rs */, + 4207C0C689A9DEF15CA8888C /* vault.rs */, + C66F99524B45C69B7210BDEE /* version.rs */, + F195675449CD313E2231565D /* vault */, + ); + path = commands; + sourceTree = ""; + }; + 25D8109B94A4D5FA1ADBFFAC /* mcp */ = { + isa = PBXGroup; + children = ( + DB739EBCB89E3A26BD0494C8 /* extraction.rs */, + 5B0390DD26F6B3080CFE1531 /* opencode.rs */, + 057E964B8FFDE93C6C0DE7F0 /* paths.rs */, + BBE04C1F55BC29695FEE4539 /* runtime.rs */, + 68EDAECA09ECC7BC74B1088C /* subprocess.rs */, + ); + path = mcp; + sourceTree = ""; + }; + 375B38CFEED2D8C01FF6B250 /* src */ = { + isa = PBXGroup; + children = ( + B0488C703D2C6B46C91C47DA /* ai_agent_processes.rs */, + 3CD4014D86632C50AF20DE59 /* ai_agents.rs */, + C7F71AD744A1B18D2DACDC62 /* ai_model_tools.rs */, + 1C41778F8CEEEBAC8FCC5F13 /* ai_models.rs */, + 121AED7D3C84479EC638C2E8 /* antigravity_cli.rs */, + A16DE2463D72666355CA347B /* antigravity_config.rs */, + 20AE80661DFE787E09398F4F /* antigravity_discovery.rs */, + F6671256B6EF31BA8EEB7622 /* app_config.rs */, + 9C68630C9CBDDB447BC5E879 /* app_icon.rs */, + 5BFC39CB9F1243B4474C3BB6 /* app_updater.rs */, + F6CCA1B5F651CD7BE868E102 /* claude_cli.rs */, + E4FA358B012D1EDF0267B63F /* claude_invocation.rs */, + C6CD6117887727F3A4D96F57 /* cli_agent_runtime.rs */, + 010158A81A8DD44ABBAA4BCC /* codex_cli.rs */, + 14962FC08F5BBCA3DFF34DD4 /* copilot_cli.rs */, + A8647B6883D11614B6E97DB3 /* copilot_discovery.rs */, + 6F4D5A90038E5C644B0B92A5 /* hermes_cli.rs */, + 4C1FDAEA4662D9A6260A58DE /* hermes_discovery.rs */, + ECE47DEFF64DBD80238E7C96 /* kiro_cli.rs */, + C3ED1D8403428C88C5F63503 /* kiro_discovery.rs */, + 5A06AA9064684BD5F26156B3 /* lib.rs */, + F4EDF4DE2E778C5A03B94435 /* linux_appimage.rs */, + 2F38683CB597F0CC57478E4A /* main.rs */, + EC2E3E3FD74DE9987F1F326B /* mcp.rs */, + 0075CBC9552C222333830937 /* menu.rs */, + 96BDADEAB5BE019394D4DF4C /* opencode_cli.rs */, + B2ABF84048E93D7CD435A4FA /* opencode_config.rs */, + 9049C59DDCC9763ACB36C5F3 /* opencode_discovery.rs */, + B87EE0F054D9C201C322C9B1 /* opencode_events_tests.rs */, + 3FE3C66FF30B84195FA98C1A /* opencode_events.rs */, + FCC12D491DEEA8F9048BEB3C /* pi_cli.rs */, + 3202961ACB715D8D472F795C /* pi_config.rs */, + 816915173E861F05D186A727 /* pi_discovery.rs */, + EBBF2E18D884BEAE0BB5EABE /* pi_events_tests.rs */, + 0FCCFC9E2A1E037C3491E7F5 /* pi_events.rs */, + 9D7F16C81C610385B6CA9B46 /* search.rs */, + F4F90594F8CD2DB418876246 /* settings.rs */, + 7BF95AB601E1EA43C76FEE79 /* telemetry.rs */, + A64C1E3DB12B7D51417FBED4 /* vault_list.rs */, + 458437264D37E162C02F7E01 /* vault_watcher.rs */, + 3D266F3E587C8CAFD43897AB /* window_state.rs */, + 70C8904AC6DCA135C23A111F /* cli_agent_runtime */, + 24D40E45930F3723C3E550D0 /* commands */, + DC70A0AE2754CAB63FF390CC /* frontmatter */, + 0EEEEBEC725F0B590CDC8EA7 /* git */, + 25D8109B94A4D5FA1ADBFFAC /* mcp */, + ED344194F7B84C233B93DD09 /* vault */, + ); + name = src; + path = ../../src; + sourceTree = ""; + }; + 53685D32BD42A5AD34D93205 /* bindings */ = { + isa = PBXGroup; + children = ( + 5450814D3827CCD69F01A241 /* bindings.h */, + ); + path = bindings; + sourceTree = ""; + }; + 62A4B7D340F2686BFC21EEA1 /* Externals */ = { + isa = PBXGroup; + children = ( + ); + path = Externals; + sourceTree = ""; + }; + 70C8904AC6DCA135C23A111F /* cli_agent_runtime */ = { + isa = PBXGroup; + children = ( + F304454433962A99CF538071 /* line_stream.rs */, + B43462DD1247187BEC7B2867 /* mcp_config.rs */, + D3757B9773F2FA1B992C7EB1 /* shell_env.rs */, + 8FD8EFD959EE4C4185BD712D /* windows_cmd_shim.rs */, + ); + path = cli_agent_runtime; + sourceTree = ""; + }; + 8E68112B2BC77FD0176FC686 /* laputa */ = { + isa = PBXGroup; + children = ( + 6A8D7ABE8518DC962AEE83D2 /* main.mm */, + 53685D32BD42A5AD34D93205 /* bindings */, + ); + path = laputa; + sourceTree = ""; + }; + 9E882C91B5A089FA290CC95F /* mod_tests */ = { + isa = PBXGroup; + children = ( + 675DE5C585D832EC23F4BFF3 /* archival_metadata.rs */, + BA4747AF028A869AA1A1A6DC /* basics.rs */, + 7A12A53788441DDEC467ADF9 /* complex_frontmatter.rs */, + 22EBF553582EACF370284B42 /* display_metadata.rs */, + 01A36EEB3D914E2049B80F8C /* folder_and_file_kind.rs */, + FB24334BDF17362ADB6AFAF8 /* journal_type_visibility.rs */, + 6F0DA82A2114B791EDAB7300 /* real_vault_consistency.rs */, + BD49C0127DD47B9259DDB6DC /* relationships.rs */, + 85A5FC54DAD705312260A21A /* scan_and_file_access.rs */, + 73CCD2E1120A28AD85F99137 /* type_and_links.rs */, + ); + path = mod_tests; + sourceTree = ""; + }; + ADB8E0CEBBD4C6248828DC1E /* laputa_iOS */ = { + isa = PBXGroup; + children = ( + 9A611472FDB8AC605F500C3F /* Info.plist */, + EA0CD2EF0B8E39E98114B8B1 /* laputa_iOS.entitlements */, + ); + path = laputa_iOS; + sourceTree = ""; + }; + BCC76595F04AD2075FB85DBD = { + isa = PBXGroup; + children = ( + 0F60A50A996D2D783A5FD25F /* assets */, + 3BBE6E79A4BF3832CE315919 /* Assets.xcassets */, + A9D939D7C6842A013F9E9D2D /* LaunchScreen.storyboard */, + 62A4B7D340F2686BFC21EEA1 /* Externals */, + ADB8E0CEBBD4C6248828DC1E /* laputa_iOS */, + D07B2BBD7D85A1140E7B1325 /* Sources */, + 375B38CFEED2D8C01FF6B250 /* src */, + F8799DD23A051DB64ABA21E1 /* Frameworks */, + BDD7263C80436D6C14C3E2BB /* Products */, + ); + sourceTree = ""; + }; + BDD7263C80436D6C14C3E2BB /* Products */ = { + isa = PBXGroup; + children = ( + 5986643AE3444A64F2EC3699 /* HoloLake_iOS.app */, + ); + name = Products; + sourceTree = ""; + }; + D07B2BBD7D85A1140E7B1325 /* Sources */ = { + isa = PBXGroup; + children = ( + 8E68112B2BC77FD0176FC686 /* laputa */, + ); + path = Sources; + sourceTree = ""; + }; + DC70A0AE2754CAB63FF390CC /* frontmatter */ = { + isa = PBXGroup; + children = ( + B88D960D36A57345E09B5B80 /* keys.rs */, + 1179CD8FF58077DDF7E99299 /* mod.rs */, + D8B35D0B4002E064A68C5918 /* ops_update_tests.rs */, + C55B8EDBBEB11312B57B7591 /* ops.rs */, + C2AD8E13B962ECF439B7E1E5 /* yaml.rs */, + ); + path = frontmatter; + sourceTree = ""; + }; + ED344194F7B84C233B93DD09 /* vault */ = { + isa = PBXGroup; + children = ( + 0050B284AED1F6607547DDDF /* cache.rs */, + 7D2B082E58B3456C21A81C48 /* config_seed.rs */, + 42D0C09784FF734A5CC92E40 /* entry.rs */, + CECEC916A37B4A001FEEFF9A /* file.rs */, + F2C168663A35EAABC3AC0E00 /* filename_rules.rs */, + 26948CCB253A8A9438E1DFF6 /* folders.rs */, + 74958B90904CF6F4DD914C06 /* frontmatter_regression_tests.rs */, + 9EAFBB5DB3A9DC0A7B2E8FF6 /* frontmatter.rs */, + 128C9606725F612692B8438E /* getting_started.rs */, + FB6CC358F33CD2DDB4DFB1FE /* ignored.rs */, + 5766FC68AFF52E5D601A2201 /* image.rs */, + 09754A5CDE571D89F3563080 /* migration.rs */, + 8D2E06DCBF77C0D6AC0FB24C /* mod_tests.rs */, + 818CA203C2C91ABABF95A8CB /* mod.rs */, + BC1398337782B4F13550069B /* modified_dates_tests.rs */, + 76DEFD594E4794AA24544225 /* parsing_tests.rs */, + 463BC00E27FDD63E84BFDACD /* parsing.rs */, + 015F375350B0DCCF932CD855 /* path_identity.rs */, + AE2B2E577D7A7ABD77E37F57 /* relationship_key_tests.rs */, + A8F4939901A70030BD872898 /* rename_transaction.rs */, + A8F3EABFCD65C8663D7D2FDC /* rename.rs */, + 2869AD5AF9EBC3A2F6F89A96 /* system_metadata_tests.rs */, + 2FC6224DED146A056DBEFAFA /* title_sync.rs */, + 7B0BC7CD8DCDBD326123B1E1 /* trash.rs */, + 6E98CFB59596D798EB7DCB34 /* type_templates.rs */, + 8961178AD8EA4CC56A023659 /* view_date_filters.rs */, + C0126E76F91A13BBDBC5904C /* view_migration.rs */, + 66E7FE04B14503C592B73CD0 /* view_relationships.rs */, + CBE02C8F152E451278EA827C /* view_tests.rs */, + 0BF29A2DBD08245184C62509 /* view_value_conversions.rs */, + A1AE659A16F1D92E77E9E687 /* views.rs */, + 9E882C91B5A089FA290CC95F /* mod_tests */, + ); + path = vault; + sourceTree = ""; + }; + F195675449CD313E2231565D /* vault */ = { + isa = PBXGroup; + children = ( + A0FB232A6B19885BD9BDCA62 /* boundary.rs */, + CAA8F8764EF165BAD372E0AB /* file_cmds.rs */, + F77DDF68DB111E6E824780D4 /* frontmatter_cmds.rs */, + 41B8445BDA2EEFFB636C2F27 /* lifecycle_cmds.rs */, + 057242D51175B2DA743FFEEC /* rename_cmds.rs */, + 1315706C702DC2397F3B802E /* scan_cmds.rs */, + 354F27756754D7E66226E8C8 /* view_cmds.rs */, + ); + path = vault; + sourceTree = ""; + }; + F8799DD23A051DB64ABA21E1 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 8E5CBD70FB2815D19C3F0190 /* CoreGraphics.framework */, + 907D2515583F8E3DAA94C653 /* libapp.a */, + 60D77C95CDA4878AC31E06FC /* Metal.framework */, + C68619FE2409BD0403F0F822 /* MetalKit.framework */, + 28F8BF20C12EF3B0D970C4BE /* QuartzCore.framework */, + 476D4C25E501B2DB819B83EF /* Security.framework */, + 26BB1CFE5D89468C0954F3D7 /* UIKit.framework */, + 12F6AA9DA589FC51C9D843C3 /* WebKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 7C405E12F28A63ECDF863C30 /* HoloLake_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1BC66CB9C55FA203BDD14661 /* Build configuration list for PBXNativeTarget "HoloLake_iOS" */; + buildPhases = ( + 0AD8A0E8790089BF8E7F3851 /* Build Rust Code */, + FDE5DF4B6ABD5475F59F7853 /* Sources */, + 3AC97F5F4F4789DB85510F50 /* Resources */, + C5C4481C06CDA35095034A53 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = HoloLake_iOS; + packageProductDependencies = ( + ); + productName = HoloLake_iOS; + productReference = 5986643AE3444A64F2EC3699 /* HoloLake_iOS.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0324676016167B5308CE31A /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + TargetAttributes = { + }; + }; + buildConfigurationList = 5536EFA81EFA6631A115A48E /* Build configuration list for PBXProject "HoloLake" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = BCC76595F04AD2075FB85DBD; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + productRefGroup = BDD7263C80436D6C14C3E2BB /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7C405E12F28A63ECDF863C30 /* HoloLake_iOS */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 3AC97F5F4F4789DB85510F50 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 30810FE969AAA1DFE091637C /* Assets.xcassets in Resources */, + A22C9A35CAAB2DF45F783F3B /* LaunchScreen.storyboard in Resources */, + 574E9FC1DB877392B7BF5918 /* assets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 0AD8A0E8790089BF8E7F3851 /* Build Rust Code */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Build Rust Code"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a", + "$(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "npm run -- tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths \"${FRAMEWORK_SEARCH_PATHS:?}\" --header-search-paths \"${HEADER_SEARCH_PATHS:?}\" --gcc-preprocessor-definitions \"${GCC_PREPROCESSOR_DEFINITIONS:-}\" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?}"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + FDE5DF4B6ABD5475F59F7853 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9E4FC2FF2D11E16C85D0CA22 /* main.mm in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 59094C00BE8A55D183856EE8 /* debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ARCHS = ( + arm64, + ); + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = laputa_iOS/laputa_iOS.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + ENABLE_BITCODE = NO; + "EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\".\"", + ); + INFOPLIST_FILE = laputa_iOS/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + "LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; + "LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; + PRODUCT_BUNDLE_IDENTIFIER = com.guanghulab.hololake; + PRODUCT_NAME = "HoloLake Era"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALID_ARCHS = arm64; + }; + name = debug; + }; + 6AA0389A83C50D9AFAFB7CBD /* release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = release; + }; + 8D6F3195A1CD4CA412A8E96A /* debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = debug; + }; + CEA1A776C8E7A07EB2E0981B /* release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ARCHS = ( + arm64, + ); + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = laputa_iOS/laputa_iOS.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + ENABLE_BITCODE = NO; + "EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\".\"", + ); + INFOPLIST_FILE = laputa_iOS/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + "LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; + "LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; + PRODUCT_BUNDLE_IDENTIFIER = com.guanghulab.hololake; + PRODUCT_NAME = "HoloLake Era"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALID_ARCHS = arm64; + }; + name = release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1BC66CB9C55FA203BDD14661 /* Build configuration list for PBXNativeTarget "HoloLake_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 59094C00BE8A55D183856EE8 /* debug */, + CEA1A776C8E7A07EB2E0981B /* release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = debug; + }; + 5536EFA81EFA6631A115A48E /* Build configuration list for PBXProject "HoloLake" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8D6F3195A1CD4CA412A8E96A /* debug */, + 6AA0389A83C50D9AFAFB7CBD /* release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0324676016167B5308CE31A /* Project object */; +} diff --git a/src-tauri/gen/apple/HoloLake.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/src-tauri/gen/apple/HoloLake.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/src-tauri/gen/apple/HoloLake.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/src-tauri/gen/apple/HoloLake.xcodeproj/xcshareddata/xcschemes/HoloLake_iOS.xcscheme b/src-tauri/gen/apple/HoloLake.xcodeproj/xcshareddata/xcschemes/HoloLake_iOS.xcscheme new file mode 100644 index 0000000..525723f --- /dev/null +++ b/src-tauri/gen/apple/HoloLake.xcodeproj/xcshareddata/xcschemes/HoloLake_iOS.xcscheme @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src-tauri/gen/apple/Podfile b/src-tauri/gen/apple/Podfile index 694980d..cad1985 100644 --- a/src-tauri/gen/apple/Podfile +++ b/src-tauri/gen/apple/Podfile @@ -1,8 +1,8 @@ # Uncomment the next line to define a global platform for your project -target 'laputa_iOS' do -platform :ios, '14.0' - # Pods for laputa_iOS +target 'HoloLake_iOS' do +platform :ios, '15.0' + # Pods for HoloLake_iOS end target 'laputa_macOS' do diff --git a/src-tauri/gen/apple/laputa_iOS/Info.plist b/src-tauri/gen/apple/laputa_iOS/Info.plist index e0b1335..b073bdd 100644 --- a/src-tauri/gen/apple/laputa_iOS/Info.plist +++ b/src-tauri/gen/apple/laputa_iOS/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + HoloLake CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -15,9 +17,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.1.0 + 0.1.7 CFBundleVersion - 0.1.0 + 17 LSRequiresIPhoneOS UILaunchStoryboardName @@ -30,8 +32,6 @@ UISupportedInterfaceOrientations UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad @@ -41,4 +41,4 @@ UIInterfaceOrientationLandscapeRight - \ No newline at end of file + diff --git a/src-tauri/gen/apple/project.yml b/src-tauri/gen/apple/project.yml index aea6fa2..7666603 100644 --- a/src-tauri/gen/apple/project.yml +++ b/src-tauri/gen/apple/project.yml @@ -1,8 +1,8 @@ -name: Tolaria +name: HoloLake options: - bundleIdPrefix: club.refactoring.tolaria + bundleIdPrefix: com.guanghulab.hololake deploymentTarget: - iOS: 14.0 + iOS: 15.0 fileGroups: [../../src] configs: debug: debug @@ -10,8 +10,8 @@ configs: settingGroups: app: base: - PRODUCT_NAME: Tolaria - PRODUCT_BUNDLE_IDENTIFIER: club.refactoring.tolaria + PRODUCT_NAME: HoloLake Era + PRODUCT_BUNDLE_IDENTIFIER: com.guanghulab.hololake targetTemplates: app: type: application @@ -24,7 +24,7 @@ targetTemplates: settings: groups: [app] targets: - laputa_iOS: + HoloLake_iOS: type: application platform: iOS sources: @@ -44,15 +44,14 @@ targets: UIRequiredDeviceCapabilities: [arm64, metal] UISupportedInterfaceOrientations: - UIInterfaceOrientationPortrait - - UIInterfaceOrientationLandscapeLeft - - UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad: - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - CFBundleShortVersionString: 0.1.0 - CFBundleVersion: "0.1.0" + CFBundleDisplayName: HoloLake + CFBundleShortVersionString: 0.1.7 + CFBundleVersion: "17" entitlements: path: laputa_iOS/laputa_iOS.entitlements scheme: diff --git a/src-tauri/tauri.ios.conf.json b/src-tauri/tauri.ios.conf.json new file mode 100644 index 0000000..01221b4 --- /dev/null +++ b/src-tauri/tauri.ios.conf.json @@ -0,0 +1,33 @@ +{ + "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", + "productName": "HoloLake Era", + "identifier": "com.guanghulab.hololake", + "build": { + "beforeDevCommand": "pnpm dev", + "beforeBuildCommand": "pnpm build" + }, + "app": { + "macOSPrivateApi": false, + "windows": [ + { + "title": "HoloLake Era", + "width": 430, + "height": 932, + "minWidth": 320, + "minHeight": 568, + "resizable": true, + "fullscreen": false, + "backgroundColor": "#11161A", + "dragDropEnabled": false + } + ] + }, + "bundle": { + "active": true, + "targets": ["app"], + "resources": {}, + "iOS": { + "minimumSystemVersion": "15.0" + } + } +} diff --git a/src-tauri/tauri.team.conf.json b/src-tauri/tauri.team.conf.json new file mode 100644 index 0000000..ae4a056 --- /dev/null +++ b/src-tauri/tauri.team.conf.json @@ -0,0 +1,19 @@ +{ + "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", + "productName": "HoloLake Era Team Foundation", + "identifier": "com.guanghulab.hololake.team-foundation", + "build": { + "beforeBuildCommand": "npm run build:team-foundation" + }, + "app": { + "windows": [ + { + "title": "HoloLake Era · GLS 团队基座", + "width": 1280, + "height": 820, + "minWidth": 760, + "minHeight": 560 + } + ] + } +} diff --git a/src/App.css b/src/App.css index 0ed902b..ea84ec5 100644 --- a/src/App.css +++ b/src/App.css @@ -25,6 +25,10 @@ /* Tauri's macOS traffic lights are overlaid on the title bar. Keep the product mark and title in a separate, stable lane so they never collide. */ body.mac-chrome .hololake-bar { padding-left: 92px; } +.team-foundation { min-height: 100vh; padding: clamp(24px, 5vw, 72px); color: var(--text-primary); background: radial-gradient(circle at 85% 10%, color-mix(in srgb, var(--accent-blue) 16%, transparent), transparent 32%), var(--surface-app); } +.team-foundation__header, .team-foundation__footer { display: flex; align-items: center; justify-content: space-between; color: var(--text-muted); font-size: 11px; letter-spacing: .12em; }.team-foundation__header strong { color: var(--text-primary); font-size: 16px; letter-spacing: 0; } +.team-foundation__intro { max-width: 760px; padding: clamp(64px, 12vw, 150px) 0 54px; }.team-foundation__intro > p:first-child { color: var(--accent-blue); font: 11px/1.4 monospace; letter-spacing: .12em; }.team-foundation__intro h1 { margin: 12px 0 20px; font: 500 clamp(48px, 9vw, 112px)/.95 serif; }.team-foundation__intro p:last-child { max-width: 650px; color: var(--text-secondary); font-size: 16px; line-height: 1.8; } +.team-foundation__route { display: grid; max-width: 980px; margin: 0; padding: 0; border-top: 1px solid var(--border-default); list-style: none; }.team-foundation__route li { display: grid; grid-template-columns: 56px 1fr; align-items: center; min-height: 82px; border-bottom: 1px solid var(--border-default); }.team-foundation__route li > span { color: var(--text-muted); font: 11px monospace; }.team-foundation__route div { display: flex; align-items: baseline; justify-content: space-between; gap: 20px; }.team-foundation__route code { color: var(--accent-blue); font-size: 11px; }.team-foundation__route strong { font-size: clamp(16px, 2vw, 24px); font-weight: 500; }.team-foundation__footer { margin-top: 48px; } .hololake-bar__brand { min-width: max-content; white-space: nowrap; } .hololake-bar__context { white-space: nowrap; } .hololake-home { position: relative; z-index: 2; display: flex; width: 100%; min-width: 0; overflow: hidden; color: var(--text-primary); background: var(--surface-app); } @@ -40,6 +44,7 @@ body.mac-chrome .hololake-bar { padding-left: 92px; } .channel-rail nav i[data-color="cyan"] { --tag-color: #4fd1c5; }.channel-rail nav i[data-color="blue"] { --tag-color: #60a5fa; }.channel-rail nav i[data-color="violet"] { --tag-color: #a78bfa; }.channel-rail nav i[data-color="amber"] { --tag-color: #fbbf24; }.channel-rail nav i[data-color="rose"] { --tag-color: #fb7185; }.channel-rail nav i[data-color="pink"] { --tag-color: #f472b6; }.channel-rail nav i[data-color="green"] { --tag-color: #4ade80; } .channel-rail__modules { display: grid; gap: 8px; margin-top: auto; padding: 14px 10px; border: 1px solid var(--border-default); border-radius: 10px; background: var(--surface-card); } .channel-rail__modules span { color: var(--text-muted); font-size: 10px; letter-spacing: .12em; }.channel-rail__modules b { font-size: 12px; font-weight: 550; } +.channel-mobile-nav { display: none; } .hololake-home__hero { position: relative; max-width: 740px; padding: 24px 0 56px; overflow: hidden; } .hololake-home__halo { position: absolute; right: -80px; top: -140px; width: 300px; aspect-ratio: 1; border: 1px solid var(--border-default); border-radius: 50%; opacity: .45; } .hololake-home__eyebrow, .hololake-home__section-head span { color: var(--accent-blue); font-size: 12px; letter-spacing: .12em; text-transform: uppercase; } @@ -92,7 +97,17 @@ body.mac-chrome .hololake-bar { padding-left: 92px; } .guanghu-architecture__route { overflow-x: auto; margin: 2px 0 0; padding: 12px; border-radius: 6px; color: var(--text-secondary); background: var(--surface-app); font: 11px/1.6 monospace; white-space: nowrap; } @media (max-width: 1000px) { .server-grid { grid-template-columns: 1fr; } } @media (max-width: 900px) { .channel-grid--three { grid-template-columns: 1fr; }.channel-card { min-height: 190px; }.channel-rail { width: 190px; flex-basis: 190px; } } -@media (max-width: 780px) { .hololake-home__signal-grid, .hololake-home__module-grid, .channel-grid { grid-template-columns: 1fr; }.hololake-bar__context { display: none; }.channel-workspace { padding: 28px; }.channel-rail { display: none; }.channel-breadcrumb { overflow-x: auto; }.channel-stage h1 { font-size: 42px; } } +@media (max-width: 780px) { + .hololake-bar { height: calc(52px + env(safe-area-inset-top)); padding-top: env(safe-area-inset-top); padding-inline: 16px 12px; } + .hololake-bar__brand { font-size: 15px; }.hololake-bar__context { display: none; }.hololake-bar__theme { max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .app { min-height: 0; } + .hololake-home__signal-grid, .hololake-home__module-grid, .channel-grid { grid-template-columns: 1fr; } + .hololake-home { padding-bottom: calc(70px + env(safe-area-inset-bottom)); } + .channel-workspace { padding: 20px 18px 32px; }.channel-rail { display: none; }.channel-breadcrumb { margin-bottom: 18px; overflow-x: auto; }.channel-stage h1 { font-size: clamp(38px, 12vw, 52px); }.channel-stage__lead { margin: 16px 0 24px; }.channel-stage--root { min-height: calc(100dvh - 190px); }.channel-card { min-height: 180px; padding: 20px; }.channel-grid--three { grid-template-columns: 1fr; }.server-grid { grid-template-columns: 1fr; } + .channel-mobile-nav { position: fixed; z-index: 20; right: 0; bottom: 0; left: 0; display: grid; grid-template-columns: repeat(5, 1fr); padding: 6px 8px calc(6px + env(safe-area-inset-bottom)); border-top: 1px solid var(--border-default); background: color-mix(in srgb, var(--surface-sidebar) 92%, transparent); backdrop-filter: blur(18px); } + .channel-mobile-nav button { display: grid; height: 48px; min-width: 0; place-items: center; gap: 0; padding: 2px; color: var(--text-muted); }.channel-mobile-nav button[data-active="true"] { color: var(--accent-blue); }.channel-mobile-nav span { font-size: 18px; line-height: 1; }.channel-mobile-nav small { font-size: 9px; } + .channel-dock { width: 48px; flex-basis: 48px; padding-inline: 4px; }.channel-dock button { width: 40px; } +} @media (max-width: 700px) { body.mac-chrome .hololake-bar { padding-left: 84px; }.hololake-bar__line { display: none; } } .app { diff --git a/src/TeamFoundationApp.test.tsx b/src/TeamFoundationApp.test.tsx new file mode 100644 index 0000000..dfb6f03 --- /dev/null +++ b/src/TeamFoundationApp.test.tsx @@ -0,0 +1,16 @@ +import { render, screen } from '@testing-library/react' +import { describe, expect, it } from 'vitest' +import TeamFoundationApp from './TeamFoundationApp' + +describe('TeamFoundationApp', () => { + it('exposes only the GLS public foundation workflow', () => { + render() + + expect(screen.getByRole('heading', { name: 'GLS 系统架构' })).toBeInTheDocument() + expect(screen.getByText('GLS-SYS-ARCH-001')).toBeInTheDocument() + expect(screen.getByRole('list', { name: 'GLS 公共路径' })).toBeInTheDocument() + expect(screen.queryByText('心跳核心频道')).not.toBeInTheDocument() + expect(screen.queryByText('短剧视频 AI')).not.toBeInTheDocument() + expect(screen.queryByText('服务器与灯塔节点')).not.toBeInTheDocument() + }) +}) diff --git a/src/TeamFoundationApp.tsx b/src/TeamFoundationApp.tsx new file mode 100644 index 0000000..107a8af --- /dev/null +++ b/src/TeamFoundationApp.tsx @@ -0,0 +1,30 @@ +import architecture from '../src-tauri/resources/public-architecture/gls-system-architecture.json' +import './App.css' + +export default function TeamFoundationApp() { + return ( +
+
+ HOLOLAKE · TEAM FOUNDATION + HoloLake Era +
+
+

PUBLIC ARCHITECTURE · {architecture.id}

+

GLS 系统架构

+

团队开发基座当前只承载公开 GLS 架构。企业四域、个人频道与行业模块由团队在完成原型关系重塑后继续开发。

+
+
    + {architecture.route.map((node, index) => ( +
  1. + {String(index + 1).padStart(2, '0')} +
    {node.id}{node.name_zh}
    +
  2. + ))} +
+
+ 公开安全基线 + {architecture.development_repository.id} · {architecture.development_repository.url} +
+
+ ) +} diff --git a/src/components/HoloLakeHome.test.tsx b/src/components/HoloLakeHome.test.tsx index 846e717..866e2a1 100644 --- a/src/components/HoloLakeHome.test.tsx +++ b/src/components/HoloLakeHome.test.tsx @@ -1,4 +1,4 @@ -import { fireEvent, render, screen } from '@testing-library/react' +import { fireEvent, render, screen, within } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' import { HoloLakeHome, HOLOLAKE_DEVELOPMENT_REPOSITORY_URL } from './HoloLakeHome' @@ -80,6 +80,19 @@ describe('HoloLakeHome', () => { expect(screen.getAllByRole('button', { name: /接口已预留/ })).toHaveLength(3) }) + it('provides direct channel navigation for the iPhone layout', () => { + render() + + const mobileNavigation = screen.getByRole('navigation', { name: '手机频道导航' }) + expect(mobileNavigation).toBeInTheDocument() + + fireEvent.click(within(mobileNavigation).getByRole('button', { name: /人格体/ })) + expect(screen.getByRole('heading', { name: '光之湖子系统' })).toBeInTheDocument() + + fireEvent.click(within(mobileNavigation).getByRole('button', { name: /节点/ })) + expect(screen.getByRole('heading', { name: '服务器与灯塔节点' })).toBeInTheDocument() + }) + it('opens the public domestic development repository', () => { render() diff --git a/src/components/HoloLakeHome.tsx b/src/components/HoloLakeHome.tsx index 414e81e..9b2e456 100644 --- a/src/components/HoloLakeHome.tsx +++ b/src/components/HoloLakeHome.tsx @@ -213,6 +213,14 @@ export function HoloLakeHome({ locale, onEnterKnowledgeBase }: HoloLakeHomeProps {renderRoute()} + + diff --git a/src/team-foundation-main.tsx b/src/team-foundation-main.tsx new file mode 100644 index 0000000..e52c78a --- /dev/null +++ b/src/team-foundation-main.tsx @@ -0,0 +1,8 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import TeamFoundationApp from './TeamFoundationApp' + +createRoot(document.getElementById('root')!).render( + , +) diff --git a/team-foundation.html b/team-foundation.html new file mode 100644 index 0000000..5257a9d --- /dev/null +++ b/team-foundation.html @@ -0,0 +1,12 @@ + + + + + + HoloLake Era · GLS 团队基座 + + +
+ + + diff --git a/vite.config.ts b/vite.config.ts index 2872983..fdb55a8 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -958,6 +958,7 @@ function mcpBridgeInfoPlugin(): Plugin { export default defineConfig({ plugins: [react(), tailwindcss(), vaultApiPlugin(), mcpBridgeInfoPlugin()], cacheDir: process.env.TOLARIA_VITE_CACHE_DIR, + publicDir: process.env.VITE_HOLOLAKE_DISTRIBUTION === 'team-foundation' ? false : 'public', resolve: { alias: { @@ -991,6 +992,9 @@ export default defineConfig({ envPrefix: ['VITE_', 'TAURI_'], build: { + rollupOptions: process.env.VITE_HOLOLAKE_DISTRIBUTION === 'team-foundation' + ? { input: path.resolve(__dirname, 'team-foundation.html') } + : undefined, // Tauri uses Chromium on Windows and WebKit on macOS/Linux target: process.env.TAURI_PLATFORM === 'windows' ? 'chrome105' : 'safari13', // Don't minify for debug builds