Commit Graph

72 Commits

Author SHA1 Message Date
d130ea31e2
fix(macos): generate matching WebRTC framework dSYM (#68)
Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>
2026-06-30 13:24:04 +08:00
2295960a74
chore: resolve merge conflict in pubspec.yaml (#66)
Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>
2026-06-30 12:05:51 +08:00
08ba6e30f7
fix(macos): workaround App Store Connect dSYM validation bug (#62)
* fix(macos): workaround App Store Connect dSYM validation bug for App.framework

* test: mock device and package plugins and increase timeout

- Increase sync loop timeout in thread workspace binding test to avoid flakiness
- Mock device_info and package_info plugins for gateway runtime tests
- Update pubspec.yaml version

* test: fix missing plugin in runtime_controllers_settings_account_test

* build: make sync-version.sh auto-increment build number

---------

Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>
2026-06-30 10:48:35 +08:00
01515f95ca
ci: TestFlight opt-in toggle + Xcode 27 build fixes (#54)
* ci: gate TestFlight behind opt-in toggle + Xcode 27 build fixes

TestFlight is now opt-in (default OFF). A workflow_dispatch boolean
`enable_testflight` (or the `ENABLE_TESTFLIGHT` repo variable) drives a
`prepare.outputs.testflight_enabled` flag that gates the macOS
app-store-pkg build leg and both testflight_ios/testflight_macos upload
legs. Missing Apple signing secrets no longer fail the normal DMG/IPA
release path (package-macos-app-store-pkg.sh hard-exits without them).

Xcode 27 build compatibility:
- Align Apple deployment targets so no pod sits below the app minimum
  (Xcode 27 rejects this): macOS pods + RunnerTests -> 15.6, iOS pods
  -> 15.5 to match the Runner targets.
- Add a `lipo` shim (scripts/xcode-tools/lipo) wired onto PATH in the
  iOS/macOS build phases; Xcode 27 only accepts one `-verify_arch`
  architecture per call while Flutter passes them all at once.
- macOS project hygiene: correct PrivacyInfo.xcprivacy path, set app
  display name + LSApplicationCategoryType.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test: make temp-dir cleanup resilient to concurrent-write races

The assistant execution target tests deleted their temp HOME/workspace
dirs with a raw recursive delete in addTearDown. A background flush
(e.g. controller dispose still persisting state) can keep writing into
the dir while the delete walks it, so the delete races and fails with
"Directory not empty" (errno 39), failing the test on CI.

Route all unguarded teardown deletes through the existing
_resilientDelete helper (re-check existence + retry), and harden that
helper so its final fallback never re-throws — a temp-dir cleanup
failure must never fail a test.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 07:27:09 +08:00
ca0d8a49a8
fix(installer): resume interrupted asset downloads (#49)
Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>
2026-06-29 16:36:54 +08:00
194d1dde38
fix(installer): clean up mounted DMG safely (#48)
Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>
2026-06-29 16:28:07 +08:00
ac6ce56602
fix(installer): download release assets via API (#47)
Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>
2026-06-29 16:24:17 +08:00
fa161247d3
Ci/vault secrets per platform release (#45)
* chore(security): add gitleaks config allowlisting vendored/test fixtures

Suppress false positives so `gitleaks detect` is clean:
- third_party/* (cargokit ships a public binary-verification key)
- workspace_management_unit_test.dart (obfuscated "token" fixture)
- gatewayruntime/runtime_test.go (hardcoded "device-1" test key pair)

Real leaked secrets are purged from history, not allowlisted.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(security): remove historical secret fixtures

* chore(release): bump build metadata for 1.1.5+2

* chore(release): bump version to 1.1.5+2

* chore(release): bump build metadata for 1.1.5+2

---------

Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>

* ci(release): add TestFlight release matrix

* chore(release): bump version to 1.1.5+2

* chore(release): bump build metadata for 1.1.5+2

* ci(release): add TestFlight release matrix

---------

Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>

* ci(release): load Vault secrets per-platform in build matrix

The build matrix loaded all 17 signing secrets in one shared block for
every platform. vault-action's ignoreNotFound only suppresses path-level
404s, not field-level "No match data" errors, so a single missing field
(e.g. APPLE_MAC_PROVISION_PROFILE_BASE64) failed every leg — including
linux/windows/android that need no Apple secrets.

Split the load into per-OS-family steps gated by matrix.platform:
- Apple (macos/ios): Apple cert + provisioning + keychain + export method
- Windows: WINDOWS_PFX_* + codesign subject
- Android: ANDROID_KEYSTORE_* + key alias/password
Linux requests nothing.

Also drop APP_STORE_CONNECT_* from the build matrix: only
testflight_upload.sh consumes them and it runs in the release job, which
loads them itself. The build matrix no longer depends on them.

Add shell: bash to the Export step (its `{ … } >> $GITHUB_ENV` brace
syntax is bash-only and would fail under the default pwsh on windows).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Haitao Pan <haitao.pan@xworkmate.ai>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>
2026-06-29 15:56:26 +08:00
d890acb661
feat: add one-line XWorkmate installer (#42)
Co-authored-by: Haitao Pan <manbuzhe2009@qq.com>
2026-06-29 15:48:49 +08:00
4ed10c8f2b ci: run desktop integration/patrol tests under xvfb (#22)
Headless Linux runners have no display, so 'flutter test integration_test'
fails to launch the GTK app ('The log reader stopped unexpectedly, or never
started'). Wrap integration/patrol layers in xvfb-run with a 24-bit screen
and install xvfb + mesa DRI driver for headless GL. macOS/local runs are
unaffected (no xvfb-run -> command runs directly).

Co-authored-by: Haitao Pan <haitao.pan@xworkmate.ai>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 14:46:00 +08:00
Haitao Pan
afdc50cfd0 test: keep layered flutter tests aligned with repo 2026-06-26 19:39:14 +08:00
Haitao Pan
0cd8655cd0 fix: support macos validation on bash 3 2026-06-18 17:27:05 +08:00
Haitao Pan
4974ed8078 fix: allow unsigned macos CI packaging 2026-06-18 17:16:13 +08:00
Haitao Pan
046020d8d7 Remove Patrol from macOS package 2026-06-05 21:47:08 +08:00
Haitao Pan
a0aec84615 fix(ci): drop ripgrep dependency from check-no-app-ffi.sh
The Flutter verification lane runs on Ubuntu 22.04 without ripgrep
installed, so the FFI integration guard silently fell through and
printed 'No app-side Codex FFI integration artifacts found' on every
run. Replace rg with the POSIX grep -RInE that ships with the runner,
keep the same excludes (check-no-app-ffi.sh, Pods, ephemeral, build,
.dart_tool) and emit the actual offending matches so the gate fails
loudly when a forbidden reference reappears.
2026-06-05 19:29:39 +08:00
Haitao Pan
c98bce9dde fix(ci): keep macos/ios build lanes running when Apple signing secrets are missing
The release preflight used to set should_build_platform=false whenever any
Apple signing secret was unset, which silently skipped the entire macos dmg
and ios ipa lanes (build + upload gated on that flag). Result: releases only
shipped linux, windows and android artifacts even when the iOS/macOS lanes
were otherwise healthy.

Make the preflight always release the lane, but emit a :⚠️: and
annotate the skip_reason when a secret is missing. The iOS branch in
build_matrix_artifacts.sh now picks the signed vs unsigned build path based
on actual secret availability instead of should_release alone, so it falls
back to flutter build ios --no-codesign + zip Runner.app whenever a secret
is absent. package-flutter-mac-app.sh already handled the no-secret case
locally (ad-hoc codesign --sign -) and needs no change.

Behavior matrix:
  macos: secret present -> signed DMG; secret missing -> unsigned DMG
  ios:   secret present + release -> signed IPA
         secret present + non-release -> unsigned zip
         secret missing (any) -> unsigned zip
2026-06-05 18:39:25 +08:00
Haitao Pan
5f43ffa188 fix(ci): parse provider catalog and gateway providers from capabilities fallback 2026-06-03 17:11:12 +08:00
Haitao Pan
0fdac8aedd chore: prepare release v1.1.4 (app store compliance, remote desktop fixes, ci verification) 2026-06-03 15:52:44 +08:00
Haitao Pan
22a0376b00 fix: repair bridge login sync runtime state 2026-06-01 10:02:13 +08:00
Haitao Pan
8469537060 chore: prepare v1.1.3 release metadata 2026-05-28 13:20:57 +08:00
Haitao Pan
b22bdd396e Fix Apple preflight for main builds 2026-05-27 15:36:50 +08:00
Haitao Pan
524e5fcce3 Fix Apple preflight for main builds 2026-05-27 15:17:02 +08:00
Haitao Pan
d28f40e863 merge: implement flutter and go testing framework 2026-05-25 08:55:15 +08:00
Haitao Pan
1e0d79532b chore: add ios release verification assets 2026-05-25 08:54:48 +08:00
Haitao Pan
0b2dfffaa5 Use git HEAD for macOS build metadata 2026-05-18 16:08:14 +08:00
Haitao Pan
b9a9999291 chore: remove stale gateway settings and app ffi paths 2026-05-13 16:45:54 +08:00
Haitao Pan
2eb52a5bc3 Fail release preflight when Apple signing is missing 2026-05-12 18:30:22 +08:00
Haitao Pan
bb1ef629b2 ci: align remote provider contract with hermes 2026-05-03 19:40:35 +08:00
Haitao Pan
90aaa084b0 fix: use bridge session lifecycle methods 2026-04-24 10:09:20 +08:00
Haitao Pan
e608f71e5a chore: sync runtime protocol docs 2026-04-23 14:58:18 +08:00
Haitao Pan
512ad35f56 docs: add external api test scripts 2026-04-22 09:47:38 +08:00
Haitao Pan
81bb1adff0 fix(build): improve DMG styling stability and Finder volume discovery
- Add delay and explicit existence check for mounted volume before styling
- Implement resilient .app selector in AppleScript to handle naming mismatches
- Gracefully skip styling if volume is not visible to Finder
2026-04-19 15:21:58 +08:00
Haitao Pan
41163ec295 fix(build): improve macOS packaging reliability and clean up Rust FFI
- Implement 'inside-out' signing strategy in package-flutter-mac-app.sh to fix nested code validity errors
- Fix install_name of embedded FFI library to use @rpath for portability
- Remove manual 'cargo build' triggers from Makefile and integration scripts (externalize management)
- Clean up unused types and structs in Rust source (lib.rs and types.rs)
- Update architecture docs to reflect AcpBridgeServerModeConfig priority logic
2026-04-19 15:00:34 +08:00
Haitao Pan
dc95abbfb0 fix(build): resolve macOS packaging and installation failures
- Include target/release/libcodex_ffi.dylib in FFI framework search paths
- Embed libcodex_ffi.dylib directly into the macOS app bundle during packaging
- Embed xworkmate-go-core for non-App-Store local builds
- Ad-hoc re-sign the app bundle after modifying its contents
- Fix DMG path resolution in the installation script to handle filenames with spaces
2026-04-19 12:45:47 +08:00
Haitao Pan
a04b22ec4a refactor(storage): unify persistent storage with robust error handling and simplified secret management
- Consolidate settings, tasks, and audit storage into SettingsStore and SecretStore
- Implement PersistentWriteFailure for detailed error reporting across storage scopes
- Migrate secret retrieval to rely primarily on reference-based lookups
- Add ThemeMode persistence and AccountSyncState serialization
- Modernize SecureConfigStore with clear path resolution and support for UI state
- Streamline Rust build process by migrating from custom scripts to Makefile
- Remove redundant build_rust_ffi.sh and update integration scripts
2026-04-19 10:34:15 +08:00
Haitao Pan
f5b3d85a89 chore(bridge): update SSH inspection script to target xworkmate-bridge.svc.plus and Caddy config 2026-04-17 16:28:22 +08:00
Haitao Pan
78d59292a6 docs: add public API engineering docs 2026-04-16 13:54:33 +08:00
58b8e398f2 Merge pull request #12 from x-evor/codex/provider-selection-test-mainline
Codex/provider selection test mainline
2026-04-14 15:03:46 +08:00
Haitao Pan
1f977caee2 test: lock provider selection mainline contract 2026-04-14 13:56:58 +08:00
Haitao Pan
00beaf295d fix: repair cross-platform release CI gating 2026-04-14 13:48:04 +08:00
Haitao Pan
e7b09d235d feat(settings): refresh account sync, add about metadata, and rewrite task dialog modes 2026-04-13 18:02:30 +08:00
Haitao Pan
9e80740378 Validate macOS app bundle dependencies 2026-04-12 13:04:20 +08:00
Haitao Pan
5ab79c7398 Remove bundled app helper binaries 2026-04-11 14:45:50 +08:00
Haitao Pan
bae412132d Fix release pipeline verification and latest release tagging 2026-04-11 10:31:15 +08:00
Haitao Pan
4763e7853b chore: suppress noisy macos third-party build warnings 2026-04-11 09:28:00 +08:00
Haitao Pan
6f66fd44bc fix: validate staged mac app install 2026-04-11 09:22:00 +08:00
Haitao Pan
06117e9f0c merge: consolidate CI and thread binding branch work 2026-04-11 08:20:51 +08:00
Haitao Pan
e00d971049 test: add real env login chain checks 2026-04-10 10:18:46 +08:00
Haitao Pan
235d41c5fe fix: streamline gateway settings and mac packaging cleanup 2026-04-09 11:39:00 +08:00
Haitao Pan
0fb0ccdf17 refactor: remove web surface from xworkmate-app 2026-04-09 11:19:40 +08:00