The user-global instruction scope now reads two roots: $DSH_HOME/AGENTS.md first, then the shared agents root that other agent tools use ($DSH_AGENTS_HOME, else ~/.agents). Both resolve from the process environment through @deepseek-ai/dsh-home-paths; no config field is added, because the stack base (PR #5718) removed the per-row home override. The two files are candidates of one candidate group: identical trimmed content renders once from the harness home, an unobservable candidate preserves the group's last-good state, and reconciliation probes both roots so external edits, removals, and new files become visible change notices. A candidate dropped as a duplicate keeps being reconciled, so deleting or changing the retained candidate promotes it. The harness-home file keeps its recorded `user-global` scope key; the shared file carries `agents-global`. A user-global delta states `These user-global instructions apply to all work.` instead of naming its reconciliation scope, and a project path whose first component would collide with a user-global scope directory renders with a leading `.` so it keeps its own scope.
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 |
package-manifest/ |
Shared TypeScript declarations for package manifests |
crypto/ |
Mints RFC 9562 v4 UUIDs from the cross-runtime crypto.getRandomValues primitive |
deque/ |
Provides amortized constant-time queue operations with bounded vacant storage |
chunked-list/ |
Retains immutable list versions with bounded append copying and checkpoint validation |
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 |
lazy-require/ |
Loads CommonJS-compatible Host dependencies on first use with caller-relative resolution |
native-command/ |
Runs host-native commands directly, never through a shell string |
workspace-path/ |
Provides browser-safe Workspace path and display helpers |
code-language/ |
Maps a filename suffix to the syntax-highlighting language that the Code preview, diff review, and the read card render |
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.