Commit Graph
275 Commits
Author SHA1 Message Date
turtle1999 0a6de62671 refactor(boot): derive skipped bundles only from Profile.skippedBundles
skippedProfileBundles recomputed the selected-minus-loaded bundle set from
the manifest, a second home for what loadProfileDirectory already records.
Runtime resolution and generateConfigSchema now read
profile.skippedBundles, so generateConfigSchema no longer reads the profile
manifest and drops its binName parameter.
2026-09-24 19:19:52 +08:00
turtle1999 c8b10a16be fix(boot): report skipped profile bundles once per start
loadProfileDirectory printed each skipped bundle on every call, and startup,
runtime resolution, the config editor, the plugin manager, and HMR all load
the profile, so one incompatible bundle printed the same warning six times at
startup and again on each Web page load. Loading now returns the skips in
Profile.skippedBundles, and the CLI and Desktop launchers print them once per
start with reportSkippedBundles.
2026-09-24 18:32:48 +08:00
turtle1999 51d70c5f5c feat(plugins): report incompatible versions as typed refusals
Compatibility checks now yield the refused packages as data instead of a
profile-specific sentence. runProfilePnpm returns them as
PackageResult.incompatible, and the plugin manager refuses with the
incompatible-version code carrying the same records. Each surface renders
them: the CLI prints the exact allow-version command for its profile, the
Web plugin manager words them through its locale dictionary, and app-boot
keeps one neutral English diagnostic for logs and startup stderr.
2026-09-23 19:51:29 +08:00
turtle1999 747c98b0db fix(plugins): deny incompatible bundles and clarify compatibility refusals
A bundle package is not a plugin row, so startup admission never read its
own DSH peers: a bundle installed outside DSH or before a DSH upgrade still
applied its patch layer. loadProfileDirectory now skips such a bundle like an
unreadable one unless the profile exempts that exact pair.

A post-install refusal in a profile without a lockfile reinstalls from the
restored manifest instead of failing a frozen install and leaving the
rejected packages in node_modules.

Compatibility warnings now name the `dsh plugin allow-version` command for
CLI-managed profiles, startup denials name the row id instead of a resolved
module URL, and the CLI no longer reports "pnpm failed" when pnpm never ran.
2026-09-23 19:14:19 +08:00
turtle1999 2c67633990 feat(plugins): enforce DSH peer compatibility with exact exemptions 2026-09-23 18:46:08 +08:00
Turtle 4eb26f0e71 feat(cli): export JSON Schema for Cordis configuration (#4705)
* feat(cli): dump native Cordis config schemas

* test(cli): include schema dump in launcher help snapshot

* feat(cli): export JSON Schema for Cordis configuration

* fix(cli): preserve config schema discovery and annotations

* fix(cli): conservatively project effectful config validation

* refactor(boot): encapsulate profile config schema generation

* fix(cli): follow Loader disabling and native writeback in config schema

- Dormant group/include rows (disabled without group: true) may omit
  config and are recorded as childless trees; the entry schema skips
  their child declarations, matching the Loader, which never creates them.
- Lazy builders run once per document, and a wrapped null-only projection
  keeps a deduplicated type list so the document stays compilable.
- Union widening applies only when an earlier branch can write adapted
  values back through a container; +Infinity max and -Infinity min
  without a step are treated as the native no-ops they are.
- Projection limitations repeat at every entry sharing a Config, and the
  entry schema documents the boolean/expression domain of disabled.
- Record the schema-dump validation policy as an Agent Note.
2026-09-21 09:19:24 +00:00
imccyu f7f22a6b48 refactor(boot): finish the interception vocabulary in code comments and the app-boot README
The Consumer-owned strictness bullet names the Loader subtree that agent presets own instead of the runtime resolution; the service field, its file comment, the dispose JSDoc, and the route JSDoc use interception; the native-after-interception route documents both anchors it can carry; stale module-fallback comments name the runtime resolution; importFromResolution matches its parameter.
2026-09-19 17:06:35 +08:00
imccyu 15e07d2721 refactor(boot): rename the profile resolution generation to the runtime resolution
RuntimeResolution, RuntimeResolutionEntry, RuntimeResolutionOptions, and createRuntimeResolution replace the generation-named table types; installRuntimeInterception returns a RuntimeInterception; PluginPackages takes { resolution }; Worker environment data carries { resolution }; routes are native, interception, and native-after-interception. replace() keeps its successor-generation wording.
2026-09-19 17:06:34 +08:00
imccyu 9fd0a5ad52 refactor(boot): keep runtime-only profile resolution 2026-09-19 13:29:13 +08:00
imccyu 0ea890044f test(cli): cover runtime profile defaults and sync docs 2026-09-17 20:23:14 +08:00
imccyu 9ddef327a4 feat: resolution mode link to runtime 2026-09-17 20:08:51 +08:00
turtle1999 053cad9442 fix(cli): complete startup diagnostics before exiting 2026-09-16 21:40:54 +08:00
turtle1999 18260e3b0c fix(cli): save full startup diagnostics under DSH_HOME logs 2026-09-16 20:11:15 +08:00
turtle1999 38fb1a11f9 fix(cli): group startup failures and pending services 2026-09-16 19:04:12 +08:00
turtle1999 8c5ae870c2 fix(creator): address plugin workflow review findings 2026-09-16 17:22:38 +08:00
Turtle 7d4188b450 fix(cli): address profile shorthand review feedback 2026-09-15 16:49:03 +08:00
Turtle 1d6534a810 feat(cli): support profile command shorthand 2026-09-15 16:49:02 +08:00
Turtle 311156b1c2 Merge master and preserve profile-managed HMR 2026-09-15 16:20:47 +08:00
Turtle 61665c3454 fix(plugin-manager): clean failed installs and address critical review findings 2026-09-15 15:15:49 +08:00
07akioni 830c82687b revert: restore original CLI profile boot exports 2026-09-15 14:56:19 +08:00
07akioni 255374afa1 fix(cli): expose only the shared profile runner API 2026-09-15 14:16:48 +08:00
Turtle 86497c479c Merge remote-tracking branch 'origin/master' into turtle/plugin-manager
# Conflicts:
#	packages/client/ui-settings-plugin-inventory/package.json
2026-09-15 13:09:38 +08:00
Turtle abd765a600 refactor(hmr): own profile reload lifecycle through YAML 2026-09-15 13:01:06 +08:00
07akioni bafe2b7d55 Merge master into thin Electron Web UI and reconcile runtime resolution 2026-09-15 01:17:42 +08:00
Turtle ca4db9c755 fix(hmr): match Node module paths and contain startup reload failures 2026-09-15 00:00:53 +08:00
Turtle 4d13d8ad9d Merge remote-tracking branch 'origin/master' into turtle/plugin-manager 2026-09-14 23:30:17 +08:00
Turtle 438c862fea refactor: keep profile launch context data-only and HMR backend-scoped 2026-09-14 23:09:06 +08:00
Turtle d06e6b5519 feat: coordinate profile management through dsh-hmr 2026-09-14 23:09:06 +08:00
Turtle 98b92b683c feat: add current-profile plugin manager service and Web controls 2026-09-14 23:09:05 +08:00
imccyu c917a4e0bd feat(cli): force runtime resolution in pkg builds 2026-09-14 22:52:44 +08:00
imccyu 662bdf3833 docs(profile-resolution): clarify review assumptions 2026-09-14 22:30:48 +08:00
imccyu 6aa2e4633c feat(boot): add profile resolution modes 2026-09-14 22:30:48 +08:00
07akioni 9187c3662e Merge master and fix desktop editing and Windows lock contention 2026-09-14 12:16:33 +08:00
Turtle 71d50b4a84 refactor: ban ambiguous origin label 2026-09-11 17:45:28 +08:00
07akioni 253873f340 Merge origin/master into thin Electron Web UI branch 2026-09-11 13:43:03 +08:00
07akioni ae84dd3381 fix(desktop): address shared runtime review and CI regressions 2026-09-11 11:24:17 +08:00
07akioni 8c2fa73ceb refactor(desktop): share profile initialization and plugin management 2026-09-10 22:44:52 +08:00
07akioni e84a4e857e refactor(desktop): run shared Web UI in a thin Electron shell 2026-09-10 22:08:33 +08:00
turtle1999 2abb542a22 Adapt current consumers to nontransactional Cordis Loader
Move exact user-patch watching into app boot and audit activation explicitly.
Wait for CLI fallback HMR and preset subtrees. Join the first fiber-disposal
result in the directory chooser and browser package runner. Keep async
update errors observable without restoring generic Loader rollback.

Restore the current workspace-link and Schemastery manifests and their gate.
Preserve unconditional patch-input cloning, awaited Include initialization,
and durable teardown writes. Update diagnostics, snapshots, bilingual docs,
and the exhaustive vendor divergence ledger.

Validation: focused Loader, watcher, preset, inventory, and cleanup tests;
100% watcher coverage; 32 Web preset cases; real CLI webhook model session;
SDK smokes; 13 headless expected cases; 3 recorded-session replays; build,
typecheck, lint contracts, and all 34 doc-sync gates.

A full Node 24/Python 3.12 Vitest run had 21806 passes and two failures:
a baseline-reproduced experimental CSS import failure and a Python probe
timeout that passed alone. The default Node 26/Python 3.9 run additionally
exposed unsupported Python and FileHandle-GC host failures.
2026-09-09 17:33:32 +08:00
Turtle 267d2f8eb9 Merge remote-tracking branch 'origin/master' into turtle/from-default-profile
# Conflicts:
#	apps/cli/README.i18n.yaml
#	apps/cli/README.md
#	apps/cli/README.zh.md
#	packages/boot/app-boot/README.i18n.yaml
#	packages/boot/app-boot/README.md
#	packages/boot/app-boot/README.zh.md
2026-09-07 20:53:53 +08:00
Turtle 2555474a7d refactor(cli): simplify profile option forwarding 2026-09-07 20:47:47 +08:00
Turtle 7a7b7d5a53 fix(cli): make profile template creation exclusive 2026-09-07 20:46:40 +08:00
Turtle dd25e1e6b3 feat(cli): create profiles from shipped templates 2026-09-07 19:58:41 +08:00
07akioni 8d0d729091 Merge master native containment updates into feat/electron 2026-09-07 19:45:55 +08:00
07akioni fe0b7f2814 fix(desktop): move host out of CLI package 2026-09-04 16:21:45 +08:00
pku-xht d79f5c04e8 Merge master into codex/subprocess-native-containment 2026-09-03 21:46:02 +08:00
pku-xht 423412b7bf fix(runtime): simplify executable entry dispatch 2026-09-03 21:18:27 +08:00
pku-xht e5dbccce8c fix(subprocess): move SEA bootstrap to runtime packaging 2026-09-03 19:59:26 +08:00
07akioni 3e526474a3 Merge remote-tracking branch 'origin/master' into feat/electron
# Conflicts:
#	pnpm-lock.yaml
#	scripts/gen-cordis-catalog.ts
2026-09-03 13:46:37 +08:00
Yichen Jiang 8470ddef1d refactor(http-proxy): converge the proxy API on four functions
The package exported six functions, four of them shaped by one SDK's
transport each: a dispatcher factory, a `node:http` agent factory, a
proxy-URL lookup, and a policy accessor. Review asked whether the call
sites could converge instead of the package growing an export per SDK.

They could, and each removal took a whole shape with it:

- The OTLP exporter moves to the SDK's `fetch` delegate, retiring
  `createNodeHttpAgent`. Its Node-version floor goes too: `proxyEnv` on
  an `http.Agent` needs 22.21 or 24.5, inside the engines range, so
  telemetry was direct on 22.19, 22.20, and 24.0-24.4. The cost is
  `compression`, a Node-transport option; the plugin now refuses it,
  `keepAlive`, and `httpAgentOptions` at load instead of ignoring them.
- `web-fetch-http` builds its own address-pinning agent under an
  annotated `proxy-exempt:` exemption, retiring `createDispatcher`.
  Pinning is per-request state a process-wide dispatcher cannot hold.
- E2B reads `route.proxy`, retiring `proxyUrlFor`.

What remains is `installProxyFromEnvironment`, `proxyRouteFor`,
`proxyEnvironmentForChild`, and `clearedProxyEnv` — one per way a caller
can need the policy. Installation absorbs resolution and diagnostic
reporting, which no caller needed apart.

`proxyRouteFor` also closes a defect the old accessor made expressible:
`web-fetch-http` read the policy to decide whether to pin, then read it
again to build a transport, so an unmount between the two returned a
direct, unpinned agent for a URL the first read had cleared as proxied.
A route carries the answer and the transport that answer assumed.

Every egress spec now installs through `installProxyFromEnvironment`, so
no test asserts a policy object a real launch could not produce.
2026-09-01 21:15:04 +08:00