halkyon/packages/halkyon_app/pubspec.yaml
Tizian 「ティツィアーン」 603218ef96
refactor(app): the device's speech recognition moves from Learn into halkyon_app, with dictation into a text
Learn's `SpeechInput` and `DeviceSpeechInput` (ADR 0021, D67) are
halkyon_app's now, and its `FakeSpeechInput` is in `testing.dart`, so
Meditate's dream journal (ADR 0038, D15) listens through the same code.
Learn imports them from there and behaves as before: its composer and
its tests are unchanged but for the imports, and `DeviceSpeechInput()`
asks for what it asked before.

`DeviceSpeechInput` takes three options, off by default:
- `preferOnDevice`: on Android, recognition on the device where it can
  (Android 12 on), else offline; should that fail before a word is
  heard (not a pause), it listens as Android otherwise does from then
  on.
- `pauseFor`: how long a pause may last before the recogniser stops.
- `listenFor`: how long one listen may last at most.

`Dictation` writes what is heard where the cursor stands
(`DictationInsertion`: in place of a selection, set apart by a space),
shows the words so far, and listens again after each pause while it is
on, stopping by itself after three listens running heard nothing.

speech_to_text moves from Learn's pubspec to halkyon_app's, the lock
unchanged. Todo, Train and Meditate link the plugin now; their
generated plugin registrants (macOS, Windows) say so. An app declares
the microphone itself, and Todo and Train declare none, so nothing
there can listen.

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

106 lines
4.2 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
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
# 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