Add `dsh-host-plugin-manager`: the `pluginManager` service and the `plugins` Remote that install, uninstall, enable, disable, and retry bundles over the booted profile, add and remove rows in the profile's or an agent preset's user layer, report what a package's services keep alive, and fold the manifest, the probe record, and the live tree into one view per package. pnpm runs the way the CLI runs it, streaming its output as `plugins/install-log`; every change emits `plugins/changed`, and api-remotes forwards both. Enabling is the Loader's own transaction: a rejected recomposition restores the layer list, and a runtime recomposition records contained rows through `recordContainedStates` because the boot audit does not run again; `ContainedGroup.create` now records a row that resolved pending rather than clearing it. Give every agent preset a user patch layer: `cordis.patch.yml` beside a locally authored composition, or alone in `.agent-presets/<id>/` for a shipped one. Discovery attaches and judges it, the mount applies it as the include's runtime patches, standing generations follow the layer's content and return to a retired generation when it comes back, the composition inventory reports each row's `source` and `disabledBy`, a copy carries the layer, and `removeOverlay` deletes it. `dsh-global-tool-mask` is `tools.restrict()` as a scope-only row for such a layer. Add `dsh-patch-file` as the one home of the patch-list format: the parser moved out of app-boot, plus a comment-preserving key-level writer with lock, atomic replace, and readback. app-boot exports `layerTrust`, `bundleLayerPatches`, and `recordContainedStates`, and `ProfileRuntime` carries the install anchor.
description, kind
| description | kind |
|---|---|
| Package map for shared utilities: atomic file writes, branded ids, deques, JSON values, harness home paths, launch environment, native commands, output retention, time zones, and timeouts. | package-group |
util/ — shared utilities
English | 中文
Summary
The util/ group gives capability packages shared mechanical primitives instead of duplicate implementations. It covers atomic writes, branded ids, deques, lossless JSON values, UUIDs, Harness-home paths, launch environments, outbound proxy policy, native commands, output retention, time-zone canonicalization, and timeout handling. Every root entry here is a library: it registers no product service or event, and the consuming capability retains the business semantics.
Table of Contents
Packages
Each package provides one primitive; open a package page for how to use it.
| Package | Role |
|---|---|
brand/ |
Nominal string types and their stateless constructor |
crypto/ |
Mints RFC 9562 v4 UUIDs from the cross-runtime crypto.getRandomValues primitive |
deque/ |
Provides amortized constant-time queue operations with bounded vacant storage |
values/ |
Validates, snapshots, compares, and freezes lossless JSON-compatible values |
home-paths/ |
Resolves the single Harness home and joins shared user-data paths |
http-proxy/ |
Resolves one outbound proxy policy and installs it for fetch, SDK agents, and spawned children |
launch-environment/ |
Frozen launch environment that remembers which layer supplied each value |
atomic-write/ |
Atomic file replacement and cross-process writer locking |
native-command/ |
Runs host-native commands directly, never through a shell string |
workspace-path/ |
Provides browser-safe Workspace path and display helpers |
output-retention/ |
Bounds model-facing output and reports exact omission metadata |
time/ |
Validates and canonicalizes a caller-reported IANA time zone |
timeout/ |
Deadline arithmetic, signal fusion, and timeout-versus-cancel classification |
Related documentation
- Root package map — where
util/sits among all package groups. - Generated configuration catalog — the library-package index this group forms part of.
- Adding a package cookbook — how a new shared primitive lands in this group.
Dev Note
Working context for maintainers — click to expand
None.