Sign in
Join now
scn-chat
sharedcomputer.network
/
Star
Starred
Star
Something went wrong. Try again.
Fork
0
Eye filled
Watch
Watching
Watch
ATProto-based AI Assistant Chat interface.
Star
Starred
Star
Something went wrong. Try again.
Fork
Eye filled
Watch
Watching
Watch
Overview
Overview
Issues
Issues
1
1
Pulls
Pulls
Pipelines
Pipelines
scn-chat
/
apps
/
web
/
tests
/
helpers
6 files
at
main
pouriade.com
·
The web app's message records are typed as the lexicon's MessageRecord, and a conversation's info as InfoRecord, from the local copy, which holds only records the server validated, through BranchMessage to the message, status, details, part, and tool views, so their reads need no casts. src/shared/message.ts holds what a status means, isPending and isFinished, which counts a status another client wrote that this app doesn't know as neither, along with a message's parts, whether it is encrypted, and who wrote it, in place of the checks written out in the message view, the message actions, the chat, the reply follower, and tool status. Tests build records with messageRecord in tests/helpers/records.ts, and the status rules are tested once.
·
2w ago
46d94593
event-source.ts
The reply follower, in features/conversation/reply-follower.ts, follows each pending reply in the open conversation until its final record arrives, in place of replyStreamQuery in queries.ts, useReplyStream, and the stream logic in ReplyStream, LiveAuthor, and ConversationView. useReplyFollower(skey, messages) works out the pending replies from the records and returns follow for a reply just sent, and owns the stream queries, when each stream has ended, the poll with its backoff, and the refresh once a reply finishes. A reply's views read it without ever starting a stream: useFollowedReply gives what has streamed and why the reply is no longer live, dropped or elsewhere, and useReplyStarted rerenders the header only once the reply starts. The stream query and the finished statuses are private to it, so a view can no longer start a stream by leaving out enabled: false. Behaviour is unchanged. Its tests, over a shared fake EventSource in tests/helpers, cover the stream, following before the record arrives, a dropped or unreadable stream, the poll, another server running the reply, closing, and that deltas rerender neither the conversation nor the header, in place of the poll and stream tests in ConversationView's tests and replyEvents's own. The web UI spec's streaming section describes it, and the glossary names it.
2w ago
fetch.ts
Merge web-rebuild: the web app on TanStack Start. Port main's no-models composer block, role and model summary pages, API keys and Cron pages into its feature folders
3w ago
records.ts
The web app's message records are typed as the lexicon's MessageRecord, and a conversation's info as InfoRecord, from the local copy, which holds only records the server validated, through BranchMessage to the message, status, details, part, and tool views, so their reads need no casts. src/shared/message.ts holds what a status means, isPending and isFinished, which counts a status another client wrote that this app doesn't know as neither, along with a message's parts, whether it is encrypted, and who wrote it, in place of the checks written out in the message view, the message actions, the chat, the reply follower, and tool status. Tests build records with messageRecord in tests/helpers/records.ts, and the status rules are tested once.
2w ago
router.tsx
Add shared primitives for the web component refactor. ErrorAlert renders an error's alert or nothing, LocalTime shows a date in the browser's locale only in the browser, and form.tsx is a createFormHook kit whose text, textarea, checkbox, and select fields bind to their field and label themselves, with a Form that submits through the form API and a SubmitButton disabled while submitting. The router's default error and pending components, RouteError and RoutePending, give every route its own boundaries, so a failed section shows its error inside its layout with a Retry that reloads it, and renderAt uses the same defaults.
3w ago
select.ts
Add the shared UI kit in src/shared/ui. Button with default, primary, danger, and quiet tones, primary when it submits, IconButton, Badge and Chips, the field look, Switch and Radio drawing their knob and dot beside the input, the Select from design-reference on usePlacement, the floating menu look, CopyButton, item and link lists, and the settings kit of page, group, row, field, choices, SaveBar, ConfirmButton, empty state, and callout, whose rows stack in a narrow column. The form kit's fields take the field look and gain SwitchField, and ErrorAlert, RouteError, and RoutePending use the kit. The theme gains letter spacings, the radio's edge, and the copy icon's swap, and the guard lets whole extents like 100vw through.
2w ago
store.ts
The browser store's seam has a second adapter. The worker exposes every StoreCore method through one guard in store/calls.ts, which fails while another tab holds the store and reports an ended session, rather than restating each method, and StoreClient holds them as calls rather than worker. testStore in tests/helpers/store.ts runs the same logic and guard over better-sqlite3 with a fake server API, and the component tests that built their own store, for the conversation, chat list, app, chat, reply follower, settings, and the store's hooks, use it, so they go through the real reads, syncs, and change events. The chat list's search tests check the list is visible again rather than only present, since it stays mounted while hidden.
2w ago