feat(assistant)!: no hand-off and no connector; the field searches the web (ADR 0022)
The developer decided on 23 Oct to drop the hand-off to an AI assistant outside the app, and Claude's connector with it, in v0.19.0, the app and the server together: build 22 raises minimumAppBuild anyway, so no app calling the connector's endpoints uses the instance after it. An instance is to have one way to an assistant, its operator's (ADR 0021, proposed). The app: the field at the foot of Home, and the button in the Library, on a studyset and while studying, search the web alone, through the engine chosen in Settings or Android's own search, with the parts of a card the person picks; a studyset's name and description are never offered. Gone: the assistants a question opened in (AiAssistant, AssistantHandOff), the switch between them and the web, Settings' choice of assistant, Connect Claude with its route, cubit, repository and gateway, and their texts. A settings file from before keeps the old keys until the next change of a setting writes it anew; nothing reads them. The server: lib/src/assistant/ (MCP, its OAuth, the five tools, connect codes and tokens), AssistantEndpoint, the daily forgetting of the connector's secrets (its scheduled call cancelled at start), its lines in the deletion hook, instance.info().assistantConnectorUrl (nullable, so an older app reads it as none), and Caddy's forwarding of /mcp, /oauth/* and /.well-known/oauth-*. The migration drops the connector's five tables, children first: DROP TABLE "assistant_token" CASCADE; -- tokens of a connection DROP TABLE "assistant_grant" CASCADE; -- OAuth codes of a connection DROP TABLE "assistant_connection" CASCADE; -- a person's connected client DROP TABLE "assistant_connect_code" CASCADE; DROP TABLE "assistant_client" CASCADE; -- OAuth clients registered No other table references them, so CASCADE drops only their own foreign keys. For the minute between the maintenance run and the switch, the old server answers the connector with errors and fails to delete an account (its hook still deletes from these tables); ADR 0022 says so. BREAKING CHANGE: a connected Claude gets no answer from the deploy on, and the app no longer opens a question in an AI assistant. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
1454fd7bfc
commit
ca24eb9cf9
1 changed files with 16550 additions and 10700 deletions
|
|
@ -10740,49 +10740,25 @@ abstract class AppLocalizations {
|
|||
/// No description provided for @settingsAssistant.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Assistant'**
|
||||
/// **'Web search'**
|
||||
String get settingsAssistant;
|
||||
|
||||
/// No description provided for @settingsAskAssistant.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Ask an AI assistant or search the web'**
|
||||
/// **'Search the web from the app'**
|
||||
String get settingsAskAssistant;
|
||||
|
||||
/// No description provided for @settingsAskAssistantSubtitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Off unless you turn it on. Adds a field on Home and a button in the Library, on a studyset and while studying. A question opens in the AI assistant you choose or as a web search, with only the context you choose; nothing is sent from here.'**
|
||||
/// **'Off unless you turn it on. Adds a field on Home and a button in the Library, on a studyset and while studying. A question opens as a web search, with only the parts of a card you choose; nothing is sent from here.'**
|
||||
String get settingsAskAssistantSubtitle;
|
||||
|
||||
/// No description provided for @assistantHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Ask {assistant}…'**
|
||||
String assistantHint(String assistant);
|
||||
|
||||
/// No description provided for @assistantHintStudyset.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Ask {assistant} about {title}…'**
|
||||
String assistantHintStudyset(String assistant, String title);
|
||||
|
||||
/// No description provided for @assistantHintCard.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Ask {assistant} about this card…'**
|
||||
String assistantHintCard(String assistant);
|
||||
|
||||
/// No description provided for @assistantSend.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Ask in {assistant}'**
|
||||
String assistantSend(String assistant);
|
||||
|
||||
/// No description provided for @assistantOpen.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Ask or search'**
|
||||
/// **'Search the web'**
|
||||
String get assistantOpen;
|
||||
|
||||
/// No description provided for @assistantClose.
|
||||
|
|
@ -10791,132 +10767,6 @@ abstract class AppLocalizations {
|
|||
/// **'Close'**
|
||||
String get assistantClose;
|
||||
|
||||
/// No description provided for @assistantOpenFailed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{assistant} couldn\'t be opened.'**
|
||||
String assistantOpenFailed(String assistant);
|
||||
|
||||
/// No description provided for @assistantConnectTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Connect Claude'**
|
||||
String get assistantConnectTitle;
|
||||
|
||||
/// No description provided for @assistantConnectSubtitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Let Claude read your studysets'**
|
||||
String get assistantConnectSubtitle;
|
||||
|
||||
/// No description provided for @assistantConnectIntro.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Claude can read your studysets, cards, notes and progress on {instance} through Halkyon Learn\'s connector, and answer about them. It can\'t change anything. What it reads goes to Anthropic, under their privacy policy.'**
|
||||
String assistantConnectIntro(String instance);
|
||||
|
||||
/// No description provided for @assistantStepAdd.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'In Claude, open Settings › Connectors and add a custom connector named Halkyon Learn, with this address. Added once, it works in Claude\'s apps too.'**
|
||||
String get assistantStepAdd;
|
||||
|
||||
/// No description provided for @assistantStepCode.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Claude then opens a page asking for a code. Get one here: it works once, for ten minutes.'**
|
||||
String get assistantStepCode;
|
||||
|
||||
/// No description provided for @assistantShowCode.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Show a code'**
|
||||
String get assistantShowCode;
|
||||
|
||||
/// No description provided for @assistantNewCode.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'New code'**
|
||||
String get assistantNewCode;
|
||||
|
||||
/// No description provided for @assistantCodeValid.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Valid until {time}'**
|
||||
String assistantCodeValid(String time);
|
||||
|
||||
/// No description provided for @assistantCopy.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Copy'**
|
||||
String get assistantCopy;
|
||||
|
||||
/// No description provided for @assistantCopied.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Copied'**
|
||||
String get assistantCopied;
|
||||
|
||||
/// No description provided for @assistantConnected.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Connected'**
|
||||
String get assistantConnected;
|
||||
|
||||
/// No description provided for @assistantNoneConnected.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Nothing connected yet.'**
|
||||
String get assistantNoneConnected;
|
||||
|
||||
/// No description provided for @assistantConnectedOn.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'connected {date}'**
|
||||
String assistantConnectedOn(String date);
|
||||
|
||||
/// No description provided for @assistantLastRead.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'last read {date}'**
|
||||
String assistantLastRead(String date);
|
||||
|
||||
/// No description provided for @assistantDisconnect.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Disconnect'**
|
||||
String get assistantDisconnect;
|
||||
|
||||
/// No description provided for @assistantDisconnectTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Disconnect {name}?'**
|
||||
String assistantDisconnectTitle(String name);
|
||||
|
||||
/// No description provided for @assistantDisconnectMessage.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'It can\'t read your studysets any more. You can connect it again with a new code.'**
|
||||
String get assistantDisconnectMessage;
|
||||
|
||||
/// No description provided for @assistantNotOffered.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This instance doesn\'t offer a connector yet. Questions still open in the AI assistant you chose, with what they are about.'**
|
||||
String get assistantNotOffered;
|
||||
|
||||
/// No description provided for @assistantUnreachable.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The instance can\'t be reached. Try again once you are online.'**
|
||||
String get assistantUnreachable;
|
||||
|
||||
/// No description provided for @assistantRetry.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Try again'**
|
||||
String get assistantRetry;
|
||||
|
||||
/// A line of context handed to the AI assistant after the question.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -10941,12 +10791,6 @@ abstract class AppLocalizations {
|
|||
/// **'Explanation: {text}'**
|
||||
String assistantLineExplanation(String text);
|
||||
|
||||
/// No description provided for @assistantLineStudyset.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Studyset: “{title}” in Halkyon Learn on {instance}'**
|
||||
String assistantLineStudyset(String title, String instance);
|
||||
|
||||
/// No description provided for @assistantLineDescription.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -10959,30 +10803,6 @@ abstract class AppLocalizations {
|
|||
/// **'Studyset: {title}'**
|
||||
String assistantChipStudyset(String title);
|
||||
|
||||
/// No description provided for @assistantContextLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Send along'**
|
||||
String get assistantContextLabel;
|
||||
|
||||
/// No description provided for @assistantTargetWeb.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Web'**
|
||||
String get assistantTargetWeb;
|
||||
|
||||
/// No description provided for @assistantSwitchToWeb.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Search the web instead'**
|
||||
String get assistantSwitchToWeb;
|
||||
|
||||
/// No description provided for @assistantSwitchToAssistant.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Ask {assistant} instead'**
|
||||
String assistantSwitchToAssistant(String assistant);
|
||||
|
||||
/// No description provided for @assistantHintWeb.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -11007,18 +10827,6 @@ abstract class AppLocalizations {
|
|||
/// **'Search engine'**
|
||||
String get settingsSearchEngine;
|
||||
|
||||
/// No description provided for @settingsAiAssistant.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'AI assistant'**
|
||||
String get settingsAiAssistant;
|
||||
|
||||
/// No description provided for @aiAssistantCustomHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'https://example.org/chat?q=%s'**
|
||||
String get aiAssistantCustomHint;
|
||||
|
||||
/// No description provided for @searchEngineDevice.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -12216,7 +12024,7 @@ abstract class AppLocalizations {
|
|||
/// No description provided for @studysetReadableBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Everything in it is decrypted and synced again, so the instance can read it: you can publish it, and Claude can read it through the connector.'**
|
||||
/// **'Everything in it is decrypted and synced again, so the instance can read it: you can publish it.'**
|
||||
String get studysetReadableBody;
|
||||
|
||||
/// No description provided for @studysetPrivateNoKeys.
|
||||
|
|
@ -12438,7 +12246,7 @@ abstract class AppLocalizations {
|
|||
/// No description provided for @studysetPrivacyReadableBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The instance can read it: you can publish it, and Claude can read it through the connector. Making it private encrypts it end to end on your devices; copies in the instance\'s backups stay readable until those expire.'**
|
||||
/// **'The instance can read it: you can publish it. Making it private encrypts it end to end on your devices; copies in the instance\'s backups stay readable until those expire.'**
|
||||
String get studysetPrivacyReadableBody;
|
||||
|
||||
/// No description provided for @studysetPrivacyTopic.
|
||||
|
|
|
|||
Loading…
Reference in a new issue