Commit Graph
75 Commits
Author SHA1 Message Date
imccyu 93d2ad2d25 feat(webworker): boot the preview from the shipped profile and fetch lazy chunks on demand
The packer images the web template bundles, every optional bundle, and an installation manifest instead of a dumped composition, and the Worker boots that profile through app-boot like dsh web. Package-local lazy client chunks move into content-addressed archives that the VFS fetches on first asynchronous read; client-modules reads chunks asynchronously.

The Worker replaces node-addon-require-builtin with Node v24.18.0 internal-module interfaces and reports Node 24, so plugin metadata, the Cordis Loader, and HMR reach one cascaded loader backed by the Worker loader. Resolution failures carry Node error codes, the empty load cache lets HMR apply profile changes, and every optional bundle switches on and off live. Platform stubs throw ERR_FEATURE_UNAVAILABLE_ON_PLATFORM.
2026-10-15 11:30:45 +08:00
imccyu f6316536ea feat(client-connection): carry caller principals on explicit peers 2026-10-13 23:01:37 +08:00
Yichen Jiang 23a542fcfa fix(llm-pi-ai): align preview and settings with the Azure provider ID 2026-10-13 10:51:10 +08:00
Yichen Yan ac080346f0 Support native HTTPS Web listeners 2026-10-08 19:49:01 +08:00
Yichen Yanandliukx0205 cb9a590c86 Support concrete Web listener bind addresses
Co-authored-by: liukx0205 <[email protected]>
2026-10-08 18:25:43 +08:00
Tianyi Cui e1878e41ca fix(llm-pi-ai): withhold ChatGPT sign-in and serve one catalog
pi-ai 1.0.0 adds Sign in with ChatGPT to the `openai` provider, and that
login refuses to start unless the app supplies a stable installation UUID
through LoginOptions.getDeviceId. The harness keeps no installation ID
meant for a third-party account sign-in, so the route offers its API-key
login only; a Loader-composed test pins the offered methods.

catalogProvider(), catalogModels(), and catalogProviderIds() now read one
index that leaves out providers without a chat model, so a hand-declared
route under such a key inherits nothing from pi-ai. The browser-worker
stub gains the builtinModels refusal llm-pi-ai imports and drops the
getBuiltinProviders reader nothing imports. The tool-argument streaming
spec also covers the patched Anthropic Messages path.
2026-10-04 04:51:19 +08:00
Tianyi Cui abfa6302b7 fix(llm-pi-ai): keep catalog providers whose catalog lists no models
The chat-model filter left a provider out whenever pi-ai listed no chat
model for it. The browser-worker preview replaces pi-ai with a stub that
lists no models at all, so every provider was dropped and the empty
directory registration failed the llm-pi-ai mount. Only a provider whose
catalog lists models but no chat model is left out now; the stub gains
the `getAllBuiltinModels` reader the filter calls.
2026-10-04 02:09:17 +08:00
imccyu 4eb53e63ff fix(ci): cover HMR edge cases and document strict assertions 2026-10-02 16:02:37 +08:00
imccyu 93b469a5e1 fix(webworker): support strict truthiness assertions 2026-10-02 14:31:11 +08:00
Turtle 805cb207be fix(webworker): open config files and load plugin manager in the preview (#5375)
* fix(webworker): load plugin manager and HMR in the preview Worker

The Worker disabled both rows, which left Creator mode's
tool-plugin-manager waiting for its service and the Plugins page without
a manageable profile. Only package commands are unavailable; the
services load. The Worker provides appReady from its own readiness
promise, resolved once the tunnel serves, and its process shim reports
no entry script, so HMR keeps only its profile configuration watches.

Fixes #5372

* fix(webworker): show xdg-open text files in a preview viewer

The Worker implements xdg-open as a platform executable that sends one
VFS text file to the page, which shows it in a read-only modal dialog.
Settings' "Open configuration file" now opens the profile patch in the
preview instead of failing on a missing desktop opener.

Fixes #5371
2026-09-28 19:29:45 +08:00
07akioni 2974008e0e fix(preview): isolate desktop telemetry HTTP transport 2026-09-28 15:29:09 +08:00
lsdsjy 2a1eb24285 fix(account): cover lifecycle failures and restore CI compatibility 2026-09-21 22:32:30 +08:00
Turtle 601d6761e4 feat(settings): project volatile Config through profile-backed forms (#4587) 2026-09-21 18:26:03 +08:00
Turtle d1e22a7e24 feat(preset): declare Agent compositions in profile YAML (#4569)
* feat(preset): declare Agent compositions in profile YAML

* fix(preset): share scope binding cleanup and refresh module graph

* fix(preset): use host syntax colors in the YAML editor

* fix(preset): write new profile declarations as block YAML

* fix(preset): align eager activation with browser and worker surfaces

* fix(ui-agent-preset): retain the existing preset card layout

* fix(preset): keep rows waiting for a Host service mounted and re-audit after settlement

A preset row whose Host provider was still activating at declaration time
was reported as waiting for a missing service, and the registry recorded the
definition as broken for the rest of the process. Split the mount audit into
failed and pending rows: failures and root-realm leaks still reject the
mount, while pending rows stay mounted and every read and binding re-audits
them after the Host Loader tree settles.

Remove the accidental self-dependency of @deepseek-ai/dsh-web-app and its
lockfile self-link. Archive the copy-only preset authoring note, which the
declarative-preset note fully supersedes, and update the ralph note's
restore recipe to the profile-patch mechanism.

* chore(lint): re-key and prune the unknown-cast baseline after the master merge

* refactor(web-app): ship each Agent preset as its own bundle patch file

`dsh.bundle.patch` accepts an ordered file list, so the four shipped preset
declarations move out of the 1000-line web patch into
`presets/<id>.patch.yml`, one insert per file, applied after the host patch.
The host patch keeps the preset registry row. Gates and test scaffolds that
read the web layer resolve every patch file through `bundlePatchPaths`
instead of one hardcoded path.

* refactor(preset): drop the save notice injected into live Agents

The notice duplicated the save result the Web editor already shows, and
after the producer-owned message sources it would have needed its own
persisted source kind. Saving now only persists and reports the activation
diagnostic; the persistence catalog is unchanged from master.

* docs: regenerate the module graph after dropping the registry's llm dependency

* test(ui-agent-preset): cover the guide dialog's keyboard handling on the declarative section

* fix(preset): address the remaining review comments

Apply the lowercase id rule only when creating a declaration, so presets
declared with other ids stay editable. Export `isBuiltInPreset` from the
display fold and key the client card groups on it. Remove the dead `error`
and `retry` locale keys, the JSDoc orphaned by the `trust` removal, the
`trust` fields in the plugin-inventory test fixtures, and the stale
`dsh-agent-presets` package name in comments and READMEs.

* refactor(preset): make the Web preset page view-and-select only

Remove the child-plugin YAML editor, the `agent_preset` tool and the
registry's read/save Remote methods. Presets are declared and changed only by
bundle patches; the settings page keeps the roster, the new-task default and
the mode help, and its question icon explains that and offers to start a
Creator-mode task. The `editing-cordis-compositions` skill and the Creator
persona describe the bundle-based path, and the authored skill-load Session
and Web snapshots are refreshed for it.

* docs(skill): make the composition skill self-sufficient for preset authoring

State where the shipped declarations live, list every declaration field,
inline a complete minimal bundle and an override example, and name the
verification calls, so Creator mode no longer reads DSH package sources to
infer the format. Refresh the authored skill-load Session for the new text.

* test(tools): drop the removed agent_preset tool from the catalog expectation
2026-09-21 08:24:18 +00:00
imccyu ffea3c8818 fix(gateway): close the remaining uplink lifecycle gaps 2026-09-20 17:53:18 +08:00
imccyu 021bd03b70 feat(gateway): let every Remote stream carry a client uplink
Every Typert Remote stream accepts client-to-Host items on the same
logical stream. A method declares the uplink item type in its return
type, RemoteStream<Out, In>, and reads the items through
this.ctx.invocation.uplink(); the invocation also carries the calling
Peer. Client generated methods return a handle that iterates the
downlink and exposes send/end/dispose for the uplink.
2026-09-20 17:53:16 +08:00
Tianyi Cui 580bdc7258 refactor: remove redundant unknown casts 2026-09-19 20:13:58 +08:00
Tianyi Cui 498d0e8ecd merge: refresh session-log-v4 from pinned master
Merge master 0e9385ad8b9e75146f4baec2e731dd961f11c87c, observed when
this final integration step started, into the merged V4 release branch.
Keep the complete upstream history and do not advance to later master
commits during finalization.

Bring the Web trust-domain and relative-route handling, plugin install
cancellation, and npm registry mirror configuration into the common
release baseline. Retain the V4 codecs, producer-source policy,
parent-owned catalogs, and fork/migration behavior from the merged stack.

The merge needs no manual conflict resolution and changes no Session
JSONL inputs, snapshot generations, format packages, or persistence
schema/history files. This checkpoint precedes the separate V4 freeze
and audit fixes so each change keeps its own rationale and validation.
2026-09-18 22:35:14 +08:00
_KermanandTianyi Cui f4a32dbd0a refactor(llm): flatten tool results and validate native V4 sessions
Represent tool results as tool-role messages and migrate released wrappers
without losing outer own JSON fields, call identity, error state, or writer
field order. Refuse nested or wrapper-only information that has no lossless
current representation before successor publication.

Validate current event relationships directly instead of projecting V4 data
back into V3. Keep lifecycle, PTC, title/command, compaction, system-field and
retired-syntax checks on catalog restoration and ordinary JSONL opens. The
Worker JSON equality helper must inspect own keys so it cannot admit PTC
arguments that Node rejects.

Keep the source role change, required native admission and consumer fixture
updates in one complete review layer. Explain shared-type changes in the
persistence record and the native reader rationale in its existing note.
Use checked branded fixture identities and discriminant narrowing instead
of unknown double casts; fixture values and assertions remain intact.

This recomposes the original tool-role work by _Kerman with the independently
validated migration and admission repairs by Tianyi Cui. Frozen generations
and snapshot input version selection are retained.

Co-authored-by: Tianyi Cui <[email protected]>
2026-09-18 19:05:32 +08:00
Yichen Yan eeb9b03465 feat(web): serve the shell, API and plugin resources from the document directory 2026-09-17 16:00:15 +08:00
yudshj 11669006e6 refactor(document): consolidate Office conversion into office-to-pdf 2026-09-17 11:15:51 +08:00
yudshj a193b51c96 refactor(document): name Office PDF conversion explicitly 2026-09-17 11:15:36 +08:00
yudshj 9d2a3bf2b7 feat(document): decouple shared Office conversion from preview 2026-09-17 11:15:21 +08:00
Turtle 311156b1c2 Merge master and preserve profile-managed HMR 2026-09-15 16:20:47 +08:00
07akioni 4feb87da34 feat(desktop): load bundled Web UI before backend readiness 2026-09-15 13:43:27 +08:00
Turtle 5a9c159c27 fix: preserve manager failures and support worker preview imports 2026-09-14 23:26:43 +08:00
Tianyi Cui 42c5b65643 feat(release): publish all experimental packages 2026-09-12 20:56:26 +08:00
Tianyi Cui f72c2e019d fix(preview): provide the native realpath callback alias 2026-09-12 15:03:03 +08:00
Tianyi Cui 091cbcdbfb fix(code-runtime): preserve native temp setup and preview activation 2026-09-12 15:03:02 +08:00
imccyu d7ecdcf02c fix(lint): parenthesize file handle callback 2026-09-09 18:21:17 +08:00
imccyu 60a3d0fbc2 fix(webworker): support file handle chmod 2026-09-09 18:21:17 +08:00
imccyu a7bd71e024 fix(webworker): preserve bigint file handle identity 2026-09-09 18:21:16 +08:00
imccyu d927cbff99 feat(native): add prebuilt Node-API flock support 2026-09-08 20:49:10 +08:00
creatixchu b4517feed5 Merge remote-tracking branch 'origin/master' into worktree/2984-generic-file-upload 2026-09-04 14:46:36 +08:00
Turtle c58097a826 feat(session-persistence-jsonl): cross-process write-ownership lease
Write handles now hold a durable lease (session.lock.json beside the
log): a random owner token, diagnostic pid, and an expiry. Acquisition
wins by exclusive create; a second process's create or write open rejects
while the record is unrenewed for less than leaseTtlMs (default 5 min),
and takes over after that — a crashed holder is waited out, never
reclaimed by pid. The holder renews every leaseRenewIntervalMs (default
4 min); a renewal that finds a foreign, vanished, or expired record — or
fails outright — marks the lease lost permanently, so every later
append/flush rejects with SessionOwnershipLostError while reads continue.
Close releases the record; read handles never touch it. Takeover of an
expired record is eventually exclusive: a replaced holder stops within
one renewal interval.

Refs #3245
2026-09-04 14:12:14 +08:00
creatixchu 3b8245afc3 fix(build): align file upload project faces 2026-09-03 16:41:45 +08:00
creatixchu bbb2ca7c9b refactor(client): extract background file upload service 2026-09-03 13:53:25 +08:00
creatixchu bafa6ae11d feat(conversation): stream files through submission lifecycle 2026-09-01 16:11:43 +08:00
Turtle 15f2997bcb cleanup: omit unneeded invariant companions 2026-08-28 13:12:52 +08:00
imccyu e14d354e83 refactor(connection): own RPC transport contracts 2026-08-27 22:26:29 +08:00
imccyu 827acd07b1 docs(client-modules): align resolver contract 2026-08-27 20:10:20 +08:00
imccyu ac13b16c0c fix(inspector): stabilize client bootstrap identity 2026-08-27 19:35:34 +08:00
imccyu b72f5879c8 fix(webworker): scope createRequire dependency discovery 2026-08-26 15:09:49 +08:00
imccyu 8f88a6f207 fix(webworker): expose Node process identity 2026-08-26 15:09:48 +08:00
imccyu d54c2795cc fix(webworker): retain createRequire dependencies 2026-08-26 15:09:48 +08:00
Dudu-0223 8e681a66b9 Merge origin/master into fix/web-fetch-ssrf 2026-08-25 14:46:26 +08:00
Tianyi Cui ce031ddd16 fix(web): cover authenticated host runtimes 2026-08-25 14:23:46 +08:00
Dudu-0223 8bf8e42b63 Merge remote-tracking branch 'origin/master' into fix/web-fetch-ssrf 2026-08-25 09:38:28 +08:00
imccyu 78184a6ee1 fix(webworker): inline combo source maps 2026-08-25 06:43:25 +08:00
imccyu 075a46cdec fix(client): preserve combo source identities 2026-08-25 06:43:25 +08:00