@jaato/web-coder-ui 0.1.2 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -3
- package/bin/jaato-web-coder-ui.d.ts +2 -0
- package/dist/assets/barlow-condensed-latin-500-normal-BgYH2mbd.woff2 +0 -0
- package/dist/assets/barlow-condensed-latin-500-normal-HIEiP5Ov.woff +0 -0
- package/dist/assets/barlow-condensed-latin-600-normal-BFJEwTuo.woff +0 -0
- package/dist/assets/barlow-condensed-latin-600-normal-DepVgxBB.woff2 +0 -0
- package/dist/assets/barlow-condensed-latin-ext-500-normal-B1RE8WP7.woff +0 -0
- package/dist/assets/barlow-condensed-latin-ext-500-normal-yA5ONLQ9.woff2 +0 -0
- package/dist/assets/barlow-condensed-latin-ext-600-normal-18ESti3H.woff2 +0 -0
- package/dist/assets/barlow-condensed-latin-ext-600-normal-Clv9cIcR.woff +0 -0
- package/dist/assets/barlow-condensed-vietnamese-500-normal-CsrJDWc5.woff +0 -0
- package/dist/assets/barlow-condensed-vietnamese-500-normal-DjeaNLFD.woff2 +0 -0
- package/dist/assets/barlow-condensed-vietnamese-600-normal-A5AYRdjN.woff2 +0 -0
- package/dist/assets/barlow-condensed-vietnamese-600-normal-CNlPk46_.woff +0 -0
- package/dist/assets/barlow-latin-400-normal-fsAxiSwU.woff +0 -0
- package/dist/assets/barlow-latin-400-normal-qiz4-Cze.woff2 +0 -0
- package/dist/assets/barlow-latin-500-normal-BPAOfeC8.woff2 +0 -0
- package/dist/assets/barlow-latin-500-normal-C1h8hMer.woff +0 -0
- package/dist/assets/barlow-latin-600-normal-CNwfPWQD.woff +0 -0
- package/dist/assets/barlow-latin-600-normal-DILqtrty.woff2 +0 -0
- package/dist/assets/barlow-latin-ext-400-normal-CvBsJvxq.woff +0 -0
- package/dist/assets/barlow-latin-ext-400-normal-HxX4XjxC.woff2 +0 -0
- package/dist/assets/barlow-latin-ext-500-normal-CJPcKP2Q.woff +0 -0
- package/dist/assets/barlow-latin-ext-500-normal-DOaysfXq.woff2 +0 -0
- package/dist/assets/barlow-latin-ext-600-normal-B8NK_A3D.woff2 +0 -0
- package/dist/assets/barlow-latin-ext-600-normal-DMVRjfRT.woff +0 -0
- package/dist/assets/barlow-vietnamese-400-normal-BFeobeCK.woff +0 -0
- package/dist/assets/barlow-vietnamese-400-normal-Dpl4UHAZ.woff2 +0 -0
- package/dist/assets/barlow-vietnamese-500-normal-GNfB7rCE.woff +0 -0
- package/dist/assets/barlow-vietnamese-500-normal-zTViEIzf.woff2 +0 -0
- package/dist/assets/barlow-vietnamese-600-normal-CA_GiK2e.woff +0 -0
- package/dist/assets/barlow-vietnamese-600-normal-DcjprdFV.woff2 +0 -0
- package/dist/assets/index-BRRXHsCQ.js +30 -0
- package/dist/assets/index-D6cHhK7P.css +1 -0
- package/dist/build-info.json +4 -4
- package/dist/index.html +2 -2
- package/package.json +3 -1
- package/dist/assets/index-CrrfI72I.js +0 -23
- package/dist/assets/index-Dcvrkw9g.css +0 -1
package/README.md
CHANGED
|
@@ -15,10 +15,36 @@ Design notes, stack rationale and the input model live in
|
|
|
15
15
|
| UI | React 19 + Vite 7 | largest widget ecosystem for the pieces a client like this needs (virtualised lists, docking, terminals) |
|
|
16
16
|
| State | Zustand, one event-sourced reducer | the protocol is a stream of typed events; the store folds them, components subscribe to slices |
|
|
17
17
|
| Protocol | `@jaato/sdk` (workspace `file:` dep, source-aliased) | codegen'd event types stay in lockstep with `events.py`; no hand-written event mirror |
|
|
18
|
-
| Styling | Tailwind v4 + CSS variables | the eleven base colours of the TUI's `themes/*.json` become CSS custom properties, so both clients share one palette definition |
|
|
18
|
+
| Styling | Tailwind v4 + CSS variables | the eleven base colours of the TUI's `themes/*.json` become CSS custom properties, so both clients share one palette definition; the redesign's plates, chrome type and interface accent are one layer on top of them (see [Look](#look)) |
|
|
19
19
|
| Rendering | own `<j-*>` + markdown parsers, no `innerHTML` | the server emits neutral markup (`<j-code>`, `<j-table>`, Pygments token classes); the client only maps classes to theme colours |
|
|
20
20
|
| Tests | Vitest (protocol, store) + Playwright (UI against a scripted mock daemon) | |
|
|
21
21
|
|
|
22
|
+
## Look
|
|
23
|
+
|
|
24
|
+
The client is drawn on a blueprint (Claude Design, *Jaato Web UI
|
|
25
|
+
Redesign*, proposal 01c): square, hairline-bordered **plates** with
|
|
26
|
+
registration marks at their corners, **Barlow Condensed** for what the
|
|
27
|
+
interface says (kickers, buttons, tab names) and monospace reserved for
|
|
28
|
+
what the daemon said (ids, paths, models, arguments), and one **steel**
|
|
29
|
+
interface accent carrying the chrome while the theme's own colours shrink
|
|
30
|
+
to state glyphs. The light face (`theme light`, the default) is the
|
|
31
|
+
design's paper ground; `theme dark` and the other four TUI themes draw the
|
|
32
|
+
same structure on their own ground, because the structure is written in
|
|
33
|
+
terms of the theme variables plus a derived `--c-steel`
|
|
34
|
+
(`src/theme/themes.ts`). Fonts are self-hosted from `@fontsource`, so a
|
|
35
|
+
deployment behind a corporate proxy needs no font CDN.
|
|
36
|
+
|
|
37
|
+
The five screens the design draws: the connect plate (what jaato is on the
|
|
38
|
+
left, the one thing to do on the right, daemon settings behind a
|
|
39
|
+
disclosure, the build stamp at the foot); workspaces as a table;
|
|
40
|
+
new-session with resume and start side by side; the session with its
|
|
41
|
+
identity in a 46px header (brand, agent tabs, workspace / model / context),
|
|
42
|
+
tool calls as rows, user turns numbered in the gutter, one persistent rail
|
|
43
|
+
whose Plan / Budget / Files sections open and close (same toggles as
|
|
44
|
+
before: `Ctrl+P` / `Ctrl+B` / `Alt+W` and the status bar), and a 26px
|
|
45
|
+
status bar; and the permission request as a full-width warning plate with
|
|
46
|
+
the diff at full measure and one solid action.
|
|
47
|
+
|
|
22
48
|
## Commands are words, not `/verbs`
|
|
23
49
|
|
|
24
50
|
jaato commands are typed as bare words: `model gpt-4o`, `tools enable cli`,
|
|
@@ -31,6 +57,26 @@ with a command word. A hint under the box always states what Enter will do.
|
|
|
31
57
|
as in the TUI. See `src/protocol/commands.ts` for the routing rules, which
|
|
32
58
|
are a port of `jaato-tui/client_commands.py`.
|
|
33
59
|
|
|
60
|
+
## Files go into the workspace, not the prompt
|
|
61
|
+
|
|
62
|
+
Drop files on the composer, paste them, or press **Attach**, and they are
|
|
63
|
+
**staged into the session's workspace** on the daemon — the same
|
|
64
|
+
`StageFilesRequest` verb the premium `<jaato-task>` component uses (one
|
|
65
|
+
JSON frame naming the files, one binary frame each, one answer per file;
|
|
66
|
+
`docs/sdk-file-staging.md`). A strip above the box shows each file's state
|
|
67
|
+
(queued / staging / ✓ staged / ✗ with the daemon's reason), the Files
|
|
68
|
+
panel lists them as the daemon's monitor sees them, and the next message
|
|
69
|
+
ends with one line naming the paths so the model knows where they are:
|
|
70
|
+
`@path` then reads them. The strip's **into** field picks a folder for the
|
|
71
|
+
files that follow; a dropped directory keeps its structure.
|
|
72
|
+
|
|
73
|
+
The session picker has the same strip, for a session that should start
|
|
74
|
+
with files in place: with a workspace selected they are staged before
|
|
75
|
+
`session.new`; on a daemon that provisions the workspace as part of
|
|
76
|
+
`session.new` they wait for its `session.info` and are staged then, still
|
|
77
|
+
ahead of the first turn. The daemon caps a file at 10 MB and a request at
|
|
78
|
+
50 MB; the client applies the same caps before sending.
|
|
79
|
+
|
|
34
80
|
## Run it
|
|
35
81
|
|
|
36
82
|
The client is published on npm as `@jaato/web-coder-ui`; the package is the built
|
|
@@ -87,6 +133,31 @@ a workspace goes straight to that card whether or not the workspace already
|
|
|
87
133
|
names a provider. The daemon's manual provider / model / API-key form is one
|
|
88
134
|
click away behind `configure` on each row, never a gate.
|
|
89
135
|
|
|
136
|
+
Served by `jaato-web-coder-server` with its key store enabled (`config.json`
|
|
137
|
+
names `credentialsUrl`), that form's API-key field is a combobox of the keys
|
|
138
|
+
you stored before for the selected provider — label and a masked hint, never
|
|
139
|
+
the secret — plus "New key…". The newest one is preselected, so a second
|
|
140
|
+
workspace on the same provider is one click; the key is revealed once when
|
|
141
|
+
you save and forwarded to the daemon exactly as a typed one is. A
|
|
142
|
+
`<provider>-auth key …` typed at the prompt is remembered the same way. The
|
|
143
|
+
daemon knows nothing of the store: it is the backend's, keyed by who signed
|
|
144
|
+
in (`src/app/credentials.ts`, `src/components/workspace/CredentialPicker.tsx`).
|
|
145
|
+
|
|
146
|
+
Two ways out, as buttons. The workspace list's header says who is signed in
|
|
147
|
+
and offers the backend's **Sign out** (which also revokes that user's
|
|
148
|
+
daemon tickets); without a backend it offers **Disconnect** instead. The
|
|
149
|
+
status bar's **exit** is the `exit` command, and like the TUI's it asks
|
|
150
|
+
first what should become of the session (`src/app/exitChoice.ts`):
|
|
151
|
+
**Detach** `d` leaves it on the daemon for `session attach` later and
|
|
152
|
+
returns to the connect screen; **End session** `e` deletes it
|
|
153
|
+
(`session.delete`, which never touches the workspace directory) and lands
|
|
154
|
+
on the workspace list where there is one, else the connect screen; with a
|
|
155
|
+
turn in flight **Cancel task and exit** `c` stops it first and detaches;
|
|
156
|
+
**Return** `r` (or Escape) goes back. A typed key answers the plate as it
|
|
157
|
+
does a permission prompt. A page served with `autoConnect` does not
|
|
158
|
+
connect straight back after an exit; the next click does
|
|
159
|
+
(`src/app/exitIntent.ts`).
|
|
160
|
+
|
|
90
161
|
### Hosting the bundle yourself
|
|
91
162
|
|
|
92
163
|
`dist/` is static (assets are referenced relatively, so it can sit under any
|
|
@@ -194,7 +265,8 @@ src/
|
|
|
194
265
|
input/Composer.tsx prompts/ (Permission, Clarification, ReferenceSelection)
|
|
195
266
|
panels/ (Plan, Budget, Workspace, AgentTabs) layout/StatusBar.tsx
|
|
196
267
|
screens/ ConnectScreen, WorkspaceScreen, SessionScreen
|
|
197
|
-
theme/ themes.ts (imports ../jaato-tui/themes/*.json), theme.css
|
|
268
|
+
theme/ themes.ts (imports ../jaato-tui/themes/*.json, derives the steel accent), theme.css (tokens, plates, chrome type)
|
|
269
|
+
components/layout/Plate.tsx the redesign's unit of surface: a square hairline plate with registration marks
|
|
198
270
|
mock/daemon.ts scripted daemon speaking the wire protocol, for dev + e2e
|
|
199
271
|
e2e/ Playwright smoke suite
|
|
200
272
|
```
|
|
@@ -204,4 +276,5 @@ e2e/ Playwright smoke suite
|
|
|
204
276
|
`Enter` send · `Shift+Enter` newline · `Tab` complete / re-arm proposals ·
|
|
205
277
|
`Esc` dismiss proposal (send verbatim) · `Ctrl+P` plan · `Ctrl+B` budget ·
|
|
206
278
|
`Alt+W` files · `Ctrl+T` expand/collapse tools · `Ctrl+A` next agent ·
|
|
207
|
-
`Ctrl+O` next running tool in the popup · `Ctrl+C` (nothing selected) stop
|
|
279
|
+
`Ctrl+O` next running tool in the popup · `Ctrl+C` (nothing selected) stop ·
|
|
280
|
+
drop / paste a file on the composer to stage it into the workspace.
|
|
@@ -15,6 +15,8 @@ export interface StaticConfig {
|
|
|
15
15
|
token?: string;
|
|
16
16
|
ticketUrl?: string;
|
|
17
17
|
loginUrl?: string;
|
|
18
|
+
/** Where the sign-in backend keeps the user's provider API keys; absent = no combobox, a plain key field. */
|
|
19
|
+
credentialsUrl?: string;
|
|
18
20
|
autoConnect?: boolean;
|
|
19
21
|
}
|
|
20
22
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|