halkyon/apps/learn/halkyon_learn_flutter/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

269 lines
11 KiB
YAML

name: halkyon_learn_flutter
description: A new Flutter project with Serverpod.
# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 0.26.0+29
environment:
sdk: '^3.13.0'
flutter: '^3.44.4'
resolution: workspace
dependencies:
# Our fork of the editor's main branch, moved to win32 v6 so the app can stay in the pub
# workspace, pinned to a signed commit of its branch halkyon/win32-v6.
appflowy_editor:
git:
url: https://code.halkyon.app/project-halkyon/appflowy-editor.git
ref: 81c3006c74e789ed2e470b8612529541b358fd26
# Anki packages are zip files.
archive: ^4.0.7
# Sounds in content (pronunciations): one package for all five platforms; on
# Linux it plays through GStreamer, whose development files a Linux build needs.
audioplayers: ^6.8.1
clock: ^1.1.3
crypto: ^3.0.7
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.5
# The Pomodoro timer on Linux talks to the desktop's notification server over
# the session bus; the version the network packages bring along already.
dbus: ^0.7.15
equatable: ^3.0.0
expressive_loading_indicator: ^0.0.1
# Saves exports on Android and iOS, where file_selector has no save dialog
# (the system's through it: Android's Storage Access Framework); the editor
# brings this version along already.
file_picker: ^13.1.0
# Picks the files to import (and later the images to add), and saves exports
# on the desktop: flutter.dev's own.
file_selector: ^1.1.0
flutter:
sdk: flutter
flutter_bloc: ^9.1.1
flutter_localizations:
sdk: flutter
flutter_math_fork: ^0.7.4
# Keeps the token of a Jellyfin server in the system's keyring; Serverpod's
# sign-in keeps its session there with it already.
flutter_secure_storage: ^10.0.0
fractional_indexing_dart: ^1.0.7
# Pinned exactly: every device on one app version must compute the same
# schedules.
fsrs: 2.0.1
go_router: ^18.0.2
# What every Halkyon app is built around (a shared package): the instances a
# device keeps accounts on, signing in through halkyon_base, each person's
# data opened and closed, and syncing it, with texts of its own.
halkyon_app:
path: ../../../packages/halkyon_app
# The client side of halkyon_base: people's public profiles, which the
# instance's register keeps (ADR 0016).
halkyon_base_client:
path: ../../../packages/halkyon_base_client
# Halkyon's low-level parts (a shared package): the queues the repositories
# run their work in (SerialQueue, CoalescingRunner).
halkyon_core:
path: ../../../packages/halkyon_core
# Rich text's general parts (a shared package, ADR 0033, D37); Learn's own
# blocks build on it in lib/src/core/editor/.
halkyon_editor:
path: ../../../packages/halkyon_editor
halkyon_learn_client:
path: ../halkyon_learn_client
# Learn's content in pure Dart, shared with its agent (Halkyon's ADR 0044,
# D49).
halkyon_learn_core:
path: ../halkyon_learn_core
# Language models' APIs (a shared package, ADR 0021, D15): the protocols a
# person's own assistant is asked in, which their settings keep.
halkyon_llm:
path: ../../../packages/halkyon_llm
# The device's half of signing in with OpenID Connect (ADR 0023): the
# browser that SimpleLogin's sign-in opens, and on Linux and Windows the
# loopback it comes back to, which the app builds with its name.
halkyon_oidc_flutter:
path: ../../../packages/halkyon_oidc_flutter
# Halkyon's look, shared by its apps (a shared package): the theme, the bundled
# Noto Sans, window sizes and the widgets every screen is built of.
halkyon_ui:
path: ../../../packages/halkyon_ui
# Anki's fields are HTML; the editor brings this parser along already.
html: ^0.15.6
# Talks to Jellyfin servers; Serverpod's client brings it along already.
http: ^1.6.0
# Photos for an assistant's question, taken with the camera's own app or
# picked from the system's photo picker (the developer's review of 3 Nov
# 2026): flutter.dev's own, no permission asked on Android.
image_picker: ^1.2.4
intl: ^0.20.3
lucide_icons_flutter: ^3.1.20
# Reads Markdown files to show them (the editor's reader takes its parsers).
markdown: ^7.3.1
material_ui: ^1.5.0
# Cuts Japanese into words on the device (ADR 0012): MeCab 0.996 (BSD), which
# the package's build hook compiles from its C++, so every build, `flutter
# test` too, needs a C++ compiler; its dictionary, IPADIC, comes from the
# instance once the person asks for it.
mecab_for_dart: ^2.0.5
# Videos from a Jellyfin server on Linux and Windows, where video_player has
# no player: libmpv (MIT; libmpv LGPL), the system's on Linux (a Linux build
# needs libmpv-dev), bundled on Windows. Used directly rather than behind
# video_player, which can't keep libmpv from drawing the video's own
# subtitles. Not fvp, whose libmdk is closed.
media_kit: ^1.2.6
media_kit_libs_linux: ^1.2.1
media_kit_libs_windows_video: ^1.0.11
media_kit_video: ^2.0.1
package_info_plus: ^10.2.2
path: ^1.9.1
# SVG path data, for the strokes KanjiVG draws characters with.
path_parsing: ^1.1.0
path_provider: ^2.1.6
# Modern Anki packages are zstd-compressed, every frame without its content
# size, which upstream's v1.0.0 refuses. Our fork decodes them, pinned to a
# signed commit of its branch halkyon/unknown-content-size; back to upstream
# once it decodes them too.
pdfrx: ^2.6.5
pure_zstd:
git:
url: https://code.halkyon.app/project-halkyon/pure-zstd.git
ref: 596b63d5741d479073fbfc78377cc7dbdd342da3
serverpod_auth_idp_flutter: 4.0.4
serverpod_flutter: 4.0.4
serverpod_offline_sync_client: 0.0.10
# Anki collections are SQLite databases (the sync engine already bundles it).
sqlite3: ^3.6.0
url_launcher: ^6.3.2
# Videos from a Jellyfin server elsewhere: flutter.dev's player (ExoPlayer on
# Android, AVPlayer on iOS and macOS).
video_player: ^2.14.1
youtube_player_iframe: ^6.0.2
dev_dependencies:
fake_async: ^1.3.3
# The flags halkyon_app draws where an instance keeps its data, which the
# whole-app tests look for.
flag: ^7.1.0
# Used for agents to drive the app through the Dart MCP
flutter_driver:
sdk: flutter
# Writes the app's icons for every platform from assets/icon/halkyon_learn_icon.png,
# run through the repository's tool/app_icons.py (see the flutter_launcher_icons
# section below).
flutter_launcher_icons: ^0.14.4
flutter_test:
sdk: flutter
# Checks on a device what no widget test can see (integration_test/).
integration_test:
sdk: flutter
# The sync tests (test/sync/) sign in like the app and read the server's database.
postgres: ^3.5.16
serverpod_auth_core_client: 4.0.4
yaml: ^3.1.4
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
# Generates AppLocalizations from lib/l10n (see l10n.yaml).
generate: true
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
assets:
- assets/config.json
# What each release changed, one file a release and language
# (<version>.<language>.txt), drafted by tool/release.dart and edited
# (Halkyon Train's ADR 0030, D61): halkyon_app's What's new shows them.
- assets/whats_new/
# The app's icon (ADR 0031), the window's on Linux, atop the navigation rail and
# on the launch screen (D6), and Lucide's notice for it.
- assets/icon/halkyon_learn_icon.png
- assets/icon/LICENSE-lucide.txt
# Region maps for map questions (see assets/maps/ATTRIBUTION.md).
- assets/maps/japan_prefectures.geojson
- assets/maps/world_countries.geojson
- assets/maps/LICENSE-CLDR.txt
# The CJK fonts' licence, for the licence list (see assets/fonts/ATTRIBUTION.md).
- assets/fonts/OFL-NotoSansCJK.txt
# The licences of MeCab, its dictionary IPADIC and Ve's rules, which cut Japanese
# into words on the device (ADR 0012).
- assets/mecab/
# How kanji and kana are written, from KanjiVG (see assets/kanjivg/ATTRIBUTION.md).
- assets/kanjivg/
# How Chinese characters are written, from Make Me a Hanzi (see
# assets/makemeahanzi/ATTRIBUTION.md), and the Hangul letters.
- assets/makemeahanzi/
- assets/hangul/
# The CJK fonts, the same on every device and never fetched: Noto Sans JP, SC, TC
# and KR for Japanese, Chinese and Korean, behind halkyon_ui's Noto Sans, in the
# order a studyset's language asks for (halkyon_ui's appFontFallbackFor, which
# names them by these families). Each file holds every weight (variable fonts).
fonts:
- family: Noto Sans JP
fonts:
- asset: assets/fonts/NotoSansJP-Variable.otf
- family: Noto Sans SC
fonts:
- asset: assets/fonts/NotoSansSC-Variable.otf
- family: Noto Sans TC
fonts:
- asset: assets/fonts/NotoSansTC-Variable.otf
- family: Noto Sans KR
fonts:
- asset: assets/fonts/NotoSansKR-Variable.otf
# The app's icons, written by the repository's tool/app_icons.py: it prepares the
# images derived from Lucide's graduation cap in build/icons/ first, then runs `dart
# run flutter_launcher_icons` with this. Android: an adaptive icon, the cap on white
# for each launcher to cut to its shape, and the square one older Androids show. iOS: without
# transparency, as Apple requires. macOS: the rounded tile on Apple's grid. Windows:
# the rounded tile (tool/app_icons.py then writes its .ico with every size).
flutter_launcher_icons:
image_path: "assets/icon/halkyon_learn_icon.png"
android: true
adaptive_icon_background: "#ffffff"
adaptive_icon_foreground: "assets/icon/halkyon_learn_icon.png"
adaptive_icon_monochrome: "build/icons/monochrome.png"
ios: true
remove_alpha_ios: true
background_color_ios: "#ffffff"
image_path_ios_dark_transparent: "build/icons/ios_dark.png"
image_path_ios_tinted_grayscale: "build/icons/ios_tinted.png"
macos:
generate: true
image_path: "build/icons/macos.png"
windows:
generate: true
image_path: "build/icons/rounded.png"
icon_size: 256