@abelxiaoxing/cadence 2.0.13 → 2.0.14
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 +141 -69
- package/THIRD_PARTY_NOTICES.md +1 -0
- package/docs/remote-access.md +13 -0
- package/docs/reuse-and-distribution.md +13 -2
- package/docs/service-management.md +31 -12
- package/licenses/pi-web-ui-reuse.md +2 -0
- package/package.json +5 -2
- package/src/conversation-context.mjs +147 -0
- package/src/conversation-resources.mjs +47 -0
- package/src/native-build.ts +1 -1
- package/src/native-client.ts +2 -2
- package/src/operator-cli.mjs +4 -7
- package/src/sdk-worker.mjs +41 -8
- package/src/service/contracts/workbench.ts +303 -0
- package/src/service/coordination.ts +1 -0
- package/src/service-cli.mjs +1227 -577
- package/src/service-client.ts +49 -0
- package/src/service-host.mjs +15768 -13011
- package/src/service-http-client.ts +50 -24
- package/src/service-wire.ts +26 -4
- package/src/task-store.ts +12 -11
- package/web/dist/assets/cadence.css +1 -1
- package/web/dist/assets/cadence.js +13 -7
- package/web/dist/manifest.json +7 -7
package/README.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# Cadence
|
|
2
2
|
|
|
3
3
|
`@abelxiaoxing/cadence` is a shared Pi task workspace with two independently usable clients: native `/cadence` and a browser WebUI.
|
|
4
|
-
One
|
|
5
|
-
|
|
4
|
+
One authenticated workbench entry routes to independent project owners, which own tasks, bounded subagent collaboration, real parent checks and retained history.
|
|
5
|
+
Resource discovery and opening history never start work or a service.
|
|
6
|
+
The WebUI also supports ordinary Pi conversations: only an explicit Send starts their direct host-tool work, independently of Cadence task admission.
|
|
6
7
|
`cadence server install` registers that service with the user's service manager and starts its WebUI on the default address.
|
|
7
8
|
|
|
8
9
|
This is a trusted workflow assistant, **not a sandbox, certified executor or transactional application system**.
|
|
@@ -21,7 +22,9 @@ cadence server install
|
|
|
21
22
|
The global install puts `cadence` (and its alias `cadence-service`) on `PATH`.
|
|
22
23
|
Cadence ships no install script, so npm 12 and Bun, which skip untrusted install scripts by default, change nothing.
|
|
23
24
|
They may still report blocked scripts from the pinned Pi SDK's dependencies: `@google/genai`'s preinstall only echoes `no-op`, and `protobufjs`'s postinstall only warns about a dependent's version scheme, so neither needs approval.
|
|
24
|
-
`cadence server install` registers and starts the
|
|
25
|
+
`cadence server install` registers and starts the project-less workbench on `http://127.0.0.1:17423`; it does not create `~/cadence` or select a working directory.
|
|
26
|
+
Open an existing folder explicitly in the workbench to associate its project owner.
|
|
27
|
+
The explicit `--workspace /absolute/project` option retains the older single-project service route for compatibility; it never creates a missing project.
|
|
25
28
|
It prints the private link to open, `http://127.0.0.1:17423/?token=…`.
|
|
26
29
|
The port and that token live with the research settings in `~/.pi/agent/cadence/.env`.
|
|
27
30
|
Install creates that file from the research template when missing (Pi's startup card names the path until it exists), and adds either line when it is missing, never changing an existing one:
|
|
@@ -89,7 +92,10 @@ cadence token-link --workspace /absolute/project --reveal
|
|
|
89
92
|
Use the installed `cadence` bin (or `cadence-service`), or `node /absolute/cadence/src/service-cli.mjs` followed by those arguments.
|
|
90
93
|
Default binding is numeric loopback `127.0.0.1:17423`; `--foreground` is available for an explicitly configured supervisor.
|
|
91
94
|
Start reads the existing Pi agent directory (or an explicit private configuration), never creates another login/profile.
|
|
92
|
-
|
|
95
|
+
Without `--workspace`, `cadence start|status|diagnose|stop|token-link|token-rotate` address the workbench; `cadence workbench <operation>` is the explicit equivalent.
|
|
96
|
+
Project-scoped commands and native `/cadence` require an actual project directory.
|
|
97
|
+
A directory containing private state, or inside the private namespace, is refused as a project root without redirection, mkdir or reconstruction.
|
|
98
|
+
An existing `~/cadence` is consumer data: it is neither deleted nor automatically associated.
|
|
93
99
|
See [service management](docs/service-management.md) for configuration, model/auth policy, Stop, diagnosis and informed recovery.
|
|
94
100
|
|
|
95
101
|
### Native terminal
|
|
@@ -131,18 +137,51 @@ For manual checks, `pi -e ./src/index.ts -e ./scripts/agent-panel-demo.ts` adds
|
|
|
131
137
|
|
|
132
138
|
Open the private link that `cadence server install` printed, or that `cadence token-link --reveal` reveals.
|
|
133
139
|
Valid bootstrap redirects to a token-free URL and uses an HttpOnly SameSite cookie for subsequent HTTP/WebSocket access; no localStorage token copy.
|
|
134
|
-
The browser
|
|
140
|
+
The unified browser entry first shows projects, without an execution cwd, SDK session or default workspace.
|
|
141
|
+
Only explicit Open starts or reuses a project owner.
|
|
142
|
+
Within that project, the browser opens on an ordinary conversation with a real message composer, retained multi-turn context and standard read/write/edit/bash tools; no Cadence task is created by Send.
|
|
143
|
+
Use `cadence <goal>` or `/cadence <goal>` at the beginning of the input, or select Cadence task, to prepare a separate task.
|
|
144
|
+
Mentions, quotations and fenced code do not select task mode.
|
|
145
|
+
Create is not Start: the readable plan, explicit Start, exact configured checks and human review remain separate.
|
|
146
|
+
A task created from an existing ordinary conversation retains a navigation link back; the old conversation is not converted and its history is not silently injected into the task.
|
|
147
|
+
All of this works without a live Pi terminal.
|
|
135
148
|
A token grants workspace access, not action consent.
|
|
136
|
-
|
|
149
|
+
Cadence task mutations need their own context-bound preview/confirmation.
|
|
150
|
+
Ordinary Send binds its exact text, conversation head, epoch, access and selected model; stale/duplicate/lost replies do not silently replay work.
|
|
137
151
|
The WebUI provides task/run/assignment navigation, long retained messages and tool detail, exact literal search, timeline and complete scoped NDJSON/Markdown downloads.
|
|
138
152
|
Desktop panes and phone drawers retain cancellation and keyboard controls.
|
|
139
|
-
Its
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
153
|
+
Its chrome follows pi-web-ui: a compact topbar with view tabs and icon actions, a sectioned task sidebar, pill inspector tabs, transcript/tool cards and a bottom statusbar; phones wrap the topbar into an action row and an icon tab row.
|
|
154
|
+
The left sidebar lists recent projects and running/retained conversations; a separate lower-left dock observes Cadence subagents and opens their retained transcripts.
|
|
155
|
+
It is not pi-web-ui's subagent engine.
|
|
156
|
+
The right sidebar defaults to readonly files, bounded text previews and path-only references; task plan/check/change/review controls occupy its Task details tab.
|
|
157
|
+
The lower-right folder button browses directories on the service host and explicitly opens another independent project owner.
|
|
158
|
+
The unified entry switches project clients on the same origin, including an explicitly configured HTTPS proxy; it never changes a running task's cwd, registers a boot service or cancels the project left behind.
|
|
159
|
+
Backend cookies and native capabilities never reach the browser; proxied actions remain browser-authority actions, with owner-side consent/build/CSRF checks.
|
|
160
|
+
The gateway refuses the legacy project-level Open command: all project openings use its own association route, without returning an independent backend token link.
|
|
161
|
+
Direct legacy project entries remain available; only that compatibility route retains its older loopback-only cross-project navigation.
|
|
143
162
|
The interface is in English or Simplified Chinese: it follows the browser's first preferred language, and the topbar's globe chip (`中文` / `EN`) switches it, remembered only in that browser.
|
|
144
163
|
Error codes, identifiers, commands and recorded content stay untranslated.
|
|
145
164
|
|
|
165
|
+
#### Ordinary conversation boundaries
|
|
166
|
+
|
|
167
|
+
Ordinary conversations run through the same isolated SDK process launcher, exact model/auth sources and orderly Stop as tasks, with a separate private `service-v1/conversations-v1` store rather than fabricated task records or imported Pi sessions.
|
|
168
|
+
Their tools operate on the host, not in a sandbox.
|
|
169
|
+
Each turn holds the checkout's exclusive gate, so ordinary turns, Cadence children and parent checks cannot edit/read across one another's active write window; leaving a tab only detaches.
|
|
170
|
+
Conversation identities are not recreated when their metadata disappears, unaccepted turn directories are never adopted, and rolling private writes compare their exact expected bytes.
|
|
171
|
+
An active turn retains independent interruption authority even when its metadata is unavailable; readonly views do not reconstruct that metadata.
|
|
172
|
+
Access-token rotation revokes viewers, not admitted queued turns.
|
|
173
|
+
A completed turn retains sanitized text and tool exchanges for its next explicit Send.
|
|
174
|
+
The bounded checkpoint passes through an anonymous pipe and owner-side credential redaction before persistence; hidden thinking, signatures and media are not retained.
|
|
175
|
+
Failed, interrupted or over-budget turns remain visible but currently require a new conversation instead of replaying incomplete context.
|
|
176
|
+
A restart never resumes pending turns; unknown work keeps fences.
|
|
177
|
+
There is no upstream goal/delegate loop, subagent tool/template pack, PTY, plugin loader, prompt composer or automatic retry/compaction.
|
|
178
|
+
Ordinary resources are Pi's base prompt, applicable `SYSTEM.md`/`APPEND_SYSTEM.md`/project instructions and the default skill directories, loaded on demand at Send; package extensions and package-discovered resources are not loaded into these workers.
|
|
179
|
+
Limits are explicit: 200 conversations, 1000 turns per conversation, eight admitted turns (serialized within one checkout), 384KiB per retained visible turn, 2MiB continuation context, and 512MiB/10,000 entries for the separate conversation store, without eviction.
|
|
180
|
+
Task history retains its existing independent bounds.
|
|
181
|
+
File browsing lists at most 200 entries from 2000 directory entries and previews at most 128KiB of UTF-8 text.
|
|
182
|
+
It refuses symlinks, hard-linked files, private state, Pi's agent directory (including its configured alias target), `.git`, `.env` variants, common credential directories such as `.ssh`/`.aws`, and credential/config filenames; limitations remain visible.
|
|
183
|
+
This is not a filesystem sandbox for model tools.
|
|
184
|
+
|
|
146
185
|
### Root services and independent projects
|
|
147
186
|
|
|
148
187
|
Linux can run Cadence as a system-level root service, without a user bus or linger:
|
|
@@ -165,7 +204,7 @@ cadence project open /absolute/new-project --create
|
|
|
165
204
|
|
|
166
205
|
A new project selects an available loopback port once; reopening keeps its exact owner, port, cwd and history.
|
|
167
206
|
The command prints its private WebUI entry link; it does not create a task, choose a model or Start execution, and existing projects' admitted work continues.
|
|
168
|
-
Each project
|
|
207
|
+
Each project retains its native `/cadence` attachment and independent owner; the unified browser routes to it without a global mutable execution cwd.
|
|
169
208
|
For independent boot services, use `cadence server install --system --name api --workspace /srv/api --port 17424` as root, and manage it with the same `--system --name api` flags.
|
|
170
209
|
See [service management](docs/service-management.md) for migration, named port/token files and limits.
|
|
171
210
|
|
|
@@ -193,6 +232,10 @@ Capture reports redaction, omitted binary/hidden data, source truncation and inc
|
|
|
193
232
|
Known-secret redaction is not universal detection of business secrets.
|
|
194
233
|
Storage exhaustion refuses new work rather than silently evicting history.
|
|
195
234
|
|
|
235
|
+
Workbench state lives separately under `<state-home>/cadence-assistant-v1/workbenches-v1/<configuration-hash>/`, not in a hidden substitute workspace.
|
|
236
|
+
Whole-workbench Stop joins its accepted openings and associated exact-epoch project owners, serializing their final registry releases; unrelated, unassociated owners are not stopped.
|
|
237
|
+
A changed epoch, uncertain launch or unconfirmed Stop keeps the workbench fenced, but does not prevent Stop from reaching its other known associated owners.
|
|
238
|
+
Workbenches never repair missing private state or erase uncertain locks.
|
|
196
239
|
Service restart never resumes the old queue.
|
|
197
240
|
Uncertain process/auth/storage settlement keeps fences; use documented local informed recovery, not PID-only deletion or automatic cleanup.
|
|
198
241
|
|
|
@@ -265,6 +308,13 @@ Historical logs are not runtime dependencies, and removing development tooling m
|
|
|
265
308
|
| `web/src/` | Reused presentation and thin shared-client adapters, not SDK/session/execution ownership |
|
|
266
309
|
| `scripts/`, `provenance/`, `licenses/` | Reproducible builds, exact package/body/reference/notice audits and pinned reuse |
|
|
267
310
|
|
|
311
|
+
`src/service/{gateway,gateway-store,gateway-cli}.ts` owns the no-project entry, private workbench coordination and same-origin project routing, not task execution.
|
|
312
|
+
A root access rotation retires its proxy attachment IDs and detaches those exact browser viewers at the owners, without cancelling admitted work.
|
|
313
|
+
The first version requires a selected project for ordinary Send/tools; the empty workbench is a project selector, not an unbound chat executor.
|
|
314
|
+
`src/service/{workbench,conversations,workbench-files}.ts` owns ordinary conversations, their private retained turns, readonly files and explicit project navigation; `src/service/contracts/workbench.ts` is the portable closed DTO boundary.
|
|
315
|
+
Conversation auth intents and original settlements use their own flushed private journal, never fabricated task/history receipts.
|
|
316
|
+
Their original Stop lifetime and exclusive checkout barrier belong to the existing service owner and scheduler.
|
|
317
|
+
|
|
268
318
|
The native path is `index → shell → native client → service → scheduler/process/history`.
|
|
269
319
|
`src/task-controller.ts` remains a legacy regression subject, not a reachable or shipped production executor.
|
|
270
320
|
The readonly operator and independent research/startup modules must not gain service startup or execution side effects.
|
|
@@ -334,7 +384,8 @@ Local operation errors neither hide an independent observation error nor imply t
|
|
|
334
384
|
|
|
335
385
|
### Capture, retained history and privacy
|
|
336
386
|
|
|
337
|
-
|
|
387
|
+
Task workers use public SDK APIs, explicit empty resources, in-memory session/settings and disabled retries/compaction/cache warming.
|
|
388
|
+
Ordinary-conversation workers share that launcher/auth/capture boundary but load only the explicit ordinary resource policy above and restore their own bounded sanitized checkpoint into an in-memory SessionManager.
|
|
338
389
|
Verify exact model and effective thinking before READY/prompt; no provider discovery, credential argv/file envelope or implicit network fallback.
|
|
339
390
|
Use the awaited public core-agent subscription for backpressure, reserving synchronous tool/update ingress before any copy or await.
|
|
340
391
|
Custom bash uses public local operations plus the bounded redacted accumulator, not the stock raw-spill accumulator.
|
|
@@ -381,51 +432,52 @@ Browser download requested is not UI-verified completion; native export verifies
|
|
|
381
432
|
|
|
382
433
|
Byte values are UTF-8/encoded bounds where specified; they are not targets to silently increase when a fixture fails.
|
|
383
434
|
|
|
384
|
-
| Boundary | Default / ceiling
|
|
385
|
-
| --------------------- |
|
|
386
|
-
| Graph / assignments | 512KiB body;1–16 required assignments
|
|
387
|
-
| Scheduling | 8 episodes;128 queued assignments;2 preparing/running/closing child-or-check reservations
|
|
388
|
-
| Policy deadlines | 6h episode;10min ready wait;20min default worker
|
|
389
|
-
| Dependency input | 16KiB per predecessor;32KiB aggregate; oversized required input blocks, not clips
|
|
390
|
-
| Worker request | 96KiB public pre-auth plus32KiB reserve; actual complete envelope128KiB
|
|
391
|
-
| Process stop | TERM then KILL after1000ms; unknown after3000ms without confirmed close
|
|
392
|
-
| Native service checks | 16MiB aggregate raw output;64KiB raw chunk;32MiB retained detail; legacy256KiB/64KiB behavior unchanged
|
|
393
|
-
| Capture | 64KiB encoded frame;8KiB decoded chunk;32MiB detail;128MiB child protocol
|
|
394
|
-
| Capture queues | Worker4MiB/1024 frames; owner8MiB/2048;5s reporting stall retains original charges
|
|
395
|
-
| Task v1 | 128KiB record; goal8KiB/plan32KiB/result and baseline16KiB;32 checks/64 activity;1000-task compatibility ceiling
|
|
396
|
-
| Read quantum | 8MiB or100ms cooperative work, including resumed proof/accounting
|
|
397
|
-
| Read replies | 512KiB full paged/progress Reply;256KiB detail text; graph data/export-frame1MiB with graph body512KiB
|
|
398
|
-
| Paging/search | 50 default/200 maximum entries; literal case-sensitive query1–1024 bytes
|
|
399
|
-
| Navigation | 8192 encoded ASCII bytes; encrypted plaintext6000 bytes; no execution authority
|
|
400
|
-
| Live/export | 16 viewers,256 messages/1MiB each; two search/two export readers;120s download idle, not total archive timeout
|
|
401
|
-
| Storage | 10GiB checkout quota;512MiB reserved per episode;256MiB free-space floor; no TTL cleanup
|
|
402
|
-
|
|
|
435
|
+
| Boundary | Default / ceiling |
|
|
436
|
+
| --------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
437
|
+
| Graph / assignments | 512KiB body;1–16 required assignments |
|
|
438
|
+
| Scheduling | 8 episodes;128 queued assignments;2 preparing/running/closing child-or-check reservations |
|
|
439
|
+
| Policy deadlines | 6h episode;10min ready wait;20min default worker |
|
|
440
|
+
| Dependency input | 16KiB per predecessor;32KiB aggregate; oversized required input blocks, not clips |
|
|
441
|
+
| Worker request | 96KiB public pre-auth plus32KiB reserve; actual complete envelope128KiB |
|
|
442
|
+
| Process stop | TERM then KILL after1000ms; unknown after3000ms without confirmed close |
|
|
443
|
+
| Native service checks | 16MiB aggregate raw output;64KiB raw chunk;32MiB retained detail; legacy256KiB/64KiB behavior unchanged |
|
|
444
|
+
| Capture | 64KiB encoded frame;8KiB decoded chunk;32MiB detail;128MiB child protocol |
|
|
445
|
+
| Capture queues | Worker4MiB/1024 frames; owner8MiB/2048;5s reporting stall retains original charges |
|
|
446
|
+
| Task v1 | 128KiB record; goal8KiB/plan32KiB/result and baseline16KiB;32 checks/64 activity;1000-task compatibility ceiling |
|
|
447
|
+
| Read quantum | 8MiB or100ms cooperative work, including resumed proof/accounting |
|
|
448
|
+
| Read replies | 512KiB full paged/progress Reply;256KiB detail text; graph data/export-frame1MiB with graph body512KiB |
|
|
449
|
+
| Paging/search | 50 default/200 maximum entries; literal case-sensitive query1–1024 bytes |
|
|
450
|
+
| Navigation | 8192 encoded ASCII bytes; encrypted plaintext6000 bytes; no execution authority |
|
|
451
|
+
| Live/export | 16 viewers,256 messages/1MiB each; two search/two export readers;120s download idle, not total archive timeout |
|
|
452
|
+
| Storage | 10GiB checkout quota;512MiB reserved per episode;256MiB free-space floor; no TTL cleanup |
|
|
453
|
+
| Unified workbench | 128 associated projects; 1024 durable opening receipts; 64 connections; bounded proxy frames and bodies; no eviction |
|
|
454
|
+
| Assets | 16MiB per member/64MiB closure; fixed complete manifest and all font bodies |
|
|
403
455
|
|
|
404
456
|
### Validation and regression lessons
|
|
405
457
|
|
|
406
|
-
| Condition | Required behavior
|
|
407
|
-
| -------------------------------------------------------------- |
|
|
408
|
-
| Missing/unsafe/corrupt/partial selected state | Absent or fixed refusal; no bootstrap, adoption, repair or cleanup on observation
|
|
409
|
-
| Native exit0 with recording/stdin/final/cleanup failure | Preserve native zero independently; no workflow success
|
|
410
|
-
| Stale grant, selected task bytes or model/source identity | Refuse and require fresh observation/confirmation
|
|
411
|
-
| Unknown original stop/auth/storage or changed lease | Retain fences/charges; no guessed process signaling or automatic release
|
|
412
|
-
| Failed/unrun/stale check, partial child or incomplete coverage | Explicit issues review; preserve independent recorded outcomes
|
|
413
|
-
| Lost reply or detached view | Observe original receipt/run; no mutation replay or implicit Cancel
|
|
414
|
-
| Invalid read proof or changed source/key | Refuse; never rebase or interpret budget exhaustion as absence
|
|
415
|
-
| Dirty/partial/extra compiled assets or unsafe archive | Refuse in place; no source refill, wildcard serving or fallback build
|
|
416
|
-
| Extension import outside Pi aliases declared only as a peer | Exact production dependency; Pi's install omits peers and Pi fails to start
|
|
417
|
-
|
|
|
418
|
-
| Package files hard-linked into a package manager's store (Bun) | Packaged reads ignore link count, bind exact bodies; other files stay single-link
|
|
419
|
-
| Host refuses during startup | Fixed code/stage only; unregistered exits `refused`, registered stays `quarantined`
|
|
420
|
-
| Workspace containing the private state home |
|
|
421
|
-
| Restart changes the definition's workspace or Node path | Stop with the loaded definition before rewriting, not only a signal
|
|
422
|
-
| npm 12 or Bun skips untrusted install scripts by default | Ship none; `cadence server install` registers the service and creates the template
|
|
423
|
-
| Service manager that only signals (launchd, Windows login) | Orderly Stop first; an unconfirmed Stop changes nothing; no SIGTERM or `taskkill`
|
|
424
|
-
| Pi's TUI replaces an info status with the next one | The missing-service hint is its own warning notification
|
|
425
|
-
| Token source the user edits (`CADENCE_TOKEN` in `.env`) | Read once before binding, never bound for the run: an edit cannot fence Stop
|
|
426
|
-
| Saved port/token source differs from `.env` | Only when stopped, reselect just those under the reservation; running ones refuse
|
|
427
|
-
| User-made `.env` (0755/0644, umask 002, dotfiles links) | Like Pi's sources: ownership only, links followed; each refusal names its reason
|
|
428
|
-
| Credential value inside a provider/model ID (Ollama `ollama`) | Withhold and count only that catalog entry; choosing it refuses; others selectable
|
|
458
|
+
| Condition | Required behavior |
|
|
459
|
+
| -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
460
|
+
| Missing/unsafe/corrupt/partial selected state | Absent or fixed refusal; no bootstrap, adoption, repair or cleanup on observation |
|
|
461
|
+
| Native exit0 with recording/stdin/final/cleanup failure | Preserve native zero independently; no workflow success |
|
|
462
|
+
| Stale grant, selected task bytes or model/source identity | Refuse and require fresh observation/confirmation |
|
|
463
|
+
| Unknown original stop/auth/storage or changed lease | Retain fences/charges; no guessed process signaling or automatic release |
|
|
464
|
+
| Failed/unrun/stale check, partial child or incomplete coverage | Explicit issues review; preserve independent recorded outcomes |
|
|
465
|
+
| Lost reply or detached view | Observe original receipt/run; no mutation replay or implicit Cancel |
|
|
466
|
+
| Invalid read proof or changed source/key | Refuse; never rebase or interpret budget exhaustion as absence |
|
|
467
|
+
| Dirty/partial/extra compiled assets or unsafe archive | Refuse in place; no source refill, wildcard serving or fallback build |
|
|
468
|
+
| Extension import outside Pi aliases declared only as a peer | Exact production dependency; Pi's install omits peers and Pi fails to start |
|
|
469
|
+
| Missing optional SDK or Pi `auth.json` | Project-less workbench may start without loading either; explicit project startup retains its refusal |
|
|
470
|
+
| Package files hard-linked into a package manager's store (Bun) | Packaged reads ignore link count, bind exact bodies; other files stay single-link |
|
|
471
|
+
| Host refuses during startup | Fixed code/stage only; unregistered exits `refused`, registered stays `quarantined` |
|
|
472
|
+
| Workspace containing the private state home | Refuse the project selection; no redirection, default directory or state relocation |
|
|
473
|
+
| Restart changes the definition's workspace or Node path | Stop with the loaded definition before rewriting, not only a signal |
|
|
474
|
+
| npm 12 or Bun skips untrusted install scripts by default | Ship none; `cadence server install` registers the service and creates the template |
|
|
475
|
+
| Service manager that only signals (launchd, Windows login) | Orderly Stop first; an unconfirmed Stop changes nothing; no SIGTERM or `taskkill` |
|
|
476
|
+
| Pi's TUI replaces an info status with the next one | The missing-service hint is its own warning notification |
|
|
477
|
+
| Token source the user edits (`CADENCE_TOKEN` in `.env`) | Read once before binding, never bound for the run: an edit cannot fence Stop |
|
|
478
|
+
| Saved port/token source differs from `.env` | Only when stopped, reselect just those under the reservation; running ones refuse |
|
|
479
|
+
| User-made `.env` (0755/0644, umask 002, dotfiles links) | Like Pi's sources: ownership only, links followed; each refusal names its reason |
|
|
480
|
+
| Credential value inside a provider/model ID (Ollama `ollama`) | Withhold and count only that catalog entry; choosing it refuses; others selectable |
|
|
429
481
|
|
|
430
482
|
Good: current context → explicit grant → durable acceptance → genuine original native/storage settlement → exact retained dependency → real checks → human review.
|
|
431
483
|
Base: a client leaves and another reattaches to the same accepted run without launching it again.
|
|
@@ -463,20 +515,20 @@ Regression owners:
|
|
|
463
515
|
- `package-*`, `distribution`, `service-package`, `independence`: exact tar/member/body/import/notice closure and nonactivating discovery.
|
|
464
516
|
- `service-autostart`, `project-start`, `install-config`: explicit `cadence server` registration on systemd (root system scope without linger, legacy user scope), launchd and the Windows Run key, separate named service definitions and directory owners, definition escaping, restart/disable/mask/foreign handling, orderly Stop before every change, the `.env` port and token lines and a package without install scripts.
|
|
465
517
|
- `service-cli`: real owners started from the `.env` port and token, reselection of a stopped workspace, edits while running and rotation of the token line.
|
|
466
|
-
- `workspace-landing`:
|
|
518
|
+
- `workspace-landing`: no-default-workspace startup, explicit root refusal and noncreating native/readonly entry.
|
|
519
|
+
- `service-gateway` and `gateway-browser`: real same-origin project routing, browser-only authority, retirement on token rotation, continuing ordinary work and genuine multi-owner Stop; loopback and isolated HTTPS browser lanes.
|
|
467
520
|
|
|
468
521
|
Regenerate operator/service/native/browser outputs only through their canonical builders; `--check` variants compare new private output without overwriting canonical bytes.
|
|
469
522
|
WebUI text is keyed by its English source: fixed text goes through `useT().t`, whose type requires a `web/src/i18n/zh.ts` entry with the same `{name}` marks, and run-time status words or kept notices through `tx`, which passes unknown text and codes through.
|
|
470
523
|
The timeline client takes the chosen language from its bridge and is remounted on a switch; browser scenarios pin `locale: "en-US"` so English assertions do not follow the host's `LANG`.
|
|
471
|
-
The browser is conversation-first:
|
|
472
|
-
One service still
|
|
473
|
-
The
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
A failed poll is observed again after 2s, doubling to the 30s cadence; the owner can answer a read `receipt-inconclusive` briefly while it publishes.
|
|
524
|
+
The browser is conversation-first: ordinary chat and explicit Cadence task conversations share its sidebar, while a lower-left dock observes actual Cadence child identities.
|
|
525
|
+
One service still owns one checkout.
|
|
526
|
+
The recent-project directory records only explicit project openings in the same private namespace; navigation opens that project's independent authenticated entry rather than changing global cwd, importing Pi sessions or adopting another account's state.
|
|
527
|
+
The center shows ordinary streamed messages or retained task text as Markdown.
|
|
528
|
+
Task tools/context/timeline/run facts and export/link actions live under Details.
|
|
529
|
+
The right panel defaults to files; its Task details inspector remains bound to the task's current plan/check/change/review context even when viewing a child.
|
|
478
530
|
Historical child links bind exact scope and watermark.
|
|
479
|
-
Bounded history and Back never silently rebase;
|
|
531
|
+
Bounded history and Back never silently rebase; running conversations offer an explicit new-activity update, and source limitations/progress stay visible even when complete-record metadata is folded.
|
|
480
532
|
Cancel uses the independent active roster (including the fallback strip when workspace discovery fails); navigation, project selection and hiding panels never cancel or authorize execution.
|
|
481
533
|
|
|
482
534
|
Publish `web/dist` from Node: Vite run under Bun lays out its preload helper differently, so a Bun build fails a Node `build:web:check`.
|
|
@@ -484,13 +536,33 @@ Review the independently enumerated package member list and every emitted body,
|
|
|
484
536
|
Keep public Pi peers external for the extension, the exact Undici/ws runtime edges, the exact optional SDK pins for the standalone owner and all upstream/font/vendor notices.
|
|
485
537
|
Preserve original license bytes through their precise Git attributes; line-ending normalization must not invalidate audited source/notice hashes.
|
|
486
538
|
|
|
487
|
-
### Release 2.0.
|
|
539
|
+
### Release 2.0.14 acceptance snapshot
|
|
540
|
+
|
|
541
|
+
Full `verify` passed on the release candidate before this evidence-only note, with `VITEST_MAX_WORKERS=1`: 2000 root tests in 84 files (27 skipped on Linux), 130 web tests, 9 real-browser scenarios and the 135-member real-pack audit.
|
|
542
|
+
Observed environment: Linux x86_64, Node26.7.0, Bun1.3.14, Pi SDK0.84.3 and existing Chrome for Testing151.0.7922.34.
|
|
543
|
+
Review fixes refuse hard-linked file previews, common credential paths and configured private-directory alias targets; block legacy project Open through the gateway so backend token links and unassociated owners cannot escape its route; and continue serial Stop attempts for other associated owners after an earlier refusal, without releasing uncertain fences.
|
|
544
|
+
Each boundary regression was observed failing before its fix and passing afterward; the generated service and browser outputs were rebuilt through their canonical builders.
|
|
545
|
+
The first default-concurrency integration run failed 25 tests: 21 timeouts, three state refusals and one stale provenance pin.
|
|
546
|
+
The reviewed destination pins were refreshed, the three state-refusal cases passed independently, and the complete single-worker run passed without increasing any deadline or omitting tests; the earlier failures remain failure evidence, not retrospectively successful runs.
|
|
547
|
+
No consumer service installation/restart, paid-provider use or new native Windows/macOS qualification is claimed.
|
|
548
|
+
|
|
549
|
+
### Unified-entry verification snapshot
|
|
550
|
+
|
|
551
|
+
The unified no-default-workspace change passed full `verify` before this evidence-only note: 1997 root tests in 84 files (27 skipped on Linux), 130 web tests, 9 real-browser scenarios and the 135-member real-pack audit.
|
|
552
|
+
New browser cases exercise a real generated workbench and independently opened owners under both loopback and a CA-validated HTTPS proxy: no default directory, same-origin switching, ordinary Send, explicit Create without Start, and retained chat/task navigation after refresh.
|
|
553
|
+
The genuine SDK uses an isolated fabricated provider; no paid account, physical device or new native Windows/macOS qualification is implied.
|
|
554
|
+
An early browser attempt completed its UI assertions but left one concurrently stopped owner quarantined; its failed closure receipt remains failure evidence, and the gateway now serializes associated owner Stop through their shared registry.
|
|
555
|
+
The first full integration attempt then passed root/web checks but hit an existing browser harness's late response-body read; the harness now reads that exact response immediately, without request replay or a larger wait, and the subsequent complete `verify` passed.
|
|
556
|
+
No consumer service was installed or restarted, and no existing `~/cadence` or uncertain state was deleted.
|
|
488
557
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
558
|
+
### Ordinary-chat workbench integration snapshot
|
|
559
|
+
|
|
560
|
+
Full `verify` passed on the working tree before this evidence-only note: 1994 root tests in 82 files (27 skipped on Linux), 130 web tests, 7 real-browser scenarios and the 135-member real pack audit.
|
|
561
|
+
Observed environment: Linux x86_64, Node26.7.0, Bun1.3.14, Pi SDK0.84.3 and existing Chrome for Testing151.0.7922.34.
|
|
562
|
+
The new lane used the genuine SDK against a fabricated loopback provider: ordinary multi-turn restore, a real write tool, duplicate-send observation, directory/credential boundaries, queued cancellation, orderly Stop/restart, rotation while queued, independent project owners/ports, and preserved unaccepted or missing metadata.
|
|
563
|
+
Browser coverage includes the ordinary composer, file preview/reference, explicit Cadence creation without Start, retained origin navigation, and settled desktop/390px/320px drawer layouts.
|
|
564
|
+
Early attempts caught an optional-envelope decoder regression, late OAuth-settlement tracking during Stop, old package/body counts and worker source pins, plus browser interactions that needed to await modal closure and reference/drawer updates; those were corrected before the final full pass.
|
|
565
|
+
No existing budgets were enlarged, no browser/dependency was downloaded, and no consumer service installation, paid-provider or new Windows/macOS qualification is claimed.
|
|
494
566
|
|
|
495
567
|
### Release 2.0.12 acceptance snapshot
|
|
496
568
|
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -17,6 +17,7 @@ Cadence directly adapts token digest comparison, cookie encoding/decoding, boots
|
|
|
17
17
|
The source/destination inventory and deliberate security changes are recorded in `provenance/auth-reuse.json`.
|
|
18
18
|
The complete upstream notice is preserved at `licenses/pi-web-ui-MIT.txt`.
|
|
19
19
|
The substantial workspace/navigation/transcript/tool/Markdown/review/search/timeline/responsive/reconciliation adaptations are inventoried in `provenance/webui-reuse.json` and summarized in shipped `docs/reuse-and-distribution.md`.
|
|
20
|
+
The ordinary-chat composer, directory picker, readonly file browser and agent-dock presentation additionally reference pi-web-ui revision `944f556463d6693a3f0cfe375c22680090e85bbe`, under the same retained MIT notice; its subagent/goal/delegate engines and prompt composer are not included.
|
|
20
21
|
|
|
21
22
|
## Bundled browser dependencies, icons and fonts
|
|
22
23
|
|
package/docs/remote-access.md
CHANGED
|
@@ -59,3 +59,16 @@ Environment-backed tokens require explicit Stop/restart with changed environment
|
|
|
59
59
|
Links may already exist in clipboard/history or external logs; redirecting cannot retract disclosure.
|
|
60
60
|
Use [management and recovery](service-management.md) for Stop, uncertainty and exact local resolution.
|
|
61
61
|
Loopback HTTPS/viewport tests are not physical-device or second-machine deployment qualification.
|
|
62
|
+
|
|
63
|
+
## Unified workbench entry
|
|
64
|
+
|
|
65
|
+
The default workbench can route associated projects on the same HTTPS origin; it does not redirect remote browsers to a project owner's loopback port.
|
|
66
|
+
Its explicit `cadence workbench start --config /absolute/private-http-policy.json` accepts the HTTP policy object (schema `cadence-service-http/1`, `host`, `port`, `proxy`), not a project HostConfig or an execution cwd.
|
|
67
|
+
Use the same `proxy.origin` and trusted immediate proxy addresses as above; the `.env` remains authoritative for the port and token.
|
|
68
|
+
The selected policy is retained in private workbench state, so after orderly `cadence workbench stop` a default `cadence server install` can register that entry without a project or a default workspace.
|
|
69
|
+
Do not install over an independently running detached entry; stop it explicitly first.
|
|
70
|
+
The gateway authenticates and validates Host/Origin before routing, rejects browser local-capability headers and management paths, and forwards project requests with browser cookies, not native authority.
|
|
71
|
+
Project attachment IDs, owner CSRF/build compatibility, consent, retained read proofs and exports remain owner-validated.
|
|
72
|
+
A workbench token rotation revokes its routes and retires its exact browser viewers without cancelling admitted project work.
|
|
73
|
+
Project ports, backend cookies and local capabilities remain server-side.
|
|
74
|
+
This is one entry for a trusted service account, not multi-tenant filesystem isolation or an OS sandbox.
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
## Source families
|
|
4
4
|
|
|
5
5
|
Cadence adapts `xing-shuyin/pi-web-ui@e8bab487af208bc9a1ab60a821652323f598127f`, MIT copyright 2026 xing-shuyin.
|
|
6
|
+
The ordinary-chat composer, folder picker and file/dock presentation additionally reference sibling revision `944f556463d6693a3f0cfe375c22680090e85bbe`; the separate reference hashes are retained alongside the original pins.
|
|
6
7
|
The full original license is `licenses/pi-web-ui-MIT.txt`.
|
|
7
8
|
Repository `provenance/webui-reuse.json` records source/destination hashes and explicit incompatible branches removed; `provenance/auth-reuse.json` records token/cookie adaptation.
|
|
8
9
|
|
|
@@ -18,8 +19,9 @@ Repository `provenance/webui-reuse.json` records source/destination hashes and e
|
|
|
18
19
|
| use-chat, message-delta | Shared typed reconciliation, gaps/resync and no mutation replay |
|
|
19
20
|
| Token/cookie and upgrade guards | Cookie-first authenticated HTTP/WS, explicit Host/Origin/CSRF boundaries |
|
|
20
21
|
|
|
21
|
-
No upstream runtime,
|
|
22
|
-
Cadence
|
|
22
|
+
No upstream chat/subagent runtime, goal/delegate loop, PTY, plugin loader, browser shell, credentials editor, prompt composer, reconnect replay or task repair ships.
|
|
23
|
+
Cadence owns ordinary conversations separately, using its existing native launcher, exact model/auth resolution and checkout gate; its finite task admission/history contracts remain unchanged.
|
|
24
|
+
Readonly file browsing and explicit independent project opening are new Cadence service operations, not upstream filesystem mutation or global `set_cwd` routes.
|
|
23
25
|
|
|
24
26
|
## Emitted licenses
|
|
25
27
|
|
|
@@ -43,3 +45,12 @@ The retired shell-local controller is not a shipped competing executor.
|
|
|
43
45
|
The real pack audit rejects missing/extra/duplicate/linked/special/unsafe members, altered bodies, pin/notice/font drift and linked extraction roots/ancestors.
|
|
44
46
|
Extracted tests use tar-only package bodies and explicitly linked existing fixture peers; they never fill missing package files from source.
|
|
45
47
|
No version bump, dependency install or publication is implied by this redesign.
|
|
48
|
+
|
|
49
|
+
## Unified entry without a default workspace
|
|
50
|
+
|
|
51
|
+
`web/src/Workbench.tsx` composes the project selector and existing project UI without importing pi-web-ui's session/execution service.
|
|
52
|
+
The Cadence-owned gateway uses the existing authentication, public codecs, private-files discipline and independently coordinated project owners.
|
|
53
|
+
The no-project entry never initializes an SDK session, manufactures a checkout, creates `~/cadence`, or repairs a missing project directory.
|
|
54
|
+
A technical service-process cwd is not a model/tool workspace.
|
|
55
|
+
The built same-origin routing covers both HTTP requests and WebSockets, while browser authority and project consent remain distinct from native management capability.
|
|
56
|
+
New Linux manager tests exercise the no-workspace default; macOS/Windows generated-definition tests are not native-platform execution qualification.
|
|
@@ -20,9 +20,12 @@ cadence stop --workspace /absolute/project
|
|
|
20
20
|
Defaults are loopback `127.0.0.1:17423`, normal Pi agent configuration, and detached service lifetime.
|
|
21
21
|
An explicit port0 selects and persists a positive port once; restart uses the selected configuration, not a fallback endpoint.
|
|
22
22
|
Missing/corrupt existing setup is preserved, not filled in or reset.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
Commands without `--workspace` address the unified workbench, which has no execution cwd and never creates `~/cadence`.
|
|
24
|
+
Use `cadence workbench start|status|diagnose|stop|token-link|token-rotate` to name that target explicitly.
|
|
25
|
+
Its start accepts `--foreground`, `--state-home`, `--agent-dir`, `--server-config` and a private `--config` containing an `HttpPolicy` object (the schema used below for project HTTP policy).
|
|
26
|
+
The configuration's port/token come from the `.env`; a selected HTTP policy is retained across orderly restarts.
|
|
27
|
+
A project root containing the private state home is refused, with no alternate directory creation; native `/cadence` also requires a real project selection.
|
|
28
|
+
Existing `~/cadence` content is never removed, relocated or automatically adopted.
|
|
26
29
|
A directory inside `cadence-assistant-v1` is never an engineering workspace, even for root or `project open --create`.
|
|
27
30
|
Apart from the background service below, there is no supervisor installation, provider login or credential migration.
|
|
28
31
|
|
|
@@ -43,7 +46,16 @@ The JSON result reports the canonical workspace, actual task cwd and endpoint; t
|
|
|
43
46
|
Keep that link private.
|
|
44
47
|
Open Pi in the same project and use `/cadence` for the native client; explicit `cadence stop --workspace <path>` stops only that project.
|
|
45
48
|
Opening another project never changes the cwd or cancels work in the former one.
|
|
46
|
-
|
|
49
|
+
The default workbench routes all associated projects through one origin, including a configured HTTPS proxy.
|
|
50
|
+
Its project picker browses directory names readonly; only **Open this project** starts or reuses an owner, without admitting a task or model call.
|
|
51
|
+
Project navigation remounts only the browser client; the original owner's work continues.
|
|
52
|
+
Browser proxy traffic keeps browser authority and the owner's own attachments, CSRF/build checks, grants and history proofs; native management routes and local-capability headers are not forwarded.
|
|
53
|
+
The gateway also refuses the legacy project-level Open command, so every opening is associated through the workbench instead of returning an independent backend token link.
|
|
54
|
+
The gateway's token, backend cookies and native capabilities are never returned in project DTOs or stored in browser localStorage.
|
|
55
|
+
Token rotation retires and detaches its exact browser attachments without cancelling admitted work.
|
|
56
|
+
The private account state stores bounded project references and opening receipts, not copied worktrees, Pi profiles or imported transcripts.
|
|
57
|
+
Private coordination/Pi credential directories and foreign-owned project selections are refused.
|
|
58
|
+
Direct project entry links remain available as a compatibility route; that route alone still uses separate loopback project entries.
|
|
47
59
|
Git subdirectories and aliases resolve to the same checkout, while overlapping parent/child owners still refuse.
|
|
48
60
|
An unknown, quarantined or inaccessible selection is never treated as a new project or recovered by choosing another state home.
|
|
49
61
|
|
|
@@ -72,12 +84,18 @@ Linux also accepts `--name <name>` on every server command to select `cadence-<n
|
|
|
72
84
|
Names must start with a letter or digit and contain only letters, digits, `_` and `-` (at most48characters).
|
|
73
85
|
|
|
74
86
|
`install` also creates the research template `~/.pi/agent/cadence/.env` when it is missing, never overwriting it, whatever the service result, and adds its [port and token](#port-and-token) lines when they are missing.
|
|
75
|
-
`install`
|
|
76
|
-
The
|
|
87
|
+
`install` without `--workspace` runs `workbench start --foreground --server-config <file>` (Linux, macOS), or without `--foreground` on Windows.
|
|
88
|
+
The service process may use its package directory as a technical launch cwd; it is never an agent workspace and no project scan or model runtime is initialized there.
|
|
89
|
+
An explicit `--workspace` retains single-project service compatibility and must name an existing suitable directory.
|
|
90
|
+
A reinstall without `--workspace` explicitly selects the unified entry after orderly Stop of the old generated definition; it neither deletes the former workspace nor imports its data.
|
|
91
|
+
A plain `restart` retains the definition's existing target, including an older explicit project service, rather than silently migrating it.
|
|
77
92
|
The `.env` [port and token](#port-and-token) select the endpoint (17423 by default) and the token; an occupied endpoint fails instead of falling back.
|
|
78
93
|
Install and restart print the private entry link once the owner answers; the JSON result on stdout never carries the token.
|
|
79
94
|
`restart` rewrites an existing definition with the current Node and package paths, keeping its workspace and the user's disable choices, and starts it; run it after an npm upgrade, a Node change or a `models.json` edit.
|
|
80
|
-
`stop`
|
|
95
|
+
`stop` joins the workbench's accepted openings and associated exact-epoch project owners, then closes the entry; unrelated project owners stay independent.
|
|
96
|
+
If one associated owner refuses or has a changed epoch, Stop still reaches the other known owners serially, while the workbench remains fenced rather than reporting a successful Stop.
|
|
97
|
+
Project-specific `stop --workspace <path>` remains scoped to that owner.
|
|
98
|
+
The generated registration stays for the next boot or login.
|
|
81
99
|
`uninstall` stops it orderly and deletes only what Cadence generated; workspace, state home, history, linger and Pi sources stay.
|
|
82
100
|
Because npm runs no uninstall script, uninstall the service before `npm uninstall -g`; a left-behind definition fails to start once its CLI path disappears.
|
|
83
101
|
A definition Cadence did not generate is left unchanged (`foreign`), and `status` reports `absent` when none is registered.
|
|
@@ -85,7 +103,8 @@ A definition Cadence did not generate is left unchanged (`foreign`), and `status
|
|
|
85
103
|
Pi's installer omits peers, so the standalone owner and workers load the Pi SDK (`pi-coding-agent`, `pi-ai`) from exact 0.84.3 optional dependencies.
|
|
86
104
|
Package files may be hard links into the package manager's store (Bun's default install); Cadence binds their exact content, not their link count.
|
|
87
105
|
Missing or unusable Pi sources refuse before an owner registers; a new owner without the SDK quarantines.
|
|
88
|
-
|
|
106
|
+
The no-project workbench starts without either an SDK runtime or Pi authentication; missing sources are reported only when a project is explicitly opened.
|
|
107
|
+
For an explicit single-project definition, the older guards remain: no SDK means no definition, and missing `auth.json` means registered but waiting for Pi login.
|
|
89
108
|
|
|
90
109
|
While no service is registered, Pi's session-start card shows a separate warning naming `cadence server install` for an installed package copy (`node <copy>/src/service-cli.mjs server install` for Pi's managed copy, which puts no bin on `PATH`); a checkout loaded with `pi -e` stays quiet.
|
|
91
110
|
It is a warning rather than part of the info card because Pi's TUI replaces one info status with the next.
|
|
@@ -175,7 +194,7 @@ Only where polkit requires authorization for `set-self-linger` (older systemd de
|
|
|
175
194
|
`--no-linger` or `CADENCE_LINGER=0` skips linger; `restart` never changes it, so `loginctl disable-linger` is kept.
|
|
176
195
|
The unit bakes the installer's PATH (minus npm lifecycle entries), LANG/LC_ALL, an absolute XDG_STATE_HOME and a custom PI_CODING_AGENT_DIR, so shell management sees the same state home and Pi sources.
|
|
177
196
|
Proxy variables are not baked; add a validated pair with `systemctl --user edit cadence`.
|
|
178
|
-
It carries `ConditionPathExists=` for the CLI
|
|
197
|
+
It carries `ConditionPathExists=` for the CLI; explicit single-project definitions also require `auth.json` and both SDK packages, while the project-less workbench does not.
|
|
179
198
|
|
|
180
199
|
`restart` stops an active unit with its loaded definition, rewrites the file and starts it, without enabling a disabled unit; a masked unit is never enabled or started.
|
|
181
200
|
`ExecStop` is the authenticated orderly Stop, so admitted work is stopped, not detached; `stop` and `uninstall` (`disable --now`) use it too.
|
|
@@ -191,7 +210,7 @@ To keep the service off while Cadence stays installed, use `systemctl --user dis
|
|
|
191
210
|
|
|
192
211
|
`install` writes `~/Library/LaunchAgents/com.abelxiaoxing.cadence.plist` with `RunAtLoad`, runs `launchctl enable` (undoing a `launchctl disable`) and loads it into `gui/<uid>` with `launchctl bootstrap`, which starts it; launchd loads it again at every login.
|
|
193
212
|
It bakes the same PATH, LANG/LC_ALL, XDG_STATE_HOME and PI_CODING_AGENT_DIR as the Linux unit and logs to `~/Library/Logs/cadence.log`.
|
|
194
|
-
|
|
213
|
+
For an explicit single-project service, missing `auth.json` leaves the agent written but not loaded; the project-less workbench can start without Pi login.
|
|
195
214
|
Because launchd stops a job only by signaling it, `restart`, `stop`, `uninstall` and a reinstall first stop the owner through the authenticated orderly Stop, and change nothing when that Stop is `unconfirmed`, `quarantined` or `unavailable`.
|
|
196
215
|
Only then does Cadence unload (`bootout`) or replace the agent; `stop` leaves it loaded, and the finished job starts again at the next login.
|
|
197
216
|
There is no `KeepAlive`: launchd has no start limit, and a restart never clears fences, so a failed owner stays down until `cadence server restart`.
|
|
@@ -201,10 +220,10 @@ At logout or shutdown launchd signals the job, which is not orderly Stop and can
|
|
|
201
220
|
### Windows login Run entry
|
|
202
221
|
|
|
203
222
|
`install` writes `%LOCALAPPDATA%\cadence-server\cadence.vbs`, beside rather than inside the private state home, and the per-user value `HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Cadence`, which runs it with `wscript.exe` at login; no administrator rights are needed.
|
|
204
|
-
The launcher is UTF-16 with a byte-order mark, so non-ASCII paths work, and runs `start --workspace` with window style 0, so no console window appears; the detached owner keeps running after the launcher exits.
|
|
223
|
+
The launcher is UTF-16 with a byte-order mark, so non-ASCII paths work, and runs `workbench start` (or `start --workspace` for an explicit project) with window style 0, so no console window appears; the detached owner keeps running after the launcher exits.
|
|
205
224
|
It bakes only a custom PI_CODING_AGENT_DIR, because the login environment already carries PATH and `%LOCALAPPDATA%`.
|
|
206
225
|
`install` also removes Task Manager's `StartupApproved` switch for the entry (undoing a disable there); `restart` keeps both the entry and that switch, and `status` reports a disabled entry.
|
|
207
|
-
|
|
226
|
+
For an explicit single-project service, missing `auth.json` leaves the entry registered but starts nothing; the project-less workbench can start without Pi login.
|
|
208
227
|
Nothing supervises the detached owner, so a failed owner is not restarted, and every `restart`, `stop`, `uninstall` and reinstall first runs the authenticated orderly Stop and changes nothing unless it is confirmed; Cadence never kills a process.
|
|
209
228
|
A `Cadence` Run value without Cadence's launcher is `foreign` and left unchanged; registry values are only tested for presence, because `reg.exe` prints them in the console code page.
|
|
210
229
|
At sign-out or shutdown Windows ends the owner without orderly Stop, which can leave recovery fences; run `cadence server stop` first while work is running.
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# pi-web-ui presentation reuse
|
|
2
2
|
|
|
3
3
|
Cadence adapts source from [xing-shuyin/pi-web-ui](https://github.com/xing-shuyin/pi-web-ui), revision `e8bab487af208bc9a1ab60a821652323f598127f`.
|
|
4
|
+
The ordinary-conversation composer, folder picker, file browser and agent-dock presentation additionally reference revision `944f556463d6693a3f0cfe375c22680090e85bbe`, with separate file hashes recorded in the source inventory.
|
|
4
5
|
Copyright (c) 2026 xing-shuyin.
|
|
5
6
|
The full existing [MIT license](pi-web-ui-MIT.txt) is retained unchanged.
|
|
6
7
|
This adaptation is not endorsed by the upstream author.
|
|
7
8
|
|
|
8
9
|
Adapted families include the three-pane workspace and drawers, nested navigation and plan editing, lazy transcript/tool cards, Markdown/stream/code/math/copy, readonly preview and diff, search/deep links, reconciliation, and the standalone run-trace client.
|
|
9
10
|
Cadence replaces upstream execution, arbitrary messaging, history repair, mutation, plugin and credential-storage boundaries with its finite typed shared service client.
|
|
11
|
+
Ordinary chat has its own Cadence service implementation; the upstream subagent/goal/delegate runtimes, prompt composer, PTY and plugin system are not included.
|
|
10
12
|
Timeline geometry is explicitly ordinal; recorded worker-local clocks and native check duration remain independently labeled, never aligned into inferred overlap.
|
|
11
13
|
The source-level file/hash/modification inventory is `provenance/webui-reuse.json`.
|
|
12
14
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abelxiaoxing/cadence",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.14",
|
|
4
4
|
"description": "Shared Pi task workspace: native terminal and WebUI, persistent service, checks and human review.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -60,7 +60,10 @@
|
|
|
60
60
|
"README.md",
|
|
61
61
|
"LICENSE",
|
|
62
62
|
"THIRD_PARTY_NOTICES.md",
|
|
63
|
-
"licenses"
|
|
63
|
+
"licenses",
|
|
64
|
+
"src/conversation-context.mjs",
|
|
65
|
+
"src/conversation-resources.mjs",
|
|
66
|
+
"src/service/contracts/workbench.ts"
|
|
64
67
|
],
|
|
65
68
|
"pi": {
|
|
66
69
|
"extensions": [
|