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

@ -1194,6 +1194,31 @@ class HalkyonAppLocalizationsDe extends HalkyonAppLocalizations {
@override
String get operatorWaitingTitle => 'Wartend';
@override
String operatorOperatorsCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count Admins',
one: '1 Admin',
);
return '$_temp0';
}
@override
String get operatorAccountsTitle => 'Konten';
@override
String operatorAccountsCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count Konten',
one: '1 Konto',
);
return '$_temp0';
}
@override
String get operatorNobodyWaits => 'Niemand wartet.';
@ -1254,7 +1279,8 @@ class HalkyonAppLocalizationsDe extends HalkyonAppLocalizations {
String get operatorHandle => 'Handle';
@override
String get operatorFindTitle => 'Ein Konto finden';
String get operatorHandleSuggested =>
'Vorgeschlagen werden nur Handles, die es hier gibt.';
@override
String get operatorFoundNone => 'Kein Handle beginnt so.';
@ -1319,6 +1345,101 @@ class HalkyonAppLocalizationsDe extends HalkyonAppLocalizations {
@override
String get assistantGrantsNone => 'Noch hat niemand einen Assistenten.';
@override
String assistantSetCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count Assistenten',
one: '1 Assistent',
zero: 'Keiner eingerichtet',
);
return '$_temp0';
}
@override
String assistantPeopleCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count Personen',
one: '1 Person',
zero: 'niemandem freigegeben',
);
return '$_temp0';
}
@override
String get assistantSetUpTitle => 'Hier eingerichtet';
@override
String get assistantPeopleTitle => 'Personen';
@override
String get assistantGranteesFoundNone =>
'Niemand mit Assistenten hat ein Handle, das so beginnt.';
@override
String get assistantUnpriced => 'Ohne Preise: zählt nur Tokens';
@override
String assistantEffort(String effort) {
String _temp0 = intl.Intl.selectLogic(
effort,
{
'low': 'niedrig',
'medium': 'mittel',
'high': 'hoch',
'xhigh': 'sehr hoch',
'max': 'maximal',
'other': '$effort',
},
);
return '$_temp0';
}
@override
String assistantEffortName(String effort) {
String _temp0 = intl.Intl.selectLogic(
effort,
{
'low': 'Niedrig',
'medium': 'Mittel',
'high': 'Hoch',
'xhigh': 'Sehr hoch',
'max': 'Maximal',
'other': '$effort',
},
);
return '$_temp0';
}
@override
String assistantEffortSetUp(String effort, String max) {
return 'Denkaufwand $effort, bis $max';
}
@override
String assistantEffortFixed(String effort) {
return 'Denkaufwand $effort';
}
@override
String assistantNameUnset(String name) {
return '$name (nicht mehr eingerichtet)';
}
@override
String assistantNotAgreedCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count noch ohne Zustimmung',
one: '1 noch ohne Zustimmung',
);
return '$_temp0';
}
@override
String get assistantGrant => 'Assistenten freigeben';
@ -1326,33 +1447,56 @@ class HalkyonAppLocalizationsDe extends HalkyonAppLocalizations {
String get assistantGrantSave => 'Freigeben';
@override
String get assistantGrantChange => 'Grenzen ändern';
@override
String get assistantGrantAssistant => 'Assistent';
@override
String get assistantGrantDaily => 'Grenze pro Tag';
@override
String get assistantGrantMonthly => 'Grenze pro Monat';
String get assistantGrantChange => 'Assistenten ändern';
@override
String get assistantGrantLimitHelper =>
'Leer für keine. Tage und Monate nach UTC.';
@override
String get assistantGrantLimitInvalid => 'Keine Zahl, die das nimmt';
String get assistantGrantBudget => 'Budget, für alle zusammen';
@override
String get assistantGrantNoHandle => 'Kein Konto hat dieses Handle.';
String get assistantGrantMoneyDaily => 'Geld pro Tag';
@override
String get assistantGrantMoneyMonthly => 'Geld pro Monat';
@override
String get assistantGrantTokensDaily => 'Tokens pro Tag';
@override
String get assistantGrantTokensMonthly => 'Tokens pro Monat';
@override
String get assistantGrantMoneyNote =>
'Geld zählt die Assistenten mit Preisen, Tokens zählen alle. Was zuerst aufgebraucht ist, hält sie an.';
@override
String assistantGrantReplaces(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: 'Die Freigabe ersetzt die Budgets dieser Personen:',
one: 'Die Freigabe ersetzt das Budget dieser Person:',
);
return '$_temp0';
}
@override
String assistantGrantUnsetDropped(String names) {
return 'Beim Speichern wird zurückgenommen, was nicht mehr eingerichtet ist: $names.';
}
@override
String get assistantGrantLimitInvalid => 'Keine Zahl, die das nimmt';
@override
String get assistantGrantTokens => 'Tokens';
@override
String get assistantGrantNote =>
'Vor der ersten Frage stimmen sie zu, was wohin geht. Du siehst, wie viel sie nutzen, nie, was sie fragen.';
'Vor der ersten Frage stimmen sie zu, was wohin geht. Assistenten, die sie schon haben, bleiben. Du siehst, wie viel sie nutzen, nie, was sie fragen.';
@override
String assistantPerDay(String amount) {
@ -1367,30 +1511,15 @@ class HalkyonAppLocalizationsDe extends HalkyonAppLocalizations {
@override
String get assistantNoLimits => 'Ohne Grenzen';
@override
String get assistantGrantAgreed => 'Zugestimmt';
@override
String get assistantGrantNotAgreed => 'Noch nicht zugestimmt';
@override
String get assistantGrantOutdated =>
'Die Preise haben sich geändert: Grenzen neu setzen';
@override
String get assistantGrantUnset => 'Nicht mehr eingerichtet';
@override
String get assistantRevoke => 'Zurücknehmen';
@override
String assistantRevokeTitle(String assistant) {
return '$assistant zurücknehmen?';
}
String get assistantRevokeAllTitle => 'Alle Assistenten zurücknehmen?';
@override
String get assistantRevokeMessage =>
'Sie können ihn nicht mehr fragen. Was sie genutzt haben, bleibt gezählt.';
'Sie können keinen mehr fragen, und ihr Budget entfällt. Was sie genutzt haben, bleibt gezählt.';
@override
String get assistantUseByMonth => 'Nutzung nach Monat';
@ -1440,11 +1569,10 @@ class HalkyonAppLocalizationsDe extends HalkyonAppLocalizations {
}
@override
String get assistantAgree => 'Lesen und zustimmen';
String get assistantYourBudget => 'Dein Budget, für alle zusammen';
@override
String get assistantWaitsForLimits =>
'Wartet darauf, dass seine Grenzen neu gesetzt werden';
String get assistantAgree => 'Lesen und zustimmen';
@override
String get assistantYourUse => 'Deine Nutzung';
@ -1568,6 +1696,10 @@ class HalkyonAppLocalizationsDe extends HalkyonAppLocalizations {
@override
String get assistantProblemNotAgreed => 'Stimm zuerst zu, was wohin geht.';
@override
String get assistantProblemInvalidEffort =>
'Mit diesem Denkaufwand antwortet er nicht.';
@override
String assistantProblemLimitReached(String time) {
return 'Seine Grenze ist bis $time erreicht.';
@ -1577,10 +1709,6 @@ class HalkyonAppLocalizationsDe extends HalkyonAppLocalizations {
String get assistantProblemLimitReachedNow =>
'Seine Grenze ist vorerst erreicht.';
@override
String get assistantProblemLimitOutdated =>
'Es wartet darauf, dass seine Grenzen neu gesetzt werden.';
@override
String get assistantProblemImagesNotRead => 'Es liest keine Bilder.';