@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.
Files changed (39) hide show
  1. package/README.md +76 -3
  2. package/bin/jaato-web-coder-ui.d.ts +2 -0
  3. package/dist/assets/barlow-condensed-latin-500-normal-BgYH2mbd.woff2 +0 -0
  4. package/dist/assets/barlow-condensed-latin-500-normal-HIEiP5Ov.woff +0 -0
  5. package/dist/assets/barlow-condensed-latin-600-normal-BFJEwTuo.woff +0 -0
  6. package/dist/assets/barlow-condensed-latin-600-normal-DepVgxBB.woff2 +0 -0
  7. package/dist/assets/barlow-condensed-latin-ext-500-normal-B1RE8WP7.woff +0 -0
  8. package/dist/assets/barlow-condensed-latin-ext-500-normal-yA5ONLQ9.woff2 +0 -0
  9. package/dist/assets/barlow-condensed-latin-ext-600-normal-18ESti3H.woff2 +0 -0
  10. package/dist/assets/barlow-condensed-latin-ext-600-normal-Clv9cIcR.woff +0 -0
  11. package/dist/assets/barlow-condensed-vietnamese-500-normal-CsrJDWc5.woff +0 -0
  12. package/dist/assets/barlow-condensed-vietnamese-500-normal-DjeaNLFD.woff2 +0 -0
  13. package/dist/assets/barlow-condensed-vietnamese-600-normal-A5AYRdjN.woff2 +0 -0
  14. package/dist/assets/barlow-condensed-vietnamese-600-normal-CNlPk46_.woff +0 -0
  15. package/dist/assets/barlow-latin-400-normal-fsAxiSwU.woff +0 -0
  16. package/dist/assets/barlow-latin-400-normal-qiz4-Cze.woff2 +0 -0
  17. package/dist/assets/barlow-latin-500-normal-BPAOfeC8.woff2 +0 -0
  18. package/dist/assets/barlow-latin-500-normal-C1h8hMer.woff +0 -0
  19. package/dist/assets/barlow-latin-600-normal-CNwfPWQD.woff +0 -0
  20. package/dist/assets/barlow-latin-600-normal-DILqtrty.woff2 +0 -0
  21. package/dist/assets/barlow-latin-ext-400-normal-CvBsJvxq.woff +0 -0
  22. package/dist/assets/barlow-latin-ext-400-normal-HxX4XjxC.woff2 +0 -0
  23. package/dist/assets/barlow-latin-ext-500-normal-CJPcKP2Q.woff +0 -0
  24. package/dist/assets/barlow-latin-ext-500-normal-DOaysfXq.woff2 +0 -0
  25. package/dist/assets/barlow-latin-ext-600-normal-B8NK_A3D.woff2 +0 -0
  26. package/dist/assets/barlow-latin-ext-600-normal-DMVRjfRT.woff +0 -0
  27. package/dist/assets/barlow-vietnamese-400-normal-BFeobeCK.woff +0 -0
  28. package/dist/assets/barlow-vietnamese-400-normal-Dpl4UHAZ.woff2 +0 -0
  29. package/dist/assets/barlow-vietnamese-500-normal-GNfB7rCE.woff +0 -0
  30. package/dist/assets/barlow-vietnamese-500-normal-zTViEIzf.woff2 +0 -0
  31. package/dist/assets/barlow-vietnamese-600-normal-CA_GiK2e.woff +0 -0
  32. package/dist/assets/barlow-vietnamese-600-normal-DcjprdFV.woff2 +0 -0
  33. package/dist/assets/index-BRRXHsCQ.js +30 -0
  34. package/dist/assets/index-D6cHhK7P.css +1 -0
  35. package/dist/build-info.json +4 -4
  36. package/dist/index.html +2 -2
  37. package/package.json +3 -1
  38. package/dist/assets/index-CrrfI72I.js +0 -23
  39. 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