Files
vercel-labs--zerolang/skill-data/packages.md
T
wehub-resource-sync e7738de6d2
CI / Deep Native Runtime Cases (1/6) (push) Has been skipped
CI / Native Preflight (push) Failing after 1s
CI / Native Runtime Cases (1/2) (push) Failing after 0s
CI / Native Runtime Cases (2/2) (push) Failing after 1s
CI / Native Metadata Reports (push) Failing after 0s
CI / Native Direct Backend Artifacts (push) Failing after 0s
CI / Native Sanitizer Smoke (push) Failing after 1s
CI / Command Contract Snapshots (push) Failing after 1s
CI / Deep Conformance Suite (push) Has been skipped
CI / Graph Build Perf (push) Failing after 1s
CI / Deep Native Preflight (push) Has been skipped
CI / Deep Native Runtime Cases (2/6) (push) Has been skipped
CI / Deep Native Runtime Cases (3/6) (push) Has been skipped
CI / Conformance Suite (push) Failing after 1s
CI / Workspace Checks (push) Failing after 0s
CI / Deep Native Runtime Cases (5/6) (push) Has been skipped
CI / Deep Native Runtime Cases (6/6) (push) Has been skipped
CI / Deep Native Runtime Cases (4/6) (push) Has been skipped
CI / Deep Graph Build Perf (push) Has been skipped
chore: import upstream snapshot with attribution
2026-07-13 12:29:30 +08:00

164 lines
5.6 KiB
Markdown

---
name: packages
description: Create, inspect, and repair Zero packages and manifests.
---
# Zero Packages
Use this when working with `zero.toml`, compatibility `zero.json`, package-local modules, package tests, or multi-file Zero projects.
## Create
For agent-authored packages, start graph-first:
```sh
zero init
zero patch --op 'addMain'
```
`zero.graph` is the package graph store and compiler input. `.0` files are the
human-readable projection; export them only when a human asks to review or edit
the projection. `zero init` defaults to the current directory and uses that
directory's folder name as the package name. Use `zero init app` when the
user asks for a new subdirectory. It writes TOML metadata by default; use
`zero init --manifest json [package]` only for explicit compatibility cases.
Use `zero init --template cli|lib|package [package]` only when the user
explicitly asks for starter files.
## Manifest
Minimal executable package in TOML:
```toml
[package]
name = "hello"
version = "0.1.0"
[targets.cli]
kind = "exe"
main = "src/main.0"
```
The target `main` path names the human-readable projection for source maps,
export/import, and review. Normal package commands compile from `zero.graph`.
JSON is also accepted for compatibility, but new agent-authored packages should
use TOML:
```json
{
"package": { "name": "hello", "version": "0.1.0" },
"targets": { "cli": { "kind": "exe", "main": "src/main.0" } }
}
```
If both `zero.toml` and `zero.json` exist in the same package root, Zero uses
`zero.toml`. Keep one manifest checked in unless the task is specifically
testing precedence.
Pass either the package directory or manifest to commands:
```sh
zero check
zero check zero.toml
zero run examples/systems-package
```
## Module Imports
Package-local imports resolve from `src/`:
- `use helpers` resolves `src/helpers.0`
- `use config.parser` resolves `src/config/parser.0`
- `use config.parser` may also resolve `src/config/parser/mod.0`
Standard library imports use the same `use` form:
```zero
use std.mem
use std.parse
```
Avoid implicit files. If an import is unknown, run:
```sh
zero check
zero inspect
```
## Dependencies
Current packages support local path dependencies and registry metadata. Local
dependencies must point at a directory containing `zero.toml` or compatibility
`zero.json`; `zero.toml` takes precedence.
TOML dependency metadata:
```toml
[dependencies.local-tools]
path = "../local-tools"
version = "0.1.0"
```
```json
{
"dependencies": {
"local-tools": { "path": "../local-tools", "version": "0.1.0" }
}
}
```
The resolver is declarative; it records deterministic lock facts under `.zero/package-locks/` and does not fetch remote package code.
Package compiler commands validate and compile from a checked-in `zero.graph` store, including target and package metadata, and can operate when `.0` source projections are missing. When the projection was edited, commands that consume the store (`zero check`, `zero build`, `zero run`, `zero test`, `zero query`, `zero view`, `zero diff`, and friends) refresh the stale store from source and note it on stderr (`ZERO_STALE=fail` makes that an error); they never rewrite `.0` files. When `zero.graph` is the newer side, for example right after `zero patch`, they keep using the graph and note that too; when both sides changed independently they fail with `RGP006` and offer `zero import` or `zero export` as repairs. Drift is classified by content (each store write records a source projection hash), never by file timestamps, so staged or cloned workspaces behave identically. Use `zero verify-projection` when drift must fail the workflow, and `zero export` only when a human-readable projection needs regeneration.
## Inspect
```sh
zero inspect
zero doc
zero dev
```
Use `--json` when a tool needs exact graph, doc, or dev fields. Useful `graph`
facts include modules, source paths, import edges, public and private symbol
counts, function effects, required capabilities, target facts, dependency
facts, and package cache key inputs.
## Graph Authoring
For agent-authored packages, prefer the repository graph surface:
```sh
zero init
zero patch --op 'addMain'
```
Inspect and patch existing packages through the graph. Create an artifact under
`.zero/` only when another tool needs a file artifact:
```sh
zero view
zero patch --op 'addMain'
```
Package-level patches write `zero.graph`; successful patch output includes the new graph hash and top-level symbols. Use `zero export` only to materialize `.0` for human review, and `zero import` after humans edit that projection; import accepts the package root or any source path inside it and updates the existing store in place. Keep derived graph artifacts out of the package source unless the user explicitly asks for them.
Repository graph stores are binary by default. Use `zero init --format text` or
`zero import --format text [package]` only when the package
intentionally needs a readable debug store. Normal reads auto-detect both
encodings, and normal writes preserve an existing text or binary store. Stdlib
`std/*.graph` stores are binary graph stores; `std/*.0` siblings are human
projections and are not used as the stdlib compile source.
## Common Repairs
- `IMP001`: create the imported module, fix its path, or adjust `use`.
- `IMP002`: break a direct import cycle.
- `PKG001`: fix a local dependency path so it contains `zero.toml` or a compatibility `zero.json`.
- `PKG002`: break a package dependency cycle.
- `PKG003`: avoid resolving one package name to multiple versions.
- `PKG004`: update target metadata or choose a supported target.
Prefer a package-local fix over moving unrelated files.