refactor: code review improvements — fix bugs, extract shared utilities, add README

- Fix reactivity bug: use SvelteMap instead of Map in sessions store
- Fix theme listener memory leak: guard against double-init, return cleanup function
- Fix transport singleton ignoring different endpoints
- Fix form/button type mismatch in MessageInput
- Add safer retry validation in chat page
- Extract shared utilities: date formatting, session config check, result source config
- Extract shared components: Backdrop, PageHeader
- Extract orchestration composable from chat page (310→85 lines of script)
- Consolidate AuditTimeline switch functions into config record
- Move sample data to dedicated module
- Add dark mode support for LineageTree SVG colors
- Memoize leaf count computation in LineageTree
- Update README with usage guide and project structure

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
shahondin1624
2026-03-12 13:48:06 +01:00
parent bb0eebff1b
commit 38f5f31b92
26 changed files with 753 additions and 579 deletions

View File

@@ -79,15 +79,18 @@ function getTransport(endpoint?: string) {
/**
* Reset the transport (useful for reconfiguring the endpoint).
*/
export function resetTransport(): void {
export function resetTransport(newEndpoint?: string): void {
transport = null;
if (newEndpoint !== undefined) {
transport = createGrpcWebTransport({ baseUrl: newEndpoint });
}
}
/**
* Create a configured orchestrator client.
*/
function getClient(endpoint?: string) {
return createClient(OrchestratorService, getTransport(endpoint));
function getClient() {
return createClient(OrchestratorService, getTransport());
}
/**
@@ -147,8 +150,7 @@ function toOrchestratorError(err: unknown): OrchestratorError {
export async function* processRequest(
sessionId: string,
userMessage: string,
sessionConfig?: SessionConfig,
endpoint?: string
sessionConfig?: SessionConfig
): AsyncGenerator<ProcessRequestResponse> {
const request = create(ProcessRequestRequestSchema, {
sessionId,
@@ -166,7 +168,7 @@ export async function* processRequest(
}
try {
const client = getClient(endpoint);
const client = getClient();
for await (const response of client.processRequest(request)) {
connectionStore.reportSuccess();
yield response;