wicked-studio 0.13.0 → 0.14.1

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 CHANGED
@@ -2,14 +2,19 @@
2
2
 
3
3
  > [![npm](https://img.shields.io/npm/v/wicked-studio)](https://www.npmjs.com/package/wicked-studio) · [![CI](https://github.com/mikeparcewski/wicked-studio/actions/workflows/ci.yml/badge.svg)](https://github.com/mikeparcewski/wicked-studio/actions/workflows/ci.yml) · [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
4
4
 
5
- **Where you direct your coding agents.** *Your coding agents do the work. A different agent checks
6
- it against your rules. You get the evidence.* wicked-studio is the browser UI for running the
7
- coding-agent CLIs you already use (Claude Code, Codex, GitHub Copilot, OpenCode, Pi) as checked
8
- workers: you start a job, the agents do the work in sandboxes behind verification gates, and you
9
- approve the decisions that matter — with the evidence behind every "done" one click away.
10
-
11
- It's the human surface of the [wicked](https://wickedagile.com) platform; the
12
- [wicked-crew](https://github.com/mikeparcewski/wicked-crew) daemon runs the jobs and bundles studio.
5
+ **The ADE (agentic development environment) for running a team of coding agents.** *Your coding
6
+ agents do the work. A different agent checks it against your rules. You get the evidence.* By
7
+ default a different agent reviews the work. When none can, the job stops unless you launch it as
8
+ "reduced assurance", which is labelled on the job, every gate and the delivery. A saved workflow may
9
+ require fewer checks; its requirements are listed in the receipts.
10
+
11
+ wicked-studio is the browser app where you run Claude Code, Codex, GitHub Copilot, OpenCode and Pi
12
+ as a team. Start a job with a chat: it proposes a plan, and once you confirm it the agents work in
13
+ sandboxes while you watch. With whisper.cpp installed, you can ask questions out loud and steer jobs
14
+ already running, each instruction confirmed on screen first. Gate decisions come to you as one
15
+ card, and each job's evidence is a click away. Learn suggests rules and memories from how your team
16
+ works, for you to accept, and jobs can propose what they learned for your approval.
17
+ The [wicked-crew](https://github.com/mikeparcewski/wicked-crew) daemon runs the jobs and bundles studio.
13
18
 
14
19
  ---
15
20
 
@@ -21,16 +26,28 @@ reasoning in a scrollback you'll never read. wicked-studio flips that:
21
26
  - **Start with a chat.** **New job → Start with chat**: describe what you want, the chat proposes a
22
27
  plan, and nothing starts until you confirm it. (Tick "Don't show this again" to go straight to
23
28
  chat next time.)
24
- - **Sign your agents in once.** The **Agents** tab signs each agent in, inside a container. Jobs run
25
- every agent in a hardened sandbox (crew needs a container runtime: Rancher Desktop, Docker,
26
- Podman, Colima or OrbStack). Credentials stay in a broker; the sandbox only ever sees placeholders.
27
- - **Rules and memory, kept apart.** **Steer** holds your rules, each with an explicit reach
28
- (everywhere, one project, or one repo). **Memory** is its own tab: what happened and what you told
29
- it, with your own memories applying across projects. Agents suggest both; you approve.
29
+ - **Sign your agents in once.** The **Agents** page signs each agent in: Claude Code and GitHub
30
+ Copilot through a login container; Codex, Pi and OpenCode with their host CLIs and a temporary
31
+ home (wicked-core `src/seat_login.rs`). Jobs run every agent in a hardened sandbox (crew needs a
32
+ container runtime: Rancher Desktop, Docker, Podman, Colima or OrbStack). Credentials stay in a broker and the sandbox sees placeholders,
33
+ except a Claude Code seat on a Claude subscription, which receives its sign-in token (if a step writes it
34
+ into the work, the step fails and its delivery is blocked).
35
+ - **Rules and memory, kept apart.** **Steering** holds your rules, each with an explicit reach
36
+ (every repository or one project; a rule can also target a language, a layer or a framework).
37
+ **Memory** is its own page: what happened and what you told
38
+ it, with your own memories applying across projects. Agents suggest both; you approve. A finished
39
+ job says what it learned ("3 learnings proposed · 2 waiting for you"), and each proposal in
40
+ Memory's queue names the job it came from.
41
+ - **Teach it how you work.** **Learn** (marked "Start here" in the sidebar until you use it) reads
42
+ your team docs, showcase repos and writing into suggested rules and memories, offers starter
43
+ rules, sets the orchestrator's **Personality** (tone only; never rigor, gates or checks; one for
44
+ you, overridable per project) and learns your brand colours. Suggested rules and memories become active only when you accept
45
+ them (the sources you supply and the pending suggestions are stored so you can review them).
30
46
  - **Direct, don't babysit.** Launch runs across many repos and projects at once, then let them
31
47
  work. Attention comes to *you* when a run hits a gate — you don't sit watching one terminal.
32
- - **Approve what matters.** Human-in-the-loop gates surface the real decisions (approve, approve
33
- with a steer, or reject) — with keyboard batch triage when several pile up.
48
+ - **Approve what matters.** Human-in-the-loop gates surface the real decisions as one guided card:
49
+ every choice the gate offers, the recommended one marked when there is one and, when supplied,
50
+ what each choice would do, then one button and a 10 s undo. Keyboard batch triage helps when several pile up.
34
51
  - **"Done" is proven, not claimed — and the gate says how.** By default a run requires a distinct
35
52
  evaluator and a judge: review goes to a seat other than the creator's. When no such seat exists, the
36
53
  run stops at a gate that says why. You can then sign a second seat in, or relaunch with **reduced
@@ -48,8 +65,8 @@ reasoning in a scrollback you'll never read. wicked-studio flips that:
48
65
  that nothing re-verified is labelled "Unverified delivery", along with whether its tree moved, and
49
66
  the delivery shows the QE acceptance check when the run requires one.
50
67
 
51
- A run that changes the application (`feature`, `bug`, `migration`, `mcp-server`) requires QE
52
- acceptance before it delivers. The session header, every gate and the delivery say where that
68
+ A built-in workflow that changes the application (`feature`, `bug`, `migration`, `mcp-server`,
69
+ `editor-plugin`) requires QE acceptance before it delivers. The session header, every gate and the delivery say where that
53
70
  stands: "QE acceptance: required", "waived (score N)" when the run's change scored in the lowest
54
71
  band on every dimension, or "skipped by operator (reason)". The launch form offers **Skip QE
55
72
  acceptance**, which needs a reason before it can be sent, and **Force QE acceptance**, which keeps
@@ -57,37 +74,78 @@ reasoning in a scrollback you'll never read. wicked-studio flips that:
57
74
  transcripts, diffs, and a downloadable evidence bundle. Studio shows you the gate outcomes; it never
58
75
  grades the work itself.
59
76
  - **Understand the code first.** Onboard a repo and studio builds its graph — then blast-radius
60
- for any symbol, hotspots, the domain/requirements view, and a searchable map of what calls what.
77
+ for any symbol, hotspots, a searchable map of what calls what, and the requirements view. Ask
78
+ **Understand** a question and it runs a read-only analysis over the repositories you choose, with
79
+ a cited answer.
61
80
 
62
81
  ## What you can do
63
82
 
64
83
  - **Run governed agents on your repos** — register a local path or clone a URL; studio builds the
65
84
  code graph, then you launch runs (ask / balanced / autonomous), pick which agent seats join, and
66
- bind a repo with optional PR delivery.
85
+ bind a repo with optional PR delivery. On a crew with **power mode**, it is on by default when you
86
+ launch a preset or a composed plan on a repository, unless Settings says otherwise (a switch on
87
+ New job and beside the job's name); a chat's own run and a phase-based workflow run phased. The
88
+ code-writing build step then runs as one orchestrator's checkpointed turns (other required steps
89
+ can run separately): the job page shows its rigor (with ↑ when it rose since intake), its
90
+ checkpoints, and, when the change grows past its plan, a pause that offers to split it into lanes,
91
+ switch to phased, continue at high rigor or stop.
67
92
  - **Steer runs live** — the Desk (the one shell) puts what needs you first; every run or chat
68
- opens as a **session** (`/s/:id`): one thread with the live record, gate rows you answer in place
69
- (approve / steer / reject), elicitation prompts, pre-gate guidance notes, and lifecycle controls
70
- (cancel, inject a message, retry). The pre-session addresses (`/runs/:id`, `/work`, `/p/:id/…`,
93
+ opens as a **session** (`/s/:id`): one thread with the live record, gate cards you answer in place,
94
+ elicitation prompts, pre-gate guidance notes, and lifecycle controls (cancel, inject a message,
95
+ retry). While a step works, the thread lists what it is doing (tool calls, edits, the seat's
96
+ meter) and folds to one summary line when it ends; every message shows when it was said, when that
97
+ was recorded. A step that runs long offers **Check on it?**: an eligible seat that is not the
98
+ step's own reads its record and recommends letting it run, steering or stopping; when none can
99
+ run or finish, crew gives its own reading, labelled as such. Neither acts on any of it. The job's Details panel
100
+ holds a **Phase report** (a plugin section; one per phase in a power build, one for the whole job
101
+ otherwise), and the thread keeps one slim row per update with "Show in Details". The pre-session addresses (`/runs/:id`, `/work`, `/p/:id/…`,
71
102
  `/chat/…`) were retired and show the not-found page.
72
103
  - **See the evidence** — per-step transcripts, a worktree file + diff viewer, and one-click
73
104
  evidence-bundle download for any run.
74
105
  - **Explore your codebase** — graph view with focus navigation, blast radius, hotspots, and the
75
- domain graph with coverage.
76
- - **Plan the product** — the **Product** view (rail → Product, `/product?project=<id>`) answers
77
- "what are we building" where the Desk answers "what is executing". It lists a project's
78
- requirements across every one of its repositories, grouped by repo and searchable; a repo that
79
- could not be read is named with the reason. Choose up to 40 requirements and an optional steer,
80
- and **Draft epics** launches a governed draft → review → approve run that opens in its session;
81
- its plan and gate are answered there. Coverage and the domain model stay on the project page.
82
- Publishing the drafted epics is not offered yet.
106
+ domain graph.
107
+ - **See how much of the code is mapped to requirements** — Repositories → a repo → Requirements
108
+ heads the list with "80% real requirements · minimum 80%" and its parts (real, placeholders,
109
+ unmapped, not product code). A placeholder is never counted toward the share and never shows as
110
+ validated; a real one with corroboration data carries **validated** (with its count of
111
+ independent sources) or **unconfirmed** with why (rows from an older build, or outside the
112
+ count, may carry no verdict). A row the share does not count (a type shape, code that is not
113
+ product code, or a file the code index skipped) carries a **not counted** mark with why, and a line
114
+ under the coverage says how many stated rules and placeholders sit on type shapes. The Config &
115
+ data filter is hidden when crew reports no config and data rows. When the list is an older graph build than the header's numbers, it says
116
+ so. A repo with no requirements graph yet offers **Generate it** (or **Keep mapping** once some real
117
+ requirements are mapped), which opens New job filled in with the generating workflow; while a mapping job
118
+ runs, the view shows its progress with **Open the job** instead. The minimum is a setting (Settings → General → Code graph,
119
+ default 80%).
120
+ - **Plan the product** — a project's page has a Requirements section (its count across the
121
+ project's repositories) and a full list at `/projects/:id/requirements`, grouped by repo and
122
+ searchable. Choose up to 40 requirements and **Draft epics** opens New job on the Draft epics
123
+ workflow with them. The old Product address (`/product?project=<id>`) opens that project's page
124
+ at its Requirements section. Publishing the drafted epics is not offered yet.
83
125
  - **Ask several seats at once** — a chat can hold more than one warm CLI seat; each answers in the
84
126
  thread, and the daemon checks every path, `path:line` and commit a reply cites against the repo.
85
- - **Govern the work** — author steering rules and policies, browse the decisions ledger, and review
86
- what the platform has learned about your repos.
127
+ - **Govern the work** — author steering rules and policies (or import a markdown rule doc; a
128
+ refused entry shows crew's reason), browse the decisions ledger, and review what the platform has
129
+ learned about your repos. **Evaluate** runs your rules against example behaviours: it recommends
130
+ what to run and why, takes your own behaviours (a file, a pasted transcript, or past jobs' steps),
131
+ and lists every past run with what it caught, what slipped through and its false alarms, plus
132
+ **Analyze this run**.
133
+ - **Chat with any page** — the icon beside the title of Report, Nerve Center, Evaluate, Steering,
134
+ Memory, Learn, Agents, Repositories and Jobs opens that page's own chat, drawn in the page with the
135
+ page's data; on Understand, the question box is the chat. Click a number or chart on Report to ask about it.
136
+ - **Talk to it** — when crew has voice, a mic sits beside Send in every composer (and beside Start on
137
+ Home); ⌥V opens voice mode from anywhere. Speech is transcribed by crew on your machine
138
+ (whisper.cpp; the model downloads only when you say so). Ask questions, say "show me this job" for
139
+ a live tile, or "tell it to …" to steer, stop, raise rigor or answer its decision; every action is
140
+ confirmed on screen before it is sent, and the thread marks it "You (by voice)". The voice
141
+ dashboard's widgets can be removed, added and made from any system number.
87
142
  - **Work in projects** — group repos, runs, chats, and docs; "See everything" (`/everything`) lists
88
- them, filterable by project, and a project's address (`/p/:id`) opens its scoped Sessions list;
89
- deep-linkable
90
- routes throughout.
143
+ them, filterable by project, and a project's page is `/projects/:id`; deep-linkable routes
144
+ throughout.
145
+ - **Make it yours** — three themes (Wicked Light, Wicked Dark, and **Ambient**, a quiet
146
+ mood on your chosen ground that follows the work: a tint while jobs run, warm when something needs
147
+ you, red when something failed). Text is set in Wicked Sans; the plugins page shows every plugin
148
+ as a card (job-detail sections and editors) with what it may do.
91
149
  - **Plus** governed terminals, a Cmd+K command palette, document & video creation modes, and
92
150
  desktop notifications when a run needs you.
93
151
 
@@ -157,7 +215,7 @@ npm run dev # vite on http://127.0.0.1:4200, pointed at :7701
157
215
  ```
158
216
 
159
217
  `npm test` (vitest + testing-library), `npm run typecheck`, `npm run lint`, `npm run build`
160
- (tsc + vite → `dist/`). CI runs all four on ubuntu / macos / windows for every PR.
218
+ (tsc + vite → `dist/`). CI runs all four on ubuntu for every PR, and the e2e journeys in two shards.
161
219
 
162
220
  ### Standalone build
163
221
 
@@ -174,15 +232,17 @@ uses `VITE_API_HOST` (host:port, no scheme) fixed at build time. The daemon's lo
174
232
  any `localhost` / `127.0.0.1` origin, so a standalone studio drives a local daemon out of the box.
175
233
  `e2e/studio_standalone_test.py` is the scripted proof of this mode.
176
234
 
177
- ### Editor plugins
235
+ ### Plugins
178
236
 
179
237
  Artifact editors are plugins: one self-contained HTML file per editor, run in a sandboxed frame with no network
180
- and talking to studio's plugin host over one MessagePort (`wicked.editor/1`, `src/editors/`). Settings →
181
- Developer → Editor plugins lists the editors the daemon serves (built in, or installed by a run). It links each
182
- one to the **editor test page** (`/editors/dev`), which opens it in the real host over a sample page. **Create an
183
- editor plugin** puts `/workflow-editor-plugin` in the Desk composer. That workflow scaffolds the editor with the
184
- `wicked-garden-editor-scaffold` skill, runs its conformance cases, and installs it after a consent gate. It also
185
- opens a pull request. `/editors/conformance` is the conformance host that `e2e/editor_conformance_test.py` drives
238
+ and talking to studio's plugin host over one MessagePort (the `wicked.editor` envelope, protocols 1 to 3,
239
+ `src/editors/`). A **run plugin** uses the same sandbox on protocol 3: the host sends it the job's events on the
240
+ topics it was granted (`events.batch`), and it draws a section of the job's Details panel; the built-in Phase
241
+ report is one. The **Plugins** page (`/plugins`, under Build & settings) shows every plugin as a card with what
242
+ it hears and may do, and links to the **editor test page** (`/editors/dev`), which opens an editor in the real
243
+ host over a sample page. **Create a plugin** opens New job on the `editor-plugin` workflow. That workflow
244
+ scaffolds the editor with the `wicked-garden-editor-scaffold` skill, runs its conformance cases, and installs it
245
+ after a consent gate. It also opens a pull request. `/editors/conformance` is the conformance host that `e2e/editor_conformance_test.py` drives
186
246
  in CI; it has no nav or ⌘K entry.
187
247
 
188
248
  ### How crew ships this UI
@@ -201,7 +261,7 @@ The repo also carries a `data-testid` selector contract (`testid-inventory.json`
201
261
  1. Fork and branch.
202
262
  2. `npm install && npm run dev` — SPA on `:4200`, daemon on `:7701`.
203
263
  3. `npm test && npm run typecheck && npm run lint` before committing.
204
- 4. Open a PR; CI runs all four gates on ubuntu / macos / windows.
264
+ 4. Open a PR; CI runs the four gates and the e2e journeys.
205
265
 
206
266
  Keep the wire-contract boundary intact: all crew interaction goes through `/api/v1` and `/ws`, never
207
267
  a crew-source import — if a type is missing, it lands in `wicked-crew-api-types` first.