summaryrefslogtreecommitdiffhomepage
path: root/src/features/named-agents/index.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-08-20 19:36:12 +0900
committerAdam Malczewski <[email protected]>2026-08-20 19:36:12 +0900
commitfb7eb3105e1fbbdefdad9348f9132815b5bbe52d (patch)
treedeb95e97a917424ea67470b168b91349a41d1c08 /src/features/named-agents/index.ts
parent63588c3c69b32d180dc78a2cc187cc8aa22ad7e0 (diff)
downloaddispatch-web-fb7eb3105e1fbbdefdad9348f9132815b5bbe52d.tar.gz
dispatch-web-fb7eb3105e1fbbdefdad9348f9132815b5bbe52d.zip
feat(named-agents): sidebar view, synthetic provider, auto-save, snapshot semantics
Implement the frontend of the Named Agents feature (plan §5-§9): - New features/named-agents module: pure logic (types re-exported from @dispatch/wire + transport-contract, validation, provider/model options, snapshot helpers, network normalizers, auto-save status model) + an injected auto-save controller (name debounce, immediate provider/model save, monotonic stale-response guard) + the collapsible sidebar card view. - Store: /named-agents CRUD + boot seed; selectModel(model, snapshot?) persists the raw model WITH the namedAgent snapshot; draft promotion carries it; refreshModel restores ModelResponse.namedAgent. - Chat store setNamedAgent (sends namedAgent on chat.send); Tab.snapshot + setSnapshot (retained across rename/remove, persisted with tabs). - Model selector: synthetic Named Agents provider ALWAYS first; selecting one resolves to the raw model + records a snapshot; a retained snapshot of a renamed/removed agent still displays as unavailable (plan §7). - Composition root wires the view (viewKinds + loaded-modules manifest) + feeds the selector. Tests: logic + controller + selector + app-store CRUD (1246 pass), typecheck 0, biome clean (only pre-existing config infos pending a future migrate), build OK.
Diffstat (limited to 'src/features/named-agents/index.ts')
-rw-r--r--src/features/named-agents/index.ts64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/features/named-agents/index.ts b/src/features/named-agents/index.ts
new file mode 100644
index 0000000..e66ef8e
--- /dev/null
+++ b/src/features/named-agents/index.ts
@@ -0,0 +1,64 @@
+export {
+ type AgentDraft,
+ type AgentSaved,
+ type DraftValidity,
+ draftModel,
+ draftValidity,
+ isClean,
+ isDirty,
+ type SaveStatus,
+ saveStatus,
+ saveStatusLabel,
+} from "./logic/auto-save";
+export {
+ normalizeNamedAgent,
+ normalizeNamedAgentRecord,
+ normalizeNamedAgents,
+ toNamedAgentInput,
+} from "./logic/normalize";
+export {
+ fullModelFromSelection,
+ joinModel,
+ modelFromFull,
+ modelsForProvider,
+ openCodeNumber,
+ providerFromModel,
+ providerLabel,
+ providerOptions,
+} from "./logic/options";
+export { findNamedAgent, snapshotFor } from "./logic/snapshot";
+export type {
+ CreateNamedAgent,
+ DeleteNamedAgent,
+ LoadNamedAgents,
+ NamedAgent,
+ NamedAgentDeleteResult,
+ NamedAgentInput,
+ NamedAgentResponse,
+ NamedAgentSaveResult,
+ NamedAgentSelectionSnapshot,
+ NamedAgentsResponse,
+ NamedAgentsResult,
+ UpdateNamedAgent,
+} from "./logic/types";
+export {
+ isUsableModel,
+ isUsableName,
+ nameError,
+ normalizeName,
+} from "./logic/validate";
+export {
+ type CardController,
+ type CardControllerOptions,
+ type CardSaveState,
+ createCardController,
+ type NamedAgentPorts,
+} from "./ui/controller.svelte";
+export { default as NamedAgentCard } from "./ui/NamedAgentCard.svelte";
+export { default as NamedAgentsView } from "./ui/NamedAgentsView.svelte";
+
+/** Public module manifest — aggregated by the shell's "Loaded Modules" view. */
+export const manifest = {
+ name: "named-agents",
+ description: "Curated Named Agent presets (name + model) in the sidebar",
+} as const;