|
Some checks failed
Security / Security check (push) Failing after 2s
A black window on launch, no error anywhere: main() awaited loadPersistedEndpoint before the first frame, and SharedPreferences.getBool threw 'int is not a subtype of bool?' — the store is writable from outside the app and hub.secure had been written as int 0. Pref reads now go through defensive typed helpers (int coerces to bool, wrong types fall back to defaults), and every pre-frame restore step is failure-isolated: a broken store can cost a preference, never the first frame. Regression tests stage the corrupt store (the exact observed value and worse). Also removes the CocoaPods leftovers from the macOS project (Podfile, [CP] script phases, Pods framework references, xcconfig includes): the project builds via Swift Package Manager, and the dual wiring ran both dependency managers on every build — Flutter's persistent 'removing CocoaPods will improve build time' warning. Verified: clean profile build produces a launchable bundle (plugins statically linked via SwiftPM), suite green, analyze clean. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com> |
||
|---|---|---|
| .forgejo/workflows | ||
| .githooks | ||
| assets | ||
| docs | ||
| integration_test | ||
| lib | ||
| linux | ||
| macos | ||
| test | ||
| tools | ||
| windows | ||
| .gitignore | ||
| .metadata | ||
| .security-allow | ||
| analysis_options.yaml | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| l10n.yaml | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
Ch∆In Studio
Desktop GUI client for the Ch∆In Platform hub. Tier-2 generic
platform client per docs/architecture/client.md in the
platform repo. Connects to a local or remote chain serve over
gRPC / gRPC-Web.
Status: live product (v0.70+). Every page talks to the hub through
chain_client_sdk; there is no mock data. End users launch Studio viachain studio, which downloads and verifies a prebuilt bundle from the release mirror (sha256 + signature) or rebuilds from source when a dev workspace is configured.
Pages
- Welcome — onboarding checklist, guided setup wizard, bundled documentation reader.
- Store — browse/search/install modules across multiple stores (pinned publisher keys, private sources, AI AskBar); installed modules live here as a filter.
- Flows — graph + text flow editor with a live Run tab
(streamed step events, inline approvals). Editor ships as the
chain_studio_flow_editorpackage. - Audit — live event stream (
StreamEvents) with filters, hash-chain verification, gated log reset. - Approvals — pending
system.approval@^0reviews with approve / reject and payload disclosure. - Doctor — diagnostics, daemon lifecycle, binary recovery.
- Föderation — satellite list, bootstrap-token enrolment, revocation.
Plus: settings dialog (System-AI, integrations/MCP/n8n, security, maintenance), Cmd+K palette, release-channel switcher.
Stack
- Flutter 3.40+ (Desktop: macOS, Linux, Windows)
- gRPC client via
chain_client_sdk(sibling repo; pinned by relative path during development) - No external runtime dependencies; bundles its own Dart VM
Run locally
flutter run -d macos # or -d linux / -d windows
flutter test
chain studio prefers a configured dev workspace and will
flutter run from source when one resolves — see
crates/chain_runtime_mgmt in the platform repo.
Repo placement
Published as fai/chain-studio on Forgejo (git.flemming.ai).
The local directory follows the established fai_chain_* layout
convention.
Why "Studio" and not "Stage"
"Stage" collided too easily with "staging environment" in developer English. "Studio" is the established industry pattern for creator-tools (Visual Studio, Android Studio, RStudio) and matches the GUI's audience of module developers, operators, and power users.