feat: F∆I Studio MVP scaffold (Tier-2 desktop GUI)
Initial scaffold for the F∆I Platform Tier-2 generic GUI client. Flutter Desktop (macOS, Linux, Windows). Three MVP pages with mock data, sharing one navigation shell: - Modules — installed modules with capabilities, declared permissions and required services. - Audit — event-stream view with type filter and tone-coded rows (started / completed / failed). - Approvals — pending system.approval@^0 reviews with prompt, payload preview, and approve/reject buttons. Live gRPC connection arrives in the next iteration via fai_dart_sdk (sibling repo, currently a typed stub). Future Forgejo path: fai/studio. Local layout matches existing fai_platform/ convention. Background: see docs/architecture/client.md in the platform repo. The tier-2 client was previously called "Stage" — renamed to "Studio" on 2026-05-05 to avoid confusion with "staging environment". flutter analyze: clean. flutter test: 2/2. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
commit
a173eec1d0
68 changed files with 4277 additions and 0 deletions
28
test/widget_test.dart
Normal file
28
test/widget_test.dart
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
// Smoke test: app boots, navigation rail shows the three MVP
|
||||
// pages, and the Modules page renders the mocked module list.
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:fai_studio/main.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets('Studio shell shows the three MVP destinations',
|
||||
(tester) async {
|
||||
await tester.pumpWidget(const StudioApp());
|
||||
await tester.pump();
|
||||
|
||||
expect(find.text('F∆I Studio'), findsOneWidget);
|
||||
expect(find.text('Modules'), findsWidgets);
|
||||
expect(find.text('Audit'), findsOneWidget);
|
||||
expect(find.text('Approvals'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('Modules page lists the mocked modules',
|
||||
(tester) async {
|
||||
await tester.pumpWidget(const StudioApp());
|
||||
await tester.pump();
|
||||
|
||||
expect(find.text('echo'), findsOneWidget);
|
||||
expect(find.text('text-extract'), findsOneWidget);
|
||||
expect(find.text('llm-chat'), findsOneWidget);
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue