ADR 0043's recommendation, for Todo's attachments: what Learn had for its files on the device moves into halkyon_app, unchanged but for its names, and Learn uses it from there. - FileCache, DirectoryFileCache (Learn's AssetFileCache): the files by their SHA-256 in a folder of the person's, and which wait to be uploaded. - FileServerGateway, ServerpodFileServerGateway (Learn's AssetServerGateway): halkyon_base's files endpoint, taking the module's caller rather than Learn's client; FileLimitReached, FileRoom. - Their fakes in halkyon_app's testing: MemoryFileCache, FakeFileServerGateway, sha256Of. - SealedFile: the format every app seals a file in (HLKF, version 1), sealing with halkyon_app's ContentCipher; Learn's Privacy seals and opens its files with it, for the same context as before, so every file sealed so far opens as it did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
117 lines
4.7 KiB
YAML
117 lines
4.7 KiB
YAML
name: halkyon_app
|
|
description: "What every Halkyon app is built around: the instances a device keeps accounts on, signing in through an instance's halkyon_base, each person's data opened and closed, and syncing it."
|
|
version: 0.1.0
|
|
publish_to: none
|
|
resolution: workspace
|
|
|
|
environment:
|
|
sdk: ^3.13.0
|
|
flutter: ^3.44.4
|
|
|
|
dependencies:
|
|
clock: ^1.1.3
|
|
# The files' hashes (FakeFileServerGateway; the apps hash with it too).
|
|
crypto: ^3.0.7
|
|
equatable: ^3.0.0
|
|
# chmod(2) for files saved on the desktop: the own user's alone (FileSaver).
|
|
ffi: ^2.2.0
|
|
# Keeping a file the app made where the person chooses (FileSaver): the
|
|
# system's dialog on Android and iOS, file_selector's on the desktop.
|
|
file_picker: ^13.1.0
|
|
file_selector: ^1.1.0
|
|
# The flag of where an instance keeps people's data; it draws lipis'
|
|
# flag-icons, whose MIT notice this package registers (assets/flags/).
|
|
flag: ^7.1.0
|
|
flutter:
|
|
sdk: flutter
|
|
flutter_bloc: ^9.1.1
|
|
# gen-l10n's output imports it; apps take Material's texts from material_ui.
|
|
flutter_localizations:
|
|
sdk: flutter
|
|
# The account's private keys, once unlocked, in the system's keyring
|
|
# (ADR 0017), as Serverpod keeps sessions.
|
|
flutter_secure_storage: ^10.0.0
|
|
halkyon_base_client:
|
|
path: ../halkyon_base_client
|
|
halkyon_core:
|
|
path: ../halkyon_core
|
|
# The account's keys on the device (ADR 0017): libsodium, which its build
|
|
# hook compiles, so every build of an app needs a C compiler and make.
|
|
halkyon_keys:
|
|
path: ../halkyon_keys
|
|
# Language models' APIs (Halkyon Learn's ADR 0021): the conversation an
|
|
# app's features speak, whether the operator's assistant answers through
|
|
# the instance or a person's own key answers directly.
|
|
halkyon_llm:
|
|
path: ../halkyon_llm
|
|
# Read by a client of halkyon_base alone: SimpleLogin's refusals are its.
|
|
halkyon_oidc_client:
|
|
path: ../halkyon_oidc_client
|
|
halkyon_oidc_flutter:
|
|
path: ../halkyon_oidc_flutter
|
|
halkyon_ui:
|
|
path: ../halkyon_ui
|
|
# A client of halkyon_base alone can be given a fake one in tests.
|
|
http: ^1.6.0
|
|
intl: ^0.20.3
|
|
lucide_icons_flutter: ^3.1.20
|
|
material_ui: ^1.5.0
|
|
path: ^1.9.1
|
|
# QR codes of an authenticator's otpauth:// URI, drawn by the app itself
|
|
# (BSD-3-Clause, pure Dart; pinned exactly, as what it encodes is a secret).
|
|
qr: 3.0.2
|
|
# Serverpod's packages move together, at one version (as the apps pin them).
|
|
serverpod_auth_core_client: 4.0.4
|
|
serverpod_auth_idp_client: 4.0.4
|
|
serverpod_auth_idp_flutter: 4.0.4
|
|
serverpod_client: 4.0.4
|
|
# Its sync refuses an app whose synced tables differ from the server's
|
|
# (OfflineSyncTablesHashMismatchException).
|
|
serverpod_offline_sync_client: 0.0.10
|
|
# libsodium's API, as halkyon_keys pins it (the same version, exactly):
|
|
# opening it on each isolate the account's keys are worked on.
|
|
sodium: 4.1.0+1
|
|
# What the person says, written (SpeechInput, Dictation; Halkyon Learn's
|
|
# ADR 0021, D67, Halkyon Meditate's ADR 0038, D15): the device's own speech
|
|
# recognition (Android's, Apple's, Windows'); none on Linux. An app that
|
|
# listens declares the microphone and its usage texts itself.
|
|
speech_to_text: ^7.5.0
|
|
url_launcher: ^6.3.2
|
|
|
|
dev_dependencies:
|
|
fake_async: ^1.3.3
|
|
flutter_test:
|
|
sdk: flutter
|
|
# The register's own checks, which the device's real cryptography is held
|
|
# to (register_interop_test.dart).
|
|
halkyon_base_server:
|
|
path: ../halkyon_base_server
|
|
|
|
flutter:
|
|
# Generates HalkyonAppLocalizations from lib/l10n (see l10n.yaml).
|
|
generate: true
|
|
# Android's half of what every app needs from the system, registered in each
|
|
# app by Flutter itself (decided 10 Nov 2026, Halkyon's ADR 0042): whether
|
|
# the network is metered (AndroidNetworkWatch). In Java, so it applies no
|
|
# Kotlin Gradle Plugin, which AGP 9's built-in Kotlin refuses.
|
|
plugin:
|
|
platforms:
|
|
android:
|
|
package: app.halkyon.halkyon_app
|
|
pluginClass: HalkyonAppPlugin
|
|
# Material's icon font, which serverpod_auth_idp_flutter's widgets ask for
|
|
# (it sets this itself): without it every test run here warns, and its
|
|
# widgets' icons would draw as boxes in them (each app sets it for itself).
|
|
uses-material-design: true
|
|
|
|
assets:
|
|
# flag-icons' MIT notice, for the licence list (registerFlagIconsLicense).
|
|
- assets/flags/LICENSE-flag-icons.txt
|
|
# Unicode CLDR's names of subdivisions (states, regions) in English and
|
|
# German (AssetSubdivisionNames; tool/subdivision_names.py writes them),
|
|
# and its licence's notice (registerCldrLicense).
|
|
- assets/subdivisions/subdivisions.json
|
|
- assets/subdivisions/LICENSE-CLDR.txt
|
|
# Unicode CLDR's names of countries in English and German, from the same
|
|
# release (AssetCountryNames; tool/country_names.py writes them).
|
|
- assets/countries/countries.json
|