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

@ -1173,6 +1173,31 @@ class HalkyonAppLocalizationsEn extends HalkyonAppLocalizations {
@override
String get operatorWaitingTitle => 'Waiting';
@override
String operatorOperatorsCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count operators',
one: '1 operator',
);
return '$_temp0';
}
@override
String get operatorAccountsTitle => 'Accounts';
@override
String operatorAccountsCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count accounts',
one: '1 account',
);
return '$_temp0';
}
@override
String get operatorNobodyWaits => 'Nobody waits.';
@ -1233,7 +1258,8 @@ class HalkyonAppLocalizationsEn extends HalkyonAppLocalizations {
String get operatorHandle => 'Handle';
@override
String get operatorFindTitle => 'Find an account';
String get operatorHandleSuggested =>
'Only handles there are here are suggested.';
@override
String get operatorFoundNone => 'No account\'s handle starts like this.';
@ -1298,39 +1324,157 @@ class HalkyonAppLocalizationsEn extends HalkyonAppLocalizations {
String get assistantGrantsNone => 'Nobody has an assistant yet.';
@override
String get assistantGrant => 'Grant an assistant';
String assistantSetCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count assistants',
one: '1 assistant',
zero: 'None set up',
);
return '$_temp0';
}
@override
String assistantPeopleCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count people',
one: '1 person',
zero: 'nobody granted',
);
return '$_temp0';
}
@override
String get assistantSetUpTitle => 'Set up here';
@override
String get assistantPeopleTitle => 'People';
@override
String get assistantGranteesFoundNone =>
'Nobody with an assistant has a handle starting like this.';
@override
String get assistantUnpriced => 'No prices: counts its tokens only';
@override
String assistantEffort(String effort) {
String _temp0 = intl.Intl.selectLogic(
effort,
{
'low': 'low',
'medium': 'medium',
'high': 'high',
'xhigh': 'extra high',
'max': 'max',
'other': '$effort',
},
);
return '$_temp0';
}
@override
String assistantEffortName(String effort) {
String _temp0 = intl.Intl.selectLogic(
effort,
{
'low': 'Low',
'medium': 'Medium',
'high': 'High',
'xhigh': 'Extra high',
'max': 'Max',
'other': '$effort',
},
);
return '$_temp0';
}
@override
String assistantEffortSetUp(String effort, String max) {
return 'Effort $effort, up to $max';
}
@override
String assistantEffortFixed(String effort) {
return 'Effort $effort';
}
@override
String assistantNameUnset(String name) {
return '$name (no longer set up)';
}
@override
String assistantNotAgreedCount(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count not agreed to yet',
one: '1 not agreed to yet',
);
return '$_temp0';
}
@override
String get assistantGrant => 'Grant assistants';
@override
String get assistantGrantSave => 'Grant';
@override
String get assistantGrantChange => 'Change limits';
@override
String get assistantGrantAssistant => 'Assistant';
@override
String get assistantGrantDaily => 'Limit a day';
@override
String get assistantGrantMonthly => 'Limit a month';
String get assistantGrantChange => 'Change assistants';
@override
String get assistantGrantLimitHelper =>
'Empty for none. Days and months are UTC\'s.';
@override
String get assistantGrantLimitInvalid => 'Not a number this takes';
String get assistantGrantBudget => 'Budget, for all of them together';
@override
String get assistantGrantNoHandle => 'No account has this handle.';
String get assistantGrantMoneyDaily => 'Money a day';
@override
String get assistantGrantMoneyMonthly => 'Money a month';
@override
String get assistantGrantTokensDaily => 'Tokens a day';
@override
String get assistantGrantTokensMonthly => 'Tokens a month';
@override
String get assistantGrantMoneyNote =>
'Money counts the assistants with prices, tokens count every one. Whichever runs out first stops them.';
@override
String assistantGrantReplaces(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: 'Granting replaces the budgets these people have:',
one: 'Granting replaces the budget this person has:',
);
return '$_temp0';
}
@override
String assistantGrantUnsetDropped(String names) {
return 'Saving takes back what is no longer set up: $names.';
}
@override
String get assistantGrantLimitInvalid => 'Not a number this takes';
@override
String get assistantGrantTokens => 'tokens';
@override
String get assistantGrantNote =>
'They agree once to what goes where before they ask it. You see how much they use, never what they ask.';
'They agree once to what goes where before they ask one. Assistants they have already stay. You see how much they use, never what they ask.';
@override
String assistantPerDay(String amount) {
@ -1345,30 +1489,15 @@ class HalkyonAppLocalizationsEn extends HalkyonAppLocalizations {
@override
String get assistantNoLimits => 'No limits';
@override
String get assistantGrantAgreed => 'Agreed';
@override
String get assistantGrantNotAgreed => 'Not agreed yet';
@override
String get assistantGrantOutdated =>
'Its prices changed: set its limits again';
@override
String get assistantGrantUnset => 'No longer set up';
@override
String get assistantRevoke => 'Take back';
@override
String assistantRevokeTitle(String assistant) {
return 'Take back $assistant?';
}
String get assistantRevokeAllTitle => 'Take back every assistant?';
@override
String get assistantRevokeMessage =>
'They can no longer ask it. What they used stays counted.';
'They can no longer ask any of them, and their budget goes. What they used stays counted.';
@override
String get assistantUseByMonth => 'Use by month';
@ -1418,10 +1547,10 @@ class HalkyonAppLocalizationsEn extends HalkyonAppLocalizations {
}
@override
String get assistantAgree => 'Read and agree';
String get assistantYourBudget => 'Your budget, for all of them';
@override
String get assistantWaitsForLimits => 'Waits for its limits to be set again';
String get assistantAgree => 'Read and agree';
@override
String get assistantYourUse => 'Your use';
@ -1544,6 +1673,10 @@ class HalkyonAppLocalizationsEn extends HalkyonAppLocalizations {
@override
String get assistantProblemNotAgreed => 'Agree to what goes where first.';
@override
String get assistantProblemInvalidEffort =>
'It doesn\'t think at this effort.';
@override
String assistantProblemLimitReached(String time) {
return 'Its limit is reached until $time.';
@ -1552,10 +1685,6 @@ class HalkyonAppLocalizationsEn extends HalkyonAppLocalizations {
@override
String get assistantProblemLimitReachedNow => 'Its limit is reached for now.';
@override
String get assistantProblemLimitOutdated =>
'It waits for its limits to be set again.';
@override
String get assistantProblemImagesNotRead => 'It reads no images.';