v6.0.9
·
1222 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Added
external-tools/uv— uv resolver. Resolves Astral'suvPython package manager across three tiers (embedded VFS, then system PATH, then a downloaded GitHub release), matching the shape of the otherexternal-tools/*tool resolvers. ExportsresolveUv,ResolvedUv,UvSource, plus the per-platform asset map and download helpers.external-tools/python/uv-install— reproducible uv-project install helpers.uvSyncProjectinstalls a uv project at its exact pinned versions and refuses to proceed when those have drifted, so every machine gets the same result.uvExportMaterializeinstalls the same pinned versions into a content-addressed directory with no virtualenv, so the result is relocatable and embeddable in a single-file build. Concurrent callers serialize so two installs can't collide. The Python analog of the npm dlx install model.external-tools/skillspector— pinned-project resolution tier.skillspectorFromUvinstalls SkillSpector from a fully pinned uv project (every version fixed) and returns its entry point, resolved ahead of the existing git-SHA fallback when a project directory anduvbinary are supplied. Adds a'uv'source to the resolution result.config/layers— generic layered-config reader.readConfigLayers(name, { dirs })reads a named config file from an ordered list of layer directories (lowest precedence first) and returns the layers that exist; absent or unparseable layers are skipped.mergeConfigArrayconcatenates one array-valued key across all layers, for lists that higher layers extend rather than replace. It carries no project-convention knowledge: the caller supplies the directories and the merge policy.paths—_wheelhousetool-layout dirs and the agent-clone dir.getSocketRackDirandgetSocketRackToolDirlocate the racked tool store,getSocketWheelhouseBinDirthe PATH-handle directory that points into it, andgetSocketRepoClonesDirthe directory where agents clone external repos for reference (kept out of the projects tree so sibling-walking tooling never treats a clone as a fleet member).ai— offline/gated-model detection and fall-over.spawnTierWithFallbackwalks a tier's cross-engine equivalence chain and runs the first engine that is both installed and authenticated, so a request still completes when the preferred model is down, gated, or unkeyed.isModelUnavailablerecognizes a down-or-gated model from the engine's actual output rather than a brittle literal-string match. Theai/routeresolver andai/subagent-statusreader are exposed as their own entry points.fs/copy— recursive copy with three destination modes.copy(from, to, { mode })copies a file or directory tree.CopyModechooses how an existing destination is treated:'overlay'(the default: overwrite collisions, keep destination-only files),'pave'(the destination becomes an exact mirror of the source via an atomic sibling-temp-then-rename swap, so no stale files survive and a partial tree is never observed), or'fill'(no-clobber: add only what is missing, never overwrite). Also acceptsfilter,dereference, and an abortsignal.node/requireFrom— relativerequirebound to the caller's directory.requireFrom(fromUrl, specifier)resolves a relative specifier (./x,../y) from the caller's own directory, passed asimport.meta.url, so relative loads bind to the right base when modules run unbundled (for example AOT-compiled from source, where each module sits at its own nested path). Builtins and bare packages resolve as before.secrets— proteus broker credential tier. The credential resolver gains a broker layer in the documented order (explicit, then env, then broker, then keychain): it connects to the broker's runtime socket, requests the value, and self-gates. No socket means no broker, so it returnsundefinedand falls through to the keychain. Async only (absent fromresolveSync) and skipped underallowEnvOnly. ExistingresolveProviderCredentialcall sites are unchanged.paths—getRuntimeSocketPathandgetXdgRuntimeDirfor daemon sockets. One resolver a daemon and its clients both call to locate a runtime socket: the XDG runtime dir when present, a$TMPDIR/<name>-<uid>fallback, or a named pipe on Windows.llms.txt— discovery index for AI agents.pnpm run docsnow also emits a publish-safellms.txtat the package root that links each export subpath to its shipped.d.mtsdeclaration, giving an agent one file to read after installing. It ships in the published tarball.packages/manifest—trimPublishManifest. Returns a shallow copy of apackage.jsonthat omits dev/build-only top-level fields (devDependencies,scriptsby default) so a published tarball and its npm metadata stay lean.dropoverrides the field set;keepretains a field even when dropped (e.g. a runtimepostinstall). The original object is left intact.
Changed
integrity— oneHashcurrency (breaking). Hashes are modeled as a single concept, aHashcarrying algorithm, hex, and sri, rather than an integrity-vs-checksum type duality, so the algorithm is explicit on every value. AddsparseHash(encoding- and length-aware),computeHash(sha512 default),verifyHash(bytes, expected)(verifies against the expected hash's declared algorithm),equalHashes(encoding-agnostic, and never equal across algorithms),makeHash, andHashMismatchError. Breaking:verifyHashnow takes(bytes, expected), not(expected, computed), andDlxHashMismatchErroris a deprecated alias ofHashMismatchError. Back-compat shims remain:checksumToIntegrity,integrityToChecksum,normalizeHash,computeHashes,isChecksum,isIntegrity,parseIntegrity.fleet/repo-configis now a thin wrapper overconfig/layers.resolveRepoConfig(the fleet default layered under a per-repo override) andmergeRepoConfigArraystay atfleet/repo-config; the generic, convention-free primitives moved to the newconfig/layersentry.resolveRepoConfigcallers see no behavior change.