feat(app): the operator's overview of screens, grants to several people at once with one budget each, assistants by provider

Halkyon Learn's ADR 0021, D57 to D63, on halkyon_base's budgets and
effort:

- The operator's screen is an overview (Waiting, Operators, Accounts,
  Assistants, each with its count) whose rows open screens of their own,
  read 50 at a time as they scroll (OperatorListCubit, OperatorPage), so
  hundreds of accounts push nothing else down (D62).
- A handle is picked among the accounts there are (AccountSuggestionField):
  appointing an operator and granting take no other (D61).
- AssistantGrantsScreen replaces AssistantGrantsCard: the assistants set
  up by provider, with their efforts and prices; the people granted, found
  by their handle's start; one sheet granting several assistants, a
  provider's at once, to several people, each with one budget in money and
  tokens a day and a month, or changing one person's (D58, D59).
- Assistants are grouped by provider wherever they are listed, each under
  its name with a dot in its colour (ProviderLabel, D60).
- AssistantsCard shows what is left of the person's budget for all their
  assistants together; the months of the figures run oldest first (D57).
- AssistantChoice says the efforts a question may ask at and the ceiling
  on output each asks for (D63); a person's own key gets none and keeps
  4,096 tokens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-26 16:05:49 +01:00
commit cc87120bc8
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -62,26 +62,40 @@ Written as the apps are: Dart 3.13's primary constructors, Material from
the person's app opens, after each change, and every 5 minutes only while
they operate it), `InstanceOperatorCard` or `InstanceOperatorTiles` for an
app's settings and `WaitingAccountsBadge` for its Settings cog, both
nothing at all for anyone else, and `InstanceOperatorScreen`: the accounts
that wait, approved once their person confirmed the words read out, or
refused; who operates, named by handle and taken back (never the last);
accounts found by the start of their handle, suspended or named. Only the
register's service answers: on a member, nothing shows.
nothing at all for anyone else, and `InstanceOperatorScreen` (D62): an
overview of how many wait, operate and have accounts, and of the
assistants set up, each row opening a screen of its own, every list read
50 at a time as it is scrolled (`OperatorListCubit`, `OperatorPage`): the
accounts that wait, approved once their person confirmed the words read
out, or refused; who operates, named by a handle picked among those
suggested and taken back (never the last); accounts found by the start of
their handle, suspended, named or granted assistants. A handle is only
ever picked among the accounts there are (`AccountSuggestionField`, D61).
Only the register's service answers: on a member, nothing shows.
- **Assistants** (`lib/src/assistant/`, Halkyon Learn's ADR 0021, step 2):
`AssistantRepository` on `ServerpodAssistantGateway` (the module's
`assistant` endpoint; refusals as `AssistantFailed`) asks an
`AssistantChoice` in halkyon_llm's terms: a `GrantedAssistant` through the
instance, which counts it, or a `PersonalAssistant` with the person's own
key directly (`LlmClient`), the instance seeing neither key nor question;
instance, which counts it, at an effort among those the operator allows
and with that effort's ceiling on output (`efforts`, `outputCeilingAt`,
D63), or a `PersonalAssistant` with the person's own key directly
(`LlmClient`), without an effort and at 4,096 output tokens, the instance
seeing neither key nor question;
`assistant_messages.dart` turns a conversation into the endpoint's models
and back, part by part. `AssistantsCard` is an app's settings' card: what
is granted and left of its limits, agreed to once (the consent sheet),
the person's use by UTC month, the instance's privacy page, and the
is granted, under each provider's name in its colour (`ProviderLabel`,
`providerColorIn`, D60), what is left of the person's budget for them
together (D58), each agreed to once (the consent sheet), the person's use
by UTC month, oldest first (D57), the instance's privacy page, and the
person's own assistants where the operator allows them, kept where the
app says (`OwnAssistantStore`: Learn's sealed settings). For the operator,
`AssistantOperatorRepository` (grants by exact handle) and
`AssistantGrantsCard` on `InstanceOperatorScreen`: grants with their
limits, granted, changed and taken back, and everyone's use by month.
`AssistantOperatorRepository` and `AssistantGrantsScreen`, opened from
`InstanceOperatorScreen`: the assistants set up, by provider, with their
efforts and whether they are priced; the people granted some, each with
one budget in money and tokens, a day and a month (D58, D59), found by
their handle's start; one sheet granting several assistants, a
provider's at once, to several people at once, or changing one person's
(`showAssistantGrantSheet`); and everyone's use by month.
`package:halkyon_app/assistant_models.dart` holds the models alone, in
pure Dart, for an app's own models. For the app's warnings before a
private studyset's content goes (ADR 0021, D9): `providerTermsOf` names a