Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
8f09fbb
feat(whispering): add reactive state modules for recordings, transfor…
braden-w Mar 15, 2026
449dbf0
feat(whispering): switch component reads from TanStack Query to works…
braden-w Mar 15, 2026
327fc7b
feat(whispering): switch component writes from TanStack mutations to …
braden-w Mar 15, 2026
7ddbf8e
feat(whispering): add transformation runs state module, switch record…
braden-w Mar 15, 2026
da91ca0
feat(whispering): cleanup — switch remaining reads/writes, update docs
braden-w Mar 15, 2026
4b72149
feat(whispering): refactor Editor to flat workspace field names, work…
braden-w Mar 15, 2026
8f11be6
fix(whispering): restore createQuery import for runs query, update st…
braden-w Mar 15, 2026
c9c3040
fix(whispering): memoize sorted getters with $derived to prevent infi…
braden-w Mar 15, 2026
2fa316a
refactor(whispering): add TransformationStepDraft type alias, replace…
braden-w Mar 15, 2026
a620199
Revert "refactor(whispering): add TransformationStepDraft type alias,…
braden-w Mar 15, 2026
e33763e
feat(whispering): replace runs createQuery in RecordingRowActions wit…
braden-w Mar 15, 2026
af2fbfa
refactor(whispering): use full TransformationStep everywhere, remove …
braden-w Mar 15, 2026
224f949
docs(skills): add referential stability pattern to Svelte skill
braden-w Mar 15, 2026
7472734
refactor(whispering): destructure step fields in handleStep() instead…
braden-w Mar 15, 2026
794c2e5
refactor(whispering): extract generateDefaultTransformation to state …
braden-w Mar 15, 2026
433c74c
fix(whispering): pass steps to transformInput mutation in Test.svelte
braden-w Mar 15, 2026
76d7134
refactor(whispering): extract saveTransformationWithSteps utility
braden-w Mar 15, 2026
bbca793
feat(whispering): replace last rpc.db.runs queries/mutations with wor…
braden-w Mar 15, 2026
9353516
refactor(whispering): deduplicate provider switch in handleStep with …
braden-w Mar 15, 2026
d3bec52
refactor(whispering): remove dead invalidateQueries and unused import…
braden-w Mar 15, 2026
eb027a2
refactor(whispering): rename db.ts to audio.ts, keep only getPlaybackUrl
braden-w Mar 15, 2026
1563dd4
docs(whispering): update query README for workspace state migration
braden-w Mar 15, 2026
67db1a1
docs: mark dead rpc.db cleanup spec as complete
braden-w Mar 15, 2026
aa12e92
docs: update query-layer skill and accessor article for db→audio rename
braden-w Mar 15, 2026
cf4bec8
docs(whispering): update stale architecture docs after workspace migr…
braden-w Mar 15, 2026
7096434
refactor(state): drop workspace prefix from state file names and exports
braden-w Mar 15, 2026
e8d04d6
docs: update documentation to reflect flattened state module names
braden-w Mar 15, 2026
329bee0
fix(state): resolve parameter shadowing in recording-actions and fix …
braden-w Mar 15, 2026
f52dc31
docs: archive pre-migration query layer README and fix stale imports
braden-w Mar 15, 2026
4b32b14
docs(spec): mark flatten-workspace-state-prefix as implemented
braden-w Mar 15, 2026
c809a44
fix(docs): update stale workspaceRecordings refs in query README code…
braden-w Mar 15, 2026
f22dd42
fix(docs): replace dead rpc.recordings and rpc.clipboard refs in arti…
braden-w Mar 15, 2026
42fc6ca
docs: fix last straggler workspaceSettings reference in settings README
braden-w Mar 15, 2026
5c53218
fix: capture recording ID at setup to prevent onDestroy teardown crash
braden-w Mar 18, 2026
9280a73
fix: wrap confirmation dialog confirm() in try/finally so dialog alwa…
braden-w Mar 18, 2026
945494b
fix(sidebar): center Whispering button in collapsed rail
braden-w Mar 18, 2026
b8264f7
feat(whispering): add dev-only debug page for workspace metrics and s…
braden-w Mar 19, 2026
d654176
refactor(whispering): decouple debug page factories and remove unused…
braden-w Mar 19, 2026
7e8e126
Merge remote-tracking branch 'origin/main' into opencode/silent-squid
braden-w Mar 20, 2026
87dea4c
chore: merge main, resolve skill doc conflicts
braden-w Mar 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 16 additions & 20 deletions .agents/skills/query-layer/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,25 +90,20 @@ Use in Svelte components for automatic state management. Pass `.options` (a stat
import { rpc } from '$lib/query';

// Reactive query - wrap in accessor function, access .options (no parentheses)
const recordings = createQuery(() => rpc.db.recordings.getAll.options);
const recorderState = createQuery(() => rpc.recorder.getRecorderState.options);

// Reactive mutation - same pattern
const deleteRecording = createMutation(
() => rpc.db.recordings.delete.options,
const transformRecording = createMutation(
rpc.transformer.transformRecording.options,
);
</script>

{#if recordings.isPending}
{#if recorderState.isPending}
<Spinner />
{:else if recordings.error}
<Error message={recordings.error.description} />
{:else if recorderState.error}
<Error message={recorderState.error.description} />
{:else}
{#each recordings.data as recording}
<RecordingCard
{recording}
onDelete={() => deleteRecording.mutate(recording)}
/>
{/each}
<RecorderIndicator state={recorderState.data} />
{/if}
```

Expand All @@ -118,15 +113,16 @@ Use in event handlers and workflows without reactive overhead:

```typescript
// In an event handler or workflow
async function handleBulkDelete(recordings: Recording[]) {
for (const recording of recordings) {
const { error } = await rpc.db.recordings.delete.execute(recording);
if (error) {
notify.error.execute(error);
return;
}
async function handleTransform(recordingId: string, transformation: Transformation) {
const { error } = await rpc.transformer.transformRecording.execute({
recordingId,
transformation,
});
if (error) {
notify.error.execute(error);
return;
}
notify.success.execute({ title: 'All recordings deleted' });
notify.success.execute({ title: 'Transformation complete' });
}

// In a sequential workflow
Expand Down
Loading
Loading