mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-21 22:46:32 +00:00
8a8ce4013b
- Tests that still knew the ChatGPT sign-in as personal only follow the admin's shared plan: the service takes the caller with their role, the admin tiles show ChatGPT, the controller tests cover the admin routes. - The table refused an instance ChatGPT connection with a CHECK, so sharing the plan failed. A new migration rebuilds ai_connections without that check; the shipped migration stays as it was. - useChatgptConnect grew past the function size limit: reading the clipboard and noticing the return to the tab are helpers of their own. - The file link factory hands its overrides over apart from the row, like every other factory, which ends the deep type instantiation. - Knip: exports only their own file used are private again, and the booking cap reads MAX_WRITES_PER_STEP instead of an alias. - lint:i18n-keys reaches the tools' own action names through a key builder and the connection hints through literal keys. - MMehrSheet stays in the assistant hints pair only.
33 lines
1.4 KiB
TypeScript
33 lines
1.4 KiB
TypeScript
import { Cable, type LucideIcon, MessagesSquare, ScanText } from 'lucide-react';
|
|
import type { Addon } from './addonModel';
|
|
|
|
/**
|
|
* The three addons that talk to a language model, shown as one AI tile in the
|
|
* integration column: the assistant in the trip, AI parsing (booking import)
|
|
* and MCP (TREK inside other AI apps). Their ids, rows and settings stay their
|
|
* own; only the page groups them. Assistant and parsing share one connection.
|
|
*/
|
|
const AI_ADDON_IDS = ['ai_assistant', 'llm_parsing', 'mcp'] as const;
|
|
export type AiAddonId = (typeof AI_ADDON_IDS)[number];
|
|
|
|
/** Each one's glyph, keyed by id: the icon column of an existing install still holds what it was seeded with. */
|
|
export const AI_ADDON_ICONS: Record<AiAddonId, LucideIcon> = {
|
|
ai_assistant: MessagesSquare,
|
|
llm_parsing: ScanText,
|
|
mcp: Cable,
|
|
};
|
|
|
|
export function isAiAddon(addon: Addon): boolean {
|
|
return (AI_ADDON_IDS as readonly string[]).includes(addon.id);
|
|
}
|
|
|
|
/** The AI addons this install has, in the tile's order. */
|
|
export function aiAddonsOf(addons: Addon[]): Addon[] {
|
|
return AI_ADDON_IDS.flatMap((id) => addons.find((a) => a.id === id) ?? []);
|
|
}
|
|
|
|
/** Whether the shared connection is used at all: the assistant or AI parsing is on. */
|
|
export function usesConnection(addons: Addon[]): boolean {
|
|
return addons.some((a) => (a.id === 'ai_assistant' || a.id === 'llm_parsing') && a.enabled);
|
|
}
|