diff --git a/agent-roadmap/ROADMAP.md b/agent-roadmap/ROADMAP.md index 46eff46..ed1f387 100644 --- a/agent-roadmap/ROADMAP.md +++ b/agent-roadmap/ROADMAP.md @@ -21,7 +21,7 @@ ALT는 개인용 quant system workspace로, 한국장 일봉 MVP에서 시작해 - 요약: 일봉 기반 strategy execution, backtest lifecycle, result persistence, repeatable verification을 만든다. - [계획] 운영 표면 - 경로: `agent-roadmap/phase/operator-surface/PHASE.md` - - 요약: NomadCode client 표준을 먼저 복제한 뒤 Flutter client에서 백테스트와 market data 상태를 조회하고 실행할 수 있는 operator console을 만든다. + - 요약: Flutter client에서 백테스트와 market data 상태를 조회하고 실행할 수 있는 operator console을 만든다. client integration 복제 작업은 별도 프로젝트 산출물로 다룬다. - [계획] 거래 확장 - 경로: `agent-roadmap/phase/trading-expansion/PHASE.md` - 요약: paper trading, 미국장 확장, 주문/리스크/포트폴리오, 실거래 adapter 경계를 MVP 이후 단계로 연다. diff --git a/agent-roadmap/phase/backtest-loop/milestones/backtest-analysis-surface.md b/agent-roadmap/archive/phase/backtest-loop/milestones/backtest-analysis-surface.md similarity index 62% rename from agent-roadmap/phase/backtest-loop/milestones/backtest-analysis-surface.md rename to agent-roadmap/archive/phase/backtest-loop/milestones/backtest-analysis-surface.md index 3e95c30..4977ea2 100644 --- a/agent-roadmap/phase/backtest-loop/milestones/backtest-analysis-surface.md +++ b/agent-roadmap/archive/phase/backtest-loop/milestones/backtest-analysis-surface.md @@ -11,7 +11,7 @@ backtest 결과를 단순 성공/실패가 아니라 operator가 비교하고 ## 상태 -[진행중] +[완료] ## 구현 잠금 @@ -32,21 +32,23 @@ backtest 결과를 단순 성공/실패가 아니라 operator가 비교하고 operator가 backtest 결과를 조회, 비교, 해석할 수 있는 최소 분석 표면을 묶는다. -- [ ] [summary-metrics] ending equity 외 최소 summary metrics가 있다. 검증: Flutter client가 표시할 수 있는 result contract가 존재한다. -- [ ] [equity-curve] run별 equity curve 또는 동등한 time-series result를 저장/조회한다. 검증: fixture 기반 result 조회 테스트가 통과한다. -- [ ] [run-list] backtest run 목록과 상태를 조회할 수 있다. 검증: worker/API/client 경계가 backtest result를 일관되게 다룬다. -- [ ] [run-detail] 단일 run의 spec, status, result를 조회할 수 있다. -- [ ] [compare-runs] 둘 이상의 run을 비교할 기본 기준이 있다. 검증: `bin/test`와 `bin/lint`가 통과한다. +- [x] [summary-metrics] ending equity 외 최소 summary metrics가 있다. 검증: Flutter client가 표시할 수 있는 result contract가 존재한다. +- [x] [equity-curve] run별 equity curve 또는 동등한 time-series result를 저장/조회한다. 검증: fixture 기반 result 조회 테스트가 통과한다. +- [x] [run-list] backtest run 목록과 상태를 조회할 수 있다. 검증: worker/API/client 경계가 backtest result를 일관되게 다룬다. +- [x] [run-detail] 단일 run의 spec, status, result를 조회할 수 있다. +- [x] [compare-runs] 둘 이상의 run을 비교할 기본 기준이 있다. 검증: `bin/test`와 `bin/lint`가 통과한다. ## 완료 리뷰 -- 상태: 없음 -- 요청일: 없음 -- 완료 근거: 아직 기능 Task와 각 Task의 검증 조건이 충족되지 않았다. +- 상태: 승인됨 +- 요청일: 2026-05-30 +- 완료 근거: contract에 summary metrics, equity curve, run list/detail/compare request/response shape가 있고 API/client parser boundary가 등록되어 있다. +- 완료 근거: worker engine과 postgres storage가 summary/equity curve 저장, run list/detail, compare result read path를 제공한다. +- 완료 근거: `bin/test`가 통과했고, 직전 code-review에서 API/client socket boundary task가 PASS 처리되었다. - 리뷰 필요: - - [ ] 사용자가 완료 결과를 확인했다 - - [ ] archive 이동을 승인했다 -- 리뷰 코멘트: 없음 + - [x] 사용자가 완료 결과를 확인했다 + - [x] archive 이동을 승인했다 +- 리뷰 코멘트: 사용자 요청으로 완료 처리하고 archive 이동한다. ## 범위 제외 diff --git a/agent-roadmap/current.md b/agent-roadmap/current.md index c565d7a..e693606 100644 --- a/agent-roadmap/current.md +++ b/agent-roadmap/current.md @@ -2,19 +2,14 @@ ## 활성 Phase -- [진행중] 백테스트 루프 - - 경로: `agent-roadmap/phase/backtest-loop/PHASE.md` - [계획] 운영 표면 - 경로: `agent-roadmap/phase/operator-surface/PHASE.md` ## 활성 Milestone -- [진행중] Backtest Analysis Surface - - Phase: `agent-roadmap/phase/backtest-loop/PHASE.md` - - 경로: `agent-roadmap/phase/backtest-loop/milestones/backtest-analysis-surface.md` -- [계획] Client Integration Clone Adoption +- [계획] Flutter Operator Console - Phase: `agent-roadmap/phase/operator-surface/PHASE.md` - - 경로: `agent-roadmap/phase/operator-surface/milestones/client-integration-clone-adoption.md` + - 경로: `agent-roadmap/phase/operator-surface/milestones/flutter-operator-console.md` ## 선택 규칙 diff --git a/agent-roadmap/phase/backtest-loop/PHASE.md b/agent-roadmap/phase/backtest-loop/PHASE.md index 5c8d83f..3c4a657 100644 --- a/agent-roadmap/phase/backtest-loop/PHASE.md +++ b/agent-roadmap/phase/backtest-loop/PHASE.md @@ -16,8 +16,8 @@ - [완료] Backtest Engine Baseline - 경로: `agent-roadmap/archive/phase/backtest-loop/milestones/backtest-engine-baseline.md` - 요약: 일봉 데이터를 기준으로 재현 가능한 backtest execution loop와 결과 저장을 만든다. -- [진행중] Backtest Analysis Surface - - 경로: `agent-roadmap/phase/backtest-loop/milestones/backtest-analysis-surface.md` +- [완료] Backtest Analysis Surface + - 경로: `agent-roadmap/archive/phase/backtest-loop/milestones/backtest-analysis-surface.md` - 요약: backtest 결과를 operator가 비교하고 해석할 수 있는 기본 분석 표면을 만든다. - [스케치] Finance Agent Research Sidecar Sketch - 경로: `agent-roadmap/phase/backtest-loop/milestones/finance-agent-research-sidecar-sketch.md` diff --git a/agent-roadmap/phase/operator-surface/PHASE.md b/agent-roadmap/phase/operator-surface/PHASE.md index dffc03f..c6b73ac 100644 --- a/agent-roadmap/phase/operator-surface/PHASE.md +++ b/agent-roadmap/phase/operator-surface/PHASE.md @@ -6,17 +6,13 @@ ## 목표 -Flutter client를 ALT의 공식 operator surface로 삼아 market data 상태와 backtest 실행 및 결과를 조회할 수 있게 한다. 먼저 NomadCode client 표준에서 정리된 skeleton, bootstrap, proto-socket, Mattermost push host integration 경계를 복제하고, web/mobile/desktop 단일 UI 표면을 유지하면서 API와 generated contract 기준을 맞춘다. +Flutter client를 ALT의 공식 operator surface로 삼아 market data 상태와 backtest 실행 및 결과를 조회할 수 있게 한다. client integration 복제와 push host integration 정리는 별도 프로젝트 산출물로 받고, 이 Phase에서는 web/mobile/desktop 단일 UI 표면을 유지하면서 API와 generated contract 기준을 맞춘다. ## Milestone 흐름 완료된 Milestone은 archive 경로를 가리키고, 검토중, 진행중, 계획 또는 보류 Milestone은 이 Phase 하위 `milestones/` 경로를 가리킨다. 완료, 검토중, 진행중, 계획 순서로 두어 아래로 갈수록 미래 작업에 가까워지게 정렬한다. -- [계획] Client Integration Clone Adoption - - 경로: `agent-roadmap/phase/operator-surface/milestones/client-integration-clone-adoption.md` - - 요약: NomadCode client 표준을 ALT `apps/client`에 복제하기 위한 bootstrap, proto-socket, Mattermost push host integration, Riverpod/go_router 결합 기준을 정리한다. - - [계획] Flutter Operator Console - 경로: `agent-roadmap/phase/operator-surface/milestones/flutter-operator-console.md` - 요약: Flutter client에서 market data, backtest run, result를 조회하고 실행 요청할 수 있는 운영 화면을 만든다. @@ -26,4 +22,4 @@ Flutter client를 ALT의 공식 operator surface로 삼아 market data 상태와 - 이 Phase는 Flutter client의 운영 화면과 API/client 통신 표면에 집중한다. - 별도 TypeScript web app, 고급 charting 전체, mobile app store 배포 설정은 제외한다. - UI는 generated/mapped contracts와 proto-socket client layer를 기준으로 API와 통신한다. -- `../nomadcode`에서 정리한 client 표준을 복제할 때는 product feature 전체가 아니라 client skeleton, integration boundary, bootstrap convention, 문서화된 handoff 기준만 가져온다. +- client skeleton, bootstrap convention, push host integration 복제는 이 프로젝트의 별도 Milestone으로 두지 않고 외부 프로젝트 산출물로 추후 반영한다. diff --git a/agent-roadmap/phase/operator-surface/milestones/client-integration-clone-adoption.md b/agent-roadmap/phase/operator-surface/milestones/client-integration-clone-adoption.md deleted file mode 100644 index 17a43bd..0000000 --- a/agent-roadmap/phase/operator-surface/milestones/client-integration-clone-adoption.md +++ /dev/null @@ -1,93 +0,0 @@ -# Milestone: Client Integration Clone Adoption - -## 위치 - -- Roadmap: `agent-roadmap/ROADMAP.md` -- Phase: `agent-roadmap/phase/operator-surface/PHASE.md` - -## 목표 - -NomadCode의 `Client Integration Standardization` 결과를 ALT `apps/client`에 복제 가능한 형태로 반영한다. 기존 Riverpod/go_router client 구조를 유지하면서 Web + Android 우선 Dart bootstrap, proto-socket, Mattermost push host integration, iOS 후속 확장 경계를 ALT operator surface에 맞게 정리한다. - -## 상태 - -[계획] - -## 구현 잠금 - -- 상태: 잠금 -- 결정 필요: 아래 체크리스트 - - [ ] NomadCode client 표준화 산출물을 받은 뒤 ALT client에 복제할 파일/구조/설정 범위를 확정한다. - - [ ] Riverpod/go_router feature-first 구조와 공통 client skeleton을 결합할 기준을 결정한다. - - [ ] ALT에서 Mattermost push routing을 operator notification, 외부 링크, 실행 이벤트 중 어디로 연결할지 결정한다. - -## 범위 - -- 기존 `apps/client` 모듈을 유지하면서 공통 client skeleton 정렬 -- Web + Android 우선 bootstrap과 platform guard 반영 -- proto-socket Dart client 설정, endpoint 주입, connection lifecycle 정리 -- Mattermost push plugin host integration 반영 -- Firebase host 설정과 token/auth/signing key 전달 경계 정리 -- iOS는 동일 Dart API 위의 후속 native 확장 대상으로 문서화 -- NomadCode에서 복제할 skeleton과 ALT에서 치환할 product-specific 항목 문서화 - -## 필수 기능 - -### Epic: [client-clone] Client standard clone - -NomadCode client 표준을 ALT client 구조에 맞게 복제한다. - -- [ ] [module-name] 기존 `apps/client` 모듈을 유지하고 package/app 표시 이름의 ALT 정체성 유지 기준을 문서화한다. -- [ ] [bootstrap] Web + Android 우선 bootstrap과 platform-specific initialization guard를 반영한다. -- [ ] [folder-layout] `src/app`, `src/integrations`, `src/features` 기준의 client skeleton을 Riverpod/go_router 구조와 맞춘다. - -### Epic: [integration-clone] Integration clone boundary - -공통 integration 경계를 ALT operator surface에 맞춰 연결한다. - -- [ ] [proto-socket] proto-socket connection lifecycle과 endpoint configuration을 client integration으로 정리한다. -- [ ] [mattermost-push] Mattermost push는 plugin runtime을 사용하고 host는 Firebase config, auth/token/signing key, routing callback만 소유한다. -- [ ] [platform-targets] Web과 Android를 1차 target으로 검증하고 iOS 후속 확장 경계를 문서화한다. - -### Epic: [handoff] Clone handoff - -NomadCode 표준과 ALT 차이를 추적 가능하게 남긴다. - -- [ ] [clone-checklist] NomadCode에서 가져올 항목과 ALT에서 치환할 항목을 checklist로 남긴다. -- [ ] [riverpod] Riverpod provider 경계와 go_router navigation 경계에 integration을 배치하는 기준을 문서화한다. -- [ ] [related-locks] Flutter operator surface 진행 milestone은 이 milestone의 표준 적용 범위가 확정되기 전까지 잠금 상태로 둔다. - -## 완료 기준 - -- [ ] ALT `apps/client`가 client 표준 skeleton과 기존 Riverpod/go_router 구조를 충돌 없이 함께 따른다. -- [ ] Web build와 Android integration이 같은 Dart bootstrap 기준에서 설명되고 검증된다. -- [ ] proto-socket과 Mattermost push integration 책임 경계가 host/plugin/API 사이에서 충돌 없이 설명된다. -- [ ] iOS가 Android-only 예외가 아니라 동일 Dart API 위의 후속 확장 대상으로 문서화된다. -- [ ] `Flutter Operator Console` milestone과 충돌하는 범위가 잠금 또는 후속 작업으로 정리되어 있다. - -## 완료 리뷰 - -- 상태: 없음 -- 요청일: 없음 -- 완료 근거: 없음 -- 리뷰 필요: - - [ ] 사용자가 완료 결과를 확인했다 - - [ ] archive 이동을 승인했다 -- 리뷰 코멘트: 없음 - -## 범위 제외 - -- NomadCode 제품 feature 전체 복제 -- ALT quant feature 화면 구현 -- iOS native push full implementation -- Mattermost push plugin runtime 대규모 재작성 -- API protobuf schema 세부 확정 - -## 작업 컨텍스트 - -- 관련 경로: `apps/client/`, `packages/contracts/`, `services/api/`, `../nomadcode/apps/client`, `../mattermost-push-plugin/` -- 표준선(선택): ALT는 기존 `apps/client` 경로와 Riverpod/go_router app shell을 유지하고, 공통 integration skeleton만 맞춘다. -- 표준선(선택): NomadCode에서 가져올 것은 client skeleton, integration boundary, bootstrap convention, handoff 문서이며 제품 feature는 복제하지 않는다. -- 선행 작업: NomadCode `Client Integration Standardization`, Socket Session Loop -- 후속 작업: Flutter Operator Console -- 확인 필요: 구현 잠금의 결정 필요 항목 참고. diff --git a/agent-roadmap/phase/operator-surface/milestones/flutter-operator-console.md b/agent-roadmap/phase/operator-surface/milestones/flutter-operator-console.md index 32d4795..002e651 100644 --- a/agent-roadmap/phase/operator-surface/milestones/flutter-operator-console.md +++ b/agent-roadmap/phase/operator-surface/milestones/flutter-operator-console.md @@ -17,9 +17,9 @@ Flutter client를 ALT의 공식 UI client로 삼아 market data 상태, backtest - 상태: 잠금 - 결정 필요: 아래 체크리스트 - - [ ] Client Integration Clone Adoption 완료 전 operator console 화면 구현을 어디까지 진행할지 결정한다. + - [ ] 별도 client integration 프로젝트 산출물 반영 전 operator console 화면 구현을 어디까지 진행할지 결정한다. - [ ] Riverpod/go_router app shell에 공통 client skeleton과 integration boundary를 결합하는 기준을 확정한다. - - [ ] push notification은 이 milestone 범위 제외로 유지하고 clone milestone에서 host integration으로 다룰지 확인한다. + - [ ] push notification은 이 milestone 범위 제외로 유지하고 별도 client integration 프로젝트 산출물로 다룰지 확인한다. ## 범위 @@ -71,6 +71,7 @@ market data와 backtest 상태를 조회하고 실행 요청할 수 있는 Flutt - 관련 경로: `apps/client/`, `packages/contracts/`, `services/api/` - 표준선(선택): Flutter는 feature-first Clean Architecture와 Riverpod을 기본 설계 프레임으로 삼는다. -- 선행 작업: Client Integration Clone Adoption, Socket Session Loop, Backtest Analysis Surface +- 선행 작업: Socket Session Loop, Backtest Analysis Surface +- 외부 산출물: client skeleton, bootstrap convention, push host integration 복제는 별도 client integration 프로젝트 결과를 추후 반영한다. - 후속 작업: Paper Trading Readiness - 확인 필요: 구현 잠금의 결정 필요 항목 참고. diff --git a/apps/client/linux/flutter/generated_plugin_registrant.cc b/apps/client/linux/flutter/generated_plugin_registrant.cc index e71a16d..f6f23bf 100644 --- a/apps/client/linux/flutter/generated_plugin_registrant.cc +++ b/apps/client/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); } diff --git a/apps/client/linux/flutter/generated_plugins.cmake b/apps/client/linux/flutter/generated_plugins.cmake index 2e1de87..f16b4c3 100644 --- a/apps/client/linux/flutter/generated_plugins.cmake +++ b/apps/client/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/apps/client/macos/Flutter/GeneratedPluginRegistrant.swift b/apps/client/macos/Flutter/GeneratedPluginRegistrant.swift index cccf817..86be32e 100644 --- a/apps/client/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/apps/client/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,14 @@ import FlutterMacOS import Foundation +import firebase_core +import firebase_messaging +import nexo_messaging +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) + FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin")) + NexoMessagingPlugin.register(with: registry.registrar(forPlugin: "NexoMessagingPlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/apps/client/pubspec.lock b/apps/client/pubspec.lock index 46977c4..559a769 100644 --- a/apps/client/pubspec.lock +++ b/apps/client/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "93.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: ff0a84a2734d9e1089f8aedd5c0af0061b82fb94e95260d943404e0ef2134b11 + url: "https://pub.dev" + source: hosted + version: "1.3.59" analyzer: dependency: transitive description: @@ -129,6 +137,54 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.1" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + sha256: "7be63a3f841fc9663342f7f3a011a42aef6a61066943c90b1c434d79d5c995c5" + url: "https://pub.dev" + source: hosted + version: "3.15.2" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: "0ecda14c1bfc9ed8cac303dd0f8d04a320811b479362a9a4efb14fd331a473ce" + url: "https://pub.dev" + source: hosted + version: "6.0.3" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "0ed0dc292e8f9ac50992e2394e9d336a0275b6ae400d64163fdf0a8a8b556c37" + url: "https://pub.dev" + source: hosted + version: "2.24.1" + firebase_messaging: + dependency: transitive + description: + name: firebase_messaging + sha256: "60be38574f8b5658e2f22b7e311ff2064bea835c248424a383783464e8e02fcc" + url: "https://pub.dev" + source: hosted + version: "15.2.10" + firebase_messaging_platform_interface: + dependency: transitive + description: + name: firebase_messaging_platform_interface + sha256: "685e1771b3d1f9c8502771ccc9f91485b376ffe16d553533f335b9183ea99754" + url: "https://pub.dev" + source: hosted + version: "4.6.10" + firebase_messaging_web: + dependency: transitive + description: + name: firebase_messaging_web + sha256: "0d1be17bc89ed3ff5001789c92df678b2e963a51b6fa2bdb467532cc9dbed390" + url: "https://pub.dev" + source: hosted + version: "3.10.10" fixnum: dependency: "direct main" description: @@ -202,6 +258,14 @@ packages: url: "https://pub.dev" source: hosted version: "17.2.3" + http: + dependency: "direct main" + description: + name: http + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" + url: "https://pub.dev" + source: hosted + version: "1.6.0" http_multi_server: dependency: transitive description: @@ -303,6 +367,13 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" + nexo_messaging: + dependency: "direct main" + description: + path: "../../../nexo/packages/messaging_flutter" + relative: true + source: path + version: "0.0.1" node_preamble: dependency: transitive description: @@ -335,6 +406,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" pool: dependency: transitive description: @@ -531,6 +610,70 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17bc677f0b301615530dd1d67e0a9828cafa2d0b6b6eae4cd3679b7eac4a273c" + url: "https://pub.dev" + source: hosted + version: "6.3.30" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0" + url: "https://pub.dev" + source: hosted + version: "6.4.1" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18" + url: "https://pub.dev" + source: hosted + version: "3.2.5" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34" + url: "https://pub.dev" + source: hosted + version: "2.4.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" + url: "https://pub.dev" + source: hosted + version: "3.1.5" vector_math: dependency: transitive description: @@ -605,4 +748,4 @@ packages: version: "3.1.3" sdks: dart: ">=3.11.3 <4.0.0" - flutter: ">=3.35.0" + flutter: ">=3.38.0" diff --git a/apps/client/pubspec.yaml b/apps/client/pubspec.yaml index 66ba128..36d0b9f 100644 --- a/apps/client/pubspec.yaml +++ b/apps/client/pubspec.yaml @@ -36,11 +36,24 @@ dependencies: cupertino_icons: ^1.0.8 flutter_riverpod: ^3.3.1 go_router: ^17.2.3 + + # Firebase + firebase_core: ^3.13.0 + + # Nexo messaging / Mattermost-compatible push plugin + nexo_messaging: + path: ../../../nexo/packages/messaging_flutter + protobuf: ^6.0.0 fixnum: ^1.1.1 proto_socket: path: ../../../proto-socket/dart + # HTTP client + http: ^1.3.0 + + url_launcher: ^6.3.2 + dev_dependencies: flutter_test: sdk: flutter diff --git a/apps/client/windows/flutter/generated_plugin_registrant.cc b/apps/client/windows/flutter/generated_plugin_registrant.cc index 8b6d468..ec8e8d4 100644 --- a/apps/client/windows/flutter/generated_plugin_registrant.cc +++ b/apps/client/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,12 @@ #include "generated_plugin_registrant.h" +#include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + FirebaseCorePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/apps/client/windows/flutter/generated_plugins.cmake b/apps/client/windows/flutter/generated_plugins.cmake index b93c4c3..02d26c3 100644 --- a/apps/client/windows/flutter/generated_plugins.cmake +++ b/apps/client/windows/flutter/generated_plugins.cmake @@ -3,6 +3,8 @@ # list(APPEND FLUTTER_PLUGIN_LIST + firebase_core + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST