halkyon/packages/halkyon_app/pubspec.yaml
Tizian 「ティツィアーン」 d09625d43e
refactor(content,core,app,editor,learn): Learn's content in pure Dart, for its agent
ADR 0044's D49 (amended in building it): what reads and seals Learn's
content moves out of the Flutter packages, so Learn's agent, which runs
without Flutter, shares it rather than repeating the privacy rules.

packages/halkyon_content (new, pure Dart) takes from halkyon_app the
envelope and its cipher, SealedFile, UnlockedAccountKeys, shared
spaces' gateway with SharedKeys and KeyPins, FileCache and
FileServerGateway, with their fakes and tests; halkyon_app exports it,
so no app changes. Its rich_text.dart takes RichContent from
halkyon_editor, which exports it. newAccountKeys makes an agent's key
pair. halkyon_core takes DelayedDeletions and gains SyncRequests, what a
synced gateway asks of the sync, which SyncService implements.

apps/learn/halkyon_learn_core (new, pure Dart) takes Learn's privacy,
sync, payloads and the models, codecs, gateways and repositories of
studysets, cards, notes, tags and feedback, with what they reach of
files, learning paths, citations and study options; the app imports them
from there. A subject's icon, colour and name stay in the app
(SubjectLook); what only the app shows (progress, exam coverage, the
card browser, deletions' waits) stays too. Nothing changes for people
using the apps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-11 22:08:16 +01:00

121 lines
4.9 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
# The envelope, the account's unlocked keys and shared spaces' keys
# (Halkyon's ADR 0044, D49), which halkyon_app exports.
halkyon_content:
path: ../halkyon_content
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