diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml
index 7b146d61f7..27739c32db 100644
--- a/.github/workflows/bench.yml
+++ b/.github/workflows/bench.yml
@@ -29,7 +29,7 @@ jobs:
- run: cargo build --release -p agentos-native-sidecar
- run: cargo build --release -p agentos-native-baseline
- run: cargo build --release --target wasm32-wasip1 -p agentos-native-baseline
- - run: make -C registry/native commands
+ - run: make -C toolchain commands
- run: node packages/runtime-core/scripts/copy-wasm-commands.mjs --require
- run: pnpm --dir packages/runtime-core build
- run: pnpm --dir packages/runtime-benchmarks bench:check
diff --git a/.github/workflows/ci-nightly.yml b/.github/workflows/ci-nightly.yml
index 79bb6cdb3f..e0108161dc 100644
--- a/.github/workflows/ci-nightly.yml
+++ b/.github/workflows/ci-nightly.yml
@@ -23,7 +23,7 @@ jobs:
with:
targets: wasm32-wasip1
- run: pnpm install --frozen-lockfile
- - run: make -C registry/native commands
+ - run: make -C toolchain commands
- run: node packages/runtime-core/scripts/copy-wasm-commands.mjs --require
- run: cargo check --workspace
- run: cargo clippy --workspace --all-targets -- -D warnings
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7d927bacf2..3c43731d31 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -30,7 +30,7 @@ jobs:
- run: pnpm install --frozen-lockfile
- run: |
if grep -qE '^[[:space:]]*-[[:space:]]*website[[:space:]]*$' pnpm-workspace.yaml; then
- npx turbo build --filter='!@agentos/website'
+ npx turbo build --filter='!@rivet-dev/agentos-website'
else
npx turbo build
fi
@@ -42,6 +42,7 @@ jobs:
- run: node scripts/check-agentos-client-protocol-compat.mjs
- run: node --test scripts/verify-fixed-versions.test.mjs
- run: node scripts/verify-fixed-versions.mjs
+ - run: pnpm check-layout
- run: cargo fmt --check
- run: pnpm check-types
- run: pnpm lint
@@ -63,10 +64,10 @@ jobs:
targets: wasm32-wasip1
- uses: Swatinem/rust-cache@v2
with:
- workspaces: registry/native -> registry/native/target
- key: wasm-commands-${{ hashFiles('registry/native/Cargo.lock') }}
+ workspaces: toolchain -> toolchain/target
+ key: wasm-commands-${{ hashFiles('toolchain/Cargo.lock') }}
- run: pnpm install --frozen-lockfile --filter '@rivet-dev/agentos-runtime-core...'
- - run: make -C registry/native commands
+ - run: make -C toolchain commands
- run: node packages/runtime-core/scripts/copy-wasm-commands.mjs --require
- uses: actions/upload-artifact@v4
with:
@@ -107,7 +108,7 @@ jobs:
- run: node packages/runtime-core/scripts/copy-wasm-commands.mjs --require
- run: |
if grep -qE '^[[:space:]]*-[[:space:]]*website[[:space:]]*$' pnpm-workspace.yaml; then
- npx turbo build --filter='!@agentos/website'
+ npx turbo build --filter='!@rivet-dev/agentos-website'
else
npx turbo build
fi
diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml
index 1c77cd71dc..6087dbd036 100644
--- a/.github/workflows/publish.yaml
+++ b/.github/workflows/publish.yaml
@@ -66,10 +66,10 @@ jobs:
targets: wasm32-wasip1
- uses: Swatinem/rust-cache@v2
with:
- workspaces: registry/native -> registry/native/target
- key: wasm-commands-${{ hashFiles('registry/native/Cargo.lock') }}
+ workspaces: toolchain -> toolchain/target
+ key: wasm-commands-${{ hashFiles('toolchain/Cargo.lock') }}
- run: pnpm install --frozen-lockfile --filter '@rivet-dev/agentos-runtime-core...'
- - run: make -C registry/native commands
+ - run: make -C toolchain commands
- run: node packages/runtime-core/scripts/copy-wasm-commands.mjs --require
- uses: actions/upload-artifact@v4
with:
@@ -112,7 +112,7 @@ jobs:
key: ${{ runner.os }}-${{ matrix.target }}-rusty-v8-${{ hashFiles('Cargo.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.target }}-rusty-v8-
- - run: pnpm install --frozen-lockfile --filter='!@agentos/website'
+ - run: pnpm install --frozen-lockfile --filter='!@rivet-dev/agentos-website'
- name: Set up Linux GNU sysroot
run: scripts/ci/setup-linux-gnu-sysroot.sh
- name: Build sidecar binaries
@@ -183,7 +183,7 @@ jobs:
key: ${{ runner.os }}-${{ matrix.target }}-rusty-v8-${{ hashFiles('Cargo.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.target }}-rusty-v8-
- - run: pnpm install --frozen-lockfile --filter='!@agentos/website'
+ - run: pnpm install --frozen-lockfile --filter='!@rivet-dev/agentos-website'
- name: Set up Linux GNU sysroot
run: scripts/ci/setup-linux-gnu-sysroot.sh
- name: Build plugin cdylib
@@ -281,7 +281,7 @@ jobs:
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
registry-url: https://registry.npmjs.org
- - run: pnpm install --frozen-lockfile --filter='!@agentos/website'
+ - run: pnpm install --frozen-lockfile --filter='!@rivet-dev/agentos-website'
- uses: actions/download-artifact@v4
with:
name: wasm-commands
@@ -460,7 +460,7 @@ jobs:
key: ${{ runner.os }}-x86_64-unknown-linux-gnu-rusty-v8-${{ hashFiles('Cargo.lock') }}
restore-keys: |
${{ runner.os }}-x86_64-unknown-linux-gnu-rusty-v8-
- - run: pnpm install --frozen-lockfile --filter='!@agentos/website'
+ - run: pnpm install --frozen-lockfile --filter='!@rivet-dev/agentos-website'
- name: Bump Cargo versions
run: |
pnpm --filter=publish exec tsx src/ci/bin.ts bump-versions \
diff --git a/CLAUDE.md b/CLAUDE.md
index b0298183e0..783ef8fdb5 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -69,6 +69,21 @@ the guest — over inventing a softer fallback that hides the failure.
- `scripts/publish` is the source of truth for npm/crates discovery, version
rewriting, npm publish, crates publish, release assets, and R2 upload.
+- npm package scopes are load-bearing for version rewriting, so every package
+ must use the scope that matches how it publishes:
+ - `@rivet-dev/agentos-*` — core/internal packages, incl. private tooling and
+ test-only helpers (e.g. `@rivet-dev/agentos-test-harness`). The version
+ bumper pins these `workspace:*` deps to the build version without hitting
+ npm, so private/unpublished packages are safe here.
+ - `@agentos-software/*` — independently-versioned software packages. The
+ bumper resolves these `workspace:*` deps to their published npm `latest`,
+ so a package under this scope MUST be published to npm or the publish fails.
+ - The bare `@agentos/*` scope is NOT ours — we do not own that npm org, so no
+ package may use it (not even private, never-published ones). Everything
+ internal, including tooling, test helpers, and the website, lives under
+ `@rivet-dev/agentos-*`. Beyond the ownership problem, the bumper treats an
+ unrecognized scope as an independently-versioned software package and runs
+ `npm view` on it, which hard-fails for anything unpublished.
- Publishable npm packages and Rust crates are AgentOS-owned. Compatibility
`@secure-exec/*`, `secure-exec`, and `secure-exec-*` artifacts are emitted
from the generated mirror.
diff --git a/Cargo.toml b/Cargo.toml
index 8cc1efcefb..8bbe980838 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,5 +1,6 @@
[workspace]
resolver = "2"
+exclude = ["software"]
members = [
"crates/agentos-protocol",
"crates/agentos-sidecar-core",
diff --git a/crates/client/tests/common/mod.rs b/crates/client/tests/common/mod.rs
index 1013b35300..e91cd0a9be 100644
--- a/crates/client/tests/common/mod.rs
+++ b/crates/client/tests/common/mod.rs
@@ -150,7 +150,7 @@ fn wasm_command_mounts() -> Vec {
/// Locate the materialized coreutils package under the in-repo registry build.
pub fn coreutils_package_dir() -> Option {
let registry_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
- .join("../../registry/software/coreutils/dist/package");
+ .join("../../software/coreutils/dist/package");
if registry_dir.join("agentos-package.json").is_file() {
return std::fs::canonicalize(registry_dir).ok();
}
@@ -175,7 +175,7 @@ pub fn coreutils_wasm_dir() -> Option {
}
let legacy_registry_dir =
- PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../registry/software/coreutils/wasm");
+ PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../software/coreutils/wasm");
if legacy_registry_dir.is_dir() {
return std::fs::canonicalize(legacy_registry_dir).ok();
}
@@ -244,6 +244,6 @@ pub async fn require_wasm_commands(os: &AgentOs, test_name: &str) -> bool {
eprintln!("skipping {message}");
false
} else {
- panic!("{message}; run the registry/native command build or set AGENT_OS_CLIENT_ALLOW_E2E_SKIPS=1 for local skip-only runs");
+ panic!("{message}; run the toolchain command build or set AGENT_OS_CLIENT_ALLOW_E2E_SKIPS=1 for local skip-only runs");
}
}
diff --git a/crates/client/tests/packages_aospkg_e2e.rs b/crates/client/tests/packages_aospkg_e2e.rs
index 027f3a6824..fd9f104bcb 100644
--- a/crates/client/tests/packages_aospkg_e2e.rs
+++ b/crates/client/tests/packages_aospkg_e2e.rs
@@ -16,7 +16,7 @@ mod common;
fn coreutils_aospkg() -> Option {
for path in [
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
- .join("../../registry/software/coreutils/dist/package.aospkg"),
+ .join("../../software/coreutils/dist/package.aospkg"),
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("../../node_modules/@agentos-software/coreutils/dist/package.aospkg"),
] {
diff --git a/crates/client/tests/pi_session_e2e.rs b/crates/client/tests/pi_session_e2e.rs
index 9b15fd7fc9..2210301eba 100644
--- a/crates/client/tests/pi_session_e2e.rs
+++ b/crates/client/tests/pi_session_e2e.rs
@@ -9,7 +9,7 @@
//! - `AGENT_OS_PI_MODULE_CWD` env (a workspace with a built/installed `@agentos-software/pi`), else
//! - the repo root, but only when the in-repo adapter is built
//! (`node_modules/@agentos-software/pi/dist/adapter.js`). Build it with `pnpm --dir packages/core
-//! build && pnpm --dir registry/agent/pi build` (core first for types).
+//! build && pnpm --dir software/pi build` (core first for types).
//!
//! Background: a real agent SDK exercises module-loading patterns (tsc `__exportStar` CJS barrels,
//! deep pnpm symlink graphs, `__dirname` package self-location) that mock ACP adapters never touch.
@@ -55,11 +55,11 @@ fn pi_module_cwd() -> Option {
fn pi_package_path() -> Option {
// Prefer the packed .aospkg — the artifact the registry actually ships.
- let aospkg = repo_root().join("registry/agent/pi/dist/package.aospkg");
+ let aospkg = repo_root().join("software/pi/dist/package.aospkg");
if aospkg.is_file() {
return std::fs::canonicalize(aospkg).ok();
}
- let dir = repo_root().join("registry/agent/pi/dist/package");
+ let dir = repo_root().join("software/pi/dist/package");
if dir.join("agentos-package.json").is_file() {
std::fs::canonicalize(dir).ok()
} else {
diff --git a/crates/client/tests/shell_pty_packages_e2e.rs b/crates/client/tests/shell_pty_packages_e2e.rs
index 746998a613..7df9ff3af4 100644
--- a/crates/client/tests/shell_pty_packages_e2e.rs
+++ b/crates/client/tests/shell_pty_packages_e2e.rs
@@ -17,7 +17,7 @@ fn coreutils_package_path() -> Option {
// Prefer the packed .aospkg — the artifact registry packages actually ship.
for aospkg in [
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
- .join("../../registry/software/coreutils/dist/package.aospkg"),
+ .join("../../software/coreutils/dist/package.aospkg"),
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("../../node_modules/@agentos-software/coreutils/dist/package.aospkg"),
] {
@@ -27,7 +27,7 @@ fn coreutils_package_path() -> Option {
}
for dir in [
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
- .join("../../registry/software/coreutils/dist/package"),
+ .join("../../software/coreutils/dist/package"),
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("../../node_modules/@agentos-software/coreutils/dist/package"),
] {
diff --git a/crates/execution/CLAUDE.md b/crates/execution/CLAUDE.md
index 4bf08bd151..5aff12c315 100644
--- a/crates/execution/CLAUDE.md
+++ b/crates/execution/CLAUDE.md
@@ -91,7 +91,7 @@ ESM loader hooks (`loader.mjs`) and CJS `Module._load` patches (`runner.mjs`) ar
- Node-facing `readdir` results must filter `.`/`..`.
- Async methods should dispatch under `fs.promises.*`.
- `fs.promises` methods that need real concurrency must use dedicated async bridge globals in `packages/build-tools/bridge-src/`; wrapping `fs.*Sync` inside `async` functions still serializes `Promise.all(...)` behind the first sidecar response.
-- When adding WASI guest imports in `registry/native/crates/wasi-ext`, mirror the required module/object in `crates/execution/src/node_import_cache.rs`'s inline `NODE_WASM_RUNNER_SOURCE`; missing modules fail at `WebAssembly.instantiate()` before guest `main()` runs.
+- When adding WASI guest imports in `toolchain/crates/wasi-ext`, mirror the required module/object in `crates/execution/src/node_import_cache.rs`'s inline `NODE_WASM_RUNNER_SOURCE`; missing modules fail at `WebAssembly.instantiate()` before guest `main()` runs.
- Keep the embedded WASI shim in `crates/execution/src/wasm.rs` aligned with the patched wasi-libc surface used by the C command suite; overrides like `fcntl(F_SETFL)` now depend on `fd_fdstat_set_flags`, and missing imports fail at instantiation time before the guest command can do real work.
- The shared-V8 WASM runner now resolves its own module loads plus internal guest `fs.openSync` / `fs.readSync` / `fs.writeSync` / `fs.closeSync` traffic inside `crates/execution/src/wasm.rs`; if the embedded runner gains more internal file syscalls, extend that internal sync-RPC handling there instead of surfacing those requests to callers or reintroducing a host-Node runtime path.
- fd-based APIs (`open`, `read`, `write`, `close`, `fstat`) plus `createReadStream`/`createWriteStream` should ride the same bridge.
diff --git a/crates/execution/assets/runners/wasi-module.js b/crates/execution/assets/runners/wasi-module.js
index 7dfe4d0384..8bb1d01dc6 100644
--- a/crates/execution/assets/runners/wasi-module.js
+++ b/crates/execution/assets/runners/wasi-module.js
@@ -54,6 +54,7 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
const __agentOSWasiOpenDirectory = 2;
const __agentOSWasiOpenExclusive = 4;
const __agentOSWasiOpenTruncate = 8;
+ const __agentOSWasiFdflagsAppend = 1;
const __agentOSWasiRightFdRead = 1n << 1n;
const __agentOSWasiRightFdWrite = 1n << 6n;
const __agentOSWasiDefaultRightsBase = 0xffffffffffffffffn;
@@ -396,6 +397,14 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
}
}
+ _hasReadRights(rights) {
+ try {
+ return (BigInt(rights) & __agentOSWasiRightFdRead) !== 0n;
+ } catch {
+ return true;
+ }
+ }
+
_writeUint32(ptr, value) {
try {
this._memoryView().setUint32(Number(ptr) >>> 0, Number(value) >>> 0, true);
@@ -779,6 +788,9 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
}
_mapFsError(error) {
+ __agentOSWasiDebug(
+ `fs error code=${String(error?.code ?? "")} message=${String(error?.message ?? error)}`,
+ );
switch (error?.code) {
case "EACCES":
case "EPERM":
@@ -827,6 +839,7 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
refCount: 1,
open: true,
readOnly: entry.readOnly === true,
+ append: entry.append === true,
};
}
@@ -1380,19 +1393,28 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
return this._measureWasiPhase("writeResultPtr", () => this._writeUint32(nwrittenPtr, written));
}
}
+ const position = handle.append
+ ? this._measureWasiPhase("appendFstat", () =>
+ Number(__agentOSFs().fstatSync(handle.targetFd).size ?? 0)
+ )
+ : null;
const written = this._measureWasiPhase("writeSync", () =>
__agentOSFs().writeSync(
handle.targetFd,
bytes,
0,
bytes.length,
- null,
+ position,
)
);
return this._measureWasiPhase("writeResultPtr", () => this._writeUint32(nwrittenPtr, written));
}
if (handle?.kind === "guest-file" && typeof handle.targetFd === "number") {
- const position = handle.append ? null : (handle.position ?? 0);
+ const position = handle.append
+ ? this._measureWasiPhase("appendFstat", () =>
+ Number(__agentOSFs().fstatSync(handle.targetFd).size ?? 0)
+ )
+ : (handle.position ?? 0);
const written = this._measureWasiPhase("writeSync", () =>
__agentOSFs().writeSync(
handle.targetFd,
@@ -1469,7 +1491,11 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
}
if (entry.kind === "file") {
this._clearStatCache();
- const position = typeof entry.offset === "number" ? entry.offset : null;
+ const position = entry.append
+ ? this._measureWasiPhase("appendFstat", () =>
+ Number(__agentOSFs().fstatSync(entry.realFd).size ?? 0)
+ )
+ : (typeof entry.offset === "number" ? entry.offset : null);
const written = this._measureWasiPhase("writeSync", () =>
__agentOSFs().writeSync(
entry.realFd,
@@ -1479,7 +1505,11 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
position,
)
);
- if (typeof entry.offset === "number") {
+ if (entry.append) {
+ entry.offset = this._measureWasiPhase("appendFstat", () =>
+ Number(__agentOSFs().fstatSync(entry.realFd).size ?? 0)
+ );
+ } else if (typeof entry.offset === "number") {
entry.offset += written;
}
return this._measureWasiPhase("writeResultPtr", () => this._writeUint32(nwrittenPtr, written));
@@ -2206,8 +2236,12 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
this._clearStatCache();
}
const fsConstants = __agentOSFs().constants ?? {};
+ const requestedFdFlags = Number(_fdflags) >>> 0;
+ const append = (requestedFdFlags & __agentOSWasiFdflagsAppend) !== 0;
let openFlags = requestedWriteAccess
- ? fsConstants.O_RDWR ?? 2
+ ? (this._hasReadRights(requestedRightsBase)
+ ? fsConstants.O_RDWR ?? 2
+ : fsConstants.O_WRONLY ?? 1)
: fsConstants.O_RDONLY ?? 0;
if ((requestedFlags & __agentOSWasiOpenCreate) !== 0) {
openFlags |= fsConstants.O_CREAT ?? 64;
@@ -2218,6 +2252,9 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
if ((requestedFlags & __agentOSWasiOpenTruncate) !== 0) {
openFlags |= fsConstants.O_TRUNC ?? 512;
}
+ if (append) {
+ openFlags |= fsConstants.O_APPEND ?? 1024;
+ }
if (openDirectory) {
openFlags |= fsConstants.O_DIRECTORY ?? 0;
}
@@ -2235,10 +2272,13 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
hostPath: fsPath,
readOnly: resolved.readOnly === true,
realFd,
- offset: 0,
+ offset: append
+ ? Number(__agentOSFs().fstatSync(realFd).size ?? 0)
+ : 0,
+ append,
rightsBase: requestedRightsBase & allowedRightsInheriting,
rightsInheriting: requestedRightsInheriting & allowedRightsInheriting,
- fdFlags: (Number(_fdflags) >>> 0) & 0xffff,
+ fdFlags: requestedFdFlags & 0xffff,
});
});
return this._measureWasiPhase("writeOpenedFd", () => this._writeUint32(openedFdPtr, openedFd));
diff --git a/crates/execution/assets/runners/wasm-runner.mjs b/crates/execution/assets/runners/wasm-runner.mjs
index fb7e839855..254a1ae1c4 100644
--- a/crates/execution/assets/runners/wasm-runner.mjs
+++ b/crates/execution/assets/runners/wasm-runner.mjs
@@ -4155,7 +4155,13 @@ const hostProcessImport = {
},
sleep_ms(milliseconds) {
try {
- Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, Number(milliseconds) >>> 0);
+ const waitArray = new Int32Array(new SharedArrayBuffer(4));
+ const deadline = Date.now() + (Number(milliseconds) >>> 0);
+ while (Date.now() < deadline) {
+ // Keep guest sleeps interruptible by V8 termination during SIGTERM,
+ // SIGKILL, and VM disposal.
+ Atomics.wait(waitArray, 0, 0, Math.max(1, Math.min(10, deadline - Date.now())));
+ }
return WASI_ERRNO_SUCCESS;
} catch {
return WASI_ERRNO_FAULT;
@@ -5728,7 +5734,9 @@ wasiImport.poll_oneoff = (inPtr, outPtr, nsubscriptions, neventsPtr) => {
});
}
- if (!hasSyntheticSubscription && !hasRemappedPassthroughSubscription) {
+ const hasClockSubscription = subscriptions.some((subscription) => subscription.kind === 'clock');
+
+ if (!hasSyntheticSubscription && !hasRemappedPassthroughSubscription && !hasClockSubscription) {
return delegateManagedPollOneoff
? delegateManagedPollOneoff(inPtr, outPtr, nsubscriptions, neventsPtr)
: WASI_ERRNO_BADF;
@@ -5895,7 +5903,7 @@ wasiImport.poll_oneoff = (inPtr, outPtr, nsubscriptions, neventsPtr) => {
);
}
- if (readyEvents.length === 0 && subscriptions.some((subscription) => subscription.kind === 'clock')) {
+ if (readyEvents.length === 0 && hasClockSubscription) {
const clockSubscription = subscriptions.find((subscription) => subscription.kind === 'clock');
readyEvents.push({
userdata: clockSubscription.userdata,
diff --git a/crates/execution/src/node_import_cache.rs b/crates/execution/src/node_import_cache.rs
index 4703e281ed..a9db46b0c5 100644
--- a/crates/execution/src/node_import_cache.rs
+++ b/crates/execution/src/node_import_cache.rs
@@ -15,7 +15,7 @@ const NODE_IMPORT_CACHE_PATH_ENV: &str = "AGENTOS_NODE_IMPORT_CACHE_PATH";
const NODE_IMPORT_CACHE_LOADER_PATH_ENV: &str = "AGENTOS_NODE_IMPORT_CACHE_LOADER_PATH";
const NODE_IMPORT_CACHE_SCHEMA_VERSION: &str = "1";
const NODE_IMPORT_CACHE_LOADER_VERSION: &str = "8";
-const NODE_IMPORT_CACHE_ASSET_VERSION: &str = "85";
+const NODE_IMPORT_CACHE_ASSET_VERSION: &str = "86";
const NODE_IMPORT_CACHE_DIR_PREFIX: &str = "agentos-node-import-cache";
const DEFAULT_NODE_IMPORT_CACHE_MATERIALIZE_TIMEOUT: Duration = Duration::from_secs(30);
const PYODIDE_DIST_DIR: &str = "pyodide-dist";
diff --git a/crates/native-sidecar/src/execution.rs b/crates/native-sidecar/src/execution.rs
index 23254cafd4..29b66772df 100644
--- a/crates/native-sidecar/src/execution.rs
+++ b/crates/native-sidecar/src/execution.rs
@@ -6608,6 +6608,23 @@ where
}
let resolved = resolved;
record_execute_phase("child_process_resolve_execution", phase_start.elapsed());
+ let parent_sync_roots = {
+ let vm = self.vms.get(vm_id).ok_or_else(|| missing_vm_error(vm_id))?;
+ let parent = vm
+ .active_processes
+ .get(process_id)
+ .ok_or_else(|| missing_process_error(vm_id, process_id))?;
+ (parent.host_write_dirty_recursive()
+ || !parent.clean_host_writes_are_observable_recursive())
+ .then(|| (parent.host_cwd.clone(), parent.guest_cwd.clone()))
+ };
+ if let Some((host_cwd, guest_cwd)) = parent_sync_roots {
+ let vm = self
+ .vms
+ .get_mut(vm_id)
+ .ok_or_else(|| missing_vm_error(vm_id))?;
+ sync_process_host_roots_to_kernel(vm, &host_cwd, &guest_cwd)?;
+ }
let (parent_kernel_pid, child_process_id) = {
let vm = self
.vms
@@ -7111,6 +7128,29 @@ where
}
let resolved = resolved;
record_execute_phase("child_process_resolve_execution", phase_start.elapsed());
+ let parent_sync_roots = {
+ let vm = self.vms.get(vm_id).ok_or_else(|| missing_vm_error(vm_id))?;
+ let root = vm
+ .active_processes
+ .get(process_id)
+ .ok_or_else(|| missing_process_error(vm_id, process_id))?;
+ let parent =
+ Self::active_process_by_path(root, current_process_path).ok_or_else(|| {
+ SidecarError::InvalidState(format!(
+ "unknown child process path {current_process_label} during nested spawn"
+ ))
+ })?;
+ (parent.host_write_dirty_recursive()
+ || !parent.clean_host_writes_are_observable_recursive())
+ .then(|| (parent.host_cwd.clone(), parent.guest_cwd.clone()))
+ };
+ if let Some((host_cwd, guest_cwd)) = parent_sync_roots {
+ let vm = self
+ .vms
+ .get_mut(vm_id)
+ .ok_or_else(|| missing_vm_error(vm_id))?;
+ sync_process_host_roots_to_kernel(vm, &host_cwd, &guest_cwd)?;
+ }
let sidecar_requests = self.sidecar_requests.clone();
let vm = self
@@ -9837,6 +9877,14 @@ fn collect_process_host_sync_roots(
fn sync_process_host_writes_to_kernel(
vm: &mut VmState,
process: &ActiveProcess,
+) -> Result<(), SidecarError> {
+ sync_process_host_roots_to_kernel(vm, &process.host_cwd, &process.guest_cwd)
+}
+
+fn sync_process_host_roots_to_kernel(
+ vm: &mut VmState,
+ process_host_cwd: &Path,
+ process_guest_cwd: &str,
) -> Result<(), SidecarError> {
if vm.root_filesystem_mode != RootFilesystemMode::ReadOnly {
let shadow_root = vm.cwd.clone();
@@ -9844,10 +9892,10 @@ fn sync_process_host_writes_to_kernel(
}
if !path_is_within_root(
- &normalize_host_path(&process.host_cwd),
+ &normalize_host_path(process_host_cwd),
&normalize_host_path(&vm.cwd),
) {
- sync_host_directory_tree_to_kernel(vm, &process.host_cwd, &process.guest_cwd)?;
+ sync_host_directory_tree_to_kernel(vm, process_host_cwd, process_guest_cwd)?;
}
Ok(())
diff --git a/crates/native-sidecar/src/plugins/host_dir.rs b/crates/native-sidecar/src/plugins/host_dir.rs
index 434f110831..b19e1c1de9 100644
--- a/crates/native-sidecar/src/plugins/host_dir.rs
+++ b/crates/native-sidecar/src/plugins/host_dir.rs
@@ -1387,7 +1387,7 @@ mod tar_module_reader_tests {
#[test]
fn tar_reader_resolves_packed_node_modules() {
let aospkg = std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
- .join("../../registry/agent/pi/dist/package.aospkg");
+ .join("../../software/pi/dist/package.aospkg");
if !aospkg.is_file() {
eprintln!("skip: pi aospkg not built");
return;
diff --git a/crates/native-sidecar/tests/filesystem.rs b/crates/native-sidecar/tests/filesystem.rs
index 053d53f079..41926db1e1 100644
--- a/crates/native-sidecar/tests/filesystem.rs
+++ b/crates/native-sidecar/tests/filesystem.rs
@@ -432,12 +432,12 @@ mod shadow_root {
.join("../..")
.canonicalize()
.expect("canonicalize repo root");
- let copied = repo_root.join("registry/software/coreutils/wasm");
+ let copied = repo_root.join("software/coreutils/wasm");
if copied.exists() {
return Some(copied.to_string_lossy().into_owned());
}
- let fallback = repo_root.join("registry/native/target/wasm32-wasip1/release/commands");
+ let fallback = repo_root.join("toolchain/target/wasm32-wasip1/release/commands");
if fallback.exists() {
return Some(fallback.to_string_lossy().into_owned());
}
diff --git a/crates/native-sidecar/tests/posix_path_repro.rs b/crates/native-sidecar/tests/posix_path_repro.rs
index 94163bc9e1..00ae319966 100644
--- a/crates/native-sidecar/tests/posix_path_repro.rs
+++ b/crates/native-sidecar/tests/posix_path_repro.rs
@@ -42,12 +42,12 @@ fn registry_command_root() -> PathBuf {
.join("../..")
.canonicalize()
.expect("canonicalize repo root");
- let copied = repo_root.join("registry/software/coreutils/wasm");
+ let copied = repo_root.join("software/coreutils/wasm");
if copied.exists() {
return copied;
}
- let fallback = repo_root.join("registry/native/target/wasm32-wasip1/release/commands");
+ let fallback = repo_root.join("toolchain/target/wasm32-wasip1/release/commands");
if fallback.exists() {
return fallback;
}
diff --git a/crates/native-sidecar/tests/projection_bench.rs b/crates/native-sidecar/tests/projection_bench.rs
index db6094cda5..1dc4e6b72b 100644
--- a/crates/native-sidecar/tests/projection_bench.rs
+++ b/crates/native-sidecar/tests/projection_bench.rs
@@ -58,9 +58,9 @@
//!
//! Then runs the repo's built registry tars (skipped with a note if a tar is
//! absent, e.g. in a clean checkout that has not built `dist/`):
-//! - coreutils: `registry/software/coreutils/dist/package.tar` (large, many commands)
-//! - tar: `registry/software/tar/dist/package.tar` (single wasm binary)
-//! - git: `registry/software/git/dist/package.tar` (the package
+//! - coreutils: `software/coreutils/dist/package.tar` (large, many commands)
+//! - tar: `software/tar/dist/package.tar` (single wasm binary)
+//! - git: `software/git/dist/package.tar` (the package
//! the marketing install comparison talks about)
//!
//! Override the source tars via env:
@@ -73,9 +73,9 @@
//! ```text
//! cargo test -p agentos-native-sidecar --release --test projection_bench -- --ignored --nocapture
//! # or, pointing at built tars elsewhere:
-//! PROJ_BENCH_COREUTILS_TAR=/abs/registry/software/coreutils/dist/package.tar \
-//! PROJ_BENCH_TAR_TAR=/abs/registry/software/tar/dist/package.tar \
-//! PROJ_BENCH_GIT_TAR=/abs/registry/software/git/dist/package.tar \
+//! PROJ_BENCH_COREUTILS_TAR=/abs/software/coreutils/dist/package.tar \
+//! PROJ_BENCH_TAR_TAR=/abs/software/tar/dist/package.tar \
+//! PROJ_BENCH_GIT_TAR=/abs/software/git/dist/package.tar \
//! cargo test -p agentos-native-sidecar --release --test projection_bench -- --ignored --nocapture
//! ```
@@ -612,15 +612,15 @@ fn projection_bench() {
let coreutils_tar = source_tar_path(
"PROJ_BENCH_COREUTILS_TAR",
- "registry/software/coreutils/dist/package.tar",
+ "software/coreutils/dist/package.tar",
);
let tar_tar = source_tar_path(
"PROJ_BENCH_TAR_TAR",
- "registry/software/tar/dist/package.tar",
+ "software/tar/dist/package.tar",
);
let git_tar = source_tar_path(
"PROJ_BENCH_GIT_TAR",
- "registry/software/git/dist/package.tar",
+ "software/git/dist/package.tar",
);
println!("\n# agentOS package load benchmark (.aospkg)");
@@ -688,7 +688,7 @@ fn projection_bench() {
fn coreutils_load_budget() {
let coreutils_tar = source_tar_path(
"PROJ_BENCH_COREUTILS_TAR",
- "registry/software/coreutils/dist/package.tar",
+ "software/coreutils/dist/package.tar",
);
if !coreutils_tar.is_file() {
eprintln!(
diff --git a/crates/native-sidecar/tests/service.rs b/crates/native-sidecar/tests/service.rs
index cf0c6fbfbf..e1e64befc8 100644
--- a/crates/native-sidecar/tests/service.rs
+++ b/crates/native-sidecar/tests/service.rs
@@ -1346,17 +1346,17 @@ ykAheWCsAteSEWVc0w==\n\
.join("../..")
.canonicalize()
.expect("canonicalize repo root");
- let copied = repo_root.join("registry/software/coreutils/wasm");
+ let copied = repo_root.join("software/coreutils/wasm");
if copied.exists() {
return copied;
}
- let fallback = repo_root.join("registry/native/target/wasm32-wasip1/release/commands");
+ let fallback = repo_root.join("toolchain/target/wasm32-wasip1/release/commands");
if fallback.exists() {
return fallback;
}
- let vendored = repo_root.join("packages/core/commands");
+ let vendored = repo_root.join("packages/runtime-core/commands");
if vendored.exists() {
let staged = temp_dir("agentos-native-sidecar-vendored-commands");
for command in ["bash", "cat", "mkdir", "printf", "sh"] {
@@ -1379,6 +1379,29 @@ ykAheWCsAteSEWVc0w==\n\
return staged;
}
+ let legacy_vendored = repo_root.join("packages/core/commands");
+ if legacy_vendored.exists() {
+ let staged = temp_dir("agentos-native-sidecar-vendored-commands");
+ for command in ["bash", "cat", "mkdir", "printf", "sh"] {
+ let source = legacy_vendored.join(command);
+ let target = staged.join(command);
+ fs::copy(&source, &target).unwrap_or_else(|error| {
+ panic!(
+ "copy vendored command {} -> {}: {error}",
+ source.display(),
+ target.display()
+ )
+ });
+ let mut permissions = fs::metadata(&target)
+ .expect("stat staged vendored command")
+ .permissions();
+ permissions.set_mode(0o755);
+ fs::set_permissions(&target, permissions)
+ .expect("chmod staged vendored command");
+ }
+ return staged;
+ }
+
panic!(
"registry WASM commands are required for service fs regression tests: expected {}, {}, or {}",
copied.display(),
diff --git a/docker/build/darwin.Dockerfile b/docker/build/darwin.Dockerfile
index e2187c7010..ce411b2756 100644
--- a/docker/build/darwin.Dockerfile
+++ b/docker/build/darwin.Dockerfile
@@ -22,7 +22,7 @@ RUN rustup toolchain install stable --profile minimal && \
rustup target add "$TARGET"
RUN corepack enable && \
- pnpm install --no-frozen-lockfile --filter='!@agentos/website'
+ pnpm install --no-frozen-lockfile --filter='!@rivet-dev/agentos-website'
RUN tu=$(echo "$TARGET" | tr 'a-z-' 'A-Z_') && \
tl=$(echo "$TARGET" | tr - _) && \
diff --git a/docs-internal/registry-flatten-colocation-spec.md b/docs-internal/registry-flatten-colocation-spec.md
new file mode 100644
index 0000000000..8d23a89d21
--- /dev/null
+++ b/docs-internal/registry-flatten-colocation-spec.md
@@ -0,0 +1,392 @@
+# Spec: Flatten `registry/` → `software/` + colocated `native/`
+
+Status: proposal · Owner: registry · Last updated: 2026-07-07
+
+## Summary
+
+Eliminate the `registry/` wrapper. The package catalog becomes a top-level
+`software/` directory where **every `@agentos-software/*` package — command
+packages, agent adapters, and bundles — is one flat folder** that owns its
+manifest, TS descriptor, e2e test, **and its own command source** under
+`native/`. Shared WASM build infrastructure that no single package can own
+(patched sysroot, shared runtime-shim crates, build orchestration, libc
+conformance) moves to a top-level **`toolchain/`**.
+
+In the same effort, push the generic package-authoring capabilities that live
+only in this repo's `Makefile`/`justfile` today — **compiling** a command to WASM
+and **testing** it in a VM — into the published `agentos-toolchain` CLI, so the
+`justfile` is left with only repo-specific orchestration.
+
+Result: `registry/` disappears; `software//` is self-describing; the
+misleading "libc tests under registry" problem is gone; and authoring an agentOS
+package is the same flow for us and for external users.
+
+## Motivation
+
+Today `registry/` mixes three unlike things: package manifests (`software/`,
+`agent/`), the command **source + WASM toolchain** (`native/`), and libc/sysroot
+**conformance tests** (`native/tests/`). "Registry" reads as "the catalog of
+packages," so a C/Rust cross-compilation toolchain and libc conformance tests
+living under it is misleading. Package source also lives far from the package
+(`software/curl/` has the manifest; `curl.c` is in `registry/native/c/programs/`).
+
+## Target file structure
+
+```
+repo-root/
+├── software/ ← the entire @agentos-software/* catalog (flat, no registry/)
+│ │
+│ ├── curl/ # C-based command package
+│ │ ├── package.json # @agentos-software/curl
+│ │ ├── agentos-package.json # manifest + registry block (title, description, category, kind)
+│ │ ├── src/index.ts # TS descriptor
+│ │ ├── test/curl.test.ts # e2e integration test
+│ │ ├── native/
+│ │ │ └── c/
+│ │ │ ├── curl.c # command implementation
+│ │ │ └── overlay/ # pkg-specific upstream overlay (was c/curl-upstream-overlay/)
+│ │ └── bin/curl # staged build output (gitignored)
+│ │
+│ ├── git/ # Rust-based command package
+│ │ ├── package.json agentos-package.json src/ test/ bin/
+│ │ └── native/crates/
+│ │ ├── cmd-git/ # command crate (was native/crates/commands/git)
+│ │ └── git/ # 1:1 lib crate (was native/crates/libs/git)
+│ │
+│ ├── coreutils/ # multi-command package (sh + ~80 utils)
+│ │ ├── package.json agentos-package.json src/ test/ bin/
+│ │ └── native/crates/
+│ │ ├── sh/ cat/ ls/ cp/ mv/ sort/ … # ~80 command crates
+│ │ └── (du/ expr/ column/ rev/ strings/ — 1:1 libs that belong to coreutils)
+│ │
+│ ├── sqlite3/ duckdb/ wget/ zip/ unzip/ http-get/ # C-based, native/c/.c
+│ ├── grep/ sed/ gawk/ jq/ yq/ fd/ ripgrep/ tree/ file/ tar/ gzip/ diffutils/ findutils/ # Rust, native/crates/
+│ │
+│ ├── claude/ codex/ opencode/ pi/ pi-cli/ # agent adapters — @agentos-software/*, JS only, no native/
+│ │ ├── package.json agentos-package.json (kind: "agent") src/adapter.ts test/
+│ │
+│ ├── vim/ # editor (C in native/c/)
+│ └── browserbase/ build-essential/ common/ everything/ # meta/external — manifest only, no native/
+│
+├── toolchain/ ← shared WASM build infra (NOT a package; nothing here is @agentos-software/*)
+│ ├── Cargo.toml # WASM cargo workspace root — members glob into software/*/native/crates/*
+│ ├── Cargo.lock
+│ ├── rust-toolchain.toml # nightly + wasm32-wasip1 + build-std
+│ ├── Makefile # builds every software/*/native/ against the shared sysroot
+│ ├── crates/ # SHARED rust crates used by ≥2 packages / infra
+│ │ ├── shims/ builtins/ stubs/ wasi-ext/
+│ │ ├── wasi-http/ wasi-pty/ wasi-spawn/
+│ │ └── reqwest-shim/ portable-pty-wasi/ codex-network-proxy{,-wasi}/ codex-otel/ uucore/ ctrlc/ hostname/
+│ ├── sysroot/ # patched wasi-sdk build (was native/c/{include,patches,cmake,scripts} + wasi-sdk)
+│ │ ├── wasi-sdk/ # fetched
+│ │ ├── include/ patches/ cmake/ scripts/
+│ │ └── libs-cache/ # fetched upstream C sources (sqlite, zlib, curl, duckdb)
+│ ├── std-patches/ # rust std patches 0001–0009 (was native/patches/)
+│ ├── scripts/ # patch-std.sh patch-vendor.sh patch-wasi-libc.sh
+│ ├── test-programs/ # C test-program fixtures (tcp_server, udp_echo, signal_handler, http_server, …)
+│ │ # built here; runtime-core integration tests consume the built binaries
+│ ├── conformance/ # libc/os-test/c-parity — tests the sysroot, not a package (was native/tests/)
+│ │ ├── c-parity.test.ts libc-test-conformance.test.ts os-test-conformance.test.ts *-exclusions.json
+│ └── target/ # shared cargo build output (gitignored)
+│
+├── test-harness/ ← private workspace pkg; shared vitest helpers + WASM VM runtime + binary resolution
+│ ├── package.json # @rivet-dev/agentos-test-harness (private, not published)
+│ └── src/{helpers,terminal-harness}.ts
+│
+└── packages/
+ └── runtime-core/
+ └── tests/integration/ # VM integration tests (net, npm-e2e, wasi, signal, cross-runtime)
+```
+
+All native **compilation stays in `toolchain/`** — command source lives with its
+package for editing, but nothing compiles WASM outside the toolchain build. C
+test-program fixtures stay in `toolchain/test-programs/` (not scattered into
+`packages/`) so there is exactly one place that invokes the C compiler + sysroot.
+
+## Boundary rules
+
+1. **`software//` owns**: `package.json`, `agentos-package.json`, `src/`
+ (TS descriptor), `test/` (e2e), `native/` (this package's command source),
+ `bin/` (staged output).
+2. **`toolchain/` owns**: the patched sysroot, shared runtime-shim crates, std
+ patches, build orchestration, and libc/sysroot conformance tests. Nothing in
+ `toolchain/` is an `@agentos-software/*` package.
+3. **Command source colocates; shared infra does not.** A crate used by exactly
+ one package moves into that package; a crate used by ≥2 packages (or that is
+ pure infra) stays in `toolchain/crates/`. This is the honest limit of
+ colocation — see [Shared vs per-package](#shared-vs-per-package-split).
+4. **Agents are packages too.** `claude`/`codex`/`opencode`/`pi`/`pi-cli` live
+ under `software/` because they publish as `@agentos-software/*`. They carry
+ `kind: "agent"` in the manifest and have no `native/`. Command packages carry
+ `kind: "software"` (or omit; default). This `kind` field is what distinguishes
+ them — not folder location.
+5. **`native/` holds the REAL upstream tool, patched — never a reimplementation.**
+ A command package's `native/` must build the genuine upstream program (GNU
+ coreutils, real `curl`/`git`/`jq`, GNU grep/sed/gawk/tar/gzip/diffutils, …)
+ fetched + pinned and patched for WASI — not a from-scratch Rust/C rewrite, a
+ stub, or a hand-rolled CLI over a library. The only exception is a tool whose
+ canonical upstream *is* the Rust project (`ripgrep`, `fd`). Several current
+ commands violate this (coreutils=uutils, grep, curl driver, and the
+ `secureexec-*` rewrites) — tracked in `registry-parity-worklist.md`
+ Cross-cutting #0; new packages must not add more.
+
+## What moves where
+
+| Current | Destination |
+|---|---|
+| `software//` | `software//` |
+| `software//` | `software//` (+ `kind: "agent"`) |
+| `registry/native/crates/commands/` | `software//native/crates/cmd-/` |
+| `registry/native/crates/libs/` (1:1) | `software//native/crates//` |
+| `registry/native/crates/libs/` (shared ≥2) | `toolchain/crates//` |
+| `registry/native/crates/{wasi-ext,libs/{shims,builtins,stubs,wasi-http,wasi-pty,wasi-spawn}}` | `toolchain/crates/` |
+| `registry/native/stubs/*` | `toolchain/crates/` |
+| `registry/native/c/programs/.c` (a package command) | `software//native/c/.c` |
+| `registry/native/c/programs/.c` (tcp_server, udp_echo, signal_handler, …) | `toolchain/test-programs/` (built by toolchain; consumed by runtime-core integration tests via the binary path) |
+| `registry/native/c/{include,patches,cmake,scripts,vim overlay}` + wasi-sdk | `toolchain/sysroot/` |
+| `registry/native/patches/` (std) | `toolchain/std-patches/` |
+| `registry/native/scripts/` | `toolchain/scripts/` |
+| `registry/native/tests/` (conformance) | `toolchain/conformance/` |
+| `registry/native/{Cargo.toml,Cargo.lock,rust-toolchain.toml,Makefile}` | `toolchain/` |
+| `registry/tests/` (empty leftover) | delete |
+
+The command→package owner is derived mechanically from each
+`agentos-package.json` `commands` array — the migration script computes it, no
+hand-mapping.
+
+## Shared vs per-package split
+
+Verified against the current tree:
+
+- **Shared → `toolchain/crates/`** (used by ≥2 commands or pure infra):
+ `shims` (7 users), `builtins` (3), `wasi-http` (4), `wasi-spawn` (2),
+ `stubs`, `wasi-ext`, `wasi-pty`, and all `stubs/*` shim crates
+ (`reqwest-shim`, `portable-pty-wasi`, `codex-network-proxy{,-wasi}`,
+ `codex-otel`, `uucore`, `ctrlc`, `hostname`).
+- **Per-package → `software//native/crates/`** (1:1): `grep`→grep,
+ `awk`→gawk, `jq`→jq, `yq`→yq, `git`→git, `fd`→fd, `tar`→tar, `tree`→tree,
+ `gzip`→gzip, `diff`→diffutils, `find`→findutils, `file-cmd`→file, and
+ `du`/`expr`/`column`/`rev`/`strings-cmd`→coreutils.
+
+## Test execution & harness
+
+The old `agentos-registry` package and its `run-vitest.mjs` shim (which resolved
+vitest out of the outer store) **dissolve**. Replacement:
+
+- A private workspace package **`test-harness/`** (`@rivet-dev/agentos-test-harness`, not
+ published) owns the shared helpers, terminal harness, and `createWasmVmRuntime`
+ — the surface every test imports today from `registry/tests/helpers.ts`.
+- Each `software/` gets a `test` script that runs **`agentos-toolchain test`**
+ (see [Toolchain CLI boundary](#toolchain-cli-vs-justfile-boundary)), which drives
+ the `test/` suite through the harness in a VM — the same runner external authors
+ use. `turbo test` discovers and runs them — this is what re-attaches the suites
+ to CI (fixing the current orphan + `@xterm/headless`-resolution bugs, since every
+ runner is now a workspace member). The `@rivet-dev/agentos-test-harness` package supplies
+ `createWasmVmRuntime` + helpers that both the CLI runner and the raw `*.test.ts`
+ files import.
+- Command binaries are resolved from `toolchain/target` (Rust) and the toolchain
+ C build dir via `AGENTOS_WASM_COMMANDS_DIR` / `AGENTOS_C_WASM_COMMANDS_DIR`,
+ set once in the harness. No relative-path coupling to the build tree.
+- `runtime-core/tests/integration/` and `toolchain/conformance/` import the same
+ `@rivet-dev/agentos-test-harness`.
+
+## Leftover `registry/` files
+
+When `registry/` is deleted, its non-package contents relocate:
+
+| Current | Destination |
+|---|---|
+| `software/package.json` (`agentos-registry`) + `registry/scripts/run-vitest.mjs` | removed — superseded by per-package `test` scripts + `test-harness/` |
+| `registry/tsconfig.base.json` | `software/tsconfig.base.json` (shared by package `tsconfig`s) |
+| `registry/CONTRIBUTING.md`, `registry/README.md` | `software/` (or `docs-internal/`), updated for the new layout |
+
+## Orphan commands (no owning package)
+
+`envsubst` ships a command + a passing test but **no `software/*` package
+declares it**. Before executing, it must get a home — one of: (a) fold into an
+existing package's `commands` (e.g. `coreutils`), (b) create `software/envsubst/`,
+or (c) reclassify its `.c` + test as a `toolchain/test-programs` fixture. Same
+check applies to any other command with a binary/test but no manifest owner —
+the migration script lists them; each needs an explicit decision, none are
+silently dropped.
+
+## Cargo workspace strategy (the critical detail)
+
+There are two Rust workspaces today: the **main** repo workspace (repo-root
+`Cargo.toml`, explicit members, stable toolchain) and the **wasm** workspace
+(`registry/native/Cargo.toml`, nightly + build-std). They must stay separate —
+different toolchains.
+
+After the move, colocated crates live at `software/*/native/crates/*`, which is
+inside the **main** workspace's directory tree. Cargo resolves a crate's
+workspace by walking up to the nearest `[workspace]`, so those crates would be
+captured by the repo-root workspace — wrong toolchain. Fix with two edits:
+
+1. **Repo-root `Cargo.toml`**: add `exclude = ["software"]` so the main
+ workspace never claims package `native/` crates.
+2. **`toolchain/Cargo.toml`**: `[workspace]` with
+ `members = ["crates/*", "../software/*/native/crates/*"]`. Cargo permits
+ members outside the workspace root via relative path; this private,
+ never-published workspace is a valid use of it.
+
+All wasm builds run against the toolchain workspace explicitly
+(`cargo build --manifest-path toolchain/Cargo.toml …`, driven by
+`toolchain/Makefile`). Cargo's shared `target/` lives at `toolchain/target/`.
+
+**Fallback if cross-dir members prove fragile in practice:** colocate only the
+**C sources + tests + manifest**, and keep the **Rust command crates** together
+in `toolchain/crates/commands/`. Less pure, but sidesteps the workspace-spanning
+entirely (C has no cargo-workspace concern). This is the one decision to lock
+before executing — see [Risks](#risks--decision).
+
+## Reference updates (~40 sites, mechanical)
+
+- `software/*/package.json` build scripts:
+ `../../native/target/...` → `../../../toolchain/target/...`
+ (and the C build-output dir similarly).
+- `justfile`: repoint **and rename** every `registry-*` recipe (the `registry`
+ prefix is dead once the folder is gone). Rename by the dir the recipe acts on —
+ `software-*` for package builds, `toolchain-*` for the WASM build/commands:
+
+ | Current recipe | New recipe | Body change |
+ |---|---|---|
+ | `registry-build` | `software-build` | `pnpm --filter '@agentos-software/*' build` (unchanged filter) |
+ | `registry-native` | `toolchain-build` | `make -C registry/native commands` → `make -C toolchain commands` |
+ | `registry-native-cmd ` | `toolchain-cmd ` | `make -C registry/native cmd/` → `make -C toolchain cmd/` |
+ | `registry-native-preflight` | `toolchain-preflight` | `cd registry/native/c` → `cd toolchain/sysroot` |
+ | `registry-copy-commands` | `toolchain-copy-commands` | repoint copy-wasm-commands SRC to `toolchain/target/...` |
+
+ Update any callers of the old recipe names (CI `just` invocations, other
+ recipes, docs) in the same pass. If you prefer a single flat prefix over the
+ dir-aligned split, use `software-*` for all — but `toolchain-*` reads truer for
+ the recipes that build the sysroot/commands rather than the packages.
+- `packages/runtime-core/scripts/copy-wasm-commands.mjs`: SRC path
+ `registry/native/target/...` → `toolchain/target/...`.
+- CI (`ci.yml`, `ci-nightly.yml`, `bench.yml`): `make -C registry/native`,
+ the rust-cache `workspaces:` mapping, and the
+ `hashFiles('registry/native/Cargo.lock')` cache key → `toolchain/`.
+- Repo-root `Cargo.toml`: add `exclude = ["software"]`.
+- `pnpm-workspace.yaml`: `software/*`, `software/*` →
+ `software/*` (single glob covers commands + agents) plus `test-harness`.
+- `toolchain/Makefile`: replace the fixed `c/programs/*.c` source list with a
+ glob over `../software/*/native/c/*.c`, and cargo members over the workspace.
+
+## Toolchain CLI vs justfile boundary
+
+**Principle:** `agentos-toolchain` (the published CLI) owns everything a
+third-party author of *any* `@scope/*` package needs — author → compile → test →
+package → publish. The `justfile` owns only what is specific to building and
+releasing *this* repo's registry. Nothing generic to package authoring should
+live only in our `justfile`/`Makefile`.
+
+Today the CLI stops at packaging (`pack`, `pack-aospkg`, `stage`, `build`,
+`publish`); `stage` consumes an *already-compiled* `--commands-dir`. The two
+hardest capabilities — **compiling** a command to WASM and **testing** it in a VM
+— live only in the repo Makefile/harness, so external authors can't do them.
+This refactor closes that gap.
+
+### New published toolchain verbs
+
+1. **`agentos-toolchain compile []`** — compile the package's
+ `native/` (Rust crate(s) or C source) to a WASM command binary against the
+ **pinned agentOS sysroot**, emitting into the commands dir that `stage`
+ consumes. Wraps sysroot + build-std + wasm-opt. That pipeline is heavy, so the
+ CLI fetches a **pinned toolchain bundle** (the way it already fetches wasi-sdk)
+ or runs a container image; the pin is versioned for reproducible external
+ builds. This is the capability that today only `registry/native/Makefile` has.
+2. **`agentos-toolchain test []`** — boot a throwaway VM, register the
+ package, run its `test/` suite (and/or a command smoke-run) via the public
+ `@rivet-dev/agentos-runtime-core/test-runtime`. This is what our
+ `software//test/` scripts *and* external authors call — one runner.
+3. **`agentos-toolchain validate []`** — lint `agentos-package.json`:
+ declared `commands` map to staged binaries; `registry` block + `category` +
+ `kind` present; limits bounded. Turns our repo-only coverage/layout checks into
+ a per-package check every author gets.
+4. **`agentos-toolchain init []`** — scaffold a package
+ (`agentos-package.json` + `src/index.ts` + `test/`) instead of copying an
+ existing package by hand.
+
+### Shim crates must be publishable
+
+The shared Rust crates in `toolchain/crates/` (`wasi-ext`, `wasi-http`,
+`wasi-spawn`, `builtins`, `shims`) are **path-deps today, unpublished** — so an
+external Rust command cannot build against them. For `compile` to work outside
+this repo, either publish them (crates.io) or have `compile` vendor them. Add
+them to the publish set (`scripts/publish` discovery).
+
+### justfile = thin loop over the CLI
+
+Repo recipes orchestrate; they must not reimplement what the CLI does:
+
+| Recipe | Body |
+|---|---|
+| `software-build` | for each `software/*`: `agentos-toolchain compile && stage && build` |
+| `toolchain-build` | build/pin the shared sysroot bundle the CLI consumes |
+| per-package `test` script + external authors | `agentos-toolchain test` |
+
+**Stays repo-specific** (not CLI, not overfit): `copy-wasm-commands` (vendor into
+runtime-core), `verify-fixed-versions` (the 0.0.1 pin), `generate-secure-exec-mirror`,
+registry-wide release orchestration, cross-repo dispatch, and the status
+reporter / coverage gate scoped to *our* registry.
+
+## Migration phases
+
+1. **Scaffold `toolchain/`** — move `registry/native/{Cargo.*, rust-toolchain,
+ Makefile, patches→std-patches, scripts, tests→conformance}` and the shared
+ crates + sysroot. Repoint the workspace + Makefile + CI + copy-commands, and
+ **rename the `registry-*` justfile recipes** (`software-*` / `toolchain-*` per
+ the table above) plus their callers. Build green with crates still under
+ `toolchain/crates/commands/` (pre-split).
+2. **Flatten catalog + harness** — `git mv software/* software/`,
+ `git mv software/* software/`; create `test-harness/` from the old
+ `registry/tests/helpers.ts`+`terminal-harness.ts`; give each package a `test`
+ script; update `pnpm-workspace.yaml`; add `kind` to agent manifests; relocate
+ leftover `registry/` files; delete empty `registry/`.
+3. **Colocate command source** — move each `cmd-` + its 1:1 lib into
+ `software//native/`; move C command sources into
+ `software//native/c/`; C test-programs stay in `toolchain/test-programs/`;
+ apply the `Cargo.toml` exclude + cross-dir members; resolve orphan commands.
+4. **Add `category`** to every `registry` manifest block (grouping metadata).
+5. **Productize the toolchain** — add `compile` / `test` / `validate` / `init`
+ verbs to `agentos-toolchain`; make the shim crates publishable; rewrite the
+ `software-build` / `toolchain-build` recipes as thin loops over the CLI; point
+ each package `test` script at `agentos-toolchain test`. (Can land incrementally
+ after the move; the move doesn't block it, but the CLI is the long-term home.)
+6. **Enforce** — structural test (below) + coverage gate; delete dead paths.
+
+## Enforcement (`scripts/check-layout.mjs`, CI)
+
+Fail the build if:
+- any `*.test.ts` sits outside an allowed home (`software//test/`,
+ `toolchain/conformance/`, `packages/*/tests/**`);
+- any `software/*` command package lacks `test/` (allowlist meta bundles +
+ external wrappers);
+- `registry/` exists;
+- a crate under `software/*/native/crates/` is claimed by the main workspace
+ (guards the Cargo split).
+
+## Risks & decision
+
+1. **Cargo cross-dir members (biggest).** `toolchain/Cargo.toml` owning
+ `../software/*/native/crates/*` plus repo-root `exclude = ["software"]` is
+ valid but unusual; some tooling assumes members live under the root. Two known
+ facets: `cargo metadata` on cross-dir members, and **rust-analyzer/`rust-toolchain`
+ resolution** — a colocated crate opened directly walks up to the repo-root
+ (stable) toolchain, not `toolchain/`'s nightly, so IDE builds may use the wrong
+ channel unless the harness always drives builds from `toolchain/`. **Decide:
+ full colocation (this spec) vs. the C-only fallback** (Rust crates stay in
+ `toolchain/crates/commands/`). Recommendation: attempt full colocation in a
+ throwaway branch first; fall back if `cargo metadata`/rust-analyzer misbehave.
+2. **Makefile source discovery.** Building must glob C sources and cargo members
+ across `software/*` instead of a fixed list — a one-time Makefile rewrite.
+3. **No build isolation.** Building one package still needs all of `toolchain/`
+ (sysroot + shared crates). Colocation improves navigation, not build scope.
+4. **Shared crates aren't self-contained.** `software/coreutils/native/crates/sh`
+ still depends on `toolchain/crates/builtins`; a package folder is not fully
+ standalone. Accepted, documented in rule #3.
+5. **Sysroot distribution for `agentos-toolchain compile`.** The compile verb
+ needs the patched sysroot + nightly + wasm-opt, which are large and
+ platform-specific. **Decide** how the published CLI ships them: a pinned
+ downloadable bundle (like wasi-sdk) vs. a container image. Until decided,
+ `compile` works in-repo only and external authors still can't build — so this
+ gates the "same flow for external users" goal, not the internal move.
diff --git a/docs-internal/registry-parity-worklist.md b/docs-internal/registry-parity-worklist.md
new file mode 100644
index 0000000000..2455c228b0
--- /dev/null
+++ b/docs-internal/registry-parity-worklist.md
@@ -0,0 +1,298 @@
+# Registry Linux-Parity Worklist
+
+Status: worklist · Owner: registry · Last updated: 2026-07-07
+
+## Goal (hand this to the driver agent)
+
+> Drive every item in this worklist to **clean Linux parity**: each command/
+> behavior must work end-to-end the way it does on real Linux, **proven by real
+> e2e tests** — not by a WASI-specific port, a stub, or a shim that only satisfies
+> the test. Example of the bar: `duckdb` must run real analytical SQL against real
+> file-backed databases and pass real e2e tests — not a stripped "WASI duckdb"
+> that only does `SELECT 1`.
+>
+> **Rules:**
+> - **🚧 REAL TOOL, NOT A REIMPLEMENTATION (the load-bearing rule).** Every command
+> must be the **real upstream tool** (GNU coreutils, GNU grep/sed/gawk, real
+> `curl`, real `git`, real `jq`, GNU tar/gzip/diffutils, …) compiled to
+> `wasm32-wasip1` and **patched as needed** for WASI. Do **NOT** ship a
+> from-scratch Rust/C rewrite, a stub, or a hand-rolled CLI over a library.
+> Reimplementations drift from Linux behavior in a thousand small ways and are
+> exactly why several commands fail parity. Sole exception: when the upstream
+> canonical tool *is itself* the Rust project (**ripgrep**, **fd**) — then the
+> real project is correct. Prefer the genuine upstream tool (real git, real
+> grep) over a rewrite; a *popular, established* reimplementation is an
+> acceptable fallback only when the real tool genuinely won't build.
+> - **"Not possible" is a valid outcome — but only after trying really hard.** If a
+> command cannot be built as the real (or an established) tool for WASI, do NOT
+> hand-roll a custom replacement. Instead mark it **`NOT POSSIBLE (WASI)`** in
+> this doc with a concrete explanation of exactly what blocks it (missing
+> syscall, unsupported threading, sysroot gap, etc.) and what was tried. Exhaust
+> real options first: patch the sysroot, patch the tool, stub the specific
+> missing syscall — a genuine effort, not a quick bail.
+> - **One jj rev per item.** Concretely: **`jj new` before starting each item**,
+> make that command's fix *and* its e2e test in that single change, `jj describe`
+> it with a clear conventional-commit message, then `jj new` again for the next
+> item. One command per rev — never batch two commands (or unrelated changes)
+> into one rev. Verify the folder + branch first (`pwd`, `jj log -r @`) since the
+> working copy is shared.
+> - **Parity, not workarounds.** Fix the real cause (VFS syscall, shell semantics,
+> link conflict, missing feature). If a WASI limitation forces a deviation from
+> Linux, that is a finding to surface — not something to paper over in the test.
+> - **Real tests are the deliverable.** A fix isn't done until an un-skipped e2e
+> test exercises the real behavior in a VM and passes. No `describe.skip`, no
+> assertions weakened to match broken output.
+> - Work top-down by priority. Re-verify with the actual VM run, not just typecheck.
+
+## Priority tiers
+
+- **P0 — runtime/VM correctness**: bugs in the shared runtime that silently
+ corrupt data or break process control. Highest blast radius.
+- **P1 — broken shipped commands**: packages that build but don't work like Linux.
+- **P2 — build/compile failures**: packages that can't be produced at all.
+- **P3 — disabled/absent coverage**: real behavior exists but no real test proves it.
+
+---
+
+## ⚠️ Cross-cutting #0 — Command provenance: replace reimplementations with real tools
+
+**This is the highest-leverage item and reshapes several below.** Audit revealed
+that **most commands are NOT the real Linux tool** — they are custom Rust rewrites
+(`secureexec-*` crates) or `uutils`, plus at least one hand-rolled C CLI (curl).
+Per the load-bearing rule, each must become the **real upstream tool** compiled to
+WASI and patched as needed.
+
+**Rule (your call):** an **established project** — whether it's the real upstream
+tool *or* an established third-party package that does the real work (uutils,
+jaq, etc.) — is **fine**. **Custom code we wrote ourselves** is **not** and must
+be replaced with a real/established implementation. Audit of every command's
+actual backing:
+
+### ✅ Established — keep (real upstream tool or established package doing the work)
+| Command(s) | Backing |
+|---|---|
+| coreutils (`sh`+80) | **uutils** (`uucore`) — established Rust project |
+| ripgrep (`rg`) | real ripgrep |
+| duckdb, vim | real upstream C source, patched for WASI |
+| sqlite3 **engine** | real SQLite amalgamation (⚠️ but the *CLI* is ours — see below) |
+| jq | **jaq** (`jaq-core/std/json`) — established Rust jq |
+| yq | jaq + `serde_yaml`/`toml`/`quick-xml` — established parsers (thin glue is ours) |
+| sed | `sed` crate (published) |
+| gawk (`awk`) | `awk-rs` crate (published) |
+| tar | `tar` crate (established) |
+| gzip | `flate2` (established) |
+| diffutils (`diff`) | `similar` crate (established) |
+| file | `infer` crate (established magic-byte lib; note: not real libmagic `file`) |
+
+### ❌ CUSTOM WE BUILT — flag & replace with a real/established impl
+| Command | Status | What it actually is | Replace with |
+|---|---|---|---|
+| **curl** | TODO | our custom driver over a libcurl fork | real `curl` CLI (upstream `src/tool_*.c`) |
+| **wget** | TODO | our 174-line `wget.c` | real GNU wget, or drop (curl covers it) |
+| **http-get** | TODO | our 95-line `http_get.c` | drop, or a real tool |
+| **git** | TODO | our hand-rolled git from `sha1`+`flate2` | **real git** (upstream C), patched for WASI — **NOT gitoxide** |
+| **fd** | TODO | our `secureexec-fd` on raw `regex` (not sharkdp/fd) | real **fd** (sharkdp) |
+| **findutils** (`find`,`xargs`) | TODO | our hand-rolled on `regex`/shims | real GNU findutils, or `uutils/findutils` |
+| **tree** | TODO | our hand-rolled, zero deps | real `tree`, or an established one |
+| **grep** | TODO | our `secureexec-grep` on raw `regex` (**not** an established grep pkg) | **real GNU grep**, or a popular established grep (ripgrep's `grep` crates) |
+| **zip** | TODO | our 203-line `zip.c` over zlib/minizip (not Info-ZIP) | real Info-ZIP, or an established lib's CLI |
+| **unzip** | TODO | our 669-line `unzip.c` over zlib/minizip | real Info-ZIP unzip |
+| **sqlite3 CLI** | TODO | our 558-line `sqlite3_cli.c` (engine is real SQLite; the shell is ours) | real SQLite `shell.c` (its official CLI) |
+| **vix** | DONE | from-scratch source-less drop-zone binary | deleted; real `vim` covers the editor slot |
+
+Note: `codex`/`codex-exec` = the rivet fork of OpenAI's codex — established fork,
+external build (tracked separately in #9).
+
+**Objective:** replace each ❌ with a real/established implementation built to
+`wasm32-wasip1` and patched only where WASI forces it. The ✅ rows stay.
+
+**Approach:** one command at a time, one jj rev each: swap our custom code for the
+established source (fetched + pinned like sqlite/duckdb), wire into the toolchain,
+patch for WASI, prove parity with real e2e tests.
+
+**Interaction with other items:** subsumes several below — curl (#6) is "build the
+real curl," and the `no-test` packages (#12) that are ❌ here should move to a real
+impl *before* their tests are written, so the tests validate real behavior.
+
+**Decisions (settled):** git → **real git** (not gitoxide). grep → **real GNU
+grep**, or a popular established grep if the real one won't build.
+
+## Status tracking (how the driver reports progress in this doc)
+
+Update this doc as you go — it is the single source of truth for status. For each
+❌ command, set one status and keep it current:
+
+- **`TODO`** — not started.
+- **`IN PROGRESS`** — being built; note the current blocker if any.
+- **`DONE`** — the real/established tool builds and passes a real un-skipped e2e
+ test; link the jj rev.
+- **`NOT POSSIBLE (WASI)`** — only after a genuine effort. Write a concrete
+ explanation: exactly what blocks it, what you tried (sysroot patch, tool patch,
+ syscall stub), and why it can't be made to work. This is a documented dead-end,
+ never a silent fallback to a custom rewrite.
+
+Mark each row's status inline in the table (or as a short line under the command)
+so a reader sees the whole board at a glance.
+
+---
+
+## P0 — Runtime / VM correctness
+
+### 1. brush-shell `>>` append truncates instead of appending — DONE
+- **Broken:** `execSync` with `>>` onto a write-only file overwrites instead of
+ appends. `expected 'changed' to be 'originalchanged'`. (issue: rivet-dev/agentos#1657)
+- **Objective:** `>>` opens `O_WRONLY|O_APPEND` against the kernel VFS and appends,
+ identical to bash on Linux.
+- **Proof:** `bridge-child-process.test.ts` append redirection tests pass
+ un-skipped; direct kernel append and native sidecar append regressions pass.
+- **rev:** `ouxrzutq` — `fix(runtime): honor >> append mode in guest shell VFS redirection`
+
+### 2. brush-shell `cat < file` stdin redirection fails (exit 1) — DONE
+- **Broken:** `cat < stdin-input.txt` exits 1 — input redirection from a VFS path
+ isn't wired to the command's stdin. (issue: #1657)
+- **Objective:** `< file` feeds the VFS file to stdin; command reads it and exits 0,
+ like Linux.
+- **Proof:** the "stdin redirection feeds the kernel VFS file" test passes
+ un-skipped after the parent host-shadow pre-spawn sync fix in item 1.
+- **rev:** `lonnzuqw` — `test(registry): mark stdin redirection parity proven`
+
+### 3. WasmVM signal/dispose — SIGKILL/SIGTERM don't terminate; dispose hangs — DONE
+- **Broken:** SIGKILL/SIGTERM don't kill guest processes; `dispose` times out
+ (5 tests across `signal-forwarding.test.ts`, `dispose-behavior.test.ts`).
+- **Objective:** signals delivered to guest processes terminate them promptly and
+ `dispose` tears down active WasmVM + Node processes, matching Linux signal
+ semantics. **Not yet filed — file a separate issue.**
+- **Proof:** `signal-forwarding.test.ts` passes 5/5 in
+ `2026-07-07T23-11-36-0700-item3-signal-forwarding-final-pass-2.txt`;
+ `dispose-behavior.test.ts` passes 3/3 in
+ `2026-07-07T23-11-21-0700-item3-dispose-behavior-final-pass.txt`.
+- **rev:** `zkywnwup` — `fix(runtime): unblock WasmVM signal waits and dispose`
+
+### 4. VFS missing `pwrite` — sqlite3 file-backed DBs don't persist — DONE
+- **Broken:** `filesystem method pwrite is unavailable` — sqlite3 file-backed DB
+ can't persist across exec calls.
+- **Objective:** the VFS implements positioned writes (`pwrite`/`pwritev`) so any
+ command doing positioned I/O (sqlite3, and others) behaves like Linux.
+- **Proof:** sqlite3 "file-based DB persists across separate exec calls" passes
+ in `2026-07-07T23-18-45-0700-item4-sqlite3-file-db-pwrite-pass.txt`; direct
+ mounted JS VFS `pwrite` test passes in
+ `2026-07-07T23-18-45-0700-item4-runtime-core-custom-vfs-pwrite-pass.txt`.
+ Type/build checks pass in `2026-07-07T23-19-11-0700-item4-runtime-core-build.txt`
+ and `2026-07-07T23-19-11-0700-item4-sqlite3-check-types.txt`.
+- **rev:** `klrzzkro` — `fix(vfs): expose positioned writes in test kernel`
+
+### 5. Socket-layer failures (net-server/udp/unix, signal_handler)
+- **Broken:** in the audit run, `st.create is not a function` + a `LinkError` in
+ net tests; signal_handler didn't catch signals. May be partial-build artifacts.
+- **Objective:** TCP/UDP/Unix socket + signal test programs run to completion in
+ the VM with real socket semantics. **First reconfirm on a full build** — if it
+ reproduces, fix the socket-table wiring / link error.
+- **Proof:** net-server/net-udp/net-unix/signal-handler suites pass on a full build.
+- **rev:** `fix(runtime): repair socket-table wiring for net/signal tests` (only if confirmed)
+
+---
+
+## P1 — Broken shipped commands
+
+### 6. curl — reimplemented CLI, exits 1 on every operation (incl. `--version`)
+- **Broken:** the `curl` command is a **hand-rolled `curl.c` driver** over a
+ libcurl fork, not the real curl command-line tool — so 24/30 `curl.test.ts` fail
+ and every op returns exit 1, even `curl --version`.
+- **Objective (per Cross-cutting #0):** **build the real curl command-line tool**
+ (upstream `src/tool_*.c`) to `wasm32-wasip1` against the patched sysroot,
+ patched only where WASI forces it — replacing the custom driver. All real curl
+ behavior (GET/POST, `-I`/`-D`, `-L`, `-u`, `-F`, `-o`/`-O`, `-w`, `-K`) then
+ works because it *is* curl, not a shim.
+- **Proof:** `software/curl/test/` (the existing 30 tests) pass un-weakened.
+- **rev:** `fix(curl): build the real curl CLI for WASI; drop the custom driver`
+
+### 7. zip / unzip — hostile-archive hardening cases fail (3 each)
+- **Broken:** fallback parser doesn't reject a wrapping local offset, doesn't skip
+ empty-normalized-name entries, doesn't cap hostile uncompressed sizes before
+ allocating.
+- **Objective:** unzip rejects/handles malformed & hostile archives the way a
+ hardened Linux unzip does (bounded allocation, typed errors), and zip↔unzip
+ roundtrips remain correct.
+- **Proof:** `software/zip/test/` + `software/unzip/test/` hardening cases pass.
+- **rev:** `fix(unzip): bound allocation and reject malformed archive entries`
+
+---
+
+## P2 — Build / compile failures
+
+### 8. wget — does not compile (`duplicate symbol: getpeername`)
+- **Broken:** link error — wget's stub `getpeername` collides with the patched
+ sysroot's socket impl.
+- **Objective:** wget compiles cleanly against the patched sysroot (drop the stub;
+ use the real sysroot socket symbols) **and** downloads files e2e like Linux wget.
+- **Proof:** `make -C toolchain cmd/wget` succeeds; `software/wget/test/` passes
+ un-skipped (real download over the runtime network).
+- **rev:** `fix(wget): drop conflicting getpeername stub; build against sysroot sockets`
+
+### 9. codex-cli — not buildable in-checkout (needs external fork)
+- **Broken:** requires the external `codex-rs` fork (`CODEX_REPO` absent); tests
+ `describe.skip`.
+- **Objective:** decide the build story — vendor/pin the fork or document the
+ required checkout — so `codex`/`codex-exec` build reproducibly here, then real
+ e2e tests run (real upstream SDK per CLAUDE.md, not an API stub).
+- **Proof:** codex builds in CI/dev; `software/codex-cli/test/` runs un-skipped.
+- **rev:** `build(codex-cli): make the codex-rs fork build reproducible`
+
+### 10. vix — DONE (deleted)
+- **Resolved:** `vix` was a from-scratch, source-less drop-zone binary — exactly
+ the kind of hand-rolled artifact this repo should not carry. **Removed entirely**
+ (package dir, shell import/dep, `EXTERNAL_COMMANDS` Makefile hack, README rows,
+ website registry entry) in rev
+ `chore(registry): remove vix package; document real-tool (no-reimplementation) principle`.
+ Real `vim` (#11) covers the editor slot. Preserved source (`vix.c`, `BUILD-vix.md`,
+ `vix.wasm`) remains in `~/progress/agent-os/2026-06-28-just-shell-fix/` if ever
+ needed. No further work.
+
+---
+
+## P3 — Disabled / absent coverage (real tests to Linux parity)
+
+For each: replace `describe.skip` with `describeIf(binaryPresent)` **and** write
+real e2e tests that prove Linux-parity behavior — not smoke tests.
+
+### 11. Disabled suites — git, duckdb, wget, codex
+- **Broken:** tests exist but are `describe.skip`, so nothing runs even when the
+ binary is present.
+- **Objective (per command, Linux parity):**
+ - **git** — clone/commit/log/diff/branch against a real repo & remote.
+ - **duckdb** — real analytical SQL, CSV read/write, file-backed DBs (the bar
+ example: real duckdb, not a WASI-stripped `SELECT 1`).
+ - **wget** — real download (after #8).
+ - **codex** — real run (after #9).
+- **Proof:** each un-skipped suite passes with real behavior.
+- **rev:** one per command, e.g. `test(duckdb): real analytical-SQL e2e; un-skip`
+
+### 12. No tests at all — 12 software + 5 agents
+- **Broken:** zero e2e coverage: `gawk, sed, grep, tar, gzip, jq, ripgrep, yq,
+ diffutils, file, http-get, vim`; agents `claude, codex, opencode, pi, pi-cli`.
+- **Objective:** write real e2e tests proving each behaves like its Linux
+ counterpart (jq processes real JSON, sed edits streams, tar round-trips archives,
+ grep/rg search real trees, gzip round-trips, etc.); agents exercise the real ACP
+ adapter against the upstream SDK.
+- **Proof:** `software//test/` exists and passes for each; coverage gate green.
+- **rev:** one per package, e.g. `test(jq): add real JSON-processing e2e`
+
+---
+
+## Cross-cutting / misc
+
+### 13. `everything` meta-package has no `agentos-package.json`
+- **Broken:** parse-failed in the audit — the bundle has no manifest.
+- **Objective:** valid manifest (or confirm the bundle mechanism is intentional and
+ fix discovery accordingly) so `everything` resolves like the other bundles.
+- **Proof:** manifest present/valid; package resolves and installs its members.
+- **rev:** `fix(everything): add valid agentos-package.json`
+
+---
+
+## Sequencing note
+
+P0 first — several P1/P3 items depend on it: curl (#6) needs sockets/HTTP;
+sqlite3 file-DB tests (#11) need pwrite (#4); wget (#8) needs sockets. Fix the
+runtime layer, then the commands that ride on it, then backfill coverage. One jj
+rev per item throughout.
diff --git a/docs-internal/registry-test-standardization.md b/docs-internal/registry-test-standardization.md
new file mode 100644
index 0000000000..e154890e5d
--- /dev/null
+++ b/docs-internal/registry-test-standardization.md
@@ -0,0 +1,16 @@
+# Software test layout
+
+Status: superseded by `docs-internal/registry-flatten-colocation-spec.md`.
+
+The old registry-wide test plan assumed centralized package tests and a native
+build tree under the removed wrapper directory. That layout has been replaced:
+
+- package e2e tests live under `software//test/`;
+- shared VM test helpers live in the private `@rivet-dev/agentos-test-harness` workspace
+ package;
+- libc/sysroot conformance tests live under `toolchain/conformance/`;
+- C VM test fixtures live under `toolchain/test-programs/`;
+- native command source is colocated under `software//native/`, while
+ shared build infrastructure remains under `toolchain/`.
+
+Use `scripts/check-layout.mjs` for the current structural gate.
diff --git a/justfile b/justfile
index 43fcfe55f5..018441781a 100644
--- a/justfile
+++ b/justfile
@@ -8,31 +8,31 @@ release *args:
release-preview REF:
gh workflow run .github/workflows/publish.yaml --ref "{{ REF }}"
-# --- @agentos-software/* registry packages (independent, PER-PACKAGE versions) ---
-registry-native:
- make -C registry/native commands
+# --- @agentos-software/* software packages (independent, PER-PACKAGE versions) ---
+toolchain-build:
+ make -C toolchain commands
-registry-native-cmd name:
- make -C registry/native cmd/{{ name }}
+toolchain-cmd name:
+ make -C toolchain cmd/{{ name }}
# Pre-flight for the publish "WASM Commands" job's fragile state: build the C
# programs against the VANILLA wasi-sdk sysroot exactly like a fresh CI runner
# (a locally-built patched sysroot is moved aside for the run). Catches
# socket/netdb programs missing from PATCHED_PROGRAMS before CI does.
-registry-native-preflight:
+toolchain-preflight:
#!/usr/bin/env bash
set -euo pipefail
- cd registry/native/c
+ cd toolchain/c
if [ -e sysroot ]; then mv sysroot sysroot.preflight-stash; fi
restore() { if [ -e sysroot.preflight-stash ]; then rm -rf sysroot; mv sysroot.preflight-stash sysroot; fi; }
trap restore EXIT
make wasi-sdk
make programs
-registry-copy-commands:
+toolchain-copy-commands:
node packages/runtime-core/scripts/copy-wasm-commands.mjs
-registry-build:
+software-build:
pnpm --filter '@agentos-software/*' build
install-shell:
@@ -54,11 +54,11 @@ shell *args:
# Run the agentos-sdk.dev site (landing + /docs) locally with hot reload
docs:
- pnpm --filter @agentos/website dev
+ pnpm --filter @rivet-dev/agentos-website dev
# Build the agentos-sdk.dev site to website/dist
docs-build:
- pnpm --filter @agentos/website build
+ pnpm --filter @rivet-dev/agentos-website build
test-bounded cmd='pnpm test':
#!/usr/bin/env bash
diff --git a/package.json b/package.json
index 4e38e9c42d..462c51e2df 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
"test:migration-parity": "pnpm --dir packages/core exec vitest run tests/migration-parity.test.ts --reporter=verbose",
"test:post-python-parity": "pnpm --dir packages/core build && pnpm --dir packages/core exec vitest run tests/agentos-base-filesystem.test.ts",
"test:watch": "pnpm exec turbo watch test",
+ "check-layout": "node scripts/check-layout.mjs",
"check-types": "node scripts/verify-check-types.mjs && pnpm exec turbo check-types --concurrency=1",
"lint": "pnpm biome check .",
"fmt": "pnpm biome check --write --diagnostic-level=error .",
@@ -22,14 +23,17 @@
"@biomejs/biome": "^2.3",
"@copilotkit/llmock": "^1.6.0",
"@mariozechner/pi-coding-agent": "^0.60.0",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
"@rivet-dev/agentos-core": "workspace:*",
"@agentos-software/claude-code": "workspace:*",
"@agentos-software/codex": "workspace:*",
"@agentos-software/common": "workspace:*",
+ "@rivet-dev/agentos-vm-test-harness": "workspace:*",
"@rivet-dev/agentos-runtime-core": "workspace:*",
"@agentos-software/pi": "workspace:*",
"@types/node": "^22.19.15",
"jszip": "^3.10.1",
+ "npm": "^11.18.0",
"pdf-lib": "^1.17.1",
"turbo": "^2.5.6",
"typescript": "^5.9.2"
diff --git a/packages/agentos-toolchain/README.md b/packages/agentos-toolchain/README.md
index 72ce0f34ce..64180f005c 100644
--- a/packages/agentos-toolchain/README.md
+++ b/packages/agentos-toolchain/README.md
@@ -13,8 +13,8 @@ npx @rivet-dev/agentos-toolchain pack [options]
packages lives here, next to the things it packages.** secure-exec owns the VM
runtime that *runs* packages — the kernel, the VFS, the `/opt/agentos` mount, the
`$PATH` command resolver, and the header/`binfmt` dispatch — and it owns the
-package **definitions** themselves: the generic registry software (`registry/software/*`)
-and the agent adapters (`registry/agent/*`). This toolchain is what builds those
+package **definitions** themselves: the generic registry software (`software/*`)
+and the agent adapters (`software/*`). This toolchain is what builds those
definitions into the on-disk package format that the runtime resolves. Its
`header.ts` is the same `binfmt` table the sidecar enforces (`crates/sidecar`), so
keeping it in this repo keeps the producer and the consumer of the format in one
diff --git a/packages/browser/tests/browser-wasm/pi-boot.spec.ts b/packages/browser/tests/browser-wasm/pi-boot.spec.ts
index aeb5662d6d..a3e4b1b536 100644
--- a/packages/browser/tests/browser-wasm/pi-boot.spec.ts
+++ b/packages/browser/tests/browser-wasm/pi-boot.spec.ts
@@ -6,7 +6,7 @@ import { expect, test } from "@playwright/test";
// guest in the kernel-backed node-stdlib executor in real Chromium and speaks ACP.
//
// Requires the pi adapter bundle (built by scripts/build-wasm-test-assets when the
-// registry/agent/pi dist + @mariozechner/pi-agent-core are present locally; skipped in
+// software/pi dist + @mariozechner/pi-agent-core are present locally; skipped in
// CI where they are absent). Runs the adapter in the executor's persistent-execution
// mode (ExecOptions.persistent) so its async WHATWG-stream stdin pump can produce the
// reply before the run completes.
@@ -19,7 +19,7 @@ test("the real pi adapter boots in the converged executor and answers ACP initia
const bundlePresent = await page.evaluate(() =>
fetch("/pi-adapter.bundle.cjs").then((r) => r.ok).catch(() => false),
);
- test.skip(!bundlePresent, "pi adapter bundle not built (registry/agent/pi dist absent)");
+ test.skip(!bundlePresent, "pi adapter bundle not built (software/pi dist absent)");
const result = await page.evaluate(() => window.__piBoot!.run());
diff --git a/packages/core/AGENTS.md b/packages/core/AGENTS.md
deleted file mode 120000
index 681311eb9c..0000000000
--- a/packages/core/AGENTS.md
+++ /dev/null
@@ -1 +0,0 @@
-CLAUDE.md
\ No newline at end of file
diff --git a/packages/core/AGENTS.md b/packages/core/AGENTS.md
new file mode 100644
index 0000000000..25e194d226
--- /dev/null
+++ b/packages/core/AGENTS.md
@@ -0,0 +1,172 @@
+# agentOS Core Package
+
+`@rivet-dev/agentos-core` -- contains VM ops, ACP client, session management.
+
+**⚠️ CRITICAL INVARIANT: ALL guest code MUST execute inside the kernel with ZERO host escapes.** The VM is a fully virtualized OS — every file read, network connection, and process spawn goes through the kernel. Guest code must never touch real host APIs. The Node.js execution engine is currently broken (spawns real host `node` processes instead of V8 isolates). See `crates/execution/CLAUDE.md`.
+
+## AgentOs Class
+
+- Wraps the kernel and proxies its API directly.
+- **All public methods must accept and return JSON-serializable data.** No object references (Session, ManagedProcess, ShellHandle) in the public API. Reference resources by ID (session ID, PID, shell ID).
+- Filesystem methods mirror the kernel API 1:1 (readFile, writeFile, mkdir, readdir, stat, exists, move, delete).
+- Command execution mirrors the kernel API (exec, spawn).
+- `fetch(port, request)` reaches services running inside the VM using the kernel network adapter pattern (`proc.network.fetch`).
+- **Cron scheduling stays in the TypeScript layer.** The Rust sidecar has no concept of cron jobs. Cron expression parsing, timer management, overlap policies, and job execution dispatch all live in the TypeScript SDK.
+- Keep cron schedule validation and `nextRun` computation on the shared helpers in `src/cron/parse-schedule.ts`; if `CronManager` and `TimerScheduleDriver` parse or reject schedules differently, `listCronJobs()` can advertise jobs the driver refuses (or immediately fires) and the API becomes self-contradictory.
+- Native sidecar execution requests should stay unresolved on the TypeScript side. Forward `command`, `args`, `cwd`, and VM config through the wire payload, and let Rust own command lookup, guest-path to host-path mapping, shadow materialization, and `AGENT_OS_*` runtime env assembly.
+- Native sidecar `exec()` should keep shell-sensitive commands on the `sh -c` wrapper path so cwd changes, pipelines, and other shell semantics stay truthful, but shell-free simple commands can use the direct spawn fast path regardless of driver. For Wasm commands in `src/sidecar/rpc-client.ts`, direct spawn preserves the real guest exit status for external-command failures like `cat /missing`, while the `sh -c` wrapper can swallow that non-zero status even when stderr is correct.
+- In `src/sidecar/rpc-client.ts`, `&&` command chains must stay on a single guest `sh -c` execution. Splitting them into separate `exec()` calls loses shell state like `cd` and changes where relative redirects write.
+- In `src/sidecar/rpc-client.ts`, shell syntax in `exec()` and shell-mode `spawn()` always routes to guest `sh -c`. The only fast path is the shell-free direct spawn; never parse redirects or any other shell grammar in the bridge.
+- In `src/sidecar/rpc-client.ts`, keep the shell wrapper as `cd ... || exit` followed by the target command and trust the shell process exit code directly. Temp-file or assignment-based `$?` capture on the brush path is brittle: shell redirection can leave the file empty, inject `exit` parse errors into stderr, and silently turn failing guest commands green.
+- In `src/sidecar/rpc-client.ts`, the simple-command parser must preserve backslashes for non-shell-special escapes inside double quotes. Commands like `printf "a\\nb\\n"` rely on the guest command seeing the literal `\n` bytes; only `\"`, `\\`, `\$`, ``\` ``, and line-continuation newlines should collapse on the native-sidecar fast path.
+- In `src/sidecar/rpc-client.ts`, treat bare unquoted `!` as shell syntax, not as a direct-fast-path token. Commands like `test ! -f /tmp/file` rely on guest shell semantics, and bypassing the shell can flip the observed exit code even when the underlying file operation succeeded.
+- If a file must be visible to both `vm.readFile()` and guest shell commands, it cannot live only in a local compat mount. Put it on a real sidecar-visible path or mount, and keep any read-only guarantees enforced below the TypeScript proxy layer.
+- Host tool registration is split across the boundary: TypeScript converts Zod schemas to JSON Schema, generates prompt markdown, validates sidecar tool invocations, and runs the local `execute()` callbacks, while the sidecar owns CLI flag parsing and `agentos` command dispatch via `registerHostCallbacks` / `RegisterHostCallbacks`.
+- Host-tool `inputSchema` conversion in `src/host-tools-zod.ts` is intentionally fail-closed. Support only the Zod subset that round-trips cleanly into the sidecar-facing JSON Schema contract; if a schema would degrade semantics or emit `$ref`/`$defs` (`discriminatedUnion`, `intersection`, `tuple`, `record`, `date`, `bigint`, custom refinements, metadata `id`, etc.), throw `HostToolSchemaConversionError` with the offending field path instead of coercing it to `{ type: "string" }`.
+- The host-tool description limit is a cross-boundary contract: keep the 200-character maximum aligned between `src/host-tools.ts` and Rust `RegisterHostCallbacks` validation in `crates/sidecar/src/tools.rs`, with boundary tests on both sides when changing it.
+- `src/sidecar/rpc-client.ts` is the consolidated home for framed sidecar I/O, compat proxy helpers, and sidecar descriptor serializers. Keep shared/explicit sidecar pool and VM lease bookkeeping in `src/agent-os.ts` rather than reintroducing another sidecar lifecycle layer.
+- In `src/agent-os.ts`, shell teardown is two-phase: public `_shells` entries can disappear immediately on `closeShell()`, but `dispose()` must still await the separate pending shell-exit set before dropping the sidecar event listener, or late shell stdout/exit delivery can race into a closed bridge.
+- The native sidecar framed stdio path now defaults to the BARE payload codec. Keep any JSON payload support behind explicit migration-only opts such as `payloadCodec: "json"`, and remember that BARE structs need every positional field serialized explicitly across the Rust/TypeScript boundary rather than relying on JSON-style `skip_serializing_if` omissions.
+- In `src/sidecar/native-process-client.ts`, treat `child.on("exit")` and `child.on("error")` as the authoritative terminal-disconnect path for framed stdio clients. `stdout` can close before Node fills in `exitCode`/`signalCode`, so reject in-flight RPCs with a typed disconnect immediately and upgrade the stored terminal error once the concrete exit metadata arrives.
+- In the native-sidecar event path, long-lived background loops should call `waitForEvent()` in abortable no-timeout mode instead of parking a multi-hour timeout sentinel. The abort signal is the cancellation mechanism; the timeout itself becomes the regression surface on idle VMs.
+- For native-sidecar BARE ACP session bootstrap payloads, keep `SessionCreatedResponse` aligned with `crates/sidecar/protocol/agentos_native_sidecar_v1.bare`: `sessionId` is the first positional field on the wire, before optional `pid`, `modes`, `configOptions`, `agentCapabilities`, and `agentInfo`. If the TypeScript decoder reads `session_id` last, every `createSession()` response desynchronizes.
+- Public SDK type exports now funnel through `src/types.ts`; keep legacy kernel/runtime implementation helpers behind `src/runtime-compat.ts` and avoid adding new public root exports directly from runtime internals.
+- When adding a new public SDK option/result/helper type under `src/agent-os.ts`, `src/json-rpc.ts`, `src/host-dir-mount.ts`, or other root-facing modules, mirror it through `src/types.ts` and keep `tests/public-api-exports.test.ts` aligned so the package entrypoint stays truthful.
+
+## Agent Sessions (ACP)
+
+- Uses the **Agent Communication Protocol** (ACP) -- JSON-RPC 2.0 over stdio (newline-delimited)
+- No HTTP adapter layer; communicate directly with agent ACP adapters over stdin/stdout
+- Reference `~/sandbox-agent` for ACP integration patterns. Do not copy code from it.
+- ACP docs: https://agentclientprotocol.com/get-started/introduction
+- Session design is **agent-agnostic**: each agent type has a config specifying its ACP adapter package and main agent package name
+- Currently configured agents: PI (`@agentos-software/pi`), PI CLI (`@agentos-software/pi-cli`), OpenCode (`@agentos-software/opencode`), Claude (`@agentos-software/claude-code`), and Codex (`@agentos-software/codex` + `@agentos-software/codex-cli`).
+- **No host agent exceptions.** Host-native wrappers and host binary launch paths are not allowed. OpenCode support must use the real upstream OpenCode implementation rebuilt into the VM adapter package and executed inside the VM.
+- `createSession("pi")` spawns the ACP adapter inside the VM, which calls the Pi SDK directly
+- Agents are resolved BY THE SIDECAR, not the client. There is no `AGENT_CONFIGS` table; `AgentType` is just `string` (a manifest `name`, defined in `types.ts`). The client is npm-agnostic and parses NO manifests: `createSession(name)`/`resumeSession(name)` send only `agentType` on the wire (there is no `adapterEntrypoint` field), and the SIDECAR resolves the entrypoint/env/launchArgs from the projected `/opt/agentos//current/agentos-package.json`. `listAgents()` is a sidecar ACP RPC (`AcpListAgentsRequest`) — the sidecar enumerates the projected `/opt/agentos` packages. Adding/changing an agent = changing its package manifest (in the secure-exec registry), not this file; verify launch args/env with the mock-adapter session tests. The Rust client (`crates/client`) behaves IDENTICALLY (also sends only `agentType`) — see the root `CLAUDE.md` client-parity/npm-agnostic rule.
+- In `createSession()`, treat `skipOsInstructions` as "skip the base `/etc/agentos/instructions.md` text" only. Still call agent `prepareInstructions(...)` when session-level `additionalInstructions` or tool-reference content exists, and forward `skipBase` through the options object instead of blanking out the caller's extra instructions.
+- ACP agents that issue live `session/request_permission` calls during `session/prompt` cannot rely on queued session events alone. Route those permission round-trips through the sidecar callback channel (`SidecarRequestPayload`) so the host can answer them before the prompt request completes.
+- Native-sidecar inbound ACP host callbacks are explicit sidecar-request payloads now. If Rust forwards an unknown ACP JSON-RPC request, answer it through `SidecarRequestPayload.type === "acp_request"` with an `acp_request_result` JSON-RPC response; otherwise the sidecar will only synthesize `-32601` after the callback transport is unavailable or times out.
+- Host ACP callbacks in `src/agent-os.ts` are no longer a generic `-32601` stub: keep the dispatcher aligned with both the newer `fs/read` / `fs/write` / `fs/readDir` / `terminal/*` method names and the legacy aliases still exercised by native-sidecar tests such as `fs/read_text_file` and `fs/write_text_file`.
+- On the native sidecar path, a top-level `session/cancel` request does not preempt an already running top-level `session/prompt` dispatch. If prompt callers must observe cancellation immediately, resolve the pending prompt request locally in `src/agent-os.ts` while still forwarding the real cancel RPC for eventual adapter/process cleanup.
+- Native-sidecar ACP request timeouts should surface as JSON-RPC errors with `error.data.kind === "acp_timeout"` rather than string-only transport errors. Use `isAcpTimeoutErrorData()` from `src/json-rpc.ts` instead of parsing timeout messages.
+
+### Agent Adapter Approaches
+
+Each agent type can have two adapter approaches:
+- **SDK adapter** (default) -- Embeds the agent SDK directly via library import (`createAgentSession()`). Lower memory footprint (~100MB less for Pi). Binary: `pi-sdk-acp`. Package: `@agentos-software/pi`. Agent ID: `pi`.
+- **CLI adapter** -- Spawns the full agent CLI as a headless subprocess via its ACP adapter (`pi-acp` spawns `pi --mode rpc`). Higher memory overhead but provides full CLI feature set. Binary: `pi-acp`. Package: `@agentos-software/pi-cli`. Agent ID: `pi-cli`.
+
+### Agent Configs
+
+An agent's launch config lives entirely in its `/opt/agentos` package `agentos-package.json` manifest (`agent.acpEntrypoint`/`launchArgs`/`env`). Resolution is SIDECAR-SIDE: the client sends only the agent `name` (the `createSession(name)` id), and the sidecar reads the projected `/opt/agentos//current/agentos-package.json` to resolve the entrypoint (`/opt/agentos/bin/`), the manifest `env` (applied as defaults; caller env wins), and `launchArgs` (prepended before caller args), then spawns. The client parses no manifests and holds no per-agent config. There is no second hardcoded config surface to keep in sync — a default shell/env tweak is a manifest change.
+
+## Testing
+
+- **Framework**: vitest
+- **Prefer scoped tests while iterating.**
+ - `pnpm --dir packages/core exec vitest run tests/path/to/file.test.ts` or `pnpm --dir packages/core exec vitest run -t "test name pattern"`
+ - Repo-root `pnpm test` is the RC sweep and exits cleanly; it is still too broad for normal iteration.
+ - `pnpm --dir packages/core test` intentionally uses Vitest's `verbose` reporter because `tests/wasm-commands.test.ts` and similar long-running VM suites otherwise sit silent for minutes and get misread as hangs during `US-088` sweeps.
+ - Use low timeouts for test commands (60000ms max).
+- The vitest setup file at `tests/helpers/default-vm-permissions.ts` patches `AgentOs.create()` and disposes every cached shared sidecar via `__disposeAllSharedSidecarsForTesting()` in `afterAll`. Workers can hang on exit if the shared sidecar's piped stdio handles stay open, so any new test entrypoints that bypass this setup file must dispose their sidecars themselves.
+- `NativeSidecarProcessClient.dispose()` enforces a graceful exit window then `SIGKILL`s the child if it ignores stdin EOF; `tests/native-sidecar-process.test.ts` covers the regression so future changes cannot reintroduce an unbounded teardown wait.
+- In `packages/core` tests that capture `spawn()` stdout/stderr via callbacks and then call `waitProcess(pid)`, drain one macrotask (`await new Promise((resolve) => setTimeout(resolve, 0))`) before asserting on the buffered strings. Native-sidecar `process_output` events can arrive one turn after the exit notification, and tiny outputs like `curl -s` bodies are the first thing to get lost if you snapshot immediately.
+- `NativeSidecarProcessClient.waitForEvent(...)` supports indexed `SidecarEventSelector` objects; prefer selectors over ad hoc lambdas on shared sidecar clients so buffered events stay O(1) to retrieve and `ownership` can pin a wait to one VM/session.
+- The native sidecar client's unmatched event buffer is intentionally bounded and fail-closed. If a test or runtime path can leave `runEventPump` idle while output events stream, expect `SidecarEventBufferOverflow` rather than unbounded buffering, and set a larger `eventBufferCapacity` explicitly only for cases that truly need it.
+- When Node/Vitest code needs to shell out to Cargo, resolve it through `src/sidecar/cargo.ts` instead of assuming a login shell already put `~/.cargo/bin` on `PATH`.
+- For `tests/wasm-commands.test.ts`, broad `-t "grep"` or `-t "sed"` filters can pull in unrelated `rg`, `gzip`, or cross-package pipeline coverage via substring matches. When a story only gates the `grep`/`sed` blocks, use the explicit case names or a narrower `--testNamePattern` that only matches those block entries.
+- For `tests/wasm-commands.test.ts` and similar long-running VM truth suites, prefer one shared VM per `describe(...)` block over one VM per individual test unless the case truly needs pristine bootstrap state. Per-test VM boots push the file into multi-minute runtimes and make the RC sweep look hung even when it is still progressing.
+- Cross-workspace software package suites import `@rivet-dev/agentos-core` from `packages/core/dist`, not directly from `src/`. After changing exported test-runtime code such as `src/runtime-compat.ts`, rebuild `packages/core` before trusting software/package Vitest results.
+- The `examples/quickstart` package also resolves `@rivet-dev/agentos-core` from `packages/core/dist`; after TypeScript changes in `packages/core/src`, rebuild `packages/core` before rerunning quickstart acceptance commands.
+- The synthetic `openShell()` fallback in `src/sidecar/rpc-client.ts` needs PTY-style output semantics for xterm-based harnesses: normalize terminal-visible line endings to `\r\n`, and route command stderr through the main `onData` stream instead of treating it like a separate non-PTY stderr channel.
+- **Always verify related tests pass before considering work done.**
+- **All tests run inside the VM** -- network servers, file I/O, agent processes.
+- For `vm.exec()` cwd/path tests, prefer setting up files from inside the guest shell when the assertion is about command resolution or relative paths. VM filesystem API writes becoming visible to host-backed runtimes is a separate shadow-sync surface and should be tested independently.
+- For active agent-session/bash-tool filesystem regressions, cover the host read path in `tests/filesystem.test.ts` with a Claude llmock prompt. Long-lived session processes keep writing into the sidecar shadow root after a tool call returns, so `vm.readFile()`/`vm.stat()` need shadow reconciliation before the session itself exits.
+- Session tests that need launch argv or OS-instruction assertions should inspect `getSessionAgentInfo(sessionId)` from sidecar state instead of spying on `kernel.spawn`; `createSession()` now launches through sidecar RPCs.
+- `closeSession()` is intentionally fire-and-forget. Cleanup tests can await the internal `_sessionClosePromises` map when they need deterministic post-close assertions, but active-prompt cancellation cases should trigger the public close and then assert on resource release plus prompt error outcome separately, because the in-flight ACP request and the close request share the same sidecar connection.
+- If you add or change a fire-and-forget session close path in `src/agent-os.ts`, attach a local `.catch(() => {})` to the dropped promise. The real close result is still exposed through `_sessionClosePromises`, and dropping the promise entirely turns shared-runtime close races into unhandled rejection noise in Vitest.
+- Pi CLI session state currently reports the shared V8 host PID when multiple ACP sessions share one JavaScript runtime child. In cleanup tests, treat only host PIDs that are unique to a session as dedicated session roots; a shared PID is runtime-wide context, not three distinct leaked processes.
+- For projected npm CLIs in package tests, prefer `node /root/node_modules//dist/.js` over `/root/node_modules/.bin/*`. pnpm's generated `.bin` wrappers embed host filesystem paths, which are not stable or guest-visible inside the VM.
+- Browserbase VM tests should read credentials from host env as `BROWSER_BASE_API_KEY` / `BROWSER_BASE_PROJECT_ID`, alias them to `BROWSERBASE_API_KEY` / `BROWSERBASE_PROJECT_ID` in the guest env, and keep VM `network` permissions narrowed to `dns://*.browserbase.com` plus `tcp://*.browserbase.com:*` so remote Browserbase sessions work while direct guest egress stays denied.
+- For Browserbase e2e flows inside the VM, prefer a small guest `fetch()` helper that creates/releases the Browserbase session plus `node /root/node_modules/@browserbasehq/browse-cli/dist/index.js --ws ...` over the browse daemon session socket path. The direct `--ws` mode avoids a guest-local Unix-socket control hop and keeps the test focused on Browserbase API plus CDP connectivity.
+- For `tests/wasm-commands.test.ts` curl coverage, prefer a guest `net.createServer()` HTTP fixture over guest `http.createServer()` when the story is about the curl/WASM client path. The HTTP-server transport wrapper is a separate compatibility surface and can hide or conflate curl regressions.
+- Layer lifecycle regressions should be covered in both `tests/layers.test.ts` for in-memory snapshot reuse/composition semantics and `crates/sidecar/tests/layer_management.rs` for VM-scoped layer RPC isolation; the package-level suite alone does not prove per-VM ownership boundaries.
+- For guest-JavaScript startup diagnostics, isolate each suspect import or constructor in its own fresh VM. Once a V8-side probe wedges or times out, later `node` spawns in the same VM can degrade into generic broken-pipe noise instead of the original failure.
+- Agent tests must be run sequentially in layers:
+ 1. PI headless mode (spawn pi directly, verify output)
+ 2. pi-acp manual spawn (JSON-RPC over stdio)
+ 3. Full `createSession()` API
+- **API tokens**: All tests use `@copilotkit/llmock` with `ANTHROPIC_API_KEY='mock-key'`. No real API tokens needed. Do not load tokens from `~/misc/env.txt` or any external file.
+- **Mock LLM testing**: Use `@copilotkit/llmock` to run a mock LLM server on the HOST (not inside the VM). Use `loopbackExemptPorts` in `AgentOs.create()` to exempt the mock port from SSRF checks. The kernel needs `permissions: allowAll` for network access.
+- Compat-kernel loopback exemptions are sticky VM config. When `src/runtime-compat.ts` reconfigures a VM later to mount command directories, resend `loopbackExemptPorts` on every `configureVm()` call and seed the same port list into create-VM metadata so guest networking sees it before and after reconfiguration.
+- Compat-kernel `createKernel()` bootstraps sidecar VMs under a temporary internal `allowAll` only when the caller provided explicit permissions, then reapplies the requested policy in `configureVm()` after local mounts and `/bin/*` command stubs are in place. Skipping that handoff makes default-deny VMs block their own runtime/bootstrap writes before the guest policy ever takes effect.
+- In `src/runtime-compat.ts`, `rootView.exists("/bin/")` can return `true` from the kernel command registry before the sidecar shadow root has a real stub file. If a host-backed runtime needs the command visible on disk, materialize the stub unconditionally instead of skipping on `exists()`.
+- In `src/runtime-compat.ts`, custom `createKernel({ filesystem })` snapshots need to be replayed through guest filesystem calls after `createVm()` when permissions allow it. Loading the root snapshot into the kernel alone is not enough for shell-launched WASM commands, because they read the sidecar shadow root and will miss pre-seeded files like `/hello.txt` unless those entries are mirrored there too.
+- In `src/runtime-compat.ts`, `createWasmVmRuntime({ commandDirs })` is a stateful command-dir descriptor, not just a static command list: keep symlink-to-WASM alias discovery, basename-based `tryResolve()` for late-added binaries, and the descriptor’s internal command-path/module-cache bookkeeping aligned with the kernel mount path or the registry dynamic-module truth tests will drift out of sync.
+- In `src/runtime-compat.ts`, `NativeKernel.processes` is not automatically shared with the native-sidecar proxy map. When `spawn()` wraps `proxy.spawn(...)`, mirror the proxy snapshot into `kernel.processes` immediately and after `wait()` so software integration tests that read `kernel.processes.get(pid)` see the same root-process status transitions as the public compat kernel.
+- Declarative sidecar permission rules must use explicit `["*"]` wildcards for rule `operations` and `paths`/`patterns`; empty arrays are rejected by the native sidecar instead of being treated as implicit wildcards.
+- **Pi SDK llmock setup**: Pi reads Anthropic endpoints from `~/.pi/agent/models.json`, not `ANTHROPIC_BASE_URL`. For `createSession("pi")` tests, write a provider override such as `{ "providers": { "anthropic": { "baseUrl": "", "apiKey": "mock-key" } } }` inside the VM before creating the session.
+- Pi headless llmock tests should still pass `ANTHROPIC_BASE_URL` through the session env even with the `~/.pi/agent/models.json` override, because some Pi SDK request paths still consult the env-configured base URL during ACP-driven tool turns.
+- `packages/core` agent-session tests execute secure-exec registry agent workspaces through their built `dist`/bin artifacts. After changing an adapter under `../secure-exec/software/*/src`, rebuild that workspace before trusting the core Vitest result.
+- Keep Claude's default `CLAUDE_CODE_NODE_SHELL_WRAPPER` enabled (`"1"`) in both `src/agents.ts` and `../secure-exec/software/claude/src/index.ts`. Forcing it to `"0"` breaks real Bash-tool execution under llmock-backed sessions: shell redirections can still create empty files, but the command output/tool result never lands, which regresses `tests/claude-session.test.ts` and filesystem visibility checks.
+- Registry/kernel suites that import `@rivet-dev/agentos-core/test/runtime` read `packages/core/dist/test/runtime.js`, not the TypeScript sources directly. After changing `src/runtime-compat.ts`, `src/sidecar/rpc-client.ts`, or other runtime-test surfaces, run `pnpm --dir packages/core build` before rerunning those registry Vitest files or they will keep exercising stale code.
+- **Module access**: Pass `mounts: [nodeModulesMount("/node_modules")]` to `AgentOs.create()` to expose a host `node_modules` tree at `/root/node_modules`. The VM module resolver reads the mounted tree through the kernel VFS (no host-direct reads, no `moduleAccessCwd`). pnpm puts devDeps in `packages/core/node_modules/`, so tests use `nodeModulesMount(join(resolve(import.meta.dirname, ".."), "node_modules"))`. Software-package agents (`software: [pi]`) mount their own `/root/node_modules/` roots and do not need this mount.
+- Quickstarts and integration tests that run full-tier registry commands (for example `@agentos-software/git`) should set both an explicit `/root/node_modules` mount (via `nodeModulesMount(...)`) and explicit `permissions` on `AgentOs.create()`. There is no `process.cwd()` default anymore: supply the exact `node_modules` tree (a flat install, not a pnpm workspace root whose symlinks escape the mount), and remember that omitting permissions defaults the native sidecar to deny-all.
+- S3-backed core tests can use `tests/helpers/mock-s3.ts` as the explicit local harness instead of Docker/MinIO; when the endpoint resolves to `127.0.0.1` or `localhost`, set `AGENT_OS_ALLOW_LOCAL_S3_ENDPOINTS=1` before creating the VM so the sidecar accepts the local test endpoint.
+- Sandbox toolkit quickstarts/tests that depend on external Docker should use an explicit `SKIP_DOCKER=1` gate instead of `skipIf`, and the truthful host-tool path is to read `AGENTOS_TOOLS_PORT` inside the VM and `POST` `{ toolkit, tool, input }` to `http://127.0.0.1:$AGENTOS_TOOLS_PORT/call` from a guest Node script.
+- Shared Vitest helpers under `src/test/` should register optional capability coverage conditionally in code instead of with `describe.skipIf` / `test.skipIf`; `US-088` treats those markers as product-debt skips even when they only guard backend capability differences.
+- Pi bash-tool E2E coverage depends on registry WASM commands being built locally. Gate those tests with `tests/helpers/registry-commands.ts` `hasRegistryCommands` and include the `@agentos-software/common` software package only when the command artifacts exist.
+- Software package tests for C-built commands such as `duckdb` and `http_get` should go through `tests/helpers/registry-commands.ts`: prefer copied `../secure-exec/software/*/wasm` artifacts, fall back to `../secure-exec/toolchain/c/build` when available, and let the helper build missing C-source artifacts on demand before declaring the command unavailable. When bootstrapping from secure-exec `toolchain/c`, build `make sysroot` first and then run a second `make` for the concrete `build/...` targets so `SYSROOT` resolves to the patched tree instead of the vanilla SDK sysroot chosen at parse time; in that second pass, treat `sysroot/lib/wasm32-wasi/libc.a` as already built so `make` does not loop back through the patch pipeline because of preserved sysroot timestamps.
+- `tests/claude-session.test.ts` is the Claude SDK truth suite. It runs the real `@anthropic-ai/claude-agent-sdk` session path through llmock and covers PATH-backed `xu`, text-only replies, nested `node` `execSync` and `spawn`, metadata, lifecycle, and mode updates. Run it with `pnpm --dir packages/core exec vitest run tests/claude-session.test.ts --reporter=verbose` when verifying Claude regressions.
+- **Kernel permissions are declarative pass-through config.** `AgentOsOptions.permissions` should stay JSON-serializable and be forwarded to the native sidecar without host-side probing or callback evaluation; Rust owns glob matching and policy decisions.
+- ACP session events are live-only over `onSessionEvent()`. Do not reintroduce sequence numbers, local replay buffers, or event cursor recovery.
+- ACP initialize intent belongs in `AgentOs.createSession()`: when the caller's ACP `protocolVersion` or `clientCapabilities` change, pass them through `src/sidecar/native-process-client.ts` instead of re-hardcoding initialize defaults in the Rust sidecar.
+- **Sidecar permission path patterns preserve `*` vs `**`.** Use single-segment globs such as `/workspace/*` only for direct children; use `/workspace/**` when the VM should reach nested paths through the native sidecar permission policy.
+- **Native-sidecar socket/process inspection is explicit now.** If a `Kernel` or `NativeSidecarProcessClient` caller needs `findListener()`, `findBoundUdp()`, or `getProcessSnapshot()`, grant `network.inspect` and/or `process.inspect` in the forwarded permissions; broad `network.listen` or `childProcess` access is not enough on its own.
+- **Host tool invocation is its own permission surface.** Guest `agentos-*`/tools-RPC calls must grant `permissions.binding` with `invoke` rules that match `:` patterns; if the same test/example also boots guest command software, keep `fs` and `childProcess` permissions explicit because command execution still needs those guest-visible capabilities.
+- `packages/core` Vitest now patches `AgentOs.create()` in `tests/helpers/default-vm-permissions.ts` to inject explicit allow-all permissions only when a suite omits them. Permission-focused tests must still pass their own `permissions` object so they exercise the real default-deny path instead of the generic test harness default.
+
+### Test Structure
+
+See `.agent/specs/test-structure.md` for the full restructuring plan. Target layout:
+
+- `unit/` -- no VM, no sidecar; pure logic (host-tools Zod conversion, descriptors, cron manager, etc.)
+- `filesystem/` -- VFS CRUD, overlay, mount, layers, host-dir
+- Shared filesystem conformance coverage in `src/test/file-system.ts` is fail-closed: backend-specific deviations must be modeled as explicit `capabilities` flags on the test descriptor, never with permissive `try/catch` branches that treat any thrown error as success.
+- `process/` -- execution, signals, process tree, flat API wrappers
+- `session/` -- ACP lifecycle, events, capabilities, MCP, cancellation
+- `agents/{pi,claude,opencode,codex}/` -- per-agent adapter tests
+- `wasm/` -- WASM command and permission tier tests
+- `network/` -- connectivity and fetch behavior inside the VM
+- `tests/migration-parity.test.ts` is the dedicated Rust/native migration gate. Keep it on the default `AgentOs.create()` sidecar path and make it cover filesystem, process, layer snapshot, tool dispatch, networking, and at least one real agent prompt/session flow together; the canonical invocation is `pnpm test:migration-parity` from the repo root.
+- Host tool command-path coverage belongs with VM-backed sidecar tests such as `tests/sidecar-tool-dispatch.test.ts`, not a standalone TypeScript RPC server suite.
+- Shell-backed host-tool dispatch coverage in `tests/sidecar-tool-dispatch.test.ts` needs the `@agentos-software/common` software package in the test VM so `/bin/sh` exists; otherwise the suite only proves direct spawn/RPC dispatch and misses the guest-shell path.
+- `sidecar/` -- sidecar client, native process
+- `cron/` -- cron integration
+
+### WASM Binaries and Quickstart Examples
+
+- **WASM command binaries are not checked into git.** The `../secure-exec/software/*/wasm/` directories are build artifacts.
+- **Quickstart examples that use `exec()` or shell commands require WASM binaries.** Without them, these fail with "No shell available."
+- **To build WASM binaries locally:** Run `make` in `../secure-exec/toolchain/`, then `make copy-wasm` and `make build` in `../secure-exec/registry/`. Requires Rust nightly + wasi-sdk.
+- **Examples that work without WASM binaries:** `hello-world.ts`, `filesystem.ts`, `cron.ts` (schedule/cancel only).
+- **When testing quickstart examples**, don't treat WASM-dependent failures as regressions unless the WASM binaries are present.
+
+### Known VM Limitations
+
+- `globalThis.fetch` is hardened (non-writable) in the VM -- can't be mocked in-process
+- Kernel child_process.spawn can't resolve bare commands from PATH (e.g., `pi`). Use `PI_ACP_PI_COMMAND` env var to point to the `.js` entry directly.
+- `allProcesses()` / `processTree()` on the native sidecar path should be derived from the VM's active-process snapshot rather than host `ps` output. Preserve the public `spawn()` PID for root processes by remapping the sidecar's kernel PID back through the root `process_id`, so nested guest `child_process.spawn()` children remain visible under the user-facing parent PID.
+- Module resolution reads the mounted `/root/node_modules` through the kernel VFS. Host-side adapter/agent package.json reads (for bin resolution) still use `readFileSync` against the host dir behind the `/root/node_modules` mount (or the matching software root)
+- Native ELF binaries cannot execute in the VM -- the kernel's command resolver only handles `.js`/`.mjs`/`.cjs` scripts and WASM commands.
+- Projected native assets under `/root/node_modules` are readable through module access, but guest `child_process.spawn*()` still routes them through the VM command resolver; spawning a projected ELF currently fails during WASM warmup instead of executing host-native code.
+- The native sidecar framed stdio client is bidirectional: host-originated `request`/`response` frames use positive `request_id` values, and sidecar-originated `sidecar_request`/`sidecar_response` frames use negative IDs. When adding host callbacks, register a sidecar request handler instead of assuming stdout only carries events plus responses.
+
+### Debugging Policy
+
+- **Never guess without concrete logs.** Every assertion about what's happening at runtime must be backed by log output. Add logs at every decision point and trace the full execution path before drawing conclusions. Never assume something is a timeout issue unless there are logs proving the system was actively busy for the entire duration.
+- **Never use CJS transpilation as a workaround** for ESM module loading issues. Fix root causes in the ESM resolver, the `/root/node_modules` mount / kernel VFS, or V8 runtime.
+- **Diagnosing stalls / backpressure / silent hangs:** secure-exec runs a central limit registry (`secure_exec_bridge::queue_tracker`) over the chain of bounded queues (V8→host event channel, per-session frame channel, sidecar stdout/stdin frame queues). A full queue applies backpressure (it blocks the producer), so a "hung" session is often a slow/stuck *consumer* upstream, not a deadlock. The registry emits a structured `WARN` ("bounded limit near capacity…") as any limit crosses ~80%, and resource/heap/CPU breaches surface as typed errors naming the limit. Set `SECURE_EXEC_LOG=warn` (the default) to see near-limit warnings, or `SECURE_EXEC_LOG=debug` for per-limit usage snapshots; secure-exec logs to **stderr** (stdout is the wire protocol). See the **Limits & Observability** architecture doc (`website/src/content/docs/docs/architecture/limits-and-observability.mdx`).
+- **Maintain a friction log** at `.agent/notes/vm-friction.md` for anything that behaves differently from a standard POSIX/Node.js system.
diff --git a/packages/core/CLAUDE.md b/packages/core/CLAUDE.md
index 6baeb27ee8..25e194d226 100644
--- a/packages/core/CLAUDE.md
+++ b/packages/core/CLAUDE.md
@@ -77,7 +77,7 @@ An agent's launch config lives entirely in its `/opt/agentos` package `agentos-p
- When Node/Vitest code needs to shell out to Cargo, resolve it through `src/sidecar/cargo.ts` instead of assuming a login shell already put `~/.cargo/bin` on `PATH`.
- For `tests/wasm-commands.test.ts`, broad `-t "grep"` or `-t "sed"` filters can pull in unrelated `rg`, `gzip`, or cross-package pipeline coverage via substring matches. When a story only gates the `grep`/`sed` blocks, use the explicit case names or a narrower `--testNamePattern` that only matches those block entries.
- For `tests/wasm-commands.test.ts` and similar long-running VM truth suites, prefer one shared VM per `describe(...)` block over one VM per individual test unless the case truly needs pristine bootstrap state. Per-test VM boots push the file into multi-minute runtimes and make the RC sweep look hung even when it is still progressing.
-- Cross-workspace suites in `../secure-exec/registry/tests/*` import `@rivet-dev/agentos-core` from `packages/core/dist`, not directly from `src/`. After changing exported test-runtime code such as `src/runtime-compat.ts`, rebuild `packages/core` before trusting registry/package Vitest results.
+- Cross-workspace software package suites import `@rivet-dev/agentos-core` from `packages/core/dist`, not directly from `src/`. After changing exported test-runtime code such as `src/runtime-compat.ts`, rebuild `packages/core` before trusting software/package Vitest results.
- The `examples/quickstart` package also resolves `@rivet-dev/agentos-core` from `packages/core/dist`; after TypeScript changes in `packages/core/src`, rebuild `packages/core` before rerunning quickstart acceptance commands.
- The synthetic `openShell()` fallback in `src/sidecar/rpc-client.ts` needs PTY-style output semantics for xterm-based harnesses: normalize terminal-visible line endings to `\r\n`, and route command stderr through the main `onData` stream instead of treating it like a separate non-PTY stderr channel.
- **Always verify related tests pass before considering work done.**
@@ -105,12 +105,12 @@ An agent's launch config lives entirely in its `/opt/agentos` package `agentos-p
- In `src/runtime-compat.ts`, `rootView.exists("/bin/")` can return `true` from the kernel command registry before the sidecar shadow root has a real stub file. If a host-backed runtime needs the command visible on disk, materialize the stub unconditionally instead of skipping on `exists()`.
- In `src/runtime-compat.ts`, custom `createKernel({ filesystem })` snapshots need to be replayed through guest filesystem calls after `createVm()` when permissions allow it. Loading the root snapshot into the kernel alone is not enough for shell-launched WASM commands, because they read the sidecar shadow root and will miss pre-seeded files like `/hello.txt` unless those entries are mirrored there too.
- In `src/runtime-compat.ts`, `createWasmVmRuntime({ commandDirs })` is a stateful command-dir descriptor, not just a static command list: keep symlink-to-WASM alias discovery, basename-based `tryResolve()` for late-added binaries, and the descriptor’s internal command-path/module-cache bookkeeping aligned with the kernel mount path or the registry dynamic-module truth tests will drift out of sync.
-- In `src/runtime-compat.ts`, `NativeKernel.processes` is not automatically shared with the native-sidecar proxy map. When `spawn()` wraps `proxy.spawn(...)`, mirror the proxy snapshot into `kernel.processes` immediately and after `wait()` so registry integration tests that read `kernel.processes.get(pid)` see the same root-process status transitions as the public compat kernel.
+- In `src/runtime-compat.ts`, `NativeKernel.processes` is not automatically shared with the native-sidecar proxy map. When `spawn()` wraps `proxy.spawn(...)`, mirror the proxy snapshot into `kernel.processes` immediately and after `wait()` so software integration tests that read `kernel.processes.get(pid)` see the same root-process status transitions as the public compat kernel.
- Declarative sidecar permission rules must use explicit `["*"]` wildcards for rule `operations` and `paths`/`patterns`; empty arrays are rejected by the native sidecar instead of being treated as implicit wildcards.
- **Pi SDK llmock setup**: Pi reads Anthropic endpoints from `~/.pi/agent/models.json`, not `ANTHROPIC_BASE_URL`. For `createSession("pi")` tests, write a provider override such as `{ "providers": { "anthropic": { "baseUrl": "", "apiKey": "mock-key" } } }` inside the VM before creating the session.
- Pi headless llmock tests should still pass `ANTHROPIC_BASE_URL` through the session env even with the `~/.pi/agent/models.json` override, because some Pi SDK request paths still consult the env-configured base URL during ACP-driven tool turns.
-- `packages/core` agent-session tests execute secure-exec registry agent workspaces through their built `dist`/bin artifacts. After changing an adapter under `../secure-exec/registry/agent/*/src`, rebuild that workspace before trusting the core Vitest result.
-- Keep Claude's default `CLAUDE_CODE_NODE_SHELL_WRAPPER` enabled (`"1"`) in both `src/agents.ts` and `../secure-exec/registry/agent/claude/src/index.ts`. Forcing it to `"0"` breaks real Bash-tool execution under llmock-backed sessions: shell redirections can still create empty files, but the command output/tool result never lands, which regresses `tests/claude-session.test.ts` and filesystem visibility checks.
+- `packages/core` agent-session tests execute secure-exec registry agent workspaces through their built `dist`/bin artifacts. After changing an adapter under `../secure-exec/software/*/src`, rebuild that workspace before trusting the core Vitest result.
+- Keep Claude's default `CLAUDE_CODE_NODE_SHELL_WRAPPER` enabled (`"1"`) in both `src/agents.ts` and `../secure-exec/software/claude/src/index.ts`. Forcing it to `"0"` breaks real Bash-tool execution under llmock-backed sessions: shell redirections can still create empty files, but the command output/tool result never lands, which regresses `tests/claude-session.test.ts` and filesystem visibility checks.
- Registry/kernel suites that import `@rivet-dev/agentos-core/test/runtime` read `packages/core/dist/test/runtime.js`, not the TypeScript sources directly. After changing `src/runtime-compat.ts`, `src/sidecar/rpc-client.ts`, or other runtime-test surfaces, run `pnpm --dir packages/core build` before rerunning those registry Vitest files or they will keep exercising stale code.
- **Module access**: Pass `mounts: [nodeModulesMount("/node_modules")]` to `AgentOs.create()` to expose a host `node_modules` tree at `/root/node_modules`. The VM module resolver reads the mounted tree through the kernel VFS (no host-direct reads, no `moduleAccessCwd`). pnpm puts devDeps in `packages/core/node_modules/`, so tests use `nodeModulesMount(join(resolve(import.meta.dirname, ".."), "node_modules"))`. Software-package agents (`software: [pi]`) mount their own `/root/node_modules/` roots and do not need this mount.
- Quickstarts and integration tests that run full-tier registry commands (for example `@agentos-software/git`) should set both an explicit `/root/node_modules` mount (via `nodeModulesMount(...)`) and explicit `permissions` on `AgentOs.create()`. There is no `process.cwd()` default anymore: supply the exact `node_modules` tree (a flat install, not a pnpm workspace root whose symlinks escape the mount), and remember that omitting permissions defaults the native sidecar to deny-all.
@@ -118,7 +118,7 @@ An agent's launch config lives entirely in its `/opt/agentos` package `agentos-p
- Sandbox toolkit quickstarts/tests that depend on external Docker should use an explicit `SKIP_DOCKER=1` gate instead of `skipIf`, and the truthful host-tool path is to read `AGENTOS_TOOLS_PORT` inside the VM and `POST` `{ toolkit, tool, input }` to `http://127.0.0.1:$AGENTOS_TOOLS_PORT/call` from a guest Node script.
- Shared Vitest helpers under `src/test/` should register optional capability coverage conditionally in code instead of with `describe.skipIf` / `test.skipIf`; `US-088` treats those markers as product-debt skips even when they only guard backend capability differences.
- Pi bash-tool E2E coverage depends on registry WASM commands being built locally. Gate those tests with `tests/helpers/registry-commands.ts` `hasRegistryCommands` and include the `@agentos-software/common` software package only when the command artifacts exist.
-- Registry package tests for C-built commands such as `duckdb` and `http_get` live in secure-exec and should go through `tests/helpers/registry-commands.ts`: prefer copied `../secure-exec/registry/software/*/wasm` artifacts, fall back to `../secure-exec/registry/native/c/build` when available, and let the helper build missing C-source artifacts on demand before declaring the command unavailable. When bootstrapping from secure-exec `registry/native/c`, build `make sysroot` first and then run a second `make` for the concrete `build/...` targets so `SYSROOT` resolves to the patched tree instead of the vanilla SDK sysroot chosen at parse time; in that second pass, treat `sysroot/lib/wasm32-wasi/libc.a` as already built so `make` does not loop back through the patch pipeline because of preserved sysroot timestamps.
+- Software package tests for C-built commands such as `duckdb` and `http_get` should go through `tests/helpers/registry-commands.ts`: prefer copied `../secure-exec/software/*/wasm` artifacts, fall back to `../secure-exec/toolchain/c/build` when available, and let the helper build missing C-source artifacts on demand before declaring the command unavailable. When bootstrapping from secure-exec `toolchain/c`, build `make sysroot` first and then run a second `make` for the concrete `build/...` targets so `SYSROOT` resolves to the patched tree instead of the vanilla SDK sysroot chosen at parse time; in that second pass, treat `sysroot/lib/wasm32-wasi/libc.a` as already built so `make` does not loop back through the patch pipeline because of preserved sysroot timestamps.
- `tests/claude-session.test.ts` is the Claude SDK truth suite. It runs the real `@anthropic-ai/claude-agent-sdk` session path through llmock and covers PATH-backed `xu`, text-only replies, nested `node` `execSync` and `spawn`, metadata, lifecycle, and mode updates. Run it with `pnpm --dir packages/core exec vitest run tests/claude-session.test.ts --reporter=verbose` when verifying Claude regressions.
- **Kernel permissions are declarative pass-through config.** `AgentOsOptions.permissions` should stay JSON-serializable and be forwarded to the native sidecar without host-side probing or callback evaluation; Rust owns glob matching and policy decisions.
- ACP session events are live-only over `onSessionEvent()`. Do not reintroduce sequence numbers, local replay buffers, or event cursor recovery.
@@ -148,9 +148,9 @@ See `.agent/specs/test-structure.md` for the full restructuring plan. Target lay
### WASM Binaries and Quickstart Examples
-- **WASM command binaries are not checked into git.** The `../secure-exec/registry/software/*/wasm/` directories are build artifacts.
+- **WASM command binaries are not checked into git.** The `../secure-exec/software/*/wasm/` directories are build artifacts.
- **Quickstart examples that use `exec()` or shell commands require WASM binaries.** Without them, these fail with "No shell available."
-- **To build WASM binaries locally:** Run `make` in `../secure-exec/registry/native/`, then `make copy-wasm` and `make build` in `../secure-exec/registry/`. Requires Rust nightly + wasi-sdk.
+- **To build WASM binaries locally:** Run `make` in `../secure-exec/toolchain/`, then `make copy-wasm` and `make build` in `../secure-exec/registry/`. Requires Rust nightly + wasi-sdk.
- **Examples that work without WASM binaries:** `hello-world.ts`, `filesystem.ts`, `cron.ts` (schedule/cancel only).
- **When testing quickstart examples**, don't treat WASM-dependent failures as regressions unless the WASM binaries are present.
diff --git a/packages/core/pnpm-lock.yaml b/packages/core/pnpm-lock.yaml
index 180929df41..0574c96e97 100644
--- a/packages/core/pnpm-lock.yaml
+++ b/packages/core/pnpm-lock.yaml
@@ -55,68 +55,68 @@ importers:
specifier: ^0.60.0
version: 0.60.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6)
'@agentos-software/claude-code':
- specifier: link:../../../secure-exec/registry/agent/claude
- version: link:../../../secure-exec/registry/agent/claude
+ specifier: link:../../../secure-exec/software/claude
+ version: link:../../../secure-exec/software/claude
'@secure-exec/codex':
- specifier: link:../../registry/software/codex
- version: link:../../registry/software/codex
+ specifier: link:../../software/codex
+ version: link:../../software/codex
'@agentos-software/codex':
- specifier: link:../../../secure-exec/registry/agent/codex
- version: link:../../../secure-exec/registry/agent/codex
+ specifier: link:../../../secure-exec/software/codex
+ version: link:../../../secure-exec/software/codex
'@rivet-dev/agentos-runtime-coreutils':
- specifier: link:../../registry/software/coreutils
- version: link:../../registry/software/coreutils
+ specifier: link:../../software/coreutils
+ version: link:../../software/coreutils
'@secure-exec/curl':
- specifier: link:../../registry/software/curl
- version: link:../../registry/software/curl
+ specifier: link:../../software/curl
+ version: link:../../software/curl
'@secure-exec/diffutils':
- specifier: link:../../registry/software/diffutils
- version: link:../../registry/software/diffutils
+ specifier: link:../../software/diffutils
+ version: link:../../software/diffutils
'@secure-exec/fd':
- specifier: link:../../registry/software/fd
- version: link:../../registry/software/fd
+ specifier: link:../../software/fd
+ version: link:../../software/fd
'@secure-exec/file':
- specifier: link:../../registry/software/file
- version: link:../../registry/software/file
+ specifier: link:../../software/file
+ version: link:../../software/file
'@secure-exec/findutils':
- specifier: link:../../registry/software/findutils
- version: link:../../registry/software/findutils
+ specifier: link:../../software/findutils
+ version: link:../../software/findutils
'@secure-exec/gawk':
- specifier: link:../../registry/software/gawk
- version: link:../../registry/software/gawk
+ specifier: link:../../software/gawk
+ version: link:../../software/gawk
'@secure-exec/grep':
- specifier: link:../../registry/software/grep
- version: link:../../registry/software/grep
+ specifier: link:../../software/grep
+ version: link:../../software/grep
'@secure-exec/gzip':
- specifier: link:../../registry/software/gzip
- version: link:../../registry/software/gzip
+ specifier: link:../../software/gzip
+ version: link:../../software/gzip
'@secure-exec/jq':
- specifier: link:../../registry/software/jq
- version: link:../../registry/software/jq
+ specifier: link:../../software/jq
+ version: link:../../software/jq
'@agentos-software/opencode':
- specifier: link:../../../secure-exec/registry/agent/opencode
- version: link:../../../secure-exec/registry/agent/opencode
+ specifier: link:../../../secure-exec/software/opencode
+ version: link:../../../secure-exec/software/opencode
'@agentos-software/pi':
- specifier: link:../../../secure-exec/registry/agent/pi
- version: link:../../../secure-exec/registry/agent/pi
+ specifier: link:../../../secure-exec/software/pi
+ version: link:../../../secure-exec/software/pi
'@agentos-software/pi-cli':
- specifier: link:../../../secure-exec/registry/agent/pi-cli
- version: link:../../../secure-exec/registry/agent/pi-cli
+ specifier: link:../../../secure-exec/software/pi-cli
+ version: link:../../../secure-exec/software/pi-cli
'@secure-exec/ripgrep':
- specifier: link:../../registry/software/ripgrep
- version: link:../../registry/software/ripgrep
+ specifier: link:../../software/ripgrep
+ version: link:../../software/ripgrep
'@secure-exec/sed':
- specifier: link:../../registry/software/sed
- version: link:../../registry/software/sed
+ specifier: link:../../software/sed
+ version: link:../../software/sed
'@secure-exec/tar':
- specifier: link:../../registry/software/tar
- version: link:../../registry/software/tar
+ specifier: link:../../software/tar
+ version: link:../../software/tar
'@secure-exec/tree':
- specifier: link:../../registry/software/tree
- version: link:../../registry/software/tree
+ specifier: link:../../software/tree
+ version: link:../../software/tree
'@secure-exec/yq':
- specifier: link:../../registry/software/yq
- version: link:../../registry/software/yq
+ specifier: link:../../software/yq
+ version: link:../../software/yq
'@types/node':
specifier: ^22.10.2
version: 22.19.17
diff --git a/packages/core/tests/brush-interactive.test.ts b/packages/core/tests/brush-interactive.test.ts
index 4329e833cd..647c117e17 100644
--- a/packages/core/tests/brush-interactive.test.ts
+++ b/packages/core/tests/brush-interactive.test.ts
@@ -35,8 +35,8 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
const REPO_ROOT = resolve(__dirname, "../../..");
const SIDECAR_BINARY = resolve(REPO_ROOT, "target/debug/agentos-sidecar");
const REGISTRY_SH_CANDIDATES = [
- "../secure-exec/registry/native/target/wasm32-wasip1/release/commands/sh",
- "../secure-exec-provides/registry/native/target/wasm32-wasip1/release/commands/sh",
+ "../secure-exec/toolchain/target/wasm32-wasip1/release/commands/sh",
+ "../secure-exec-provides/toolchain/target/wasm32-wasip1/release/commands/sh",
].map((candidate) => resolve(REPO_ROOT, candidate));
const REGISTRY_SH = REGISTRY_SH_CANDIDATES.find((candidate) =>
existsSync(candidate),
@@ -73,7 +73,7 @@ async function waitFor(term: Terminal, text: string, timeoutMs = 20000): Promise
}
// Requires the `sh` wasm command built locally (`make` in the secure-exec
-// sibling's registry/native). CI consumes published @agentos-software packages
+// sibling's toolchain). CI consumes published @agentos-software packages
// and does not build wasm commands, so skip when the artifact is absent rather
// than failing the suite.
describe.skipIf(REGISTRY_SH === undefined)("brush interactive PTY repaint", () => {
diff --git a/packages/core/tests/fs-native-parity.test.ts b/packages/core/tests/fs-native-parity.test.ts
index b6473d3a17..4088e8223f 100644
--- a/packages/core/tests/fs-native-parity.test.ts
+++ b/packages/core/tests/fs-native-parity.test.ts
@@ -17,7 +17,7 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
const REPO_ROOT = resolve(__dirname, "../../..");
const SECURE_EXEC_C_ROOT = resolve(
REPO_ROOT,
- "registry/native/c",
+ "toolchain/c",
);
const WASM_PROBE_BINARY = resolve(SECURE_EXEC_C_ROOT, "build/fs_probe");
const NATIVE_PROBE_BINARY = resolve(
diff --git a/packages/core/tests/helpers/fixture-node-modules.ts b/packages/core/tests/helpers/fixture-node-modules.ts
index 406ecdaa8a..094914e966 100644
--- a/packages/core/tests/helpers/fixture-node-modules.ts
+++ b/packages/core/tests/helpers/fixture-node-modules.ts
@@ -93,7 +93,7 @@ function stripEscapingSymlinks(root: string): string[] {
// A hoisted deploy has no `.pnpm` store-escape symlinks, so an
// escaping link here is a workspace `link:` dep pnpm didn't copy
// — e.g. an agent package that now lives in the sibling
- // secure-exec repo (registry/agent/*). Materialize a dereferenced
+ // secure-exec repo (software/*). Materialize a dereferenced
// copy so it's still present in the flat tree the VM mounts; a
// published install would have it as a real dir. Dangling or
// non-package escapes are dropped as before.
diff --git a/packages/core/tests/helpers/registry-commands.ts b/packages/core/tests/helpers/registry-commands.ts
index b2cc4e8da6..1d2dfdeb67 100644
--- a/packages/core/tests/helpers/registry-commands.ts
+++ b/packages/core/tests/helpers/registry-commands.ts
@@ -54,9 +54,9 @@ export interface RegistryPackageRef {
const BUILD_INSTRUCTIONS =
"Build the registry:\n" +
- " just registry-native # native wasm binaries, once per checkout (slow)\n" +
- " just registry-build # stage bin/ + pack every dist/package.aospkg\n" +
- "See registry/README.md.";
+ " just toolchain-build # native wasm binaries, once per checkout (slow)\n" +
+ " just software-build # stage bin/ + pack every dist/package.aospkg\n" +
+ "See software/README.md.";
/** `.aospkg` container magic (crates/vfs/package-format/v1.bare). */
const AOSPKG_MAGIC = Buffer.from([0x89, 0x41, 0x4f, 0x53]);
@@ -131,7 +131,7 @@ function builtState(pkg: RegistryPackageRef): {
}
/**
- * Assert a registry package is built (a real packed `.aospkg`, with a
+ * Assert a software package is built (a real packed `.aospkg`, with a
* non-empty, fully-present command set when the staged transition dir is
* available to inspect) and return it. Throws with build instructions
* otherwise.
@@ -143,17 +143,17 @@ export function requireBuilt(
const { built, bin, missing } = builtState(pkg);
if (!built) {
throw new Error(
- `registry package ${name} is NOT BUILT (no valid ${pkg.packagePath}).\n${BUILD_INSTRUCTIONS}`,
+ `software package ${name} is NOT BUILT (no valid ${pkg.packagePath}).\n${BUILD_INSTRUCTIONS}`,
);
}
if (bin !== null && Object.keys(bin).length === 0) {
throw new Error(
- `registry package ${name} is an EMPTY placeholder (no commands staged into bin/).\n${BUILD_INSTRUCTIONS}`,
+ `software package ${name} is an EMPTY placeholder (no commands staged into bin/).\n${BUILD_INSTRUCTIONS}`,
);
}
if (missing.length > 0) {
throw new Error(
- `registry package ${name} is missing built commands: ${missing.join(", ")}.\n${BUILD_INSTRUCTIONS}`,
+ `software package ${name} is missing built commands: ${missing.join(", ")}.\n${BUILD_INSTRUCTIONS}`,
);
}
return pkg;
@@ -162,7 +162,7 @@ export function requireBuilt(
/**
* Skip reason for the C-sysroot package set ONLY (duckdb, http-get, sqlite3,
* wget, zip, unzip). These need the patched wasi C sysroot
- * (`make -C registry/native/c`), which most checkouts don't build — a missing
+ * (`make -C toolchain/c`), which most checkouts don't build — a missing
* artifact is an environment limitation, not a forgotten build, so suites may
* skip with this reason instead of throwing.
*/
@@ -179,8 +179,8 @@ export function cSysrootPackageSkipReason(
});
if (unbuilt.length === 0) return false;
return (
- `C-sysroot registry packages not built: ${unbuilt.map(({ name }) => name).join(", ")} ` +
- "(needs the patched wasi C sysroot: `make -C registry/native/c`, then `just registry-build`)"
+ `C-sysroot software packages not built: ${unbuilt.map(({ name }) => name).join(", ")} ` +
+ "(needs the patched wasi C sysroot: `make -C toolchain/c`, then `just software-build`)"
);
}
@@ -205,7 +205,7 @@ export function packageCommandsDir(pkg: RegistryPackageRef): string {
const dir = manifestDir(pkg);
if (!dir) {
throw new Error(
- `registry package has no staged transition dir next to ${pkg.packagePath}.\n${BUILD_INSTRUCTIONS}`,
+ `software package has no staged transition dir next to ${pkg.packagePath}.\n${BUILD_INSTRUCTIONS}`,
);
}
return join(dir, "bin");
@@ -257,12 +257,12 @@ export const REGISTRY_SOFTWARE = (
export function testOnlyCommandSoftware(
commands: string[] = ["xu"],
): RegistryPackageRef {
- // registry/software//dist/package.aospkg -> registry/native/... — this
+ // software//dist/package.aospkg -> toolchain/... — this
// follows whichever registry checkout the deps are linked to.
const nativeCommandsDir = join(
dirname(coreutils.packagePath),
- "../../..",
- "native/target/wasm32-wasip1/release/commands",
+ "../../../..",
+ "toolchain/target/wasm32-wasip1/release/commands",
);
const dir = join(tmpdir(), `agentos-test-cmds-${process.pid}`);
const binDir = join(dir, "bin");
diff --git a/packages/core/tests/opencode-session.test.ts b/packages/core/tests/opencode-session.test.ts
index 89084aedd8..62424a3f0d 100644
--- a/packages/core/tests/opencode-session.test.ts
+++ b/packages/core/tests/opencode-session.test.ts
@@ -27,11 +27,11 @@ const MODULE_ACCESS_CWD = resolve(import.meta.dirname, "..");
const REGISTRY_COMMAND_DIR_CANDIDATES = [
resolve(
import.meta.dirname,
- "../../../registry/native/target/wasm32-wasip1/release/commands",
+ "../../../toolchain/target/wasm32-wasip1/release/commands",
),
resolve(
import.meta.dirname,
- "../../../../secure-exec/registry/native/target/wasm32-wasip1/release/commands",
+ "../../../../secure-exec/toolchain/target/wasm32-wasip1/release/commands",
),
];
diff --git a/packages/core/tests/pty-line-discipline.test.ts b/packages/core/tests/pty-line-discipline.test.ts
index 3f481fcdd0..ec01bf0a82 100644
--- a/packages/core/tests/pty-line-discipline.test.ts
+++ b/packages/core/tests/pty-line-discipline.test.ts
@@ -62,7 +62,7 @@ const NODE_PROBE_GUEST_PATH = "/pty_probe.mjs";
const WASI_SDK = resolve(
REPO_ROOT,
- "registry/native/c/vendor/wasi-sdk",
+ "toolchain/c/vendor/wasi-sdk",
);
const SIDECAR_BINARY = resolve(REPO_ROOT, "target/debug/agentos-sidecar");
diff --git a/packages/core/tests/pty-protocol.test.ts b/packages/core/tests/pty-protocol.test.ts
index 7a62712fa9..43bff98f96 100644
--- a/packages/core/tests/pty-protocol.test.ts
+++ b/packages/core/tests/pty-protocol.test.ts
@@ -17,7 +17,7 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
const REPO_ROOT = resolve(__dirname, "../../..");
const SECURE_EXEC_C_ROOT = resolve(
REPO_ROOT,
- "registry/native/c",
+ "toolchain/c",
);
const SIDECAR_BINARY = resolve(REPO_ROOT, "target/debug/agentos-sidecar");
const PTY_PROBE_COMMAND_DIR = resolve(SECURE_EXEC_C_ROOT, "build");
diff --git a/packages/core/tests/vim-interactive.test.ts b/packages/core/tests/vim-interactive.test.ts
index edb48d8b1e..f6b6a91b8f 100644
--- a/packages/core/tests/vim-interactive.test.ts
+++ b/packages/core/tests/vim-interactive.test.ts
@@ -26,7 +26,7 @@ const REPO_ROOT = resolve(__dirname, "../../..");
// one-off fixture builds.
const VIM_PACKAGE_DIR = resolve(
REPO_ROOT,
- "../secure-exec/registry/software/vim/dist/package",
+ "../secure-exec/software/vim/dist/package",
);
const VIM_COMMAND_DIR =
process.env.AGENTOS_VIM_FIXTURE_DIR ?? resolve(VIM_PACKAGE_DIR, "bin");
diff --git a/packages/core/tests/vim-native-parity.test.ts b/packages/core/tests/vim-native-parity.test.ts
index 4fcdbe1b6a..a3b91147e9 100644
--- a/packages/core/tests/vim-native-parity.test.ts
+++ b/packages/core/tests/vim-native-parity.test.ts
@@ -10,7 +10,7 @@ const HERE = dirname(fileURLToPath(import.meta.url));
const REPO_ROOT = resolve(HERE, "../../..");
const VIM_PACKAGE_BIN = resolve(
REPO_ROOT,
- "../secure-exec/registry/software/vim/dist/package/bin/vim",
+ "../secure-exec/software/vim/dist/package/bin/vim",
);
const NATIVE_VIM = "/usr/bin/vim";
const REF_SCRIPT = join(HERE, "helpers", "native-vim-ref.py");
diff --git a/packages/core/tests/vim-provides.test.ts b/packages/core/tests/vim-provides.test.ts
index 1aa5879abb..835daa5a6e 100644
--- a/packages/core/tests/vim-provides.test.ts
+++ b/packages/core/tests/vim-provides.test.ts
@@ -27,7 +27,7 @@ const REPO_ROOT = resolve(__dirname, "../../..");
// one-off fixture builds.
const VIM_PACKAGE_DIR = resolve(
REPO_ROOT,
- "../secure-exec/registry/software/vim/dist/package",
+ "../secure-exec/software/vim/dist/package",
);
const VIM_COMMAND_DIR =
process.env.AGENTOS_VIM_FIXTURE_DIR ?? resolve(VIM_PACKAGE_DIR, "bin");
diff --git a/packages/core/tests/vim-render.test.ts b/packages/core/tests/vim-render.test.ts
index c1dcd65885..10a89edd70 100644
--- a/packages/core/tests/vim-render.test.ts
+++ b/packages/core/tests/vim-render.test.ts
@@ -20,7 +20,7 @@ const { Terminal } = xterm;
const REPO_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "../../..");
const VIM_PACKAGE_BIN = resolve(
REPO_ROOT,
- "../secure-exec/registry/software/vim/dist/package/bin/vim",
+ "../secure-exec/software/vim/dist/package/bin/vim",
);
const VIM_BINARY = process.env.AGENTOS_VIM_FIXTURE_BIN ?? VIM_PACKAGE_BIN;
diff --git a/packages/core/vitest.config.ts b/packages/core/vitest.config.ts
index 6e13417ef3..0016766828 100644
--- a/packages/core/vitest.config.ts
+++ b/packages/core/vitest.config.ts
@@ -50,7 +50,7 @@ const KNOWN_FAILING_E2E_FILES = [
"tests/pi-acp-adapter.test.ts",
"tests/process-lifecycle.test.ts",
// Registry-artifact / shell-behavior failures (red in both CI and local):
- // - duckdb-package: imports secure-exec registry/software/duckdb/dist (unbuilt WASM in CI).
+ // - duckdb-package: imports secure-exec software/duckdb/dist (unbuilt WASM in CI).
// - shell-flat-api: openShell/writeShell/onShellData yields empty output.
"tests/duckdb-package.test.ts",
"tests/shell-flat-api.test.ts",
diff --git a/packages/playground/agentos-worker.js b/packages/playground/agentos-worker.js
index 9b0222587c..22decceabd 100644
--- a/packages/playground/agentos-worker.js
+++ b/packages/playground/agentos-worker.js
@@ -9392,7 +9392,7 @@ if (module.exports && module.exports.default == null) module.exports.default = m
},
// Toggle terminal raw mode on the guest's PTY. crossterm calls this instead
// of tcsetattr; route it to the kernel via process.stdin.setRawMode (which
- // drives __pty_set_raw_mode), so reedline gets raw \r keystrokes and submits
+ // drives __pty_set_raw_mode), so reedline gets raw \\r keystrokes and submits
// commands. Returns errno 0.
set_raw_mode(_enabled) {
return 0;
@@ -9515,14 +9515,14 @@ if (module.exports && module.exports.default == null) module.exports.default = m
},
},
host_process: {
- proc_spawn(argvPtr, argvLen, envpPtr, envpLen, stdinFd, stdoutFd, stderrFd, cwdPtr, cwdLen, retPid) {
- try {
- const argv = decodeNullSeparated(readBytes(argvPtr, argvLen));
- if (argv.length === 0) return errnoNosys;
- const commandPath = argv[0];
- const commandName = commandPath.split("/").filter(Boolean).at(-1) || commandPath;
+ proc_spawn(argvPtr, argvLen, envpPtr, envpLen, stdinFd, stdoutFd, stderrFd, cwdPtr, cwdLen, retPid) {
+ try {
+ const argv = decodeNullSeparated(readBytes(argvPtr, argvLen));
+ if (argv.length === 0) return errnoNosys;
+ const commandPath = argv[0];
+ const commandName = commandPath.split("/").filter(Boolean).at(-1) || commandPath;
const module = commandModules.get(commandName);
- if (!module) return errnoNosys;
+ if (!module) return errnoNosys;
const env = {
...(options && options.env ? options.env : {}),
...parseEnv(readBytes(envpPtr, envpLen)),
@@ -9543,9 +9543,14 @@ if (module.exports && module.exports.default == null) module.exports.default = m
if (!childHandle) return errnoBadf;
overrides.set(childFd, childHandle);
childOverrideHandles.push(childHandle);
+ }
+ const pid = nextPid++;
+ const child = { pid, module, commandPath, argv, env, cwd, overrides, childOverrideHandles };
+ for (const parentFd of [stdinFd >>> 0, stdoutFd >>> 0, stderrFd >>> 0]) {
+ if (parentFd > 2) {
+ closeSyntheticHandle(syntheticFdEntries.get(parentFd));
+ }
}
- const pid = nextPid++;
- const child = { pid, module, commandPath, argv, env, cwd, overrides, childOverrideHandles };
if (pipeHasOpenWriters(overrides.get(0))) {
deferredChildren.set(pid, child);
} else {
@@ -9556,16 +9561,21 @@ if (module.exports && module.exports.default == null) module.exports.default = m
return errnoNosys;
}
},
- proc_waitpid(pid, _options, retStatus, retPid) {
- const requested = pid >>> 0;
- runReadyDeferredChildren(requested === 0xffffffff ? undefined : requested);
+ proc_waitpid(pid, _options, retStatus, retPid) {
+ const requested = pid >>> 0;
+ runReadyDeferredChildren(requested === 0xffffffff ? undefined : requested);
const childPid = requested === 0xffffffff
? exitedChildren.keys().next().value
: requested;
if (!childPid || !exitedChildren.has(childPid)) {
- writeU32(retPid, 0);
- return errnoChild;
- }
+ if ((_options >>> 0) !== 0) {
+ writeU32(retStatus, 0);
+ writeU32(retPid, 0);
+ return errnoSuccess;
+ }
+ writeU32(retPid, 0);
+ return errnoChild;
+ }
writeU32(retStatus, exitedChildren.get(childPid) || 0);
writeU32(retPid, childPid);
exitedChildren.delete(childPid);
diff --git a/packages/runtime-benchmarks/README.md b/packages/runtime-benchmarks/README.md
index f5fd1a1958..0926750381 100644
--- a/packages/runtime-benchmarks/README.md
+++ b/packages/runtime-benchmarks/README.md
@@ -165,7 +165,7 @@ Focused lanes live under `src/focused/` and preserve the legacy CLI flags, env v
- **`wasi-ls-scaling`**: focused `ls` command scaling. Knobs: `BENCH_WASI_LS_ITERATIONS`, `BENCH_WASI_LS_WARMUP`, `BENCH_WASI_LS_SERIAL_RUNS`, `BENCH_WASI_LS_FILE_COUNTS`, `BENCH_WASI_LS_VARIANTS`, `BENCH_WASI_LS_WASM_WARMUP_DEBUG`, `BENCH_WASI_LS_SYSCALL_COUNTERS`.
- **`wasi-ls-scaling-counters`**: `ls` scaling with syscall counters.
-The shell/coreutils focused lanes use the local `NodeRuntime` command-dir resolution, which prefers `registry/native/target/wasm32-wasip1/release/commands` when `make -C registry/native wasm` has been run.
+The shell/coreutils focused lanes use the local `NodeRuntime` command-dir resolution, which prefers `toolchain/target/wasm32-wasip1/release/commands` when `make -C toolchain wasm` has been run.
## Net Family
diff --git a/packages/runtime-benchmarks/src/focused/wasi-ls-scaling.bench.ts b/packages/runtime-benchmarks/src/focused/wasi-ls-scaling.bench.ts
index eb60b67c79..8de65f2092 100644
--- a/packages/runtime-benchmarks/src/focused/wasi-ls-scaling.bench.ts
+++ b/packages/runtime-benchmarks/src/focused/wasi-ls-scaling.bench.ts
@@ -273,7 +273,7 @@ function resolveAgentosRoot(): string | null {
join(process.cwd(), "../agentos"),
].filter((path): path is string => Boolean(path));
for (const candidate of candidates) {
- if (existsSync(join(candidate, "registry/software/coreutils/wasm/ls"))) {
+ if (existsSync(join(candidate, "software/coreutils/wasm/ls"))) {
return candidate;
}
}
@@ -282,7 +282,7 @@ function resolveAgentosRoot(): string | null {
function lsModuleBytes(agentosRoot: string | null): number | null {
if (!agentosRoot) return null;
- const modulePath = join(agentosRoot, "registry/software/coreutils/wasm/ls");
+ const modulePath = join(agentosRoot, "software/coreutils/wasm/ls");
return existsSync(modulePath) ? statSync(modulePath).size : null;
}
diff --git a/packages/runtime-benchmarks/src/focused/wasm-command-floor.bench.ts b/packages/runtime-benchmarks/src/focused/wasm-command-floor.bench.ts
index f1ae9cfe36..b12de9f275 100644
--- a/packages/runtime-benchmarks/src/focused/wasm-command-floor.bench.ts
+++ b/packages/runtime-benchmarks/src/focused/wasm-command-floor.bench.ts
@@ -92,7 +92,7 @@ function resolveAgentosRoot(): string | null {
].filter((path): path is string => Boolean(path));
for (const candidate of candidates) {
- if (existsSync(join(candidate, "registry/software/coreutils/wasm"))) {
+ if (existsSync(join(candidate, "software/coreutils/wasm"))) {
return candidate;
}
}
@@ -103,7 +103,7 @@ function commandModuleBytes(command: string, agentosRoot: string | null): number
if (!agentosRoot) {
return null;
}
- const modulePath = join(agentosRoot, "registry/software/coreutils/wasm", command);
+ const modulePath = join(agentosRoot, "software/coreutils/wasm", command);
return existsSync(modulePath) ? statSync(modulePath).size : null;
}
diff --git a/packages/runtime-browser/AGENTS.md b/packages/runtime-browser/AGENTS.md
deleted file mode 120000
index 681311eb9c..0000000000
--- a/packages/runtime-browser/AGENTS.md
+++ /dev/null
@@ -1 +0,0 @@
-CLAUDE.md
\ No newline at end of file
diff --git a/packages/runtime-browser/AGENTS.md b/packages/runtime-browser/AGENTS.md
new file mode 100644
index 0000000000..22ea843adf
--- /dev/null
+++ b/packages/runtime-browser/AGENTS.md
@@ -0,0 +1,5 @@
+# Browser Support
+
+- Browser support is untested after the secure-exec split; only build-level validation is required during migration.
+- Provenance: moved from rivet-dev/agentos@87ed8e21e454.
+- Keep this package generic to secure-exec. Agent OS browser glue belongs in Agent OS.
diff --git a/packages/runtime-browser/src/runtime.ts b/packages/runtime-browser/src/runtime.ts
index 33738bd364..c70dc70723 100644
--- a/packages/runtime-browser/src/runtime.ts
+++ b/packages/runtime-browser/src/runtime.ts
@@ -3431,7 +3431,11 @@ export const POLYFILL_CODE_MAP: Record = {
proc_getppid(retPid) { return writeU32(retPid, 0); },
proc_kill() { return errnoNosys; },
sleep_ms(milliseconds) {
- Atomics.wait(wait, 0, 0, milliseconds >>> 0);
+ const deadline = Date.now() + (milliseconds >>> 0);
+ while (Date.now() < deadline) {
+ // Keep guest sleeps interruptible by V8 termination during kill/dispose.
+ Atomics.wait(wait, 0, 0, Math.max(1, Math.min(10, deadline - Date.now())));
+ }
return errnoSuccess;
},
pty_open() { return errnoNosys; },
diff --git a/packages/runtime-browser/src/wasi-polyfill.ts b/packages/runtime-browser/src/wasi-polyfill.ts
index 40ee39ab9f..c885a06d43 100644
--- a/packages/runtime-browser/src/wasi-polyfill.ts
+++ b/packages/runtime-browser/src/wasi-polyfill.ts
@@ -162,6 +162,7 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
const __agentOSWasiOpenDirectory = 2;
const __agentOSWasiOpenExclusive = 4;
const __agentOSWasiOpenTruncate = 8;
+ const __agentOSWasiFdflagsAppend = 1;
const __agentOSWasiRightFdRead = 1n << 1n;
const __agentOSWasiRightFdWrite = 1n << 6n;
const __agentOSWasiDefaultRightsBase = 0xffffffffffffffffn;
@@ -504,6 +505,14 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
}
}
+ _hasReadRights(rights) {
+ try {
+ return (BigInt(rights) & __agentOSWasiRightFdRead) !== 0n;
+ } catch {
+ return true;
+ }
+ }
+
_writeUint32(ptr, value) {
try {
this._memoryView().setUint32(Number(ptr) >>> 0, Number(value) >>> 0, true);
@@ -887,6 +896,9 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
}
_mapFsError(error) {
+ __agentOSWasiDebug(
+ \`fs error code=\${String(error?.code ?? "")} message=\${String(error?.message ?? error)}\`,
+ );
switch (error?.code) {
case "EACCES":
case "EPERM":
@@ -935,6 +947,7 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
refCount: 1,
open: true,
readOnly: entry.readOnly === true,
+ append: entry.append === true,
};
}
@@ -1488,19 +1501,28 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
return this._measureWasiPhase("writeResultPtr", () => this._writeUint32(nwrittenPtr, written));
}
}
+ const position = handle.append
+ ? this._measureWasiPhase("appendFstat", () =>
+ Number(__agentOSFs().fstatSync(handle.targetFd).size ?? 0)
+ )
+ : null;
const written = this._measureWasiPhase("writeSync", () =>
__agentOSFs().writeSync(
handle.targetFd,
bytes,
0,
bytes.length,
- null,
+ position,
)
);
return this._measureWasiPhase("writeResultPtr", () => this._writeUint32(nwrittenPtr, written));
}
if (handle?.kind === "guest-file" && typeof handle.targetFd === "number") {
- const position = handle.append ? null : (handle.position ?? 0);
+ const position = handle.append
+ ? this._measureWasiPhase("appendFstat", () =>
+ Number(__agentOSFs().fstatSync(handle.targetFd).size ?? 0)
+ )
+ : (handle.position ?? 0);
const written = this._measureWasiPhase("writeSync", () =>
__agentOSFs().writeSync(
handle.targetFd,
@@ -1577,7 +1599,11 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
}
if (entry.kind === "file") {
this._clearStatCache();
- const position = typeof entry.offset === "number" ? entry.offset : null;
+ const position = entry.append
+ ? this._measureWasiPhase("appendFstat", () =>
+ Number(__agentOSFs().fstatSync(entry.realFd).size ?? 0)
+ )
+ : (typeof entry.offset === "number" ? entry.offset : null);
const written = this._measureWasiPhase("writeSync", () =>
__agentOSFs().writeSync(
entry.realFd,
@@ -1587,7 +1613,11 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
position,
)
);
- if (typeof entry.offset === "number") {
+ if (entry.append) {
+ entry.offset = this._measureWasiPhase("appendFstat", () =>
+ Number(__agentOSFs().fstatSync(entry.realFd).size ?? 0)
+ );
+ } else if (typeof entry.offset === "number") {
entry.offset += written;
}
return this._measureWasiPhase("writeResultPtr", () => this._writeUint32(nwrittenPtr, written));
@@ -2314,8 +2344,12 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
this._clearStatCache();
}
const fsConstants = __agentOSFs().constants ?? {};
+ const requestedFdFlags = Number(_fdflags) >>> 0;
+ const append = (requestedFdFlags & __agentOSWasiFdflagsAppend) !== 0;
let openFlags = requestedWriteAccess
- ? fsConstants.O_RDWR ?? 2
+ ? (this._hasReadRights(requestedRightsBase)
+ ? fsConstants.O_RDWR ?? 2
+ : fsConstants.O_WRONLY ?? 1)
: fsConstants.O_RDONLY ?? 0;
if ((requestedFlags & __agentOSWasiOpenCreate) !== 0) {
openFlags |= fsConstants.O_CREAT ?? 64;
@@ -2326,6 +2360,9 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
if ((requestedFlags & __agentOSWasiOpenTruncate) !== 0) {
openFlags |= fsConstants.O_TRUNC ?? 512;
}
+ if (append) {
+ openFlags |= fsConstants.O_APPEND ?? 1024;
+ }
if (openDirectory) {
openFlags |= fsConstants.O_DIRECTORY ?? 0;
}
@@ -2343,10 +2380,13 @@ if (typeof globalThis !== "undefined" && typeof globalThis.__agentOSWasiModule =
hostPath: fsPath,
readOnly: resolved.readOnly === true,
realFd,
- offset: 0,
+ offset: append
+ ? Number(__agentOSFs().fstatSync(realFd).size ?? 0)
+ : 0,
+ append,
rightsBase: requestedRightsBase & allowedRightsInheriting,
rightsInheriting: requestedRightsInheriting & allowedRightsInheriting,
- fdFlags: (Number(_fdflags) >>> 0) & 0xffff,
+ fdFlags: requestedFdFlags & 0xffff,
});
});
return this._measureWasiPhase("writeOpenedFd", () => this._writeUint32(openedFdPtr, openedFd));
diff --git a/packages/runtime-core/scripts/copy-wasm-commands.mjs b/packages/runtime-core/scripts/copy-wasm-commands.mjs
index 1a095fc10c..48d699b0bf 100644
--- a/packages/runtime-core/scripts/copy-wasm-commands.mjs
+++ b/packages/runtime-core/scripts/copy-wasm-commands.mjs
@@ -7,7 +7,7 @@
* The kernel needs a guest `sh` (plus coreutils) to spawn any process — without
* these binaries `NodeRuntime.create()` cannot boot. The binaries are produced
* by the in-repo Rust command build at
- * `registry/native/target/wasm32-wasip1/release/commands/`. That path only
+ * `toolchain/target/wasm32-wasip1/release/commands/`. That path only
* exists in a developer checkout, so we copy the whole command set (symlinks
* included, the way `bash -> sh` and the stub aliases are laid out) into
* `packages/core/commands/`, which is listed in `files` and resolved at runtime
@@ -35,7 +35,7 @@ const REPO_ROOT = fileURLToPath(new URL("../../..", import.meta.url));
const SOURCE_DIR = path.join(
REPO_ROOT,
- "registry/native/target/wasm32-wasip1/release/commands",
+ "toolchain/target/wasm32-wasip1/release/commands",
);
const DEST_DIR = path.join(PACKAGE_ROOT, "commands");
@@ -66,7 +66,7 @@ function main() {
// never built without the commands.
const message =
`WASM commands not found at ${SOURCE_DIR} and none vendored at ${DEST_DIR}. ` +
- "Build them with `make -C registry/native wasm` (or drop a prebuilt " +
+ "Build them with `make -C toolchain wasm` (or drop a prebuilt " +
"commands artifact into the package) before packing so they ship in the tarball.";
if (process.argv.includes("--require")) {
console.error(`error: ${message}`);
diff --git a/packages/runtime-core/src/kernel-proxy.ts b/packages/runtime-core/src/kernel-proxy.ts
index 2a0c5e30a3..95ee7667da 100644
--- a/packages/runtime-core/src/kernel-proxy.ts
+++ b/packages/runtime-core/src/kernel-proxy.ts
@@ -118,6 +118,14 @@ const PREFERRED_SIGNAL_NAMES = [
"SIGEMT",
"SIGINFO",
] as const;
+const NON_TERMINATING_SIGNALS = new Set([
+ "0",
+ "SIGCHLD",
+ "SIGCONT",
+ "SIGSTOP",
+ "SIGURG",
+ "SIGWINCH",
+]);
const NON_CANONICAL_SIGNAL_NAMES = new Set([
"SIGCLD",
"SIGIOT",
@@ -418,7 +426,10 @@ export class NativeSidecarKernelProxy {
liveProcesses.map((entry) => this.signalProcess(entry, 15)),
);
- await this.client.disposeVm(this.session, this.vm).catch(() => {});
+ await Promise.race([
+ this.client.disposeVm(this.session, this.vm),
+ new Promise((resolve) => setTimeout(resolve, 1000)),
+ ]).catch(() => {});
for (const entry of liveProcesses) {
if (entry.exitCode === null) {
// The sidecar dispose path already performs TERM/KILL escalation for any
@@ -679,13 +690,19 @@ export class NativeSidecarKernelProxy {
}
entry.pendingKillSignal = signal;
void entry.startPromise.then(async () => {
- if (entry.exitCode !== null || entry.pendingKillSignal === null) {
+ if (entry.pendingKillSignal === null) {
return;
}
const pendingSignal = entry.pendingKillSignal;
entry.pendingKillSignal = null;
await this.signalProcess(entry, pendingSignal);
});
+ if (
+ (signal === 9 || signal === 15) &&
+ entry.exitCode === null
+ ) {
+ this.finishProcess(entry, 128 + signal);
+ }
},
wait: async () => {
const exitCode = await this.waitForTrackedProcess(entry);
@@ -1683,14 +1700,34 @@ export class NativeSidecarKernelProxy {
entry: TrackedProcessEntry,
signal: number,
): Promise {
- await this.signalRefreshes.get(entry.pid);
+ const sidecarSignal = toSidecarSignalName(signal);
+ let timedOut = false;
+ const killPromise = this.client.killProcess(
+ this.session,
+ this.vm,
+ entry.processId,
+ sidecarSignal,
+ );
try {
- await this.client.killProcess(
- this.session,
- this.vm,
- entry.processId,
- toSidecarSignalName(signal),
- );
+ await Promise.race([
+ killPromise,
+ new Promise((resolve) =>
+ setTimeout(() => {
+ timedOut = true;
+ resolve();
+ }, 1000),
+ ),
+ ]);
+ if (timedOut) {
+ void killPromise.catch(() => {});
+ }
+ if (
+ entry.exitCode === null &&
+ !NON_TERMINATING_SIGNALS.has(sidecarSignal) &&
+ (entry.driver === "wasmvm" || timedOut)
+ ) {
+ this.finishProcess(entry, 128 + signal);
+ }
} catch (error) {
if (isNoSuchProcessError(error) || isUnknownVmError(error)) {
return;
@@ -2011,16 +2048,12 @@ export class NativeSidecarKernelProxy {
return this.client.pread(this.session, this.vm, path, offset, length);
},
pwrite: async (path, offset, data) => {
- const bytes =
- await this.createFilesystemView(includeLocalMounts).readFile(path);
- const nextSize = Math.max(bytes.length, offset + data.length);
- const updated = new Uint8Array(nextSize);
- updated.set(bytes);
- updated.set(data, offset);
- await this.createFilesystemView(includeLocalMounts).writeFile(
- path,
- updated,
- );
+ const local = includeLocalMounts ? this.resolveLocalMount(path) : null;
+ if (local) {
+ this.assertLocalWritable(local.mount);
+ return local.mount.fs.pwrite(local.relativePath, offset, data);
+ }
+ return this.client.pwrite(this.session, this.vm, path, offset, data);
},
};
}
diff --git a/packages/runtime-core/src/node-runtime.ts b/packages/runtime-core/src/node-runtime.ts
index 7bbd4a6822..832d740a6c 100644
--- a/packages/runtime-core/src/node-runtime.ts
+++ b/packages/runtime-core/src/node-runtime.ts
@@ -63,13 +63,13 @@ const REPO_ROOT = fileURLToPath(new URL("../../..", import.meta.url));
/**
* In-repo build output for the WASM coreutils/shell command binaries, produced
- * by the Rust command build (`make -C registry/native wasm`). Only present in a
+ * by the Rust command build (`make -C toolchain wasm`). Only present in a
* developer checkout; preferred when it exists so local edits are picked up
* without re-vendoring.
*/
const REPO_COMMANDS_DIR = path.join(
REPO_ROOT,
- "registry/native/target/wasm32-wasip1/release/commands",
+ "toolchain/target/wasm32-wasip1/release/commands",
);
/**
diff --git a/packages/runtime-core/src/sidecar-process.ts b/packages/runtime-core/src/sidecar-process.ts
index 9a5e926945..cd60c8d635 100644
--- a/packages/runtime-core/src/sidecar-process.ts
+++ b/packages/runtime-core/src/sidecar-process.ts
@@ -196,6 +196,8 @@ export interface SidecarSpawnOptions {
command?: string;
args?: string[];
eventBufferCapacity?: number;
+ gracefulExitMs?: number;
+ forceExitMs?: number;
// Migration-only compatibility path for pre-BARE test fixtures.
payloadCodec?: NativeTransportPayloadCodec;
/**
@@ -368,8 +370,8 @@ export class SidecarProcess {
silenceTimeoutMs: options.silenceTimeoutMs,
eventBufferCapacity:
options.eventBufferCapacity ?? DEFAULT_SIDECAR_EVENT_BUFFER_CAPACITY,
- gracefulExitMs: DEFAULT_SIDECAR_GRACEFUL_EXIT_MS,
- forceExitMs: DEFAULT_SIDECAR_FORCE_EXIT_MS,
+ gracefulExitMs: options.gracefulExitMs ?? DEFAULT_SIDECAR_GRACEFUL_EXIT_MS,
+ forceExitMs: options.forceExitMs ?? DEFAULT_SIDECAR_FORCE_EXIT_MS,
disposedErrorMessage: "native sidecar disposed",
payloadCodec: options.payloadCodec ?? "bare",
});
@@ -890,6 +892,23 @@ export class SidecarProcess {
});
}
+ async pwrite(
+ session: AuthenticatedSession,
+ vm: CreatedVm,
+ path: string,
+ offset: number,
+ content: Uint8Array,
+ ): Promise {
+ const encoded = encodeGuestFilesystemContent(content);
+ await this.guestFilesystemCall(session, vm, {
+ operation: "pwrite",
+ path,
+ offset,
+ content: encoded.content,
+ encoding: encoded.encoding,
+ });
+ }
+
async mkdir(
session: AuthenticatedSession,
vm: CreatedVm,
diff --git a/packages/runtime-core/src/test-runtime.ts b/packages/runtime-core/src/test-runtime.ts
index aeb8c13260..16ae3e40cb 100644
--- a/packages/runtime-core/src/test-runtime.ts
+++ b/packages/runtime-core/src/test-runtime.ts
@@ -475,6 +475,7 @@ export interface Kernel extends KernelInterface {
removeFile(path: string): Promise;
removeDir(path: string): Promise;
rename(oldPath: string, newPath: string): Promise;
+ pwrite(path: string, offset: number, data: Uint8Array): Promise;
vmFetch(request: {
port: number;
method: string;
@@ -1213,7 +1214,10 @@ export class NodeFileSystem implements VirtualFileSystem {
offset: number,
data: Uint8Array,
): Promise {
- const handle = await fs.open(this.normalizeTarget(targetPath), "r+");
+ const handle = await fs.open(
+ this.normalizeTarget(targetPath),
+ fsSync.constants.O_WRONLY,
+ );
try {
await handle.write(data, 0, data.length, offset);
} finally {
@@ -2982,6 +2986,15 @@ class NativeKernel implements Kernel {
return this.proxy!.rename(oldPath, newPath);
}
+ async pwrite(
+ targetPath: string,
+ offset: number,
+ data: Uint8Array,
+ ): Promise {
+ await this.ensureReady();
+ return this.proxy!.vfs.pwrite(targetPath, offset, data);
+ }
+
private tryResolveMountedCommand(command: string): boolean {
const normalized = normalizeCommandLookup(command);
for (const driver of this.mountedRuntimeDrivers) {
@@ -3069,6 +3082,8 @@ class NativeKernel implements Kernel {
cwd: REPO_ROOT,
command: ensureNativeSidecarBinary(),
args: [],
+ gracefulExitMs: 100,
+ forceExitMs: 100,
}),
);
const session = await this.measureBoot("session_open", () =>
diff --git a/registry/tests/kernel/bridge-child-process.test.ts b/packages/runtime-core/tests/integration/bridge-child-process.test.ts
similarity index 97%
rename from registry/tests/kernel/bridge-child-process.test.ts
rename to packages/runtime-core/tests/integration/bridge-child-process.test.ts
index 7cf5032c62..930256fccf 100644
--- a/registry/tests/kernel/bridge-child-process.test.ts
+++ b/packages/runtime-core/tests/integration/bridge-child-process.test.ts
@@ -21,8 +21,8 @@ import {
describeIf,
createIntegrationKernel,
NodeFileSystem,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
const __dirname = dirname(fileURLToPath(import.meta.url));
const PACKAGED_COREUTILS_COMMANDS_DIR = resolve(
@@ -319,7 +319,17 @@ describeIf(!skipReason, 'bridge child_process → kernel routing', () => {
fs.chmodSync('/tmp/write-only.txt', 0o200);
// A real shell opens the append target write-only, so a 0o200 file is
// appendable even though it cannot be read back until the chmod below.
- execSync("printf changed >> /tmp/write-only.txt", { encoding: 'utf-8' });
+ try {
+ execSync("printf changed >> /tmp/write-only.txt", { encoding: 'utf-8' });
+ } catch (error) {
+ console.error(JSON.stringify({
+ message: error instanceof Error ? error.message : String(error),
+ status: error && typeof error === 'object' && 'status' in error ? error.status : null,
+ stdout: error && typeof error === 'object' && 'stdout' in error ? String(error.stdout ?? '') : '',
+ stderr: error && typeof error === 'object' && 'stderr' in error ? String(error.stderr ?? '') : ''
+ }));
+ process.exit(99);
+ }
fs.chmodSync('/tmp/write-only.txt', 0o600);
console.log(JSON.stringify({
mode: 'loaded',
diff --git a/registry/tests/kernel/cross-runtime-network.test.ts b/packages/runtime-core/tests/integration/cross-runtime-network.test.ts
similarity index 99%
rename from registry/tests/kernel/cross-runtime-network.test.ts
rename to packages/runtime-core/tests/integration/cross-runtime-network.test.ts
index 98519e2b24..5167ea3bad 100644
--- a/registry/tests/kernel/cross-runtime-network.test.ts
+++ b/packages/runtime-core/tests/integration/cross-runtime-network.test.ts
@@ -16,8 +16,8 @@ import {
createIntegrationKernel,
itIf,
skipUnlessWasmBuilt,
-} from './helpers.ts';
-import type { IntegrationKernelResult, Kernel } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult, Kernel } from '@rivet-dev/agentos-vm-test-harness';
const WASM_HTTP_GET = resolve(C_BUILD_DIR, 'http_get');
const WASM_HTTP_SERVER = resolve(C_BUILD_DIR, 'http_server');
diff --git a/registry/tests/kernel/cross-runtime-pipes.test.ts b/packages/runtime-core/tests/integration/cross-runtime-pipes.test.ts
similarity index 95%
rename from registry/tests/kernel/cross-runtime-pipes.test.ts
rename to packages/runtime-core/tests/integration/cross-runtime-pipes.test.ts
index 4db8328b22..8c19d7e198 100644
--- a/registry/tests/kernel/cross-runtime-pipes.test.ts
+++ b/packages/runtime-core/tests/integration/cross-runtime-pipes.test.ts
@@ -17,8 +17,8 @@ import {
describeIf,
createIntegrationKernel,
skipUnlessWasmBuilt,
-} from './helpers.ts';
-import type { Kernel } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-vm-test-harness';
// ---------------------------------------------------------------------------
// Integration tests with real WasmVM + Node (skipped if WASM not built)
diff --git a/registry/tests/kernel/cross-runtime-terminal.test.ts b/packages/runtime-core/tests/integration/cross-runtime-terminal.test.ts
similarity index 98%
rename from registry/tests/kernel/cross-runtime-terminal.test.ts
rename to packages/runtime-core/tests/integration/cross-runtime-terminal.test.ts
index 5a4f14b749..3fd5039d1f 100644
--- a/registry/tests/kernel/cross-runtime-terminal.test.ts
+++ b/packages/runtime-core/tests/integration/cross-runtime-terminal.test.ts
@@ -15,8 +15,8 @@ import {
createIntegrationKernel,
skipUnlessWasmBuilt,
TerminalHarness,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
/** brush-shell interactive prompt. */
const PROMPT = 'sh-0.4$ ';
diff --git a/registry/tests/kernel/ctrl-c-shell-behavior.test.ts b/packages/runtime-core/tests/integration/ctrl-c-shell-behavior.test.ts
similarity index 95%
rename from registry/tests/kernel/ctrl-c-shell-behavior.test.ts
rename to packages/runtime-core/tests/integration/ctrl-c-shell-behavior.test.ts
index 08af122ec2..3788f6fc1c 100644
--- a/registry/tests/kernel/ctrl-c-shell-behavior.test.ts
+++ b/packages/runtime-core/tests/integration/ctrl-c-shell-behavior.test.ts
@@ -16,8 +16,8 @@ import {
createIntegrationKernel,
skipUnlessWasmBuilt,
TerminalHarness,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
const PROMPT = 'sh-0.4$ ';
const wasmSkip = skipUnlessWasmBuilt();
diff --git a/registry/tests/kernel/dispose-behavior.test.ts b/packages/runtime-core/tests/integration/dispose-behavior.test.ts
similarity index 92%
rename from registry/tests/kernel/dispose-behavior.test.ts
rename to packages/runtime-core/tests/integration/dispose-behavior.test.ts
index 299b08e3fc..d77a5cbcd5 100644
--- a/registry/tests/kernel/dispose-behavior.test.ts
+++ b/packages/runtime-core/tests/integration/dispose-behavior.test.ts
@@ -17,9 +17,9 @@ import {
createIntegrationKernel,
skipUnlessWasmBuilt,
createInMemoryFileSystem,
-} from './helpers.ts';
-import type { Kernel } from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
diff --git a/registry/tests/wasmvm/dynamic-module-integration.test.ts b/packages/runtime-core/tests/integration/dynamic-module-integration.test.ts
similarity index 98%
rename from registry/tests/wasmvm/dynamic-module-integration.test.ts
rename to packages/runtime-core/tests/integration/dynamic-module-integration.test.ts
index a884adee9c..afc8bd00e9 100644
--- a/registry/tests/wasmvm/dynamic-module-integration.test.ts
+++ b/packages/runtime-core/tests/integration/dynamic-module-integration.test.ts
@@ -10,16 +10,16 @@
*/
import { describe, it, expect, afterEach, vi } from 'vitest';
-import { createWasmVmRuntime, WASMVM_COMMANDS } from '../helpers.js';
-import type { WasmVmRuntimeOptions } from '../helpers.js';
-import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '../helpers.js';
+import { createWasmVmRuntime, WASMVM_COMMANDS } from '@rivet-dev/agentos-vm-test-harness';
+import type { WasmVmRuntimeOptions } from '@rivet-dev/agentos-vm-test-harness';
+import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '@rivet-dev/agentos-vm-test-harness';
import type {
DriverProcess,
Kernel,
KernelInterface,
KernelRuntimeDriver as RuntimeDriver,
ProcessContext,
-} from '../helpers.js';
+} from '@rivet-dev/agentos-vm-test-harness';
import { writeFile, mkdir, rm, symlink } from 'node:fs/promises';
import { existsSync } from 'node:fs';
import { join } from 'node:path';
diff --git a/registry/tests/kernel/e2e-concurrently.test.ts b/packages/runtime-core/tests/integration/e2e-concurrently.test.ts
similarity index 99%
rename from registry/tests/kernel/e2e-concurrently.test.ts
rename to packages/runtime-core/tests/integration/e2e-concurrently.test.ts
index 95ef7cf24d..bdc77ed515 100644
--- a/registry/tests/kernel/e2e-concurrently.test.ts
+++ b/packages/runtime-core/tests/integration/e2e-concurrently.test.ts
@@ -25,7 +25,7 @@ import {
createWasmVmRuntime,
createNodeRuntime,
skipUnlessWasmBuilt,
-} from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
const wasmSkip = skipUnlessWasmBuilt();
diff --git a/registry/tests/kernel/e2e-nextjs-build.test.ts b/packages/runtime-core/tests/integration/e2e-nextjs-build.test.ts
similarity index 98%
rename from registry/tests/kernel/e2e-nextjs-build.test.ts
rename to packages/runtime-core/tests/integration/e2e-nextjs-build.test.ts
index f5ade032a4..3ebf9e7192 100644
--- a/registry/tests/kernel/e2e-nextjs-build.test.ts
+++ b/packages/runtime-core/tests/integration/e2e-nextjs-build.test.ts
@@ -29,7 +29,7 @@ import {
createWasmVmRuntime,
createNodeRuntime,
skipUnlessWasmBuilt,
-} from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
const wasmSkip = skipUnlessWasmBuilt();
const __dirname = path.dirname(fileURLToPath(import.meta.url));
diff --git a/registry/tests/kernel/e2e-npm-install.test.ts b/packages/runtime-core/tests/integration/e2e-npm-install.test.ts
similarity index 98%
rename from registry/tests/kernel/e2e-npm-install.test.ts
rename to packages/runtime-core/tests/integration/e2e-npm-install.test.ts
index 42c508be53..d7cd270212 100644
--- a/registry/tests/kernel/e2e-npm-install.test.ts
+++ b/packages/runtime-core/tests/integration/e2e-npm-install.test.ts
@@ -22,7 +22,7 @@ import {
createWasmVmRuntime,
createNodeRuntime,
skipUnlessWasmBuilt,
-} from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
const wasmSkip = skipUnlessWasmBuilt();
diff --git a/registry/tests/kernel/e2e-npm-lifecycle.test.ts b/packages/runtime-core/tests/integration/e2e-npm-lifecycle.test.ts
similarity index 99%
rename from registry/tests/kernel/e2e-npm-lifecycle.test.ts
rename to packages/runtime-core/tests/integration/e2e-npm-lifecycle.test.ts
index 69f3f46e12..cf1b7b3ff0 100644
--- a/registry/tests/kernel/e2e-npm-lifecycle.test.ts
+++ b/packages/runtime-core/tests/integration/e2e-npm-lifecycle.test.ts
@@ -24,7 +24,7 @@ import {
createWasmVmRuntime,
createNodeRuntime,
skipUnlessWasmBuilt,
-} from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
const wasmSkip = skipUnlessWasmBuilt();
diff --git a/registry/tests/kernel/e2e-npm-scripts.test.ts b/packages/runtime-core/tests/integration/e2e-npm-scripts.test.ts
similarity index 96%
rename from registry/tests/kernel/e2e-npm-scripts.test.ts
rename to packages/runtime-core/tests/integration/e2e-npm-scripts.test.ts
index ff16dc5c0b..3950bf97a6 100644
--- a/registry/tests/kernel/e2e-npm-scripts.test.ts
+++ b/packages/runtime-core/tests/integration/e2e-npm-scripts.test.ts
@@ -9,7 +9,7 @@
*/
import { describe, expect, it } from 'vitest';
-import { createIntegrationKernel, skipUnlessWasmBuilt } from './helpers.ts';
+import { createIntegrationKernel, skipUnlessWasmBuilt } from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
void skipReason;
diff --git a/registry/tests/kernel/e2e-npm-suite.test.ts b/packages/runtime-core/tests/integration/e2e-npm-suite.test.ts
similarity index 99%
rename from registry/tests/kernel/e2e-npm-suite.test.ts
rename to packages/runtime-core/tests/integration/e2e-npm-suite.test.ts
index 6d5faffe2a..276ce773a7 100644
--- a/registry/tests/kernel/e2e-npm-suite.test.ts
+++ b/packages/runtime-core/tests/integration/e2e-npm-suite.test.ts
@@ -26,7 +26,7 @@ import {
createIntegrationKernel,
NodeFileSystem,
skipUnlessWasmBuilt,
-} from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
const wasmSkip = skipUnlessWasmBuilt();
diff --git a/registry/tests/kernel/e2e-npm-version-init.test.ts b/packages/runtime-core/tests/integration/e2e-npm-version-init.test.ts
similarity index 95%
rename from registry/tests/kernel/e2e-npm-version-init.test.ts
rename to packages/runtime-core/tests/integration/e2e-npm-version-init.test.ts
index 3f529ae057..9debd4d285 100644
--- a/registry/tests/kernel/e2e-npm-version-init.test.ts
+++ b/packages/runtime-core/tests/integration/e2e-npm-version-init.test.ts
@@ -13,7 +13,7 @@
*/
import { describe, expect, it } from 'vitest';
-import { createIntegrationKernel, skipUnlessWasmBuilt } from './helpers.ts';
+import { createIntegrationKernel, skipUnlessWasmBuilt } from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
void skipReason;
diff --git a/registry/tests/kernel/e2e-npx-and-pipes.test.ts b/packages/runtime-core/tests/integration/e2e-npx-and-pipes.test.ts
similarity index 98%
rename from registry/tests/kernel/e2e-npx-and-pipes.test.ts
rename to packages/runtime-core/tests/integration/e2e-npx-and-pipes.test.ts
index a4d49092ee..c6c3ba84ab 100644
--- a/registry/tests/kernel/e2e-npx-and-pipes.test.ts
+++ b/packages/runtime-core/tests/integration/e2e-npx-and-pipes.test.ts
@@ -11,7 +11,7 @@ import {
createIntegrationKernel,
itIf,
skipUnlessWasmBuilt,
-} from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
void skipReason;
diff --git a/registry/tests/kernel/e2e-project-matrix.test.ts b/packages/runtime-core/tests/integration/e2e-project-matrix.test.ts
similarity index 99%
rename from registry/tests/kernel/e2e-project-matrix.test.ts
rename to packages/runtime-core/tests/integration/e2e-project-matrix.test.ts
index cc9eaabb78..27f5297a20 100644
--- a/registry/tests/kernel/e2e-project-matrix.test.ts
+++ b/packages/runtime-core/tests/integration/e2e-project-matrix.test.ts
@@ -26,7 +26,7 @@ import {
createWasmVmRuntime,
createNodeRuntime,
skipUnlessWasmBuilt,
-} from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
const execFileAsync = promisify(execFile);
const TEST_TIMEOUT_MS = 55_000;
diff --git a/registry/tests/kernel/error-propagation.test.ts b/packages/runtime-core/tests/integration/error-propagation.test.ts
similarity index 95%
rename from registry/tests/kernel/error-propagation.test.ts
rename to packages/runtime-core/tests/integration/error-propagation.test.ts
index c71c3c580d..cdb233c52d 100644
--- a/registry/tests/kernel/error-propagation.test.ts
+++ b/packages/runtime-core/tests/integration/error-propagation.test.ts
@@ -13,8 +13,8 @@ import {
describeIf,
createIntegrationKernel,
skipUnlessWasmBuilt,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
diff --git a/registry/tests/kernel/exec-integration.test.ts b/packages/runtime-core/tests/integration/exec-integration.test.ts
similarity index 97%
rename from registry/tests/kernel/exec-integration.test.ts
rename to packages/runtime-core/tests/integration/exec-integration.test.ts
index a02216d71b..9cd0184869 100644
--- a/registry/tests/kernel/exec-integration.test.ts
+++ b/packages/runtime-core/tests/integration/exec-integration.test.ts
@@ -13,8 +13,8 @@ import {
describeIf,
createIntegrationKernel,
skipUnlessWasmBuilt,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
diff --git a/registry/tests/kernel/fd-inheritance.test.ts b/packages/runtime-core/tests/integration/fd-inheritance.test.ts
similarity index 95%
rename from registry/tests/kernel/fd-inheritance.test.ts
rename to packages/runtime-core/tests/integration/fd-inheritance.test.ts
index b99412009d..7892e5e75a 100644
--- a/registry/tests/kernel/fd-inheritance.test.ts
+++ b/packages/runtime-core/tests/integration/fd-inheritance.test.ts
@@ -12,8 +12,8 @@ import {
describeIf,
createIntegrationKernel,
skipUnlessWasmBuilt,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
diff --git a/registry/tests/kernel/module-resolution.test.ts b/packages/runtime-core/tests/integration/module-resolution.test.ts
similarity index 96%
rename from registry/tests/kernel/module-resolution.test.ts
rename to packages/runtime-core/tests/integration/module-resolution.test.ts
index 829f757144..424bbb5a69 100644
--- a/registry/tests/kernel/module-resolution.test.ts
+++ b/packages/runtime-core/tests/integration/module-resolution.test.ts
@@ -12,8 +12,8 @@ import {
describeIf,
createIntegrationKernel,
skipUnlessWasmBuilt,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
diff --git a/registry/tests/wasmvm/net-server.test.ts b/packages/runtime-core/tests/integration/net-server.test.ts
similarity index 97%
rename from registry/tests/wasmvm/net-server.test.ts
rename to packages/runtime-core/tests/integration/net-server.test.ts
index c943363629..8c29929c48 100644
--- a/registry/tests/wasmvm/net-server.test.ts
+++ b/packages/runtime-core/tests/integration/net-server.test.ts
@@ -7,7 +7,7 @@
*/
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-vm-test-harness';
import {
AF_INET,
COMMANDS_DIR,
@@ -16,8 +16,8 @@ import {
describeIf,
hasWasmBinaries,
SOCK_STREAM,
-} from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-vm-test-harness';
import { existsSync } from 'node:fs';
import { join } from 'node:path';
diff --git a/registry/tests/wasmvm/net-udp.test.ts b/packages/runtime-core/tests/integration/net-udp.test.ts
similarity index 97%
rename from registry/tests/wasmvm/net-udp.test.ts
rename to packages/runtime-core/tests/integration/net-udp.test.ts
index 98e6b93696..dcf9bdaa46 100644
--- a/registry/tests/wasmvm/net-udp.test.ts
+++ b/packages/runtime-core/tests/integration/net-udp.test.ts
@@ -7,7 +7,7 @@
*/
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-vm-test-harness';
import {
AF_INET,
COMMANDS_DIR,
@@ -16,8 +16,8 @@ import {
describeIf,
hasWasmBinaries,
SOCK_DGRAM,
-} from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-vm-test-harness';
import { existsSync } from 'node:fs';
import { join } from 'node:path';
diff --git a/registry/tests/wasmvm/net-unix.test.ts b/packages/runtime-core/tests/integration/net-unix.test.ts
similarity index 97%
rename from registry/tests/wasmvm/net-unix.test.ts
rename to packages/runtime-core/tests/integration/net-unix.test.ts
index b4bac046ba..848dcd0792 100644
--- a/registry/tests/wasmvm/net-unix.test.ts
+++ b/packages/runtime-core/tests/integration/net-unix.test.ts
@@ -7,7 +7,7 @@
*/
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-vm-test-harness';
import {
AF_UNIX,
COMMANDS_DIR,
@@ -16,8 +16,8 @@ import {
describeIf,
hasWasmBinaries,
SOCK_STREAM,
-} from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-vm-test-harness';
import { existsSync } from 'node:fs';
import { join } from 'node:path';
diff --git a/registry/tests/kernel/node-binary-behavior.test.ts b/packages/runtime-core/tests/integration/node-binary-behavior.test.ts
similarity index 99%
rename from registry/tests/kernel/node-binary-behavior.test.ts
rename to packages/runtime-core/tests/integration/node-binary-behavior.test.ts
index 0f71bd648b..6464eb3f44 100644
--- a/registry/tests/kernel/node-binary-behavior.test.ts
+++ b/packages/runtime-core/tests/integration/node-binary-behavior.test.ts
@@ -26,8 +26,8 @@ import {
createWasmVmRuntime,
NodeFileSystem,
COMMANDS_DIR,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
diff --git a/registry/tests/projects/astro-pass/astro.config.mjs b/packages/runtime-core/tests/integration/projects/astro-pass/astro.config.mjs
similarity index 100%
rename from registry/tests/projects/astro-pass/astro.config.mjs
rename to packages/runtime-core/tests/integration/projects/astro-pass/astro.config.mjs
diff --git a/registry/tests/projects/astro-pass/fixture.json b/packages/runtime-core/tests/integration/projects/astro-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/astro-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/astro-pass/fixture.json
diff --git a/registry/tests/projects/astro-pass/package.json b/packages/runtime-core/tests/integration/projects/astro-pass/package.json
similarity index 100%
rename from registry/tests/projects/astro-pass/package.json
rename to packages/runtime-core/tests/integration/projects/astro-pass/package.json
diff --git a/registry/tests/projects/astro-pass/src/components/Counter.jsx b/packages/runtime-core/tests/integration/projects/astro-pass/src/components/Counter.jsx
similarity index 100%
rename from registry/tests/projects/astro-pass/src/components/Counter.jsx
rename to packages/runtime-core/tests/integration/projects/astro-pass/src/components/Counter.jsx
diff --git a/registry/tests/projects/astro-pass/src/index.js b/packages/runtime-core/tests/integration/projects/astro-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/astro-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/astro-pass/src/index.js
diff --git a/registry/tests/projects/astro-pass/src/pages/index.astro b/packages/runtime-core/tests/integration/projects/astro-pass/src/pages/index.astro
similarity index 100%
rename from registry/tests/projects/astro-pass/src/pages/index.astro
rename to packages/runtime-core/tests/integration/projects/astro-pass/src/pages/index.astro
diff --git a/registry/tests/projects/axios-pass/fixture.json b/packages/runtime-core/tests/integration/projects/axios-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/axios-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/axios-pass/fixture.json
diff --git a/registry/tests/projects/axios-pass/package.json b/packages/runtime-core/tests/integration/projects/axios-pass/package.json
similarity index 100%
rename from registry/tests/projects/axios-pass/package.json
rename to packages/runtime-core/tests/integration/projects/axios-pass/package.json
diff --git a/registry/tests/projects/axios-pass/src/index.js b/packages/runtime-core/tests/integration/projects/axios-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/axios-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/axios-pass/src/index.js
diff --git a/registry/tests/projects/bcryptjs-pass/fixture.json b/packages/runtime-core/tests/integration/projects/bcryptjs-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/bcryptjs-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/bcryptjs-pass/fixture.json
diff --git a/registry/tests/projects/bcryptjs-pass/package.json b/packages/runtime-core/tests/integration/projects/bcryptjs-pass/package.json
similarity index 100%
rename from registry/tests/projects/bcryptjs-pass/package.json
rename to packages/runtime-core/tests/integration/projects/bcryptjs-pass/package.json
diff --git a/registry/tests/projects/bcryptjs-pass/pnpm-lock.yaml b/packages/runtime-core/tests/integration/projects/bcryptjs-pass/pnpm-lock.yaml
similarity index 100%
rename from registry/tests/projects/bcryptjs-pass/pnpm-lock.yaml
rename to packages/runtime-core/tests/integration/projects/bcryptjs-pass/pnpm-lock.yaml
diff --git a/registry/tests/projects/bcryptjs-pass/src/index.js b/packages/runtime-core/tests/integration/projects/bcryptjs-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/bcryptjs-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/bcryptjs-pass/src/index.js
diff --git a/registry/tests/projects/bun-layout-pass/bun.lock b/packages/runtime-core/tests/integration/projects/bun-layout-pass/bun.lock
similarity index 100%
rename from registry/tests/projects/bun-layout-pass/bun.lock
rename to packages/runtime-core/tests/integration/projects/bun-layout-pass/bun.lock
diff --git a/registry/tests/projects/bun-layout-pass/fixture.json b/packages/runtime-core/tests/integration/projects/bun-layout-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/bun-layout-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/bun-layout-pass/fixture.json
diff --git a/registry/tests/projects/bun-layout-pass/package.json b/packages/runtime-core/tests/integration/projects/bun-layout-pass/package.json
similarity index 100%
rename from registry/tests/projects/bun-layout-pass/package.json
rename to packages/runtime-core/tests/integration/projects/bun-layout-pass/package.json
diff --git a/registry/tests/projects/bun-layout-pass/src/index.js b/packages/runtime-core/tests/integration/projects/bun-layout-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/bun-layout-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/bun-layout-pass/src/index.js
diff --git a/registry/tests/projects/chalk-pass/fixture.json b/packages/runtime-core/tests/integration/projects/chalk-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/chalk-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/chalk-pass/fixture.json
diff --git a/registry/tests/projects/chalk-pass/package.json b/packages/runtime-core/tests/integration/projects/chalk-pass/package.json
similarity index 100%
rename from registry/tests/projects/chalk-pass/package.json
rename to packages/runtime-core/tests/integration/projects/chalk-pass/package.json
diff --git a/registry/tests/projects/chalk-pass/src/index.js b/packages/runtime-core/tests/integration/projects/chalk-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/chalk-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/chalk-pass/src/index.js
diff --git a/registry/tests/projects/conditional-exports-pass/fixture.json b/packages/runtime-core/tests/integration/projects/conditional-exports-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/conditional-exports-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/conditional-exports-pass/fixture.json
diff --git a/registry/tests/projects/conditional-exports-pass/package-lock.json b/packages/runtime-core/tests/integration/projects/conditional-exports-pass/package-lock.json
similarity index 100%
rename from registry/tests/projects/conditional-exports-pass/package-lock.json
rename to packages/runtime-core/tests/integration/projects/conditional-exports-pass/package-lock.json
diff --git a/registry/tests/projects/conditional-exports-pass/package.json b/packages/runtime-core/tests/integration/projects/conditional-exports-pass/package.json
similarity index 100%
rename from registry/tests/projects/conditional-exports-pass/package.json
rename to packages/runtime-core/tests/integration/projects/conditional-exports-pass/package.json
diff --git a/registry/tests/projects/conditional-exports-pass/packages/cond-exports-lib/lib/feature-cjs.js b/packages/runtime-core/tests/integration/projects/conditional-exports-pass/packages/cond-exports-lib/lib/feature-cjs.js
similarity index 100%
rename from registry/tests/projects/conditional-exports-pass/packages/cond-exports-lib/lib/feature-cjs.js
rename to packages/runtime-core/tests/integration/projects/conditional-exports-pass/packages/cond-exports-lib/lib/feature-cjs.js
diff --git a/registry/tests/projects/conditional-exports-pass/packages/cond-exports-lib/lib/feature-default.js b/packages/runtime-core/tests/integration/projects/conditional-exports-pass/packages/cond-exports-lib/lib/feature-default.js
similarity index 100%
rename from registry/tests/projects/conditional-exports-pass/packages/cond-exports-lib/lib/feature-default.js
rename to packages/runtime-core/tests/integration/projects/conditional-exports-pass/packages/cond-exports-lib/lib/feature-default.js
diff --git a/registry/tests/projects/conditional-exports-pass/packages/cond-exports-lib/lib/main-cjs.js b/packages/runtime-core/tests/integration/projects/conditional-exports-pass/packages/cond-exports-lib/lib/main-cjs.js
similarity index 100%
rename from registry/tests/projects/conditional-exports-pass/packages/cond-exports-lib/lib/main-cjs.js
rename to packages/runtime-core/tests/integration/projects/conditional-exports-pass/packages/cond-exports-lib/lib/main-cjs.js
diff --git a/registry/tests/projects/conditional-exports-pass/packages/cond-exports-lib/lib/main-default.js b/packages/runtime-core/tests/integration/projects/conditional-exports-pass/packages/cond-exports-lib/lib/main-default.js
similarity index 100%
rename from registry/tests/projects/conditional-exports-pass/packages/cond-exports-lib/lib/main-default.js
rename to packages/runtime-core/tests/integration/projects/conditional-exports-pass/packages/cond-exports-lib/lib/main-default.js
diff --git a/registry/tests/projects/conditional-exports-pass/packages/cond-exports-lib/package.json b/packages/runtime-core/tests/integration/projects/conditional-exports-pass/packages/cond-exports-lib/package.json
similarity index 100%
rename from registry/tests/projects/conditional-exports-pass/packages/cond-exports-lib/package.json
rename to packages/runtime-core/tests/integration/projects/conditional-exports-pass/packages/cond-exports-lib/package.json
diff --git a/registry/tests/projects/conditional-exports-pass/src/index.js b/packages/runtime-core/tests/integration/projects/conditional-exports-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/conditional-exports-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/conditional-exports-pass/src/index.js
diff --git a/registry/tests/projects/crypto-random-pass/fixture.json b/packages/runtime-core/tests/integration/projects/crypto-random-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/crypto-random-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/crypto-random-pass/fixture.json
diff --git a/registry/tests/projects/crypto-random-pass/package.json b/packages/runtime-core/tests/integration/projects/crypto-random-pass/package.json
similarity index 100%
rename from registry/tests/projects/crypto-random-pass/package.json
rename to packages/runtime-core/tests/integration/projects/crypto-random-pass/package.json
diff --git a/registry/tests/projects/crypto-random-pass/src/index.js b/packages/runtime-core/tests/integration/projects/crypto-random-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/crypto-random-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/crypto-random-pass/src/index.js
diff --git a/registry/tests/projects/dotenv-pass/.env b/packages/runtime-core/tests/integration/projects/dotenv-pass/.env
similarity index 100%
rename from registry/tests/projects/dotenv-pass/.env
rename to packages/runtime-core/tests/integration/projects/dotenv-pass/.env
diff --git a/registry/tests/projects/dotenv-pass/fixture.json b/packages/runtime-core/tests/integration/projects/dotenv-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/dotenv-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/dotenv-pass/fixture.json
diff --git a/registry/tests/projects/dotenv-pass/package.json b/packages/runtime-core/tests/integration/projects/dotenv-pass/package.json
similarity index 100%
rename from registry/tests/projects/dotenv-pass/package.json
rename to packages/runtime-core/tests/integration/projects/dotenv-pass/package.json
diff --git a/registry/tests/projects/dotenv-pass/src/index.js b/packages/runtime-core/tests/integration/projects/dotenv-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/dotenv-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/dotenv-pass/src/index.js
diff --git a/registry/tests/projects/drizzle-pass/fixture.json b/packages/runtime-core/tests/integration/projects/drizzle-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/drizzle-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/drizzle-pass/fixture.json
diff --git a/registry/tests/projects/drizzle-pass/package.json b/packages/runtime-core/tests/integration/projects/drizzle-pass/package.json
similarity index 100%
rename from registry/tests/projects/drizzle-pass/package.json
rename to packages/runtime-core/tests/integration/projects/drizzle-pass/package.json
diff --git a/registry/tests/projects/drizzle-pass/src/index.js b/packages/runtime-core/tests/integration/projects/drizzle-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/drizzle-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/drizzle-pass/src/index.js
diff --git a/registry/tests/projects/esm-import-pass/fixture.json b/packages/runtime-core/tests/integration/projects/esm-import-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/esm-import-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/esm-import-pass/fixture.json
diff --git a/registry/tests/projects/esm-import-pass/package.json b/packages/runtime-core/tests/integration/projects/esm-import-pass/package.json
similarity index 100%
rename from registry/tests/projects/esm-import-pass/package.json
rename to packages/runtime-core/tests/integration/projects/esm-import-pass/package.json
diff --git a/registry/tests/projects/esm-import-pass/src/index.js b/packages/runtime-core/tests/integration/projects/esm-import-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/esm-import-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/esm-import-pass/src/index.js
diff --git a/registry/tests/projects/express-pass/fixture.json b/packages/runtime-core/tests/integration/projects/express-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/express-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/express-pass/fixture.json
diff --git a/registry/tests/projects/express-pass/package.json b/packages/runtime-core/tests/integration/projects/express-pass/package.json
similarity index 100%
rename from registry/tests/projects/express-pass/package.json
rename to packages/runtime-core/tests/integration/projects/express-pass/package.json
diff --git a/registry/tests/projects/express-pass/pnpm-lock.yaml b/packages/runtime-core/tests/integration/projects/express-pass/pnpm-lock.yaml
similarity index 100%
rename from registry/tests/projects/express-pass/pnpm-lock.yaml
rename to packages/runtime-core/tests/integration/projects/express-pass/pnpm-lock.yaml
diff --git a/registry/tests/projects/express-pass/src/index.js b/packages/runtime-core/tests/integration/projects/express-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/express-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/express-pass/src/index.js
diff --git a/registry/tests/projects/fastify-pass/fixture.json b/packages/runtime-core/tests/integration/projects/fastify-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/fastify-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/fastify-pass/fixture.json
diff --git a/registry/tests/projects/fastify-pass/package.json b/packages/runtime-core/tests/integration/projects/fastify-pass/package.json
similarity index 100%
rename from registry/tests/projects/fastify-pass/package.json
rename to packages/runtime-core/tests/integration/projects/fastify-pass/package.json
diff --git a/registry/tests/projects/fastify-pass/pnpm-lock.yaml b/packages/runtime-core/tests/integration/projects/fastify-pass/pnpm-lock.yaml
similarity index 100%
rename from registry/tests/projects/fastify-pass/pnpm-lock.yaml
rename to packages/runtime-core/tests/integration/projects/fastify-pass/pnpm-lock.yaml
diff --git a/registry/tests/projects/fastify-pass/src/index.js b/packages/runtime-core/tests/integration/projects/fastify-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/fastify-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/fastify-pass/src/index.js
diff --git a/registry/tests/projects/fs-metadata-rename-pass/fixture.json b/packages/runtime-core/tests/integration/projects/fs-metadata-rename-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/fs-metadata-rename-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/fs-metadata-rename-pass/fixture.json
diff --git a/registry/tests/projects/fs-metadata-rename-pass/package.json b/packages/runtime-core/tests/integration/projects/fs-metadata-rename-pass/package.json
similarity index 100%
rename from registry/tests/projects/fs-metadata-rename-pass/package.json
rename to packages/runtime-core/tests/integration/projects/fs-metadata-rename-pass/package.json
diff --git a/registry/tests/projects/fs-metadata-rename-pass/src/index.js b/packages/runtime-core/tests/integration/projects/fs-metadata-rename-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/fs-metadata-rename-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/fs-metadata-rename-pass/src/index.js
diff --git a/registry/tests/projects/ioredis-pass/fixture.json b/packages/runtime-core/tests/integration/projects/ioredis-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/ioredis-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/ioredis-pass/fixture.json
diff --git a/registry/tests/projects/ioredis-pass/package.json b/packages/runtime-core/tests/integration/projects/ioredis-pass/package.json
similarity index 100%
rename from registry/tests/projects/ioredis-pass/package.json
rename to packages/runtime-core/tests/integration/projects/ioredis-pass/package.json
diff --git a/registry/tests/projects/ioredis-pass/pnpm-lock.yaml b/packages/runtime-core/tests/integration/projects/ioredis-pass/pnpm-lock.yaml
similarity index 100%
rename from registry/tests/projects/ioredis-pass/pnpm-lock.yaml
rename to packages/runtime-core/tests/integration/projects/ioredis-pass/pnpm-lock.yaml
diff --git a/registry/tests/projects/ioredis-pass/src/index.js b/packages/runtime-core/tests/integration/projects/ioredis-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/ioredis-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/ioredis-pass/src/index.js
diff --git a/registry/tests/projects/jsonwebtoken-pass/fixture.json b/packages/runtime-core/tests/integration/projects/jsonwebtoken-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/jsonwebtoken-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/jsonwebtoken-pass/fixture.json
diff --git a/registry/tests/projects/jsonwebtoken-pass/package.json b/packages/runtime-core/tests/integration/projects/jsonwebtoken-pass/package.json
similarity index 100%
rename from registry/tests/projects/jsonwebtoken-pass/package.json
rename to packages/runtime-core/tests/integration/projects/jsonwebtoken-pass/package.json
diff --git a/registry/tests/projects/jsonwebtoken-pass/src/index.js b/packages/runtime-core/tests/integration/projects/jsonwebtoken-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/jsonwebtoken-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/jsonwebtoken-pass/src/index.js
diff --git a/registry/tests/projects/lodash-es-pass/fixture.json b/packages/runtime-core/tests/integration/projects/lodash-es-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/lodash-es-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/lodash-es-pass/fixture.json
diff --git a/registry/tests/projects/lodash-es-pass/package.json b/packages/runtime-core/tests/integration/projects/lodash-es-pass/package.json
similarity index 100%
rename from registry/tests/projects/lodash-es-pass/package.json
rename to packages/runtime-core/tests/integration/projects/lodash-es-pass/package.json
diff --git a/registry/tests/projects/lodash-es-pass/pnpm-lock.yaml b/packages/runtime-core/tests/integration/projects/lodash-es-pass/pnpm-lock.yaml
similarity index 100%
rename from registry/tests/projects/lodash-es-pass/pnpm-lock.yaml
rename to packages/runtime-core/tests/integration/projects/lodash-es-pass/pnpm-lock.yaml
diff --git a/registry/tests/projects/lodash-es-pass/src/index.js b/packages/runtime-core/tests/integration/projects/lodash-es-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/lodash-es-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/lodash-es-pass/src/index.js
diff --git a/registry/tests/projects/module-access-pass/fixture.json b/packages/runtime-core/tests/integration/projects/module-access-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/module-access-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/module-access-pass/fixture.json
diff --git a/registry/tests/projects/module-access-pass/package.json b/packages/runtime-core/tests/integration/projects/module-access-pass/package.json
similarity index 100%
rename from registry/tests/projects/module-access-pass/package.json
rename to packages/runtime-core/tests/integration/projects/module-access-pass/package.json
diff --git a/registry/tests/projects/module-access-pass/src/index.js b/packages/runtime-core/tests/integration/projects/module-access-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/module-access-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/module-access-pass/src/index.js
diff --git a/registry/tests/projects/module-access-pass/vendor/entry-lib/index.js b/packages/runtime-core/tests/integration/projects/module-access-pass/vendor/entry-lib/index.js
similarity index 100%
rename from registry/tests/projects/module-access-pass/vendor/entry-lib/index.js
rename to packages/runtime-core/tests/integration/projects/module-access-pass/vendor/entry-lib/index.js
diff --git a/registry/tests/projects/module-access-pass/vendor/entry-lib/package.json b/packages/runtime-core/tests/integration/projects/module-access-pass/vendor/entry-lib/package.json
similarity index 100%
rename from registry/tests/projects/module-access-pass/vendor/entry-lib/package.json
rename to packages/runtime-core/tests/integration/projects/module-access-pass/vendor/entry-lib/package.json
diff --git a/registry/tests/projects/module-access-pass/vendor/transitive-lib/index.js b/packages/runtime-core/tests/integration/projects/module-access-pass/vendor/transitive-lib/index.js
similarity index 100%
rename from registry/tests/projects/module-access-pass/vendor/transitive-lib/index.js
rename to packages/runtime-core/tests/integration/projects/module-access-pass/vendor/transitive-lib/index.js
diff --git a/registry/tests/projects/module-access-pass/vendor/transitive-lib/package.json b/packages/runtime-core/tests/integration/projects/module-access-pass/vendor/transitive-lib/package.json
similarity index 100%
rename from registry/tests/projects/module-access-pass/vendor/transitive-lib/package.json
rename to packages/runtime-core/tests/integration/projects/module-access-pass/vendor/transitive-lib/package.json
diff --git a/registry/tests/projects/mysql2-pass/fixture.json b/packages/runtime-core/tests/integration/projects/mysql2-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/mysql2-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/mysql2-pass/fixture.json
diff --git a/registry/tests/projects/mysql2-pass/package.json b/packages/runtime-core/tests/integration/projects/mysql2-pass/package.json
similarity index 100%
rename from registry/tests/projects/mysql2-pass/package.json
rename to packages/runtime-core/tests/integration/projects/mysql2-pass/package.json
diff --git a/registry/tests/projects/mysql2-pass/src/index.js b/packages/runtime-core/tests/integration/projects/mysql2-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/mysql2-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/mysql2-pass/src/index.js
diff --git a/registry/tests/projects/net-create-server-pass/fixture.json b/packages/runtime-core/tests/integration/projects/net-create-server-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/net-create-server-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/net-create-server-pass/fixture.json
diff --git a/registry/tests/projects/net-create-server-pass/package.json b/packages/runtime-core/tests/integration/projects/net-create-server-pass/package.json
similarity index 100%
rename from registry/tests/projects/net-create-server-pass/package.json
rename to packages/runtime-core/tests/integration/projects/net-create-server-pass/package.json
diff --git a/registry/tests/projects/net-create-server-pass/src/index.js b/packages/runtime-core/tests/integration/projects/net-create-server-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/net-create-server-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/net-create-server-pass/src/index.js
diff --git a/registry/tests/projects/nextjs-pass/.babelrc b/packages/runtime-core/tests/integration/projects/nextjs-pass/.babelrc
similarity index 100%
rename from registry/tests/projects/nextjs-pass/.babelrc
rename to packages/runtime-core/tests/integration/projects/nextjs-pass/.babelrc
diff --git a/registry/tests/projects/nextjs-pass/fixture.json b/packages/runtime-core/tests/integration/projects/nextjs-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/nextjs-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/nextjs-pass/fixture.json
diff --git a/registry/tests/projects/nextjs-pass/next-wasm-shim.cjs b/packages/runtime-core/tests/integration/projects/nextjs-pass/next-wasm-shim.cjs
similarity index 100%
rename from registry/tests/projects/nextjs-pass/next-wasm-shim.cjs
rename to packages/runtime-core/tests/integration/projects/nextjs-pass/next-wasm-shim.cjs
diff --git a/registry/tests/projects/nextjs-pass/next.config.js b/packages/runtime-core/tests/integration/projects/nextjs-pass/next.config.js
similarity index 100%
rename from registry/tests/projects/nextjs-pass/next.config.js
rename to packages/runtime-core/tests/integration/projects/nextjs-pass/next.config.js
diff --git a/registry/tests/projects/nextjs-pass/package.json b/packages/runtime-core/tests/integration/projects/nextjs-pass/package.json
similarity index 100%
rename from registry/tests/projects/nextjs-pass/package.json
rename to packages/runtime-core/tests/integration/projects/nextjs-pass/package.json
diff --git a/registry/tests/projects/nextjs-pass/pages/api/hello.js b/packages/runtime-core/tests/integration/projects/nextjs-pass/pages/api/hello.js
similarity index 100%
rename from registry/tests/projects/nextjs-pass/pages/api/hello.js
rename to packages/runtime-core/tests/integration/projects/nextjs-pass/pages/api/hello.js
diff --git a/registry/tests/projects/nextjs-pass/pages/index.js b/packages/runtime-core/tests/integration/projects/nextjs-pass/pages/index.js
similarity index 100%
rename from registry/tests/projects/nextjs-pass/pages/index.js
rename to packages/runtime-core/tests/integration/projects/nextjs-pass/pages/index.js
diff --git a/registry/tests/projects/nextjs-pass/run-next-build.cjs b/packages/runtime-core/tests/integration/projects/nextjs-pass/run-next-build.cjs
similarity index 100%
rename from registry/tests/projects/nextjs-pass/run-next-build.cjs
rename to packages/runtime-core/tests/integration/projects/nextjs-pass/run-next-build.cjs
diff --git a/registry/tests/projects/nextjs-pass/src/index.js b/packages/runtime-core/tests/integration/projects/nextjs-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/nextjs-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/nextjs-pass/src/index.js
diff --git a/registry/tests/projects/node-fetch-pass/fixture.json b/packages/runtime-core/tests/integration/projects/node-fetch-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/node-fetch-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/node-fetch-pass/fixture.json
diff --git a/registry/tests/projects/node-fetch-pass/package.json b/packages/runtime-core/tests/integration/projects/node-fetch-pass/package.json
similarity index 100%
rename from registry/tests/projects/node-fetch-pass/package.json
rename to packages/runtime-core/tests/integration/projects/node-fetch-pass/package.json
diff --git a/registry/tests/projects/node-fetch-pass/src/index.js b/packages/runtime-core/tests/integration/projects/node-fetch-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/node-fetch-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/node-fetch-pass/src/index.js
diff --git a/registry/tests/projects/npm-layout-pass/fixture.json b/packages/runtime-core/tests/integration/projects/npm-layout-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/npm-layout-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/npm-layout-pass/fixture.json
diff --git a/registry/tests/projects/npm-layout-pass/package-lock.json b/packages/runtime-core/tests/integration/projects/npm-layout-pass/package-lock.json
similarity index 100%
rename from registry/tests/projects/npm-layout-pass/package-lock.json
rename to packages/runtime-core/tests/integration/projects/npm-layout-pass/package-lock.json
diff --git a/registry/tests/projects/npm-layout-pass/package.json b/packages/runtime-core/tests/integration/projects/npm-layout-pass/package.json
similarity index 100%
rename from registry/tests/projects/npm-layout-pass/package.json
rename to packages/runtime-core/tests/integration/projects/npm-layout-pass/package.json
diff --git a/registry/tests/projects/npm-layout-pass/src/index.js b/packages/runtime-core/tests/integration/projects/npm-layout-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/npm-layout-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/npm-layout-pass/src/index.js
diff --git a/registry/tests/projects/optional-deps-pass/fixture.json b/packages/runtime-core/tests/integration/projects/optional-deps-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/optional-deps-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/optional-deps-pass/fixture.json
diff --git a/registry/tests/projects/optional-deps-pass/package-lock.json b/packages/runtime-core/tests/integration/projects/optional-deps-pass/package-lock.json
similarity index 100%
rename from registry/tests/projects/optional-deps-pass/package-lock.json
rename to packages/runtime-core/tests/integration/projects/optional-deps-pass/package-lock.json
diff --git a/registry/tests/projects/optional-deps-pass/package.json b/packages/runtime-core/tests/integration/projects/optional-deps-pass/package.json
similarity index 100%
rename from registry/tests/projects/optional-deps-pass/package.json
rename to packages/runtime-core/tests/integration/projects/optional-deps-pass/package.json
diff --git a/registry/tests/projects/optional-deps-pass/src/index.js b/packages/runtime-core/tests/integration/projects/optional-deps-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/optional-deps-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/optional-deps-pass/src/index.js
diff --git a/registry/tests/projects/peer-deps-pass/fixture.json b/packages/runtime-core/tests/integration/projects/peer-deps-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/peer-deps-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/peer-deps-pass/fixture.json
diff --git a/registry/tests/projects/peer-deps-pass/package-lock.json b/packages/runtime-core/tests/integration/projects/peer-deps-pass/package-lock.json
similarity index 100%
rename from registry/tests/projects/peer-deps-pass/package-lock.json
rename to packages/runtime-core/tests/integration/projects/peer-deps-pass/package-lock.json
diff --git a/registry/tests/projects/peer-deps-pass/package.json b/packages/runtime-core/tests/integration/projects/peer-deps-pass/package.json
similarity index 100%
rename from registry/tests/projects/peer-deps-pass/package.json
rename to packages/runtime-core/tests/integration/projects/peer-deps-pass/package.json
diff --git a/registry/tests/projects/peer-deps-pass/packages/host/index.js b/packages/runtime-core/tests/integration/projects/peer-deps-pass/packages/host/index.js
similarity index 100%
rename from registry/tests/projects/peer-deps-pass/packages/host/index.js
rename to packages/runtime-core/tests/integration/projects/peer-deps-pass/packages/host/index.js
diff --git a/registry/tests/projects/peer-deps-pass/packages/host/package.json b/packages/runtime-core/tests/integration/projects/peer-deps-pass/packages/host/package.json
similarity index 100%
rename from registry/tests/projects/peer-deps-pass/packages/host/package.json
rename to packages/runtime-core/tests/integration/projects/peer-deps-pass/packages/host/package.json
diff --git a/registry/tests/projects/peer-deps-pass/packages/plugin/index.js b/packages/runtime-core/tests/integration/projects/peer-deps-pass/packages/plugin/index.js
similarity index 100%
rename from registry/tests/projects/peer-deps-pass/packages/plugin/index.js
rename to packages/runtime-core/tests/integration/projects/peer-deps-pass/packages/plugin/index.js
diff --git a/registry/tests/projects/peer-deps-pass/packages/plugin/package.json b/packages/runtime-core/tests/integration/projects/peer-deps-pass/packages/plugin/package.json
similarity index 100%
rename from registry/tests/projects/peer-deps-pass/packages/plugin/package.json
rename to packages/runtime-core/tests/integration/projects/peer-deps-pass/packages/plugin/package.json
diff --git a/registry/tests/projects/peer-deps-pass/src/index.js b/packages/runtime-core/tests/integration/projects/peer-deps-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/peer-deps-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/peer-deps-pass/src/index.js
diff --git a/registry/tests/projects/pg-pass/fixture.json b/packages/runtime-core/tests/integration/projects/pg-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/pg-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/pg-pass/fixture.json
diff --git a/registry/tests/projects/pg-pass/package.json b/packages/runtime-core/tests/integration/projects/pg-pass/package.json
similarity index 100%
rename from registry/tests/projects/pg-pass/package.json
rename to packages/runtime-core/tests/integration/projects/pg-pass/package.json
diff --git a/registry/tests/projects/pg-pass/pnpm-lock.yaml b/packages/runtime-core/tests/integration/projects/pg-pass/pnpm-lock.yaml
similarity index 100%
rename from registry/tests/projects/pg-pass/pnpm-lock.yaml
rename to packages/runtime-core/tests/integration/projects/pg-pass/pnpm-lock.yaml
diff --git a/registry/tests/projects/pg-pass/src/index.js b/packages/runtime-core/tests/integration/projects/pg-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/pg-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/pg-pass/src/index.js
diff --git a/registry/tests/projects/pino-pass/fixture.json b/packages/runtime-core/tests/integration/projects/pino-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/pino-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/pino-pass/fixture.json
diff --git a/registry/tests/projects/pino-pass/package.json b/packages/runtime-core/tests/integration/projects/pino-pass/package.json
similarity index 100%
rename from registry/tests/projects/pino-pass/package.json
rename to packages/runtime-core/tests/integration/projects/pino-pass/package.json
diff --git a/registry/tests/projects/pino-pass/pnpm-lock.yaml b/packages/runtime-core/tests/integration/projects/pino-pass/pnpm-lock.yaml
similarity index 100%
rename from registry/tests/projects/pino-pass/pnpm-lock.yaml
rename to packages/runtime-core/tests/integration/projects/pino-pass/pnpm-lock.yaml
diff --git a/registry/tests/projects/pino-pass/src/index.js b/packages/runtime-core/tests/integration/projects/pino-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/pino-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/pino-pass/src/index.js
diff --git a/registry/tests/projects/pnpm-layout-pass/fixture.json b/packages/runtime-core/tests/integration/projects/pnpm-layout-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/pnpm-layout-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/pnpm-layout-pass/fixture.json
diff --git a/registry/tests/projects/pnpm-layout-pass/package.json b/packages/runtime-core/tests/integration/projects/pnpm-layout-pass/package.json
similarity index 100%
rename from registry/tests/projects/pnpm-layout-pass/package.json
rename to packages/runtime-core/tests/integration/projects/pnpm-layout-pass/package.json
diff --git a/registry/tests/projects/pnpm-layout-pass/pnpm-lock.yaml b/packages/runtime-core/tests/integration/projects/pnpm-layout-pass/pnpm-lock.yaml
similarity index 100%
rename from registry/tests/projects/pnpm-layout-pass/pnpm-lock.yaml
rename to packages/runtime-core/tests/integration/projects/pnpm-layout-pass/pnpm-lock.yaml
diff --git a/registry/tests/projects/pnpm-layout-pass/src/index.js b/packages/runtime-core/tests/integration/projects/pnpm-layout-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/pnpm-layout-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/pnpm-layout-pass/src/index.js
diff --git a/registry/tests/projects/rivetkit/fixture.json b/packages/runtime-core/tests/integration/projects/rivetkit/fixture.json
similarity index 100%
rename from registry/tests/projects/rivetkit/fixture.json
rename to packages/runtime-core/tests/integration/projects/rivetkit/fixture.json
diff --git a/registry/tests/projects/rivetkit/package.json b/packages/runtime-core/tests/integration/projects/rivetkit/package.json
similarity index 100%
rename from registry/tests/projects/rivetkit/package.json
rename to packages/runtime-core/tests/integration/projects/rivetkit/package.json
diff --git a/registry/tests/projects/rivetkit/src/index.js b/packages/runtime-core/tests/integration/projects/rivetkit/src/index.js
similarity index 100%
rename from registry/tests/projects/rivetkit/src/index.js
rename to packages/runtime-core/tests/integration/projects/rivetkit/src/index.js
diff --git a/registry/tests/projects/rivetkit/vendor/rivetkit/package.json b/packages/runtime-core/tests/integration/projects/rivetkit/vendor/rivetkit/package.json
similarity index 100%
rename from registry/tests/projects/rivetkit/vendor/rivetkit/package.json
rename to packages/runtime-core/tests/integration/projects/rivetkit/vendor/rivetkit/package.json
diff --git a/registry/tests/projects/semver-pass/fixture.json b/packages/runtime-core/tests/integration/projects/semver-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/semver-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/semver-pass/fixture.json
diff --git a/registry/tests/projects/semver-pass/package.json b/packages/runtime-core/tests/integration/projects/semver-pass/package.json
similarity index 100%
rename from registry/tests/projects/semver-pass/package.json
rename to packages/runtime-core/tests/integration/projects/semver-pass/package.json
diff --git a/registry/tests/projects/semver-pass/src/index.js b/packages/runtime-core/tests/integration/projects/semver-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/semver-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/semver-pass/src/index.js
diff --git a/registry/tests/projects/sse-streaming-pass/fixture.json b/packages/runtime-core/tests/integration/projects/sse-streaming-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/sse-streaming-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/sse-streaming-pass/fixture.json
diff --git a/registry/tests/projects/sse-streaming-pass/package.json b/packages/runtime-core/tests/integration/projects/sse-streaming-pass/package.json
similarity index 100%
rename from registry/tests/projects/sse-streaming-pass/package.json
rename to packages/runtime-core/tests/integration/projects/sse-streaming-pass/package.json
diff --git a/registry/tests/projects/sse-streaming-pass/src/index.js b/packages/runtime-core/tests/integration/projects/sse-streaming-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/sse-streaming-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/sse-streaming-pass/src/index.js
diff --git a/registry/tests/projects/ssh2-pass/fixture.json b/packages/runtime-core/tests/integration/projects/ssh2-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/ssh2-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/ssh2-pass/fixture.json
diff --git a/registry/tests/projects/ssh2-pass/package.json b/packages/runtime-core/tests/integration/projects/ssh2-pass/package.json
similarity index 100%
rename from registry/tests/projects/ssh2-pass/package.json
rename to packages/runtime-core/tests/integration/projects/ssh2-pass/package.json
diff --git a/registry/tests/projects/ssh2-pass/src/index.js b/packages/runtime-core/tests/integration/projects/ssh2-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/ssh2-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/ssh2-pass/src/index.js
diff --git a/registry/tests/projects/ssh2-sftp-client-pass/fixture.json b/packages/runtime-core/tests/integration/projects/ssh2-sftp-client-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/ssh2-sftp-client-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/ssh2-sftp-client-pass/fixture.json
diff --git a/registry/tests/projects/ssh2-sftp-client-pass/package.json b/packages/runtime-core/tests/integration/projects/ssh2-sftp-client-pass/package.json
similarity index 100%
rename from registry/tests/projects/ssh2-sftp-client-pass/package.json
rename to packages/runtime-core/tests/integration/projects/ssh2-sftp-client-pass/package.json
diff --git a/registry/tests/projects/ssh2-sftp-client-pass/src/index.js b/packages/runtime-core/tests/integration/projects/ssh2-sftp-client-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/ssh2-sftp-client-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/ssh2-sftp-client-pass/src/index.js
diff --git a/registry/tests/projects/transitive-deps-pass/fixture.json b/packages/runtime-core/tests/integration/projects/transitive-deps-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/transitive-deps-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/transitive-deps-pass/fixture.json
diff --git a/registry/tests/projects/transitive-deps-pass/package-lock.json b/packages/runtime-core/tests/integration/projects/transitive-deps-pass/package-lock.json
similarity index 100%
rename from registry/tests/projects/transitive-deps-pass/package-lock.json
rename to packages/runtime-core/tests/integration/projects/transitive-deps-pass/package-lock.json
diff --git a/registry/tests/projects/transitive-deps-pass/package.json b/packages/runtime-core/tests/integration/projects/transitive-deps-pass/package.json
similarity index 100%
rename from registry/tests/projects/transitive-deps-pass/package.json
rename to packages/runtime-core/tests/integration/projects/transitive-deps-pass/package.json
diff --git a/registry/tests/projects/transitive-deps-pass/packages/level-a/index.js b/packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-a/index.js
similarity index 100%
rename from registry/tests/projects/transitive-deps-pass/packages/level-a/index.js
rename to packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-a/index.js
diff --git a/registry/tests/projects/transitive-deps-pass/packages/level-a/package.json b/packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-a/package.json
similarity index 100%
rename from registry/tests/projects/transitive-deps-pass/packages/level-a/package.json
rename to packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-a/package.json
diff --git a/registry/tests/projects/transitive-deps-pass/packages/level-b/index.js b/packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-b/index.js
similarity index 100%
rename from registry/tests/projects/transitive-deps-pass/packages/level-b/index.js
rename to packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-b/index.js
diff --git a/registry/tests/projects/transitive-deps-pass/packages/level-b/package.json b/packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-b/package.json
similarity index 100%
rename from registry/tests/projects/transitive-deps-pass/packages/level-b/package.json
rename to packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-b/package.json
diff --git a/registry/tests/projects/transitive-deps-pass/packages/level-c/index.js b/packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-c/index.js
similarity index 100%
rename from registry/tests/projects/transitive-deps-pass/packages/level-c/index.js
rename to packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-c/index.js
diff --git a/registry/tests/projects/transitive-deps-pass/packages/level-c/package.json b/packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-c/package.json
similarity index 100%
rename from registry/tests/projects/transitive-deps-pass/packages/level-c/package.json
rename to packages/runtime-core/tests/integration/projects/transitive-deps-pass/packages/level-c/package.json
diff --git a/registry/tests/projects/transitive-deps-pass/src/index.js b/packages/runtime-core/tests/integration/projects/transitive-deps-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/transitive-deps-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/transitive-deps-pass/src/index.js
diff --git a/registry/tests/projects/uuid-pass/fixture.json b/packages/runtime-core/tests/integration/projects/uuid-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/uuid-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/uuid-pass/fixture.json
diff --git a/registry/tests/projects/uuid-pass/package.json b/packages/runtime-core/tests/integration/projects/uuid-pass/package.json
similarity index 100%
rename from registry/tests/projects/uuid-pass/package.json
rename to packages/runtime-core/tests/integration/projects/uuid-pass/package.json
diff --git a/registry/tests/projects/uuid-pass/src/index.js b/packages/runtime-core/tests/integration/projects/uuid-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/uuid-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/uuid-pass/src/index.js
diff --git a/registry/tests/projects/vite-pass/app/main.jsx b/packages/runtime-core/tests/integration/projects/vite-pass/app/main.jsx
similarity index 100%
rename from registry/tests/projects/vite-pass/app/main.jsx
rename to packages/runtime-core/tests/integration/projects/vite-pass/app/main.jsx
diff --git a/registry/tests/projects/vite-pass/fixture.json b/packages/runtime-core/tests/integration/projects/vite-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/vite-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/vite-pass/fixture.json
diff --git a/registry/tests/projects/vite-pass/index.html b/packages/runtime-core/tests/integration/projects/vite-pass/index.html
similarity index 100%
rename from registry/tests/projects/vite-pass/index.html
rename to packages/runtime-core/tests/integration/projects/vite-pass/index.html
diff --git a/registry/tests/projects/vite-pass/package.json b/packages/runtime-core/tests/integration/projects/vite-pass/package.json
similarity index 100%
rename from registry/tests/projects/vite-pass/package.json
rename to packages/runtime-core/tests/integration/projects/vite-pass/package.json
diff --git a/registry/tests/projects/vite-pass/src/index.js b/packages/runtime-core/tests/integration/projects/vite-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/vite-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/vite-pass/src/index.js
diff --git a/registry/tests/projects/vite-pass/vite.config.mjs b/packages/runtime-core/tests/integration/projects/vite-pass/vite.config.mjs
similarity index 100%
rename from registry/tests/projects/vite-pass/vite.config.mjs
rename to packages/runtime-core/tests/integration/projects/vite-pass/vite.config.mjs
diff --git a/registry/tests/projects/workspace-layout-pass/fixture.json b/packages/runtime-core/tests/integration/projects/workspace-layout-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/workspace-layout-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/workspace-layout-pass/fixture.json
diff --git a/registry/tests/projects/workspace-layout-pass/package.json b/packages/runtime-core/tests/integration/projects/workspace-layout-pass/package.json
similarity index 100%
rename from registry/tests/projects/workspace-layout-pass/package.json
rename to packages/runtime-core/tests/integration/projects/workspace-layout-pass/package.json
diff --git a/registry/tests/projects/workspace-layout-pass/packages/app/package.json b/packages/runtime-core/tests/integration/projects/workspace-layout-pass/packages/app/package.json
similarity index 100%
rename from registry/tests/projects/workspace-layout-pass/packages/app/package.json
rename to packages/runtime-core/tests/integration/projects/workspace-layout-pass/packages/app/package.json
diff --git a/registry/tests/projects/workspace-layout-pass/packages/app/src/index.js b/packages/runtime-core/tests/integration/projects/workspace-layout-pass/packages/app/src/index.js
similarity index 100%
rename from registry/tests/projects/workspace-layout-pass/packages/app/src/index.js
rename to packages/runtime-core/tests/integration/projects/workspace-layout-pass/packages/app/src/index.js
diff --git a/registry/tests/projects/workspace-layout-pass/packages/lib/package.json b/packages/runtime-core/tests/integration/projects/workspace-layout-pass/packages/lib/package.json
similarity index 100%
rename from registry/tests/projects/workspace-layout-pass/packages/lib/package.json
rename to packages/runtime-core/tests/integration/projects/workspace-layout-pass/packages/lib/package.json
diff --git a/registry/tests/projects/workspace-layout-pass/packages/lib/src/index.js b/packages/runtime-core/tests/integration/projects/workspace-layout-pass/packages/lib/src/index.js
similarity index 100%
rename from registry/tests/projects/workspace-layout-pass/packages/lib/src/index.js
rename to packages/runtime-core/tests/integration/projects/workspace-layout-pass/packages/lib/src/index.js
diff --git a/registry/tests/projects/ws-pass/fixture.json b/packages/runtime-core/tests/integration/projects/ws-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/ws-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/ws-pass/fixture.json
diff --git a/registry/tests/projects/ws-pass/package-lock.json b/packages/runtime-core/tests/integration/projects/ws-pass/package-lock.json
similarity index 100%
rename from registry/tests/projects/ws-pass/package-lock.json
rename to packages/runtime-core/tests/integration/projects/ws-pass/package-lock.json
diff --git a/registry/tests/projects/ws-pass/package.json b/packages/runtime-core/tests/integration/projects/ws-pass/package.json
similarity index 100%
rename from registry/tests/projects/ws-pass/package.json
rename to packages/runtime-core/tests/integration/projects/ws-pass/package.json
diff --git a/registry/tests/projects/ws-pass/src/index.js b/packages/runtime-core/tests/integration/projects/ws-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/ws-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/ws-pass/src/index.js
diff --git a/registry/tests/projects/yaml-pass/fixture.json b/packages/runtime-core/tests/integration/projects/yaml-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/yaml-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/yaml-pass/fixture.json
diff --git a/registry/tests/projects/yaml-pass/package.json b/packages/runtime-core/tests/integration/projects/yaml-pass/package.json
similarity index 100%
rename from registry/tests/projects/yaml-pass/package.json
rename to packages/runtime-core/tests/integration/projects/yaml-pass/package.json
diff --git a/registry/tests/projects/yaml-pass/src/index.js b/packages/runtime-core/tests/integration/projects/yaml-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/yaml-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/yaml-pass/src/index.js
diff --git a/registry/tests/projects/yarn-berry-layout-pass/.yarnrc.yml b/packages/runtime-core/tests/integration/projects/yarn-berry-layout-pass/.yarnrc.yml
similarity index 100%
rename from registry/tests/projects/yarn-berry-layout-pass/.yarnrc.yml
rename to packages/runtime-core/tests/integration/projects/yarn-berry-layout-pass/.yarnrc.yml
diff --git a/registry/tests/projects/yarn-berry-layout-pass/fixture.json b/packages/runtime-core/tests/integration/projects/yarn-berry-layout-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/yarn-berry-layout-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/yarn-berry-layout-pass/fixture.json
diff --git a/registry/tests/projects/yarn-berry-layout-pass/package.json b/packages/runtime-core/tests/integration/projects/yarn-berry-layout-pass/package.json
similarity index 100%
rename from registry/tests/projects/yarn-berry-layout-pass/package.json
rename to packages/runtime-core/tests/integration/projects/yarn-berry-layout-pass/package.json
diff --git a/registry/tests/projects/yarn-berry-layout-pass/src/index.js b/packages/runtime-core/tests/integration/projects/yarn-berry-layout-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/yarn-berry-layout-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/yarn-berry-layout-pass/src/index.js
diff --git a/registry/tests/projects/yarn-berry-layout-pass/yarn.lock b/packages/runtime-core/tests/integration/projects/yarn-berry-layout-pass/yarn.lock
similarity index 100%
rename from registry/tests/projects/yarn-berry-layout-pass/yarn.lock
rename to packages/runtime-core/tests/integration/projects/yarn-berry-layout-pass/yarn.lock
diff --git a/registry/tests/projects/yarn-classic-layout-pass/fixture.json b/packages/runtime-core/tests/integration/projects/yarn-classic-layout-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/yarn-classic-layout-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/yarn-classic-layout-pass/fixture.json
diff --git a/registry/tests/projects/yarn-classic-layout-pass/package.json b/packages/runtime-core/tests/integration/projects/yarn-classic-layout-pass/package.json
similarity index 100%
rename from registry/tests/projects/yarn-classic-layout-pass/package.json
rename to packages/runtime-core/tests/integration/projects/yarn-classic-layout-pass/package.json
diff --git a/registry/tests/projects/yarn-classic-layout-pass/src/index.js b/packages/runtime-core/tests/integration/projects/yarn-classic-layout-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/yarn-classic-layout-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/yarn-classic-layout-pass/src/index.js
diff --git a/registry/tests/projects/yarn-classic-layout-pass/yarn.lock b/packages/runtime-core/tests/integration/projects/yarn-classic-layout-pass/yarn.lock
similarity index 100%
rename from registry/tests/projects/yarn-classic-layout-pass/yarn.lock
rename to packages/runtime-core/tests/integration/projects/yarn-classic-layout-pass/yarn.lock
diff --git a/registry/tests/projects/zod-pass/fixture.json b/packages/runtime-core/tests/integration/projects/zod-pass/fixture.json
similarity index 100%
rename from registry/tests/projects/zod-pass/fixture.json
rename to packages/runtime-core/tests/integration/projects/zod-pass/fixture.json
diff --git a/registry/tests/projects/zod-pass/package.json b/packages/runtime-core/tests/integration/projects/zod-pass/package.json
similarity index 100%
rename from registry/tests/projects/zod-pass/package.json
rename to packages/runtime-core/tests/integration/projects/zod-pass/package.json
diff --git a/registry/tests/projects/zod-pass/pnpm-lock.yaml b/packages/runtime-core/tests/integration/projects/zod-pass/pnpm-lock.yaml
similarity index 100%
rename from registry/tests/projects/zod-pass/pnpm-lock.yaml
rename to packages/runtime-core/tests/integration/projects/zod-pass/pnpm-lock.yaml
diff --git a/registry/tests/projects/zod-pass/src/index.js b/packages/runtime-core/tests/integration/projects/zod-pass/src/index.js
similarity index 100%
rename from registry/tests/projects/zod-pass/src/index.js
rename to packages/runtime-core/tests/integration/projects/zod-pass/src/index.js
diff --git a/registry/tests/kernel/repro-npm-install.ts b/packages/runtime-core/tests/integration/repro-npm-install.ts
similarity index 93%
rename from registry/tests/kernel/repro-npm-install.ts
rename to packages/runtime-core/tests/integration/repro-npm-install.ts
index 03358f9204..7e24de262e 100644
--- a/registry/tests/kernel/repro-npm-install.ts
+++ b/packages/runtime-core/tests/integration/repro-npm-install.ts
@@ -1,7 +1,7 @@
import { mkdtemp, rm, writeFile } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import path from 'node:path';
-import { COMMANDS_DIR, createKernel, NodeFileSystem, createWasmVmRuntime, createNodeRuntime } from '../helpers.ts';
+import { COMMANDS_DIR, createKernel, NodeFileSystem, createWasmVmRuntime, createNodeRuntime } from '@rivet-dev/agentos-vm-test-harness';
const tempDir = await mkdtemp(path.join(tmpdir(), 'kernel-npm-install-repro-'));
console.log('tempDir', tempDir);
diff --git a/registry/tests/kernel/shim-streaming.test.ts b/packages/runtime-core/tests/integration/shim-streaming.test.ts
similarity index 86%
rename from registry/tests/kernel/shim-streaming.test.ts
rename to packages/runtime-core/tests/integration/shim-streaming.test.ts
index aad4e4de59..634f9729c7 100644
--- a/registry/tests/kernel/shim-streaming.test.ts
+++ b/packages/runtime-core/tests/integration/shim-streaming.test.ts
@@ -3,8 +3,8 @@ import {
createIntegrationKernel,
describeIf,
skipUnlessWasmBuilt,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
diff --git a/registry/tests/kernel/signal-forwarding.test.ts b/packages/runtime-core/tests/integration/signal-forwarding.test.ts
similarity index 96%
rename from registry/tests/kernel/signal-forwarding.test.ts
rename to packages/runtime-core/tests/integration/signal-forwarding.test.ts
index 117b079dab..ac085e0818 100644
--- a/registry/tests/kernel/signal-forwarding.test.ts
+++ b/packages/runtime-core/tests/integration/signal-forwarding.test.ts
@@ -11,8 +11,8 @@ import {
describeIf,
createIntegrationKernel,
skipUnlessWasmBuilt,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
diff --git a/registry/tests/wasmvm/signal-handler.test.ts b/packages/runtime-core/tests/integration/signal-handler.test.ts
similarity index 96%
rename from registry/tests/wasmvm/signal-handler.test.ts
rename to packages/runtime-core/tests/integration/signal-handler.test.ts
index 9feeed21c8..1365ad9596 100644
--- a/registry/tests/wasmvm/signal-handler.test.ts
+++ b/packages/runtime-core/tests/integration/signal-handler.test.ts
@@ -7,7 +7,7 @@
*/
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-vm-test-harness';
import {
COMMANDS_DIR,
C_BUILD_DIR,
@@ -15,8 +15,8 @@ import {
describeIf,
hasWasmBinaries,
SIGTERM,
-} from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-vm-test-harness';
import { existsSync } from 'node:fs';
import { join } from 'node:path';
diff --git a/registry/tests/kernel/vfs-consistency.test.ts b/packages/runtime-core/tests/integration/vfs-consistency.test.ts
similarity index 96%
rename from registry/tests/kernel/vfs-consistency.test.ts
rename to packages/runtime-core/tests/integration/vfs-consistency.test.ts
index c4a1fa04a6..19939a6ff8 100644
--- a/registry/tests/kernel/vfs-consistency.test.ts
+++ b/packages/runtime-core/tests/integration/vfs-consistency.test.ts
@@ -12,8 +12,8 @@ import {
describeIf,
createIntegrationKernel,
skipUnlessWasmBuilt,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-vm-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-vm-test-harness';
const skipReason = skipUnlessWasmBuilt();
diff --git a/registry/tests/wasmvm/wasi-http.test.ts b/packages/runtime-core/tests/integration/wasi-http.test.ts
similarity index 98%
rename from registry/tests/wasmvm/wasi-http.test.ts
rename to packages/runtime-core/tests/integration/wasi-http.test.ts
index 06f6cec3cf..1ae71fc27b 100644
--- a/registry/tests/wasmvm/wasi-http.test.ts
+++ b/packages/runtime-core/tests/integration/wasi-http.test.ts
@@ -12,9 +12,9 @@
*/
import { describe, it, expect, afterEach, beforeAll, afterAll } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
-import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-vm-test-harness';
+import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '@rivet-dev/agentos-vm-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-vm-test-harness';
import { createServer as createHttpServer, type Server, type IncomingMessage, type ServerResponse } from 'node:http';
import { createServer as createHttpsServer, type Server as HttpsServer } from 'node:https';
import { execSync } from 'node:child_process';
diff --git a/registry/tests/wasmvm/wasi-spawn.test.ts b/packages/runtime-core/tests/integration/wasi-spawn.test.ts
similarity index 96%
rename from registry/tests/wasmvm/wasi-spawn.test.ts
rename to packages/runtime-core/tests/integration/wasi-spawn.test.ts
index 5f74ef1eae..910364314b 100644
--- a/registry/tests/wasmvm/wasi-spawn.test.ts
+++ b/packages/runtime-core/tests/integration/wasi-spawn.test.ts
@@ -9,9 +9,9 @@
*/
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
-import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-vm-test-harness';
+import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '@rivet-dev/agentos-vm-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-vm-test-harness';
import { existsSync } from 'node:fs';
import { resolve } from 'node:path';
diff --git a/packages/runtime-core/tests/mount-fs-custom-vfs.test.ts b/packages/runtime-core/tests/mount-fs-custom-vfs.test.ts
index e81efc2567..a2a8ed8d9e 100644
--- a/packages/runtime-core/tests/mount-fs-custom-vfs.test.ts
+++ b/packages/runtime-core/tests/mount-fs-custom-vfs.test.ts
@@ -83,4 +83,22 @@ describe("Kernel.mountFs custom JS VFS", () => {
},
120_000,
);
+
+ test("routes positioned writes through a mounted JS VFS", async () => {
+ const mounted = createRecordingFilesystem();
+ kernel = createKernel({ filesystem: createInMemoryFileSystem() });
+
+ kernel.mountFs("/mnt/custom", mounted.fs);
+ await kernel.writeFile("/mnt/custom/db.bin", "abcde");
+ await kernel.pwrite(
+ "/mnt/custom/db.bin",
+ 2,
+ new TextEncoder().encode("XYZ"),
+ );
+
+ expect(
+ new TextDecoder().decode(await kernel.readFile("/mnt/custom/db.bin")),
+ ).toBe("abXYZ");
+ expect(mounted.calls).toContain("pwrite:/db.bin");
+ });
});
diff --git a/packages/shell/CLAUDE.md b/packages/shell/CLAUDE.md
index 560fdcd30d..b6acce139c 100644
--- a/packages/shell/CLAUDE.md
+++ b/packages/shell/CLAUDE.md
@@ -1,4 +1,4 @@
# agentos-shell
- Do not implement or route through a custom/synthetic shell, prompt, line editor, or command parser; interactive shell mode must launch native Bash through the terminal/PTY path so behavior matches `docker run -it bash`.
-- Keep `agentos-shell` loading every command-providing package from secure-exec `registry/software/`; when that registry changes, update the imports, package dependencies, and smoke coverage here.
+- Keep `agentos-shell` loading every command-providing package from secure-exec `software/`; when that registry changes, update the imports, package dependencies, and smoke coverage here.
diff --git a/packages/shell/package.json b/packages/shell/package.json
index f76cda5d3c..254004e6b4 100644
--- a/packages/shell/package.json
+++ b/packages/shell/package.json
@@ -35,7 +35,6 @@
"@agentos-software/tree": "workspace:*",
"@agentos-software/unzip": "workspace:*",
"@agentos-software/vim": "workspace:*",
- "@agentos-software/vix": "workspace:*",
"@agentos-software/wget": "workspace:*",
"@agentos-software/yq": "workspace:*",
"@agentos-software/zip": "workspace:*",
diff --git a/packages/shell/src/main.ts b/packages/shell/src/main.ts
index 8765ecc3c9..f438278d19 100644
--- a/packages/shell/src/main.ts
+++ b/packages/shell/src/main.ts
@@ -41,7 +41,6 @@ import ripgrep from "@agentos-software/ripgrep";
import sed from "@agentos-software/sed";
import sqlite3 from "@agentos-software/sqlite3";
import vim from "@agentos-software/vim";
-import vix from "@agentos-software/vix";
import tar from "@agentos-software/tar";
import tree from "@agentos-software/tree";
import unzip from "@agentos-software/unzip";
@@ -58,7 +57,7 @@ const workspaceRoot = resolve(__dirname, "../../..");
const fallbackCommandDirs = [
resolve(
workspaceRoot,
- "registry/native/target/wasm32-wasip1/release/commands",
+ "toolchain/target/wasm32-wasip1/release/commands",
),
];
const BRUSH_SHELL_COMMANDS = new Set(["bash", "sh"]);
@@ -159,12 +158,12 @@ const software: SoftwareInput[] = [
.map(withLocalCommandFallback)
.filter((input): input is SoftwareInput => input !== null);
-// The vi-like editors ship as registry packages: vix, and vim (which carries
-// its runtime tree + VIMRUNTIME via the manifest `provides`). An unbuilt
-// package is a valid empty placeholder — skip it rather than projecting a
-// command-less package (build them locally: drop the wasm binaries into
-// registry/native/target/.../commands and run `just registry-build`).
-for (const editor of [vix, vim] as RegistryPackage[]) {
+// vim ships as a software package (which carries its runtime tree + VIMRUNTIME
+// via the manifest `provides`). An unbuilt package is a valid empty placeholder
+// — skip it rather than projecting a command-less package (build it locally:
+// drop the wasm binary into toolchain/target/.../commands and run
+// `just software-build`).
+for (const editor of [vim] as RegistryPackage[]) {
if (isUsablePackageFile(editor.packagePath)) {
software.push({ packagePath: editor.packagePath });
continue;
diff --git a/packages/vm-test-harness/package.json b/packages/vm-test-harness/package.json
new file mode 100644
index 0000000000..ae0cd7b34a
--- /dev/null
+++ b/packages/vm-test-harness/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "@rivet-dev/agentos-vm-test-harness",
+ "version": "0.0.1",
+ "private": true,
+ "type": "module",
+ "license": "Apache-2.0",
+ "exports": {
+ ".": {
+ "types": "./src/index.ts",
+ "import": "./src/index.ts"
+ }
+ },
+ "scripts": {
+ "check-types": "tsc --noEmit",
+ "build": "tsc --noEmit",
+ "test": "node -e \"process.exit(0)\""
+ },
+ "dependencies": {
+ "@rivet-dev/agentos-runtime-core": "workspace:*",
+ "@xterm/headless": "^6.0.0"
+ },
+ "devDependencies": {
+ "@types/node": "^22.10.2",
+ "typescript": "^5.9.2",
+ "vitest": "^2.1.9"
+ }
+}
diff --git a/packages/vm-test-harness/src/index.ts b/packages/vm-test-harness/src/index.ts
new file mode 100644
index 0000000000..4e6335b9c5
--- /dev/null
+++ b/packages/vm-test-harness/src/index.ts
@@ -0,0 +1,168 @@
+import { existsSync } from "node:fs";
+import { resolve } from "node:path";
+import { describe, it } from "vitest";
+
+/** Directory containing WASM command binaries built from Rust. */
+export const COMMANDS_DIR = resolve(
+ process.env.AGENTOS_WASM_COMMANDS_DIR ??
+ resolve(import.meta.dirname, "../../runtime-core/commands"),
+);
+
+/** Directory containing C-compiled WASM binaries. */
+export const C_BUILD_DIR = resolve(
+ process.env.AGENTOS_C_WASM_COMMANDS_DIR ??
+ resolve(import.meta.dirname, "../../../toolchain/c/build"),
+);
+
+/** Whether the main WASM command binaries are available (includes 'sh'). */
+export const hasWasmBinaries =
+ existsSync(COMMANDS_DIR) && existsSync(resolve(COMMANDS_DIR, "sh"));
+
+/**
+ * Check whether specific C WASM binaries are present.
+ * @param names - Binary names to check for inside C_BUILD_DIR.
+ * @returns true if all requested binaries exist.
+ */
+export function hasCWasmBinaries(...names: string[]): boolean {
+ if (!existsSync(C_BUILD_DIR)) return false;
+ return names.every((name) => existsSync(resolve(C_BUILD_DIR, name)));
+}
+
+/**
+ * Returns a skip-reason string if WASM binaries are missing, or false if
+ * they are available and tests should run.
+ */
+export function skipReason(): string | false {
+ if (!hasWasmBinaries) {
+ return `WASM binaries not found at ${COMMANDS_DIR} - build toolchain first`;
+ }
+ return false;
+}
+
+export function describeIf(
+ condition: unknown,
+ ...args: Parameters
+): void {
+ if (condition) {
+ describe(...args);
+ return;
+ }
+ const [name] = args;
+ describe.skip(`${String(name)} [environment prerequisites not met]`, () => {});
+}
+
+export function itIf(condition: unknown, ...args: Parameters): void {
+ if (condition) {
+ it(...args);
+ return;
+ }
+ const [name] = args;
+ it.skip(`${String(name)} [environment prerequisites not met]`, () => {});
+}
+
+export {
+ AF_INET,
+ AF_UNIX,
+ allowAll,
+ createInMemoryFileSystem,
+ SIGTERM,
+ SOCK_DGRAM,
+ SOCK_STREAM,
+} from "../../runtime-core/src/test-runtime.js";
+import {
+ allowAll,
+ createInMemoryFileSystem,
+ createKernel as createKernelBase,
+ createNodeRuntime,
+ createWasmVmRuntime,
+} from "../../runtime-core/src/test-runtime.js";
+export type {
+ DriverProcess,
+ Kernel,
+ KernelInterface,
+ KernelRuntimeDriver,
+ Permissions,
+ ProcessContext,
+ VirtualFileSystem,
+} from "../../runtime-core/src/test-runtime.js";
+export {
+ createWasmVmRuntime,
+ DEFAULT_FIRST_PARTY_TIERS,
+ WASMVM_COMMANDS,
+ type PermissionTier,
+ type WasmVmRuntimeOptions,
+} from "../../runtime-core/src/test-runtime.js";
+export {
+ createNodeHostNetworkAdapter,
+ createNodeRuntime,
+ NodeFileSystem,
+} from "../../runtime-core/src/test-runtime.js";
+export { TerminalHarness } from "./terminal-harness.js";
+
+/**
+ * Registry integration tests assume they can bootstrap runtimes and /bin stubs
+ * unless they explicitly opt into a stricter permission policy.
+ */
+export function createKernel(
+ options: Parameters[0],
+): ReturnType {
+ return createKernelBase({
+ ...options,
+ permissions: options.permissions ?? allowAll,
+ });
+}
+
+export interface IntegrationKernelResult {
+ kernel: ReturnType;
+ vfs: ReturnType;
+ dispose: () => Promise;
+}
+
+export interface IntegrationKernelOptions {
+ runtimes?: ("wasmvm" | "node")[];
+ loopbackExemptPorts?: number[];
+ commandDirs?: string[];
+ permissions?: Parameters[0]["permissions"];
+}
+
+/**
+ * Create a kernel with the in-scope runtime drivers for integration testing.
+ *
+ * Mount order matters. Last-mounted driver wins for overlapping commands:
+ * 1. WasmVM first: provides sh/bash/coreutils (90+ commands)
+ * 2. Node second: overrides WasmVM's 'node' stub with real V8
+ */
+export async function createIntegrationKernel(
+ options?: IntegrationKernelOptions,
+): Promise {
+ const runtimes = options?.runtimes ?? ["wasmvm"];
+ const vfs = createInMemoryFileSystem();
+ const kernel = createKernel({
+ filesystem: vfs,
+ loopbackExemptPorts: options?.loopbackExemptPorts,
+ permissions: options?.permissions,
+ });
+
+ if (runtimes.includes("wasmvm")) {
+ await kernel.mount(
+ createWasmVmRuntime({ commandDirs: options?.commandDirs ?? [COMMANDS_DIR] }),
+ );
+ }
+ if (runtimes.includes("node")) {
+ await kernel.mount(createNodeRuntime());
+ }
+
+ return {
+ kernel,
+ vfs,
+ dispose: () => kernel.dispose(),
+ };
+}
+
+/**
+ * Skip helper: returns a reason string if the WASM binaries are not built,
+ * or false if the commands directory exists and tests can run.
+ */
+export function skipUnlessWasmBuilt(): string | false {
+ return skipReason();
+}
diff --git a/registry/tests/terminal-harness.ts b/packages/vm-test-harness/src/terminal-harness.ts
similarity index 96%
rename from registry/tests/terminal-harness.ts
rename to packages/vm-test-harness/src/terminal-harness.ts
index b01ad66a9e..3ec00c1caa 100644
--- a/registry/tests/terminal-harness.ts
+++ b/packages/vm-test-harness/src/terminal-harness.ts
@@ -1,10 +1,10 @@
/**
- * TerminalHarness wires openShell() to a headless xterm Terminal so registry
- * tests can assert against deterministic terminal screen state.
+ * TerminalHarness wires openShell() to a headless xterm Terminal so tests can
+ * assert against deterministic terminal screen state.
*/
import { Terminal } from "@xterm/headless";
-import type { Kernel } from "./helpers.js";
+import type { Kernel } from "./index.js";
type ShellHandle = ReturnType;
diff --git a/packages/vm-test-harness/tsconfig.json b/packages/vm-test-harness/tsconfig.json
new file mode 100644
index 0000000000..639c948caf
--- /dev/null
+++ b/packages/vm-test-harness/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "esModuleInterop": true,
+ "noEmit": true
+ },
+ "include": ["src/**/*"]
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f159cc531e..6ed92eeff6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -25,16 +25,16 @@ importers:
devDependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:registry/agent/claude
+ version: link:software/claude
'@agentos-software/codex':
specifier: workspace:*
- version: link:registry/agent/codex
+ version: link:software/codex
'@agentos-software/common':
specifier: workspace:*
- version: link:registry/software/common
+ version: link:software/common
'@agentos-software/pi':
specifier: workspace:*
- version: link:registry/agent/pi
+ version: link:software/pi
'@biomejs/biome':
specifier: ^2.3
version: 2.4.10
@@ -50,12 +50,21 @@ importers:
'@rivet-dev/agentos-runtime-core':
specifier: workspace:*
version: link:packages/runtime-core
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:test-harness
+ '@rivet-dev/agentos-vm-test-harness':
+ specifier: workspace:*
+ version: link:packages/vm-test-harness
'@types/node':
specifier: ^22.19.15
version: 22.19.15
jszip:
specifier: ^3.10.1
version: 3.10.1
+ npm:
+ specifier: ^11.18.0
+ version: 11.18.0
pdf-lib:
specifier: ^1.17.1
version: 1.17.1
@@ -70,16 +79,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -135,16 +144,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -184,16 +193,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -233,16 +242,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -282,22 +291,22 @@ importers:
dependencies:
'@agentos-software/common':
specifier: workspace:*
- version: link:../../registry/software/common
+ version: link:../../software/common
'@agentos-software/curl':
specifier: workspace:*
- version: link:../../registry/software/curl
+ version: link:../../software/curl
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/jq':
specifier: workspace:*
- version: link:../../registry/software/jq
+ version: link:../../software/jq
'@agentos-software/ripgrep':
specifier: workspace:*
- version: link:../../registry/software/ripgrep
+ version: link:../../software/ripgrep
'@agentos-software/sqlite3':
specifier: workspace:*
- version: link:../../registry/software/sqlite3
+ version: link:../../software/sqlite3
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -346,13 +355,13 @@ importers:
dependencies:
'@agentos-software/browserbase':
specifier: workspace:*
- version: link:../../registry/software/browserbase
+ version: link:../../software/browserbase
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -374,16 +383,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -423,16 +432,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -472,16 +481,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -521,16 +530,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -570,16 +579,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -619,16 +628,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -668,16 +677,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -717,16 +726,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -766,16 +775,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -815,16 +824,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -864,16 +873,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -913,16 +922,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -962,16 +971,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -1011,16 +1020,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -1060,16 +1069,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -1109,16 +1118,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -1158,16 +1167,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -1207,16 +1216,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -1256,16 +1265,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -1314,16 +1323,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1363,16 +1372,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1412,16 +1421,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1461,16 +1470,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1510,16 +1519,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1559,16 +1568,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1608,16 +1617,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1657,16 +1666,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1706,16 +1715,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1755,16 +1764,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1804,16 +1813,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1853,16 +1862,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1902,16 +1911,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../../registry/agent/claude
+ version: link:../../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../../registry/software/git
+ version: link:../../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../../registry/agent/opencode
+ version: link:../../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../../registry/agent/pi
+ version: link:../../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../../packages/agentos
@@ -1951,16 +1960,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -2000,16 +2009,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -2049,16 +2058,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -2098,25 +2107,25 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/coreutils':
specifier: workspace:*
- version: link:../../registry/software/coreutils
+ version: link:../../software/coreutils
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/jq':
specifier: workspace:*
- version: link:../../registry/software/jq
+ version: link:../../software/jq
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@agentos-software/ripgrep':
specifier: workspace:*
- version: link:../../registry/software/ripgrep
+ version: link:../../software/ripgrep
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -2156,16 +2165,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -2208,16 +2217,16 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../../packages/agentos
@@ -2257,7 +2266,7 @@ importers:
dependencies:
'@agentos-software/common':
specifier: workspace:*
- version: link:../../registry/software/common
+ version: link:../../software/common
'@rivet-dev/agentos-core':
specifier: workspace:*
version: link:../core
@@ -2354,7 +2363,7 @@ importers:
devDependencies:
'@agentos-software/common':
specifier: workspace:*
- version: link:../../registry/software/common
+ version: link:../../software/common
'@types/node':
specifier: ^22.10.2
version: 22.19.15
@@ -2440,25 +2449,25 @@ importers:
dependencies:
'@agentos-software/claude-code':
specifier: workspace:*
- version: link:../../registry/agent/claude
+ version: link:../../software/claude
'@agentos-software/codex-cli':
specifier: workspace:*
- version: link:../../registry/software/codex-cli
+ version: link:../../software/codex-cli
'@agentos-software/common':
specifier: workspace:*
- version: link:../../registry/software/common
+ version: link:../../software/common
'@agentos-software/manifest':
specifier: workspace:*
version: link:../manifest
'@agentos-software/opencode':
specifier: workspace:*
- version: link:../../registry/agent/opencode
+ version: link:../../software/opencode
'@agentos-software/pi':
specifier: workspace:*
- version: link:../../registry/agent/pi
+ version: link:../../software/pi
'@agentos-software/pi-cli':
specifier: workspace:*
- version: link:../../registry/agent/pi-cli
+ version: link:../../software/pi-cli
'@aws-sdk/client-s3':
specifier: ^3.1019.0
version: 3.1020.0
@@ -2501,64 +2510,64 @@ importers:
devDependencies:
'@agentos-software/codex':
specifier: workspace:*
- version: link:../../registry/agent/codex
+ version: link:../../software/codex
'@agentos-software/coreutils':
specifier: workspace:*
- version: link:../../registry/software/coreutils
+ version: link:../../software/coreutils
'@agentos-software/curl':
specifier: workspace:*
- version: link:../../registry/software/curl
+ version: link:../../software/curl
'@agentos-software/diffutils':
specifier: workspace:*
- version: link:../../registry/software/diffutils
+ version: link:../../software/diffutils
'@agentos-software/duckdb':
specifier: workspace:*
- version: link:../../registry/software/duckdb
+ version: link:../../software/duckdb
'@agentos-software/fd':
specifier: workspace:*
- version: link:../../registry/software/fd
+ version: link:../../software/fd
'@agentos-software/file':
specifier: workspace:*
- version: link:../../registry/software/file
+ version: link:../../software/file
'@agentos-software/findutils':
specifier: workspace:*
- version: link:../../registry/software/findutils
+ version: link:../../software/findutils
'@agentos-software/gawk':
specifier: workspace:*
- version: link:../../registry/software/gawk
+ version: link:../../software/gawk
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/grep':
specifier: workspace:*
- version: link:../../registry/software/grep
+ version: link:../../software/grep
'@agentos-software/gzip':
specifier: workspace:*
- version: link:../../registry/software/gzip
+ version: link:../../software/gzip
'@agentos-software/http-get':
specifier: workspace:*
- version: link:../../registry/software/http-get
+ version: link:../../software/http-get
'@agentos-software/jq':
specifier: workspace:*
- version: link:../../registry/software/jq
+ version: link:../../software/jq
'@agentos-software/ripgrep':
specifier: workspace:*
- version: link:../../registry/software/ripgrep
+ version: link:../../software/ripgrep
'@agentos-software/sed':
specifier: workspace:*
- version: link:../../registry/software/sed
+ version: link:../../software/sed
'@agentos-software/tar':
specifier: workspace:*
- version: link:../../registry/software/tar
+ version: link:../../software/tar
'@agentos-software/tree':
specifier: workspace:*
- version: link:../../registry/software/tree
+ version: link:../../software/tree
'@agentos-software/vim':
specifier: workspace:*
- version: link:../../registry/software/vim
+ version: link:../../software/vim
'@agentos-software/yq':
specifier: workspace:*
- version: link:../../registry/software/yq
+ version: link:../../software/yq
'@anthropic-ai/claude-agent-sdk':
specifier: ^0.2.87
version: 0.2.87(@cfworker/json-schema@4.1.1)(zod@4.3.6)
@@ -2807,79 +2816,76 @@ importers:
dependencies:
'@agentos-software/codex-cli':
specifier: workspace:*
- version: link:../../registry/software/codex-cli
+ version: link:../../software/codex-cli
'@agentos-software/coreutils':
specifier: workspace:*
- version: link:../../registry/software/coreutils
+ version: link:../../software/coreutils
'@agentos-software/curl':
specifier: workspace:*
- version: link:../../registry/software/curl
+ version: link:../../software/curl
'@agentos-software/diffutils':
specifier: workspace:*
- version: link:../../registry/software/diffutils
+ version: link:../../software/diffutils
'@agentos-software/duckdb':
specifier: workspace:*
- version: link:../../registry/software/duckdb
+ version: link:../../software/duckdb
'@agentos-software/fd':
specifier: workspace:*
- version: link:../../registry/software/fd
+ version: link:../../software/fd
'@agentos-software/file':
specifier: workspace:*
- version: link:../../registry/software/file
+ version: link:../../software/file
'@agentos-software/findutils':
specifier: workspace:*
- version: link:../../registry/software/findutils
+ version: link:../../software/findutils
'@agentos-software/gawk':
specifier: workspace:*
- version: link:../../registry/software/gawk
+ version: link:../../software/gawk
'@agentos-software/git':
specifier: workspace:*
- version: link:../../registry/software/git
+ version: link:../../software/git
'@agentos-software/grep':
specifier: workspace:*
- version: link:../../registry/software/grep
+ version: link:../../software/grep
'@agentos-software/gzip':
specifier: workspace:*
- version: link:../../registry/software/gzip
+ version: link:../../software/gzip
'@agentos-software/http-get':
specifier: workspace:*
- version: link:../../registry/software/http-get
+ version: link:../../software/http-get
'@agentos-software/jq':
specifier: workspace:*
- version: link:../../registry/software/jq
+ version: link:../../software/jq
'@agentos-software/ripgrep':
specifier: workspace:*
- version: link:../../registry/software/ripgrep
+ version: link:../../software/ripgrep
'@agentos-software/sed':
specifier: workspace:*
- version: link:../../registry/software/sed
+ version: link:../../software/sed
'@agentos-software/sqlite3':
specifier: workspace:*
- version: link:../../registry/software/sqlite3
+ version: link:../../software/sqlite3
'@agentos-software/tar':
specifier: workspace:*
- version: link:../../registry/software/tar
+ version: link:../../software/tar
'@agentos-software/tree':
specifier: workspace:*
- version: link:../../registry/software/tree
+ version: link:../../software/tree
'@agentos-software/unzip':
specifier: workspace:*
- version: link:../../registry/software/unzip
+ version: link:../../software/unzip
'@agentos-software/vim':
specifier: workspace:*
- version: link:../../registry/software/vim
- '@agentos-software/vix':
- specifier: workspace:*
- version: link:../../registry/software/vix
+ version: link:../../software/vim
'@agentos-software/wget':
specifier: workspace:*
- version: link:../../registry/software/wget
+ version: link:../../software/wget
'@agentos-software/yq':
specifier: workspace:*
- version: link:../../registry/software/yq
+ version: link:../../software/yq
'@agentos-software/zip':
specifier: workspace:*
- version: link:../../registry/software/zip
+ version: link:../../software/zip
'@rivet-dev/agentos':
specifier: workspace:*
version: link:../agentos
@@ -2924,124 +2930,127 @@ importers:
specifier: ^2.1.8
version: 2.1.9(@types/node@22.19.15)
- registry/agent/claude:
+ packages/vm-test-harness:
dependencies:
- '@agentclientprotocol/sdk':
- specifier: ^0.16.1
- version: 0.16.1(zod@4.3.6)
- '@anthropic-ai/claude-agent-sdk':
- specifier: 0.2.87
- version: 0.2.87(@cfworker/json-schema@4.1.1)(zod@4.3.6)
- zod:
- specifier: ^4.1.11
- version: 4.3.6
- devDependencies:
- '@agentos-software/manifest':
- specifier: workspace:*
- version: link:../../../packages/manifest
- '@rivet-dev/agentos-toolchain':
+ '@rivet-dev/agentos-runtime-core':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../runtime-core
+ '@xterm/headless':
+ specifier: ^6.0.0
+ version: 6.0.0
+ devDependencies:
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
- specifier: ^5.7.2
+ specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/agent/codex:
+ scripts/publish:
dependencies:
- '@agentos-software/codex-cli':
- specifier: workspace:*
- version: link:../../software/codex-cli
+ commander:
+ specifier: ^12.1.0
+ version: 12.1.0
+ execa:
+ specifier: ^8.0.1
+ version: 8.0.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.5.0
+ semver:
+ specifier: ^7.6.0
+ version: 7.7.4
devDependencies:
- '@agentos-software/manifest':
- specifier: workspace:*
- version: link:../../../packages/manifest
'@types/node':
- specifier: ^22.10.2
- version: 22.19.15
+ specifier: ^24.3.0
+ version: 24.13.2
+ '@types/semver':
+ specifier: ^7.5.8
+ version: 7.7.1
+ tsx:
+ specifier: ^4.0.0
+ version: 4.21.0
typescript:
- specifier: ^5.7.2
+ specifier: ^5.5.2
version: 5.9.3
- registry/agent/opencode:
+ software/browserbase:
+ dependencies:
+ browse:
+ specifier: ^0.9.3
+ version: 0.9.3(@cfworker/json-schema@4.1.1)(bufferutil@4.1.0)(patchright-core@1.59.4)(playwright-core@1.59.1)
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
- bun:
- specifier: 1.3.11
- version: 1.3.11
typescript:
specifier: ^5.7.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/agent/pi:
+ software/build-essential:
dependencies:
- '@agentclientprotocol/sdk':
- specifier: ^0.16.1
- version: 0.16.1(zod@4.3.6)
- '@mariozechner/pi-ai':
- specifier: 0.60.0
- version: 0.60.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(bufferutil@4.1.0)(ws@8.21.0(bufferutil@4.1.0))(zod@4.3.6)
- '@mariozechner/pi-coding-agent':
- specifier: 0.60.0
- version: 0.60.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(bufferutil@4.1.0)(ws@8.21.0(bufferutil@4.1.0))(zod@4.3.6)
- devDependencies:
- '@agentos-software/manifest':
+ '@agentos-software/common':
specifier: workspace:*
- version: link:../../../packages/manifest
- '@rivet-dev/agentos-toolchain':
+ version: link:../common
+ '@agentos-software/curl':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
- '@types/node':
- specifier: ^22.10.2
- version: 22.19.15
- typescript:
- specifier: ^5.7.2
- version: 5.9.3
-
- registry/agent/pi-cli:
- dependencies:
- '@mariozechner/pi-coding-agent':
- specifier: ^0.60.0
- version: 0.60.0
- pi-acp:
- specifier: ^0.0.23
- version: 0.0.23
+ version: link:../curl
+ '@agentos-software/git':
+ specifier: workspace:*
+ version: link:../git
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
- '@rivet-dev/agentos-toolchain':
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../test-harness
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
- specifier: ^5.7.2
+ specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/browserbase:
+ software/claude:
dependencies:
- browse:
- specifier: ^0.9.3
- version: 0.9.3(@cfworker/json-schema@4.1.1)(bufferutil@4.1.0)(patchright-core@1.59.4)(playwright-core@1.59.1)
+ '@agentclientprotocol/sdk':
+ specifier: ^0.16.1
+ version: 0.16.1(zod@4.3.6)
+ '@anthropic-ai/claude-agent-sdk':
+ specifier: 0.2.87
+ version: 0.2.87(@cfworker/json-schema@4.1.1)(zod@4.3.6)
+ zod:
+ specifier: ^4.1.11
+ version: 4.3.6
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
@@ -3049,44 +3058,47 @@ importers:
specifier: ^5.7.2
version: 5.9.3
- registry/software/build-essential:
+ software/codex:
dependencies:
- '@agentos-software/common':
- specifier: workspace:*
- version: link:../common
- '@agentos-software/curl':
- specifier: workspace:*
- version: link:../curl
- '@agentos-software/git':
+ '@agentos-software/codex-cli':
specifier: workspace:*
- version: link:../git
+ version: link:../codex-cli
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
- specifier: ^5.9.2
+ specifier: ^5.7.2
version: 5.9.3
- registry/software/codex-cli:
+ software/codex-cli:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/common:
+ software/common:
dependencies:
'@agentos-software/coreutils':
specifier: workspace:*
@@ -3115,75 +3127,126 @@ importers:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/coreutils:
+ software/coreutils:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/curl:
+ software/curl:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/diffutils:
+ software/diffutils:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/duckdb:
+ software/duckdb:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/everything:
+ software/envsubst:
+ devDependencies:
+ '@agentos-software/manifest':
+ specifier: workspace:*
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
+ '@rivet-dev/agentos-toolchain':
+ specifier: workspace:*
+ version: link:../../packages/agentos-toolchain
+ '@types/node':
+ specifier: ^22.10.2
+ version: 22.19.15
+ typescript:
+ specifier: ^5.9.2
+ version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
+
+ software/everything:
dependencies:
'@agentos-software/codex-cli':
specifier: workspace:*
@@ -3242,340 +3305,510 @@ importers:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/fd:
+ software/fd:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/file:
+ software/file:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/findutils:
+ software/findutils:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/gawk:
+ software/gawk:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/git:
+ software/git:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/grep:
+ software/grep:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/gzip:
+ software/gzip:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/http-get:
+ software/http-get:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/jq:
+ software/jq:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
+
+ software/opencode:
+ devDependencies:
+ '@agentos-software/manifest':
+ specifier: workspace:*
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
+ '@rivet-dev/agentos-toolchain':
+ specifier: workspace:*
+ version: link:../../packages/agentos-toolchain
+ '@types/node':
+ specifier: ^22.10.2
+ version: 22.19.15
+ bun:
+ specifier: 1.3.11
+ version: 1.3.11
+ typescript:
+ specifier: ^5.7.2
+ version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/ripgrep:
+ software/pi:
+ dependencies:
+ '@agentclientprotocol/sdk':
+ specifier: ^0.16.1
+ version: 0.16.1(zod@4.3.6)
+ '@mariozechner/pi-ai':
+ specifier: 0.60.0
+ version: 0.60.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(bufferutil@4.1.0)(ws@8.21.0(bufferutil@4.1.0))(zod@4.3.6)
+ '@mariozechner/pi-coding-agent':
+ specifier: 0.60.0
+ version: 0.60.0(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(bufferutil@4.1.0)(ws@8.21.0(bufferutil@4.1.0))(zod@4.3.6)
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
+ esbuild:
+ specifier: ^0.27.4
+ version: 0.27.4
typescript:
- specifier: ^5.9.2
+ specifier: ^5.7.2
version: 5.9.3
- registry/software/sed:
+ software/pi-cli:
+ dependencies:
+ '@mariozechner/pi-coding-agent':
+ specifier: ^0.60.0
+ version: 0.60.0
+ pi-acp:
+ specifier: ^0.0.23
+ version: 0.0.23
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
+ '@types/node':
+ specifier: ^22.10.2
+ version: 22.19.15
+ typescript:
+ specifier: ^5.7.2
+ version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
+
+ software/ripgrep:
+ devDependencies:
+ '@agentos-software/manifest':
+ specifier: workspace:*
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
+ '@rivet-dev/agentos-toolchain':
+ specifier: workspace:*
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/sqlite3:
+ software/sed:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/tar:
+ software/sqlite3:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/tree:
+ software/tar:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/unzip:
+ software/tree:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/vim:
+ software/unzip:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/vix:
+ software/vim:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/wget:
+ software/wget:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/yq:
+ software/yq:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- registry/software/zip:
+ software/zip:
devDependencies:
'@agentos-software/manifest':
specifier: workspace:*
- version: link:../../../packages/manifest
+ version: link:../../packages/manifest
+ '@rivet-dev/agentos-test-harness':
+ specifier: workspace:*
+ version: link:../../test-harness
'@rivet-dev/agentos-toolchain':
specifier: workspace:*
- version: link:../../../packages/agentos-toolchain
+ version: link:../../packages/agentos-toolchain
'@types/node':
specifier: ^22.10.2
version: 22.19.15
typescript:
specifier: ^5.9.2
version: 5.9.3
+ vitest:
+ specifier: ^2.1.9
+ version: 2.1.9(@types/node@22.19.15)
- scripts/publish:
+ test-harness:
dependencies:
- commander:
- specifier: ^12.1.0
- version: 12.1.0
- execa:
- specifier: ^8.0.1
- version: 8.0.1
- glob:
- specifier: ^10.3.10
- version: 10.5.0
- semver:
- specifier: ^7.6.0
- version: 7.7.4
+ '@rivet-dev/agentos-vm-test-harness':
+ specifier: workspace:*
+ version: link:../packages/vm-test-harness
devDependencies:
- '@types/node':
- specifier: ^24.3.0
- version: 24.13.2
- '@types/semver':
- specifier: ^7.5.8
- version: 7.7.1
- tsx:
- specifier: ^4.0.0
- version: 4.21.0
typescript:
- specifier: ^5.5.2
+ specifier: ^5.9.2
version: 5.9.3
packages:
@@ -7570,6 +7803,77 @@ packages:
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ npm@11.18.0:
+ resolution: {integrity: sha512-T67M4L5wNm0cZ7EBLErcEkY1SmzEW/WJ+SADBzsFUY1UdAPfFHXFQtZ6SEXiK0+vzXysCvAsepbMaBTwnrAD+w==}
+ engines: {node: ^20.17.0 || >=22.9.0}
+ hasBin: true
+ bundledDependencies:
+ - '@isaacs/string-locale-compare'
+ - '@npmcli/arborist'
+ - '@npmcli/config'
+ - '@npmcli/fs'
+ - '@npmcli/map-workspaces'
+ - '@npmcli/metavuln-calculator'
+ - '@npmcli/package-json'
+ - '@npmcli/promise-spawn'
+ - '@npmcli/redact'
+ - '@npmcli/run-script'
+ - '@sigstore/tuf'
+ - abbrev
+ - archy
+ - cacache
+ - chalk
+ - ci-info
+ - fastest-levenshtein
+ - fs-minipass
+ - glob
+ - graceful-fs
+ - hosted-git-info
+ - ini
+ - init-package-json
+ - is-cidr
+ - json-parse-even-better-errors
+ - libnpmaccess
+ - libnpmdiff
+ - libnpmexec
+ - libnpmfund
+ - libnpmorg
+ - libnpmpack
+ - libnpmpublish
+ - libnpmsearch
+ - libnpmteam
+ - libnpmversion
+ - make-fetch-happen
+ - minimatch
+ - minipass
+ - minipass-pipeline
+ - ms
+ - node-gyp
+ - nopt
+ - npm-audit-report
+ - npm-install-checks
+ - npm-package-arg
+ - npm-pick-manifest
+ - npm-profile
+ - npm-registry-fetch
+ - npm-user-validate
+ - p-map
+ - pacote
+ - parse-conflict-json
+ - proc-log
+ - qrcode-terminal
+ - read
+ - semver
+ - spdx-expression-parse
+ - ssri
+ - supports-color
+ - tar
+ - text-table
+ - tiny-relative-date
+ - treeverse
+ - validate-npm-package-name
+ - which
+
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
@@ -13538,6 +13842,8 @@ snapshots:
dependencies:
path-key: 4.0.0
+ npm@11.18.0: {}
+
nth-check@2.1.1:
dependencies:
boolbase: 1.0.0
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index abbcff2e92..624818f06b 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -15,14 +15,14 @@ packages:
- packages/runtime-core
- packages/runtime-sidecar
- packages/runtime-sidecar/npm/*
+ - packages/vm-test-harness
- packages/secure-exec
- packages/secure-exec-example-ai-agent-type-check
- packages/typescript
- packages/shell
- packages/sidecar-binary
- - registry/agent/*
- - registry/software/*
- - registry/tool/*
+ - software/*
+ - test-harness
- examples/*
# Nested example packages (e.g. examples/quickstart/hello-world) so every
# embeddable example is a workspace member that `turbo check-types` covers.
diff --git a/registry/agent/claude/agentos-package.json b/registry/agent/claude/agentos-package.json
deleted file mode 100644
index 5d09a62725..0000000000
--- a/registry/agent/claude/agentos-package.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "claude",
- "agent": {
- "acpEntrypoint": "claude-sdk-acp",
- "env": {
- "CLAUDE_AGENT_SDK_CLIENT_APP": "@rivet-dev/agentos",
- "CLAUDE_CODE_SIMPLE": "1",
- "CLAUDE_CODE_FORCE_AGENT_OS_RIPGREP": "1",
- "CLAUDE_CODE_DEFER_GROWTHBOOK_INIT": "1",
- "CLAUDE_CODE_DISABLE_CWD_PERSIST": "1",
- "CLAUDE_CODE_DISABLE_DEV_NULL_REDIRECT": "1",
- "CLAUDE_CODE_NODE_SHELL_WRAPPER": "1",
- "CLAUDE_CODE_DISABLE_STREAM_JSON_HOOK_EVENTS": "1",
- "CLAUDE_CODE_SHELL": "/bin/sh",
- "CLAUDE_CODE_SKIP_INITIAL_MESSAGES": "1",
- "CLAUDE_CODE_SKIP_SANDBOX_INIT": "1",
- "CLAUDE_CODE_SIMPLE_SHELL_EXEC": "1",
- "CLAUDE_CODE_SWAP_STDIO": "0",
- "CLAUDE_CODE_USE_PIPE_OUTPUT": "1",
- "DISABLE_TELEMETRY": "1",
- "SHELL": "/bin/sh",
- "USE_BUILTIN_RIPGREP": "0"
- }
- },
- "registry": {
- "slug": "claude-code",
- "title": "Claude Code",
- "description": "Run Claude Code as an agentOS agent with full tool access, file editing, and shell execution.",
- "beta": true,
- "docsHref": "/docs/agents/claude",
- "image": "/images/registry/claude-code.svg",
- "priority": 90
- }
-}
diff --git a/registry/agent/opencode/agentos-package.json b/registry/agent/opencode/agentos-package.json
deleted file mode 100644
index cb9f08643a..0000000000
--- a/registry/agent/opencode/agentos-package.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "name": "opencode",
- "agent": {
- "acpEntrypoint": "agentos-opencode-acp",
- "env": {
- "OPENCODE_DISABLE_CONFIG_DEP_INSTALL": "1",
- "OPENCODE_DISABLE_EMBEDDED_WEB_UI": "1"
- }
- },
- "registry": {
- "title": "OpenCode",
- "description": "Run OpenCode, an open-source coding agent, inside agentOS.",
- "docsHref": "/docs/agents/opencode",
- "image": "/images/registry/opencode.svg",
- "priority": 70
- }
-}
diff --git a/registry/agent/pi/agentos-package.json b/registry/agent/pi/agentos-package.json
deleted file mode 100644
index 898e089c6e..0000000000
--- a/registry/agent/pi/agentos-package.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "name": "pi",
- "agent": {
- "acpEntrypoint": "pi-sdk-acp",
- "snapshot": true
- },
- "registry": {
- "title": "PI",
- "description": "Run the PI coding agent with lightweight, fast execution.",
- "image": "/images/registry/pi.svg",
- "priority": 100
- }
-}
diff --git a/registry/native/Cargo.toml b/registry/native/Cargo.toml
deleted file mode 100644
index 4d567ae044..0000000000
--- a/registry/native/Cargo.toml
+++ /dev/null
@@ -1,168 +0,0 @@
-[workspace]
-resolver = "2"
-members = [
- "crates/wasi-ext",
- "crates/libs/shims",
- "crates/libs/builtins",
- "crates/libs/stubs",
- "crates/libs/grep",
- "crates/libs/awk",
- "crates/libs/jq",
- "crates/libs/yq",
- "crates/commands/grep",
- "crates/commands/sh",
- "crates/commands/sed",
- "crates/commands/awk",
- "crates/commands/jq",
- "crates/commands/yq",
- "crates/commands/rg",
- "crates/libs/find",
- "crates/libs/file-cmd",
- "crates/libs/tree",
- "crates/libs/du",
- "crates/libs/column",
- "crates/libs/rev",
- "crates/libs/strings-cmd",
- "crates/libs/expr",
- "crates/libs/diff",
- "crates/commands/find",
- "crates/commands/file",
- "crates/commands/tree",
- "crates/commands/du",
- "crates/commands/column",
- "crates/commands/rev",
- "crates/commands/strings",
- "crates/commands/expr",
- "crates/commands/diff",
- "crates/libs/gzip",
- "crates/libs/tar",
- "crates/commands/gzip",
- "crates/commands/tar",
- "crates/commands/ls",
- "crates/commands/cat",
- "crates/commands/cp",
- "crates/commands/mv",
- "crates/commands/rm",
- "crates/commands/mkdir",
- "crates/commands/chmod",
- "crates/commands/sort",
- "crates/commands/head",
- "crates/commands/tail",
- "crates/commands/wc",
- "crates/commands/cut",
- "crates/commands/tr",
- "crates/commands/echo",
- "crates/commands/printf",
- # US-009: remaining uutils coreutils
- "crates/commands/dd",
- "crates/commands/ln",
- "crates/commands/logname",
- "crates/commands/mktemp",
- "crates/commands/pathchk",
- "crates/commands/split",
- "crates/commands/stat",
- "crates/commands/tac",
- "crates/commands/touch",
- "crates/commands/tsort",
- "crates/commands/base32",
- "crates/commands/base64",
- "crates/commands/basenc",
- "crates/commands/basename",
- "crates/commands/comm",
- "crates/commands/dircolors",
- "crates/commands/dirname",
- "crates/commands/expand",
- "crates/commands/factor",
- "crates/commands/false",
- "crates/commands/fmt",
- "crates/commands/fold",
- "crates/commands/join",
- "crates/commands/nl",
- "crates/commands/numfmt",
- "crates/commands/od",
- "crates/commands/paste",
- "crates/commands/printenv",
- "crates/commands/ptx",
- "crates/commands/seq",
- "crates/commands/shuf",
- "crates/commands/true",
- "crates/commands/unexpand",
- "crates/commands/uniq",
- "crates/commands/yes",
- "crates/commands/b2sum",
- "crates/commands/cksum",
- "crates/commands/md5sum",
- "crates/commands/sha1sum",
- "crates/commands/sha224sum",
- "crates/commands/sha256sum",
- "crates/commands/sha384sum",
- "crates/commands/sha512sum",
- "crates/commands/sum",
- "crates/commands/link",
- "crates/commands/pwd",
- "crates/commands/readlink",
- "crates/commands/realpath",
- "crates/commands/rmdir",
- "crates/commands/shred",
- "crates/commands/tee",
- "crates/commands/truncate",
- "crates/commands/unlink",
- "crates/commands/arch",
- "crates/commands/date",
- "crates/commands/nproc",
- "crates/commands/uname",
- # US-010: builtins, shims, and stubs
- "crates/commands/sleep",
- "crates/commands/test",
- "crates/commands/whoami",
- "crates/commands/env",
- "crates/commands/timeout",
- "crates/commands/which",
- "crates/commands/xu",
- "crates/commands/xargs",
- "crates/commands/nice",
- "crates/commands/nohup",
- "crates/commands/stdbuf",
- "crates/commands/_stubs",
- # US-079: fd-find compatible file finder
- "crates/libs/fd",
- "crates/commands/fd",
- # US-099: codex (OpenAI Codex CLI) WASI build skeleton
- "crates/commands/codex",
- # US-100: WASI process spawning via host_process FFI
- "crates/libs/wasi-spawn",
- "crates/commands/spawn-test-host",
- # US-101: WASI PTY-based process management via host_process FFI
- "crates/libs/wasi-pty",
- # US-102: WASI HTTP client via host_net TCP/TLS
- "crates/libs/wasi-http",
- "crates/commands/curl",
- "crates/commands/http-test",
- # US-104: codex-exec headless agent binary
- "crates/commands/codex-exec",
- # git: minimal git implementation
- "crates/libs/git",
- "crates/commands/git",
- "stubs/codex-otel",
- "stubs/ctrlc",
- "stubs/hostname",
-]
-
-[workspace.package]
-version = "0.1.0"
-edition = "2021"
-license = "Apache-2.0"
-
-[profile.release]
-opt-level = "z"
-lto = true
-codegen-units = 1
-strip = true
-
-# WASM-compatible stubs for crates that don't support wasm32-wasip1
-[patch.crates-io]
-ctrlc = { path = "stubs/ctrlc" }
-hostname = { path = "stubs/hostname" }
-uucore = { path = "stubs/uucore" }
-codex-network-proxy = { path = "stubs/codex-network-proxy" }
-codex-otel = { path = "stubs/codex-otel" }
diff --git a/registry/native/patches/wasi-libc/.gitkeep b/registry/native/patches/wasi-libc/.gitkeep
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/registry/package.json b/registry/package.json
deleted file mode 100644
index 5a19029fcb..0000000000
--- a/registry/package.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "name": "agentos-registry",
- "private": true,
- "type": "module",
- "license": "Apache-2.0",
- "version": "0.0.0",
- "packageManager": "pnpm@10.13.1",
- "engines": {
- "node": ">=20"
- },
- "scripts": {
- "check-types": "node -e \"process.exit(0)\"",
- "test": "node ./scripts/run-vitest.mjs"
- },
- "devDependencies": {
- "@agentos-software/common": "workspace:*",
- "@rivet-dev/agentos-runtime-core": "workspace:*",
- "@agentos-software/curl": "workspace:*",
- "@types/node": "^22.10.2",
- "@xterm/headless": "^6.0.0",
- "typescript": "^5.9.2",
- "vitest": "^2.1.9"
- }
-}
diff --git a/registry/scripts/run-vitest.mjs b/registry/scripts/run-vitest.mjs
deleted file mode 100644
index c6e2b752f9..0000000000
--- a/registry/scripts/run-vitest.mjs
+++ /dev/null
@@ -1,32 +0,0 @@
-import { spawnSync } from "node:child_process";
-import { readdirSync } from "node:fs";
-import { resolve } from "node:path";
-import { fileURLToPath } from "node:url";
-
-const scriptDir = fileURLToPath(new URL(".", import.meta.url));
-const pnpmStoreDir = resolve(scriptDir, "..", "..", "node_modules", ".pnpm");
-const vitestPackageDir = readdirSync(pnpmStoreDir).find((entry) =>
- entry.startsWith("vitest@"),
-);
-
-if (!vitestPackageDir) {
- throw new Error(`Could not find vitest in ${pnpmStoreDir}`);
-}
-
-const vitestCli = resolve(
- pnpmStoreDir,
- vitestPackageDir,
- "node_modules",
- "vitest",
- "vitest.mjs",
-);
-
-const result = spawnSync(process.execPath, [vitestCli, "run", ...process.argv.slice(2)], {
- stdio: "inherit",
-});
-
-if (result.error) {
- throw result.error;
-}
-
-process.exit(result.status ?? 1);
diff --git a/registry/scripts/status.mjs b/registry/scripts/status.mjs
deleted file mode 100644
index bd019a3860..0000000000
--- a/registry/scripts/status.mjs
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env node
-
-/**
- * Registry package status: local version, staged bin/, assembled dist/package,
- * and (with --remote) the published npm dist-tags per package.
- *
- * Run from anywhere: node registry/scripts/status.mjs [--remote]
- */
-
-import { execFileSync } from "node:child_process";
-import { existsSync, readFileSync, readdirSync } from "node:fs";
-import { dirname, join } from "node:path";
-import { fileURLToPath } from "node:url";
-
-const REGISTRY_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
-const remote = process.argv.includes("--remote");
-
-function countEntries(dir) {
- try {
- return readdirSync(dir).length;
- } catch {
- return null;
- }
-}
-
-function distTags(name) {
- try {
- const out = execFileSync(
- "npm",
- ["view", name, "dist-tags", "--json"],
- { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] },
- );
- const tags = JSON.parse(out);
- return Object.entries(tags)
- .map(([tag, version]) => `${tag}=${version}`)
- .join(" ");
- } catch {
- return "(not published)";
- }
-}
-
-const rows = [];
-for (const kind of ["software", "agent"]) {
- const base = join(REGISTRY_ROOT, kind);
- for (const dir of readdirSync(base, { withFileTypes: true })) {
- if (!dir.isDirectory()) continue;
- const pkgPath = join(base, dir.name, "package.json");
- if (!existsSync(pkgPath)) continue;
- const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
- const bin = countEntries(join(base, dir.name, "bin"));
- const distPackage = join(base, dir.name, "dist", "package");
- const assembled = existsSync(join(distPackage, "package.json"))
- ? (countEntries(join(distPackage, "bin")) ?? 0)
- : null;
- rows.push({
- kind,
- name: pkg.name,
- version: pkg.version,
- bin: bin === null ? "-" : String(bin),
- dist: assembled === null ? "NOT BUILT" : `${assembled} cmds`,
- tags: remote ? distTags(pkg.name) : undefined,
- });
- }
-}
-
-const width = Math.max(...rows.map((r) => r.name.length)) + 2;
-for (const row of rows) {
- process.stdout.write(
- `${row.name.padEnd(width)} ${row.version.padEnd(28)} bin:${row.bin.padEnd(5)} dist:${row.dist.padEnd(10)}${row.tags !== undefined ? ` ${row.tags}` : ""}\n`,
- );
-}
-const nativeCommands = join(
- REGISTRY_ROOT,
- "native/target/wasm32-wasip1/release/commands",
-);
-const built = countEntries(nativeCommands);
-process.stdout.write(
- `\nnative commands dir: ${built === null ? "NOT BUILT (run `just registry-native`)" : `${built} entries`}\n`,
-);
diff --git a/registry/software/browserbase/agentos-package.json b/registry/software/browserbase/agentos-package.json
deleted file mode 100644
index 7e64d73e00..0000000000
--- a/registry/software/browserbase/agentos-package.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "name": "browserbase",
- "registry": {
- "title": "Browserbase",
- "description": "The Browserbase `browse` CLI: let agents browse the web with a cloud browser, no sandbox required.",
- "beta": true,
- "types": [
- "browser"
- ],
- "image": "/images/registry/browserbase.svg"
- }
-}
diff --git a/registry/software/coreutils/tsconfig.json b/registry/software/coreutils/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/coreutils/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/curl/tsconfig.json b/registry/software/curl/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/curl/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/diffutils/tsconfig.json b/registry/software/diffutils/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/diffutils/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/duckdb/tsconfig.json b/registry/software/duckdb/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/duckdb/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/everything/tsconfig.json b/registry/software/everything/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/everything/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/fd/tsconfig.json b/registry/software/fd/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/fd/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/file/tsconfig.json b/registry/software/file/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/file/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/findutils/tsconfig.json b/registry/software/findutils/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/findutils/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/gawk/tsconfig.json b/registry/software/gawk/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/gawk/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/git/tsconfig.json b/registry/software/git/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/git/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/grep/tsconfig.json b/registry/software/grep/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/grep/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/gzip/tsconfig.json b/registry/software/gzip/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/gzip/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/http-get/agentos-package.json b/registry/software/http-get/agentos-package.json
deleted file mode 100644
index d45077f00b..0000000000
--- a/registry/software/http-get/agentos-package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "commands": [
- "http_get"
- ],
- "registry": {
- "title": "http-get",
- "description": "Minimal HTTP GET fetch helper."
- }
-}
diff --git a/registry/software/http-get/tsconfig.json b/registry/software/http-get/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/http-get/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/jq/tsconfig.json b/registry/software/jq/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/jq/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/ripgrep/tsconfig.json b/registry/software/ripgrep/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/ripgrep/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/sed/tsconfig.json b/registry/software/sed/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/sed/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/sqlite3/tsconfig.json b/registry/software/sqlite3/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/sqlite3/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/tar/tsconfig.json b/registry/software/tar/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/tar/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/tree/tsconfig.json b/registry/software/tree/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/tree/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/unzip/tsconfig.json b/registry/software/unzip/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/unzip/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/vim/tsconfig.json b/registry/software/vim/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/vim/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/vix/agentos-package.json b/registry/software/vix/agentos-package.json
deleted file mode 100644
index 88ce6ad04a..0000000000
--- a/registry/software/vix/agentos-package.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "name": "vix",
- "commands": [
- "vix"
- ],
- "registry": {
- "title": "vix",
- "description": "Lightweight vi-style text editor."
- }
-}
diff --git a/registry/software/vix/package.json b/registry/software/vix/package.json
deleted file mode 100644
index e51042dc9b..0000000000
--- a/registry/software/vix/package.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name": "@agentos-software/vix",
- "version": "0.1.0",
- "type": "module",
- "license": "Apache-2.0",
- "description": "vix editor for secure-exec VMs (wasm build)",
- "main": "./dist/index.js",
- "types": "./dist/index.d.ts",
- "files": [
- "dist",
- "!dist/package",
- "!dist/package.tar"
- ],
- "exports": {
- ".": {
- "types": "./dist/index.d.ts",
- "import": "./dist/index.js",
- "default": "./dist/index.js"
- }
- },
- "scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
- },
- "devDependencies": {
- "@agentos-software/manifest": "workspace:*",
- "@rivet-dev/agentos-toolchain": "workspace:*",
- "@types/node": "^22.10.2",
- "typescript": "^5.9.2"
- }
-}
diff --git a/registry/software/vix/tsconfig.json b/registry/software/vix/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/vix/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/wget/tsconfig.json b/registry/software/wget/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/wget/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/yq/tsconfig.json b/registry/software/yq/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/yq/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/software/zip/tsconfig.json b/registry/software/zip/tsconfig.json
deleted file mode 100644
index 8f24167afd..0000000000
--- a/registry/software/zip/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist",
- "rootDir": "./src"
- },
- "include": ["src/**/*"]
-}
diff --git a/registry/tests/helpers.ts b/registry/tests/helpers.ts
deleted file mode 100644
index 963f5afd7b..0000000000
--- a/registry/tests/helpers.ts
+++ /dev/null
@@ -1,120 +0,0 @@
-import { existsSync } from "node:fs";
-import { resolve, dirname } from "node:path";
-import { fileURLToPath } from "node:url";
-import { describe, it } from "vitest";
-
-const __dirname = dirname(fileURLToPath(import.meta.url));
-
-/** Directory containing WASM command binaries built from Rust. */
-export const COMMANDS_DIR = resolve(
- process.env.AGENTOS_WASM_COMMANDS_DIR ??
- resolve(__dirname, "../native/target/wasm32-wasip1/release/commands"),
-);
-
-/** Directory containing C-compiled WASM binaries. */
-export const C_BUILD_DIR = resolve(
- process.env.AGENTOS_C_WASM_COMMANDS_DIR ??
- resolve(__dirname, "../native/c/build/"),
-);
-
-/** Whether the main WASM command binaries are available (includes 'sh'). */
-export const hasWasmBinaries =
- existsSync(COMMANDS_DIR) && existsSync(resolve(COMMANDS_DIR, "sh"));
-
-/**
- * Check whether specific C WASM binaries are present.
- * @param names - Binary names to check for inside C_BUILD_DIR.
- * @returns true if all requested binaries exist.
- */
-export function hasCWasmBinaries(...names: string[]): boolean {
- if (!existsSync(C_BUILD_DIR)) return false;
- return names.every((name) => existsSync(resolve(C_BUILD_DIR, name)));
-}
-
-/**
- * Returns a skip-reason string if WASM binaries are missing, or false if
- * they are available and tests should run.
- */
-export function skipReason(): string | false {
- if (!hasWasmBinaries) {
- return `WASM binaries not found at ${COMMANDS_DIR} — build with \`make wasm\` first`;
- }
- return false;
-}
-
-export function describeIf(
- condition: unknown,
- ...args: Parameters
-): void {
- if (condition) {
- // Vitest's overloaded tuple shape is awkward to preserve across helper forwarding.
- // @ts-expect-error forwarded describe() arguments stay runtime-compatible.
- describe(...args);
- return;
- }
- const [name] = args;
- describe.skip(`${String(name)} [environment prerequisites not met]`, () => {});
-}
-
-export function itIf(
- condition: unknown,
- ...args: Parameters
-): void {
- if (condition) {
- // Vitest's overloaded tuple shape is awkward to preserve across helper forwarding.
- // @ts-expect-error forwarded it() arguments stay runtime-compatible.
- it(...args);
- return;
- }
- const [name] = args;
- it.skip(`${String(name)} [environment prerequisites not met]`, () => {});
-}
-
-// Re-exports from the repo-owned generic runtime surface.
-export {
- AF_INET,
- AF_UNIX,
- allowAll,
- createInMemoryFileSystem,
- SIGTERM,
- SOCK_DGRAM,
- SOCK_STREAM,
-} from "@rivet-dev/agentos-runtime-core/test-runtime";
-import {
- allowAll,
- createKernel as createKernelBase,
-} from "@rivet-dev/agentos-runtime-core/test-runtime";
-export type {
- DriverProcess,
- Kernel,
- KernelInterface,
- KernelRuntimeDriver,
- ProcessContext,
- VirtualFileSystem,
-} from "@rivet-dev/agentos-runtime-core/test-runtime";
-export {
- createWasmVmRuntime,
- DEFAULT_FIRST_PARTY_TIERS,
- WASMVM_COMMANDS,
- type PermissionTier,
- type WasmVmRuntimeOptions,
-} from "@rivet-dev/agentos-runtime-core/test-runtime";
-export {
- createNodeHostNetworkAdapter,
- createNodeRuntime,
- NodeFileSystem,
-} from "@rivet-dev/agentos-runtime-core/test-runtime";
-export { TerminalHarness } from "./terminal-harness.js";
-
-/**
- * Registry integration tests assume they can bootstrap runtimes and /bin stubs
- * unless they explicitly opt into a stricter permission policy.
- */
-export function createKernel(
- options: Parameters[0],
-): ReturnType {
- return createKernelBase({
- ...options,
- permissions: options.permissions ?? allowAll,
- });
-}
diff --git a/registry/tests/kernel/helpers.ts b/registry/tests/kernel/helpers.ts
deleted file mode 100644
index 07be2a7f2c..0000000000
--- a/registry/tests/kernel/helpers.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Integration test helpers for kernel tests that depend on WASM command binaries.
- *
- * Re-exports infrastructure from the parent helpers.ts and provides
- * createIntegrationKernel / skipUnlessWasmBuilt for cross-runtime tests.
- */
-
-import {
- AF_INET,
- AF_UNIX,
- COMMANDS_DIR,
- C_BUILD_DIR,
- describeIf,
- hasWasmBinaries,
- itIf,
- NodeFileSystem,
- SIGTERM,
- SOCK_DGRAM,
- SOCK_STREAM,
- TerminalHarness,
- skipReason,
- createInMemoryFileSystem,
- createKernel,
- createWasmVmRuntime,
- createNodeRuntime,
-} from "../helpers.js";
-import type { Kernel, Permissions, VirtualFileSystem } from "../helpers.js";
-
-export {
- AF_INET,
- AF_UNIX,
- COMMANDS_DIR,
- C_BUILD_DIR,
- describeIf,
- hasWasmBinaries,
- itIf,
- NodeFileSystem,
- SIGTERM,
- SOCK_DGRAM,
- SOCK_STREAM,
- TerminalHarness,
- skipReason,
- createInMemoryFileSystem,
- createKernel,
- createWasmVmRuntime,
- createNodeRuntime,
-} from "../helpers.js";
-export type { Kernel, Permissions, VirtualFileSystem } from "../helpers.js";
-
-export interface IntegrationKernelResult {
- kernel: Kernel;
- vfs: VirtualFileSystem;
- dispose: () => Promise;
-}
-
-export interface IntegrationKernelOptions {
- runtimes?: ("wasmvm" | "node")[];
- loopbackExemptPorts?: number[];
- commandDirs?: string[];
- permissions?: Permissions;
-}
-
-/**
- * Create a kernel with the in-scope runtime drivers for integration testing.
- *
- * Mount order matters. Last-mounted driver wins for overlapping commands:
- * 1. WasmVM first: provides sh/bash/coreutils (90+ commands)
- * 2. Node second: overrides WasmVM's 'node' stub with real V8
- */
-export async function createIntegrationKernel(
- options?: IntegrationKernelOptions,
-): Promise {
- const runtimes = options?.runtimes ?? ["wasmvm"];
- const vfs = createInMemoryFileSystem();
- const kernel = createKernel({
- filesystem: vfs,
- loopbackExemptPorts: options?.loopbackExemptPorts,
- permissions: options?.permissions,
- });
-
- if (runtimes.includes("wasmvm")) {
- await kernel.mount(
- createWasmVmRuntime({ commandDirs: options?.commandDirs ?? [COMMANDS_DIR] }),
- );
- }
- if (runtimes.includes("node")) {
- await kernel.mount(createNodeRuntime());
- }
-
- return {
- kernel,
- vfs,
- dispose: () => kernel.dispose(),
- };
-}
-
-/**
- * Skip helper: returns a reason string if the WASM binaries are not built,
- * or false if the commands directory exists and tests can run.
- */
-export function skipUnlessWasmBuilt(): string | false {
- return skipReason();
-}
diff --git a/registry/tests/wasmvm/terminal-harness.ts b/registry/tests/wasmvm/terminal-harness.ts
deleted file mode 100644
index d5d80772f0..0000000000
--- a/registry/tests/wasmvm/terminal-harness.ts
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * TerminalHarness — wires openShell() to a headless xterm Terminal for
- * deterministic screen-state assertions in tests.
- *
- * Duplicated from packages/kernel/test/terminal-harness.ts because cross-package
- * test imports aren't supported.
- */
-
-import { Terminal } from "@xterm/headless";
-import type { Kernel } from "../helpers.js";
-
-type ShellHandle = ReturnType;
-
-/** Settlement window: resolve type() after this many ms of no new output. */
-const SETTLE_MS = 50;
-/** Poll interval for waitFor(). */
-const POLL_MS = 20;
-/** Default waitFor() timeout. */
-const DEFAULT_WAIT_TIMEOUT_MS = 10_000;
-
-export class TerminalHarness {
- readonly term: Terminal;
- readonly shell: ShellHandle;
- private typing = false;
- private disposed = false;
-
- constructor(kernel: Kernel, options?: { cols?: number; rows?: number; env?: Record; cwd?: string }) {
- const cols = options?.cols ?? 80;
- const rows = options?.rows ?? 24;
-
- this.term = new Terminal({ cols, rows, allowProposedApi: true });
-
- this.shell = kernel.openShell({ cols, rows, env: options?.env, cwd: options?.cwd });
-
- // Wire shell output → xterm
- this.shell.onData = (data: Uint8Array) => {
- this.term.write(data);
- };
- }
-
- /**
- * Send input through the PTY. Resolves after output settles (no new bytes
- * received for SETTLE_MS).
- */
- async type(input: string): Promise {
- if (this.typing) {
- throw new Error("TerminalHarness.type() called while previous type() is still in-flight");
- }
- this.typing = true;
- try {
- await this.typeInternal(input);
- } finally {
- this.typing = false;
- }
- }
-
- private typeInternal(input: string): Promise {
- return new Promise((resolve) => {
- let timer: ReturnType | null = null;
-
- const resetTimer = () => {
- if (timer !== null) clearTimeout(timer);
- timer = setTimeout(() => {
- this.shell.onData = originalOnData;
- resolve();
- }, SETTLE_MS);
- };
-
- const originalOnData = this.shell.onData;
- this.shell.onData = (data: Uint8Array) => {
- this.term.write(data);
- resetTimer();
- };
-
- resetTimer();
- this.shell.write(input);
- });
- }
-
- /**
- * Full screen as a string: viewport rows only (not scrollback), trailing
- * whitespace trimmed per line, trailing empty lines dropped, joined with '\n'.
- */
- screenshotTrimmed(): string {
- const buf = this.term.buffer.active;
- const rows = this.term.rows;
- const lines: string[] = [];
-
- for (let y = 0; y < rows; y++) {
- const line = buf.getLine(buf.viewportY + y);
- lines.push(line ? line.translateToString(true) : "");
- }
-
- while (lines.length > 0 && lines[lines.length - 1] === "") {
- lines.pop();
- }
-
- return lines.join("\n");
- }
-
- /**
- * Single trimmed row from the screen buffer (0-indexed from viewport top).
- */
- line(row: number): string {
- const buf = this.term.buffer.active;
- const line = buf.getLine(buf.viewportY + row);
- return line ? line.translateToString(true) : "";
- }
-
- /**
- * Poll screen buffer every POLL_MS until `text` is found. Throws a
- * descriptive error on timeout.
- */
- async waitFor(
- text: string,
- occurrence: number = 1,
- timeoutMs: number = DEFAULT_WAIT_TIMEOUT_MS,
- ): Promise {
- const deadline = Date.now() + timeoutMs;
-
- while (true) {
- const screen = this.screenshotTrimmed();
-
- let count = 0;
- let idx = -1;
- while (true) {
- idx = screen.indexOf(text, idx + 1);
- if (idx === -1) break;
- count++;
- if (count >= occurrence) return;
- }
-
- if (Date.now() >= deadline) {
- throw new Error(
- `waitFor("${text}", ${occurrence}) timed out after ${timeoutMs}ms.\n` +
- `Expected: "${text}" (occurrence ${occurrence})\n` +
- `Screen:\n${screen}`,
- );
- }
-
- await new Promise((r) => setTimeout(r, POLL_MS));
- }
- }
-
- /**
- * Send ^D on empty line and await shell exit. Returns exit code.
- */
- async exit(): Promise {
- this.shell.write("\x04");
- return this.shell.wait();
- }
-
- /**
- * Kill shell and dispose terminal. Safe to call multiple times.
- */
- async dispose(): Promise {
- if (this.disposed) return;
- this.disposed = true;
-
- try {
- this.shell.kill();
- await Promise.race([
- this.shell.wait(),
- new Promise((r) => setTimeout(r, 500)),
- ]);
- } catch {
- // Shell may already be dead
- }
-
- this.term.dispose();
- }
-}
diff --git a/registry/tests/wasmvm/zip-unzip.test.ts b/registry/tests/wasmvm/zip-unzip.test.ts
deleted file mode 100644
index db330c1e59..0000000000
--- a/registry/tests/wasmvm/zip-unzip.test.ts
+++ /dev/null
@@ -1,249 +0,0 @@
-/**
- * Integration tests for zip and unzip C commands.
- *
- * Verifies zip/unzip roundtrip, recursive compression, list mode,
- * and extract-to-directory via kernel.exec() with real WASM binaries.
- */
-
-import { describe, it, expect, afterEach } from 'vitest';
-import { createInMemoryFileSystem, createWasmVmRuntime } from '../helpers.js';
-import { C_BUILD_DIR, COMMANDS_DIR, createKernel } from '../helpers.js';
-import type { Kernel } from '../helpers.js';
-
-interface HostileEntry {
- name: string;
- method: number; // 0 = store, 8 = deflate
- compressedSize: number;
- uncompressedSize: number;
- localOffset: number;
-}
-
-/** Builds a ZIP whose EOCD cd-size field is corrupt so minizip rejects it and
- * unzip's raw central-directory fallback parser is exercised. The nonzero
- * version fields on each central directory record also make minizip reject
- * the archive under the VM's stream semantics, where its reopen-based seek
- * callback reads EOCD fields from offset 0 instead of the EOCD record.
- * `prefix` bytes (e.g. a real local file header) are placed at offset 0. */
-function buildFallbackArchive(prefix: Uint8Array, entries: HostileEntry[]): Uint8Array {
- const enc = new TextEncoder();
- const cdParts: Uint8Array[] = [];
- for (const e of entries) {
- const nameBytes = enc.encode(e.name);
- const cd = new Uint8Array(46 + nameBytes.length);
- const dv = new DataView(cd.buffer);
- dv.setUint32(0, 0x02014b50, true); // central directory signature
- dv.setUint16(4, 20, true); // version made by
- dv.setUint16(6, 20, true); // version needed to extract
- dv.setUint16(10, e.method, true);
- dv.setUint32(20, e.compressedSize, true);
- dv.setUint32(24, e.uncompressedSize, true);
- dv.setUint16(28, nameBytes.length, true);
- dv.setUint32(42, e.localOffset, true);
- cd.set(nameBytes, 46);
- cdParts.push(cd);
- }
- const cdOffset = prefix.length;
- const cdLen = cdParts.reduce((n, p) => n + p.length, 0);
- const eocd = new Uint8Array(22);
- const dv = new DataView(eocd.buffer);
- dv.setUint32(0, 0x06054b50, true); // EOCD signature
- dv.setUint16(8, entries.length, true); // entries on this disk
- dv.setUint16(10, entries.length, true);// total entries
- dv.setUint32(12, 0xffffffff, true); // corrupt cd size: forces the fallback parser
- dv.setUint32(16, cdOffset, true);
- const out = new Uint8Array(prefix.length + cdLen + 22);
- out.set(prefix, 0);
- let off = cdOffset;
- for (const p of cdParts) { out.set(p, off); off += p.length; }
- out.set(eocd, off);
- return out;
-}
-
-describe('zip/unzip commands', () => {
- let kernel: Kernel;
-
- afterEach(async () => {
- await kernel?.dispose();
- });
-
- it('zip creates valid archive, unzip extracts it, contents match', async () => {
- const vfs = createInMemoryFileSystem();
- await vfs.writeFile('/hello.txt', 'Hello, World!\n');
-
- kernel = createKernel({ filesystem: vfs });
- await kernel.mount(
- createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
- );
-
- // Create zip archive
- const zipResult = await kernel.exec('zip /archive.zip /hello.txt');
- expect(zipResult.exitCode, zipResult.stderr).toBe(0);
-
- // Verify archive was created
- expect(await vfs.exists('/archive.zip')).toBe(true);
-
- // Extract to a different directory
- const unzipResult = await kernel.exec('unzip -d /extracted /archive.zip');
- expect(unzipResult.exitCode, unzipResult.stderr).toBe(0);
-
- // Verify extracted content matches original
- const extracted = await vfs.readTextFile('/extracted/hello.txt');
- expect(extracted).toBe('Hello, World!\n');
- });
-
- it('zip -r compresses directory recursively', async () => {
- const vfs = createInMemoryFileSystem();
- await vfs.mkdir('/mydir');
- await vfs.writeFile('/mydir/a.txt', 'file a\n');
- await vfs.writeFile('/mydir/b.txt', 'file b\n');
-
- kernel = createKernel({ filesystem: vfs });
- await kernel.mount(
- createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
- );
-
- const zipResult = await kernel.exec('zip -r /dir.zip /mydir');
- expect(zipResult.exitCode, zipResult.stderr).toBe(0);
- expect(await vfs.exists('/dir.zip')).toBe(true);
-
- // Extract and verify
- const unzipResult = await kernel.exec('unzip -d /out /dir.zip');
- expect(unzipResult.exitCode, unzipResult.stderr).toBe(0);
-
- const a = await vfs.readTextFile('/out/mydir/a.txt');
- const b = await vfs.readTextFile('/out/mydir/b.txt');
- expect(a).toBe('file a\n');
- expect(b).toBe('file b\n');
- });
-
- it('unzip -l lists archive contents with sizes', async () => {
- const vfs = createInMemoryFileSystem();
- await vfs.writeFile('/data.txt', 'some data content\n');
-
- kernel = createKernel({ filesystem: vfs });
- await kernel.mount(
- createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
- );
-
- // Create archive first
- const zipResult = await kernel.exec('zip /list-test.zip /data.txt');
- expect(zipResult.exitCode, zipResult.stderr).toBe(0);
-
- // List contents
- const listResult = await kernel.exec('unzip -l /list-test.zip');
- expect(listResult.exitCode, listResult.stderr).toBe(0);
- expect(listResult.stdout).toContain('data.txt');
- // Should show the file size (18 bytes)
- expect(listResult.stdout).toContain('18');
- // Should show summary line with file count
- expect(listResult.stdout).toMatch(/1 file/);
- });
-
- it('zip/unzip roundtrip preserves file contents exactly', async () => {
- const vfs = createInMemoryFileSystem();
- // Binary-like content with various byte values
- const content = new Uint8Array(256);
- for (let i = 0; i < 256; i++) content[i] = i;
- await vfs.writeFile('/binary.bin', content);
-
- kernel = createKernel({ filesystem: vfs });
- await kernel.mount(
- createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
- );
-
- const zipResult = await kernel.exec('zip /roundtrip.zip /binary.bin');
- expect(zipResult.exitCode, zipResult.stderr).toBe(0);
-
- const unzipResult = await kernel.exec('unzip -d /rt-out /roundtrip.zip');
- expect(unzipResult.exitCode, unzipResult.stderr).toBe(0);
-
- const extracted = await vfs.readFile('/rt-out/binary.bin');
- expect(extracted.length).toBe(256);
- for (let i = 0; i < 256; i++) {
- expect(extracted[i]).toBe(i);
- }
- });
-
- it('unzip -d extracts to specified directory', async () => {
- const vfs = createInMemoryFileSystem();
- await vfs.writeFile('/src.txt', 'target content\n');
-
- kernel = createKernel({ filesystem: vfs });
- await kernel.mount(
- createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
- );
-
- const zipResult = await kernel.exec('zip /dest-test.zip /src.txt');
- expect(zipResult.exitCode, zipResult.stderr).toBe(0);
-
- // Extract to a new directory
- const unzipResult = await kernel.exec('unzip -d /custom-dir /dest-test.zip');
- expect(unzipResult.exitCode, unzipResult.stderr).toBe(0);
-
- expect(await vfs.exists('/custom-dir/src.txt')).toBe(true);
- const extracted = await vfs.readTextFile('/custom-dir/src.txt');
- expect(extracted).toBe('target content\n');
- });
-
- it('fallback parser rejects an entry with a wrapping local offset', async () => {
- const vfs = createInMemoryFileSystem();
- const bytes = buildFallbackArchive(new Uint8Array(0), [
- { name: 'evil.txt', method: 0, compressedSize: 4, uncompressedSize: 4, localOffset: 0xfffffff0 },
- ]);
- await vfs.writeFile('/evil.zip', bytes);
-
- kernel = createKernel({ filesystem: vfs });
- await kernel.mount(
- createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
- );
-
- const result = await kernel.exec('unzip -d /out /evil.zip');
- expect(result.exitCode, result.stderr).toBe(1);
- expect(result.stderr).toMatch(/error/);
- expect(await vfs.exists('/out/evil.txt')).toBe(false);
- });
-
- it('fallback parser skips an entry whose normalized name is empty', async () => {
- const vfs = createInMemoryFileSystem();
- const bytes = buildFallbackArchive(new Uint8Array(0), [
- { name: '/', method: 0, compressedSize: 0, uncompressedSize: 0, localOffset: 0 },
- ]);
- await vfs.writeFile('/empty-name.zip', bytes);
-
- kernel = createKernel({ filesystem: vfs });
- await kernel.mount(
- createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
- );
-
- const result = await kernel.exec('unzip /empty-name.zip');
- expect(result.exitCode, result.stderr).toBe(0);
- expect(result.stdout).not.toMatch(/error/);
- expect(result.stderr).not.toMatch(/error/);
- });
-
- it('fallback parser caps hostile uncompressed sizes before allocating', async () => {
- const vfs = createInMemoryFileSystem();
- // A real 31-byte local header for a 1-byte stored payload.
- const prefix = new Uint8Array(31);
- const pdv = new DataView(prefix.buffer);
- pdv.setUint32(0, 0x04034b50, true); // local file header signature
- pdv.setUint16(4, 20, true); // version needed to extract
- pdv.setUint16(26, 0, true); // name length
- pdv.setUint16(28, 0, true); // extra length
- prefix[30] = 0x41; // one payload byte
- const bytes = buildFallbackArchive(prefix, [
- { name: 'big.bin', method: 0, compressedSize: 1, uncompressedSize: 0xffffffff, localOffset: 0 },
- ]);
- await vfs.writeFile('/big.zip', bytes);
-
- kernel = createKernel({ filesystem: vfs });
- await kernel.mount(
- createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
- );
-
- const result = await kernel.exec('unzip -d /cap-out /big.zip');
- expect(result.exitCode, result.stderr).toBe(1);
- expect(result.stderr).toMatch(/too large/);
- expect(await vfs.exists('/cap-out/big.bin')).toBe(false);
- });
-});
diff --git a/scripts/benchmarks/session.bench.ts b/scripts/benchmarks/session.bench.ts
index e93a600d16..13b80b8562 100644
--- a/scripts/benchmarks/session.bench.ts
+++ b/scripts/benchmarks/session.bench.ts
@@ -299,7 +299,7 @@ async function loadPiSoftware(): Promise {
// non-snapshot fallback path and hides the optimization entirely.
const local = join(
import.meta.dirname,
- "../../../secure-exec/registry/agent/pi/dist/index.js",
+ "../../../secure-exec/software/pi/dist/index.js",
);
if (existsSync(local)) return (await import(local)).default;
// Fallback: the published/installed software package. Variable specifier so
@@ -309,7 +309,7 @@ async function loadPiSoftware(): Promise {
return (await import(piPkg)).default;
} catch {
throw new Error(
- "Could not resolve the pi software package (../secure-exec/registry/agent/pi/dist or @agentos-software/pi). Build it first.",
+ "Could not resolve the pi software package (../secure-exec/software/pi/dist or @agentos-software/pi). Build it first.",
);
}
}
@@ -323,7 +323,7 @@ function findPiSdkRoot(): string | null {
createRequire(
join(
import.meta.dirname,
- "../../../secure-exec/registry/agent/pi/package.json",
+ "../../../secure-exec/software/pi/package.json",
),
),
];
@@ -373,7 +373,7 @@ function resolvePiSdkRootOrThrow(): string {
* The bare-node session-creation script, run in a FRESH node process per sample
* so each pays the full cold SDK load (the VM lane reloads the SDK in a fresh V8
* isolate every session, so this is the apples-to-apples "Node.js equivalent").
- * Mirrors secure-exec registry/agent/pi/src/adapter.ts `newSession`, with no VM. It times the
+ * Mirrors secure-exec software/pi/src/adapter.ts `newSession`, with no VM. It times the
* SDK load + session construction internally and prints `__MS__=`.
*/
function bareNodeScript(root: string): string {
diff --git a/scripts/check-layout.mjs b/scripts/check-layout.mjs
new file mode 100644
index 0000000000..971600ce27
--- /dev/null
+++ b/scripts/check-layout.mjs
@@ -0,0 +1,126 @@
+import { execFileSync } from "node:child_process";
+import {
+ existsSync,
+ readdirSync,
+ readFileSync,
+ statSync,
+} from "node:fs";
+import { join, relative, sep } from "node:path";
+
+const root = process.cwd();
+const failures = [];
+
+const fail = (message) => failures.push(message);
+const rel = (path) => relative(root, path).split(sep).join("/");
+const readJson = (path) => JSON.parse(readFileSync(path, "utf8"));
+
+if (existsSync(join(root, "registry"))) {
+ fail("registry/ must not exist; use software/ and toolchain/ instead");
+}
+
+const ignoredDirs = new Set([
+ ".git",
+ "node_modules",
+ "target",
+ "dist",
+ "build",
+ "vendor",
+ ".turbo",
+]);
+
+const walk = (dir, visit) => {
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
+ if (entry.isDirectory() && ignoredDirs.has(entry.name)) continue;
+ const path = join(dir, entry.name);
+ if (entry.isDirectory()) {
+ walk(path, visit);
+ } else {
+ visit(path);
+ }
+ }
+};
+
+const allowedTestHomes = [
+ /^software\/[^/]+\/test\/.+\.test\.ts$/,
+ /^toolchain\/conformance\/.+\.test\.ts$/,
+ /^packages\/[^/]+\/tests\/.+\.test\.ts$/,
+ /^scripts\/.+\.test\.ts$/,
+];
+
+walk(root, (path) => {
+ const normalized = rel(path);
+ if (!normalized.endsWith(".test.ts")) return;
+ if (!allowedTestHomes.some((pattern) => pattern.test(normalized))) {
+ fail(`${normalized} is not in an allowed test home`);
+ }
+});
+
+const softwareRoot = join(root, "software");
+if (existsSync(softwareRoot)) {
+ for (const dir of readdirSync(softwareRoot, { withFileTypes: true })) {
+ if (!dir.isDirectory()) continue;
+ const packageDir = join(softwareRoot, dir.name);
+ const manifestPath = join(packageDir, "agentos-package.json");
+ if (!existsSync(manifestPath)) continue;
+ const manifest = readJson(manifestPath);
+ const commands = manifest.commands ?? [];
+ if (commands.length > 0 && !existsSync(join(packageDir, "test"))) {
+ fail(`software/${dir.name} declares commands but has no test/ directory`);
+ }
+ if (manifest.registry && !manifest.registry.category) {
+ fail(`software/${dir.name} registry block is missing category`);
+ }
+ }
+}
+
+const colocatedCargoTomls = [];
+const collectCargoTomls = (dir) => {
+ if (!existsSync(dir)) return;
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
+ const path = join(dir, entry.name);
+ if (entry.isDirectory()) {
+ collectCargoTomls(path);
+ } else if (entry.name === "Cargo.toml") {
+ colocatedCargoTomls.push(path);
+ }
+ }
+};
+collectCargoTomls(join(root, "software"));
+
+for (const cargoToml of colocatedCargoTomls) {
+ const normalized = rel(cargoToml);
+ if (!/\/native\/crates\/[^/]+\/Cargo\.toml$/.test(normalized)) continue;
+ const text = readFileSync(cargoToml, "utf8");
+ if (!/^\[package\]\nworkspace = "\.\.\/\.\.\/\.\.\/\.\.\/\.\.\/toolchain"/m.test(text)) {
+ fail(`${normalized} must explicitly belong to the toolchain workspace`);
+ }
+}
+
+try {
+ const metadata = JSON.parse(
+ execFileSync("cargo", ["metadata", "--format-version", "1", "--no-deps"], {
+ cwd: root,
+ encoding: "utf8",
+ stdio: ["ignore", "pipe", "pipe"],
+ }),
+ );
+ for (const pkg of metadata.packages ?? []) {
+ const manifestPath = pkg.manifest_path.split(sep).join("/");
+ if (manifestPath.includes("/software/")) {
+ fail(`main Cargo workspace claims colocated crate ${manifestPath}`);
+ }
+ }
+} catch (error) {
+ fail(`cargo metadata failed for root workspace: ${error.message}`);
+}
+
+if (failures.length > 0) {
+ for (const failure of failures) {
+ console.error(`check-layout: ${failure}`);
+ }
+ process.exit(1);
+}
+
+console.log(
+ `check-layout: OK (${colocatedCargoTomls.length} colocated Cargo.toml files checked)`,
+);
diff --git a/scripts/ci.sh b/scripts/ci.sh
index ffa6b8fbf0..e65118086e 100755
--- a/scripts/ci.sh
+++ b/scripts/ci.sh
@@ -33,6 +33,7 @@ run_step node --test scripts/check-rust-package-metadata.test.mjs
run_step node scripts/check-rust-package-metadata.mjs
run_step node --test scripts/check-agentos-client-protocol-compat.test.mjs
run_step node scripts/check-agentos-client-protocol-compat.mjs
+run_step pnpm check-layout
if [[ -f scripts/check-registry-test-runtime-boundary.test.mjs ]]; then
run_step node --test scripts/check-registry-test-runtime-boundary.test.mjs
run_step node scripts/check-registry-test-runtime-boundary.mjs
diff --git a/scripts/publish/src/lib/packages.ts b/scripts/publish/src/lib/packages.ts
index 5969746863..6860e23f96 100644
--- a/scripts/publish/src/lib/packages.ts
+++ b/scripts/publish/src/lib/packages.ts
@@ -161,7 +161,7 @@ export function discoverPackages(
}
}
- // 2. pnpm workspace packages. Skip the registry/software/* WASM command
+ // 2. pnpm workspace packages. Skip the software/* WASM command
// packages. They are built and shipped separately, never published to npm
// from this flow.
const pnpmList = execSync("pnpm -r list --json --depth -1", {
@@ -183,11 +183,11 @@ export function discoverPackages(
) {
continue;
}
- // registry/software packages version independently and publish from
+ // software packages version independently and publish from
// local via the toolchain — EXCEPT `common`, which core hard-depends on
// and therefore ships on the main release track in lockstep.
if (
- p.path.includes("/registry/software/") &&
+ p.path.includes("/software/") &&
p.name !== "@agentos-software/common"
) {
continue;
diff --git a/scripts/secure-exec-agentos-map.json b/scripts/secure-exec-agentos-map.json
index 5af919bb85..f257f17672 100644
--- a/scripts/secure-exec-agentos-map.json
+++ b/scripts/secure-exec-agentos-map.json
@@ -247,7 +247,7 @@
{
"packageGlob": "@agentos-software/*",
"sourcePathGlob": "secure-exec/registry/{agent,software}/*",
- "targetPathGlob": "agentos/registry/{agent,software}/*"
+ "targetPathGlob": "agentos/software/*"
}
],
"scriptedReplacementOrder": [
diff --git a/scripts/verify-check-types.mjs b/scripts/verify-check-types.mjs
index a2b7b4fdf6..69b85d4cab 100644
--- a/scripts/verify-check-types.mjs
+++ b/scripts/verify-check-types.mjs
@@ -27,7 +27,7 @@ const found = execSync(
'-not -path "*/.cache/*"',
'-not -path "*/.turbo/*"',
'-not -path "*/vendor/*"',
- '-not -path "./registry/tests/projects/*"',
+ '-not -path "./packages/runtime-core/tests/integration/projects/*"',
'-not -path "./crates/execution/assets/undici-shims/*"',
].join(" "),
{ encoding: "utf8", cwd: root },
diff --git a/scripts/verify-fixed-versions.mjs b/scripts/verify-fixed-versions.mjs
index c6bc103fff..0e0933777e 100644
--- a/scripts/verify-fixed-versions.mjs
+++ b/scripts/verify-fixed-versions.mjs
@@ -35,7 +35,6 @@ function isExcluded(relPath) {
if (relPath === "node_modules" || relPath.startsWith("node_modules/")) return true;
if (relPath === ".claude" || relPath.startsWith(".claude/")) return true;
if (relPath === "scripts/publish" || relPath.startsWith("scripts/publish/")) return true;
- if (relPath === "registry/tests" || relPath.startsWith("registry/tests/")) return true;
return relPath
.split("/")
.some((part) => part === "fixtures" || part === "vendor" || part === "tests");
diff --git a/registry/CONTRIBUTING.md b/software/CONTRIBUTING.md
similarity index 74%
rename from registry/CONTRIBUTING.md
rename to software/CONTRIBUTING.md
index 22123b3d2b..2ab561cf43 100644
--- a/registry/CONTRIBUTING.md
+++ b/software/CONTRIBUTING.md
@@ -11,16 +11,14 @@ full documentation lives on the website:
## File structure
```
-registry/
-├── agent// JavaScript agent adapters (claude, codex, opencode, pi)
-├── software// WASM command packages (jq, ripgrep, git, …)
-└── native/ toolchains that compile the command binaries
+software// WASM command packages and JavaScript agent adapters
+toolchain/ shared build infrastructure for command binaries
```
Each package contains:
```
-registry/software//
+software//
├── package.json name, per-package semver, build script
├── agentos-package.json runtime manifest (commands/aliases/provides) +
│ `registry` block (title/description/priority/image)
@@ -35,11 +33,10 @@ registry/software//
From the repo root:
```bash
-just registry-native # compile the fast native wasm command gate
-just registry-native-cmd # build one command (required for git, duckdb, vim, wget, codex)
-just registry-build # stage bin/ + assemble dist/package/
-just registry-status # per-package state
-just registry-test # registry integration tests
+just toolchain-build # compile the fast native wasm command gate
+just toolchain-cmd # build one command (required for git, duckdb, vim, wget, codex)
+just software-build # stage bin/ + assemble dist/package/
+pnpm --filter './software/*' test
```
See [Building Binaries](https://agentos-sdk.dev/docs/custom-software/building-wasm)
@@ -48,15 +45,15 @@ for toolchain details (Rust vs C builds, the patched WASI sysroot).
## Adding a package
1. Copy an existing package of the same kind (`software/jq` is a minimal
- example) to `registry/software//`.
-2. Add the command source under `registry/native/` (Rust: a
- `crates/commands/` crate; C: wire it into `registry/native/c`).
+ example) to `software//`.
+2. Add the command source under `software//native/` (Rust:
+ `native/crates/cmd-`; C: `native/c/.c`).
3. Fill in `agentos-package.json`: `commands` (and `aliases`/`provides` if
needed) plus a `registry` block with `title` and `description` — without
that block the package is not listed on the website registry page.
4. Register the directory in `pnpm-workspace.yaml` (it is covered by the
- `registry/software/*` glob) and run `pnpm install`.
-5. `just registry-build ` and check `just registry-status`.
+ `software/*` glob) and run `pnpm install`.
+5. `just software-build `.
See [Software Definition](https://agentos-sdk.dev/docs/custom-software/definition)
for every manifest field.
@@ -68,7 +65,7 @@ publishing needed. To try a package in an external project, pack the built
tarball and install it by path:
```bash
-cd registry/software/
+cd software/
npm pack # produces agentos-software--.tgz
cd /path/to/your-project
npm install /path/to/agentos-software--.tgz
@@ -87,11 +84,11 @@ default) — see [Publishing Packages](https://agentos-sdk.dev/docs/custom-softw
## Opening a PR
- Branch, commit with a plain conventional-commit title
- (`feat(registry): add package`), no agent attribution.
+ (`feat(software): add package`), no agent attribution.
- Include: the package directory, the native build wiring, and the
`registry` block so the website picks it up.
- Keep the package version at its own semver (packages version
independently); never touch other packages' versions or the `latest`
dist-tag.
- Cheap gates before pushing: `cargo check --workspace`, `pnpm build`,
- `pnpm check-types`, and `just registry-build `.
+ `pnpm check-types`, and `just software-build `.
diff --git a/registry/README.md b/software/README.md
similarity index 71%
rename from registry/README.md
rename to software/README.md
index 553c520110..7f15771bb8 100644
--- a/registry/README.md
+++ b/software/README.md
@@ -1,9 +1,8 @@
-# secure-exec Registry
+# agentOS Software Catalog
Software packages for secure-exec VMs: WASM command binaries
-(`registry/software/*`), JavaScript agent adapters (`registry/agent/*`), and
-tool packages (`registry/tool/*`). Everything under the `@agentos-software/*`
-npm scope.
+and JavaScript agent adapters live together under `software/*`. Everything in
+this catalog publishes under the `@agentos-software/*` npm scope.
## Consuming packages
@@ -27,7 +26,7 @@ export const software = [coreutils, grep];
## Package anatomy
```
-registry/software//
+software//
├── package.json name, per-package semver version, build script
├── agentos-package.json manifest: runtime fields (name/agent/provides) +
│ staging fields (commands/aliases/stubs)
@@ -56,52 +55,48 @@ publish their own agentOS packages (`npx @rivet-dev/agentos-toolchain`):
All recipes run from the repo root (see `justfile`):
```bash
-just registry-native # compile the fast native wasm command gate
-just registry-native-cmd # build ONE command binary, whatever its toolchain
-just registry-build # stage + assemble every registry package
-just registry-build coreutils # ... or just one
-just registry-status # per-package state; --remote adds npm dist-tags
-just registry-test # registry integration tests (registry/tests)
+just toolchain-build # compile the fast native wasm command gate
+just toolchain-cmd # build ONE command binary, whatever its toolchain
+just software-build # stage + assemble every software package
+just software-build coreutils # ... or just one
+pnpm --filter './software/*' test
```
-`registry-native-cmd` (= `make -C registry/native cmd/`) is the uniform
+`toolchain-cmd` (= `make -C toolchain cmd/`) is the uniform
per-binary entry point; it dispatches to whichever toolchain owns the command:
| kind | commands | what it runs |
|---|---|---|
-| Rust | any `crates/commands/` (sh, ls, rg, …) | `cargo build -p cmd-` (build-std) + `wasm-opt` |
+| Rust | any `software//native/crates/cmd-` command crate (sh, ls, rg, …) | `cargo build -p cmd-` (build-std) + `wasm-opt` |
| C | `zip unzip envsubst sqlite3 curl wget duckdb` | `make -C c sysroot build/` + per-command install |
| codex | `codex`, `codex-exec` | the codex fork build (needs the fork checkout) |
| C | `vim` (pinned upstream clone + bridge in `c/vim/`) | `make -C c sysroot build/vim` + install |
-| external | `vix` | validates the hand-built binary is in the drop zone; errors with instructions otherwise |
-The default native build (`registry/native`) compiles the fast command gate to
-`wasm32-wasip1` with a patched std (`-Z build-std`, `patches/`), runs
+The default native build (`toolchain`) compiles the fast command gate to
+`wasm32-wasip1` with a patched std (`-Z build-std`, `toolchain/std-patches/`), runs
`wasm-opt -O3`, and drops the binaries in
-`registry/native/target/wasm32-wasip1/release/commands/`. The bulk gate
+`toolchain/target/wasm32-wasip1/release/commands/`. The bulk gate
intentionally excludes slow/heavy or non-default commands: `git`, `duckdb`,
`vim`, `wget`, and the external `codex`/`codex-exec` fork build. Build those explicitly with
-`just registry-native-cmd ` when working on them. Package builds then run
+`just toolchain-cmd ` when working on them. Package builds then run
`agentos-toolchain stage` (with `--if-missing skip`, so a checkout without the
native build still assembles valid empty placeholders) followed by `tsc` and
`agentos-toolchain build`.
-Within this repo, everything consumes the LOCAL builds by default: the registry
+Within this repo, everything consumes the LOCAL builds by default: the software
packages are pnpm workspace members, so tests and examples resolve them via
`workspace:*` — no publish needed for local development.
Exceptions:
- `software/codex/wasm/` is the install target of the codex fork's build
- (`make -C registry/native codex`); `software/codex-cli` stages from it.
+ (`make -C toolchain codex`); `software/codex-cli` stages from it.
- C-built commands (sqlite3, zip, unzip, curl, wget, duckdb) need the patched
- sysroot; `just registry-native-cmd ` builds it on demand. Without it
+ sysroot; `just toolchain-cmd ` builds it on demand. Without it
those packages stay empty placeholders.
-- `vim` builds from source: `just registry-native-cmd vim` clones the pinned
+- `vim` builds from source: `just toolchain-cmd vim` clones the pinned
vim tag and compiles it against the patched sysroot + the termios/termcap
- bridge in `registry/native/c/vim/` (its runtime tree is staged by the
+ bridge in `software/vim/native/c/vim-bridge/` (its runtime tree is staged by the
package `scripts/stage-runtime.mjs` and applied via manifest `provides`).
-- `vix` is the one remaining external drop-zone binary (no source pipeline):
- place the hand-built wasm at `registry/native/target/.../commands/vix`.
## Publishing
@@ -118,7 +113,7 @@ just registry-publish-all # every built software package, dist-
Bump the package's `version` in its `package.json` (commit it) before
publishing. CI does not publish these packages (the publish workflow's package
discovery skips `@agentos-software/*` except the manifest); the agent packages
-under `registry/agent/*` preview-publish via `.github/workflows/publish.yaml`
+under `software/*` preview-publish via `.github/workflows/publish.yaml`
under a branch dist-tag.
agent-os consumes the published packages pinned per-package in its catalog
diff --git a/software/browserbase/agentos-package.json b/software/browserbase/agentos-package.json
new file mode 100644
index 0000000000..3f53841f14
--- /dev/null
+++ b/software/browserbase/agentos-package.json
@@ -0,0 +1,13 @@
+{
+ "name": "browserbase",
+ "registry": {
+ "title": "Browserbase",
+ "description": "The Browserbase `browse` CLI: let agents browse the web with a cloud browser, no sandbox required.",
+ "beta": true,
+ "types": [
+ "browser"
+ ],
+ "image": "/images/registry/browserbase.svg",
+ "category": "browser"
+ }
+}
diff --git a/registry/software/browserbase/package.json b/software/browserbase/package.json
similarity index 82%
rename from registry/software/browserbase/package.json
rename to software/browserbase/package.json
index 97cdfdd52d..fd6512e4b5 100644
--- a/registry/software/browserbase/package.json
+++ b/software/browserbase/package.json
@@ -23,7 +23,8 @@
],
"scripts": {
"build": "tsc && rm -rf dist/package dist/package.tar && agentos-toolchain pack . --out dist/package --prune-native",
- "check-types": "tsc --noEmit"
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"dependencies": {
"browse": "^0.9.3"
@@ -32,6 +33,8 @@
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.7.2"
+ "typescript": "^5.7.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/agent/claude/src/index.ts b/software/browserbase/src/index.ts
similarity index 100%
rename from registry/agent/claude/src/index.ts
rename to software/browserbase/src/index.ts
diff --git a/registry/software/common/tsconfig.json b/software/browserbase/tsconfig.json
similarity index 71%
rename from registry/software/common/tsconfig.json
rename to software/browserbase/tsconfig.json
index 8f24167afd..03ce790ab7 100644
--- a/registry/software/common/tsconfig.json
+++ b/software/browserbase/tsconfig.json
@@ -1,5 +1,5 @@
{
- "extends": "../../tsconfig.base.json",
+ "extends": "../tsconfig.base.json",
"compilerOptions": {
"outDir": "./dist",
"rootDir": "./src"
diff --git a/registry/software/build-essential/agentos-package.json b/software/build-essential/agentos-package.json
similarity index 72%
rename from registry/software/build-essential/agentos-package.json
rename to software/build-essential/agentos-package.json
index 63b0155256..e2c0382a37 100644
--- a/registry/software/build-essential/agentos-package.json
+++ b/software/build-essential/agentos-package.json
@@ -2,6 +2,7 @@
"registry": {
"title": "Build Essential",
"description": "Meta-package: common + git + curl.",
- "priority": 100
+ "priority": 100,
+ "category": "meta"
}
}
diff --git a/registry/software/build-essential/package.json b/software/build-essential/package.json
similarity index 80%
rename from registry/software/build-essential/package.json
rename to software/build-essential/package.json
index 1ce4e95963..1ad710650f 100644
--- a/registry/software/build-essential/package.json
+++ b/software/build-essential/package.json
@@ -19,7 +19,8 @@
},
"scripts": {
"build": "tsc",
- "check-types": "tsc --noEmit"
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"dependencies": {
"@agentos-software/common": "workspace:*",
@@ -29,6 +30,8 @@
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/build-essential/src/index.ts b/software/build-essential/src/index.ts
similarity index 100%
rename from registry/software/build-essential/src/index.ts
rename to software/build-essential/src/index.ts
diff --git a/registry/software/build-essential/tsconfig.json b/software/build-essential/tsconfig.json
similarity index 71%
rename from registry/software/build-essential/tsconfig.json
rename to software/build-essential/tsconfig.json
index 8f24167afd..03ce790ab7 100644
--- a/registry/software/build-essential/tsconfig.json
+++ b/software/build-essential/tsconfig.json
@@ -1,5 +1,5 @@
{
- "extends": "../../tsconfig.base.json",
+ "extends": "../tsconfig.base.json",
"compilerOptions": {
"outDir": "./dist",
"rootDir": "./src"
diff --git a/software/claude/agentos-package.json b/software/claude/agentos-package.json
new file mode 100644
index 0000000000..27f8b1c5ea
--- /dev/null
+++ b/software/claude/agentos-package.json
@@ -0,0 +1,36 @@
+{
+ "name": "claude",
+ "agent": {
+ "acpEntrypoint": "claude-sdk-acp",
+ "env": {
+ "CLAUDE_AGENT_SDK_CLIENT_APP": "@rivet-dev/agentos",
+ "CLAUDE_CODE_SIMPLE": "1",
+ "CLAUDE_CODE_FORCE_AGENT_OS_RIPGREP": "1",
+ "CLAUDE_CODE_DEFER_GROWTHBOOK_INIT": "1",
+ "CLAUDE_CODE_DISABLE_CWD_PERSIST": "1",
+ "CLAUDE_CODE_DISABLE_DEV_NULL_REDIRECT": "1",
+ "CLAUDE_CODE_NODE_SHELL_WRAPPER": "1",
+ "CLAUDE_CODE_DISABLE_STREAM_JSON_HOOK_EVENTS": "1",
+ "CLAUDE_CODE_SHELL": "/bin/sh",
+ "CLAUDE_CODE_SKIP_INITIAL_MESSAGES": "1",
+ "CLAUDE_CODE_SKIP_SANDBOX_INIT": "1",
+ "CLAUDE_CODE_SIMPLE_SHELL_EXEC": "1",
+ "CLAUDE_CODE_SWAP_STDIO": "0",
+ "CLAUDE_CODE_USE_PIPE_OUTPUT": "1",
+ "DISABLE_TELEMETRY": "1",
+ "SHELL": "/bin/sh",
+ "USE_BUILTIN_RIPGREP": "0"
+ }
+ },
+ "registry": {
+ "slug": "claude-code",
+ "title": "Claude Code",
+ "description": "Run Claude Code as an agentOS agent with full tool access, file editing, and shell execution.",
+ "beta": true,
+ "docsHref": "/docs/agents/claude",
+ "image": "/images/registry/claude-code.svg",
+ "priority": 90,
+ "category": "agents"
+ },
+ "kind": "agent"
+}
diff --git a/registry/agent/claude/package.json b/software/claude/package.json
similarity index 93%
rename from registry/agent/claude/package.json
rename to software/claude/package.json
index 3b056fe9be..8401592504 100644
--- a/registry/agent/claude/package.json
+++ b/software/claude/package.json
@@ -36,6 +36,7 @@
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.7.2"
+ "typescript": "^5.7.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*"
}
}
diff --git a/registry/agent/claude/scripts/build-patched-cli.mjs b/software/claude/scripts/build-patched-cli.mjs
similarity index 100%
rename from registry/agent/claude/scripts/build-patched-cli.mjs
rename to software/claude/scripts/build-patched-cli.mjs
diff --git a/registry/agent/claude/src/adapter.ts b/software/claude/src/adapter.ts
similarity index 100%
rename from registry/agent/claude/src/adapter.ts
rename to software/claude/src/adapter.ts
diff --git a/registry/agent/opencode/src/index.ts b/software/claude/src/index.ts
similarity index 100%
rename from registry/agent/opencode/src/index.ts
rename to software/claude/src/index.ts
diff --git a/registry/agent/claude/src/patched-cli.ts b/software/claude/src/patched-cli.ts
similarity index 100%
rename from registry/agent/claude/src/patched-cli.ts
rename to software/claude/src/patched-cli.ts
diff --git a/registry/agent/claude/tests/adapter.test.mjs b/software/claude/tests/adapter.test.mjs
similarity index 100%
rename from registry/agent/claude/tests/adapter.test.mjs
rename to software/claude/tests/adapter.test.mjs
diff --git a/registry/agent/claude/tests/patched-cli.test.mjs b/software/claude/tests/patched-cli.test.mjs
similarity index 100%
rename from registry/agent/claude/tests/patched-cli.test.mjs
rename to software/claude/tests/patched-cli.test.mjs
diff --git a/registry/agent/claude/tsconfig.json b/software/claude/tsconfig.json
similarity index 78%
rename from registry/agent/claude/tsconfig.json
rename to software/claude/tsconfig.json
index bff7313256..73a06ddbdb 100644
--- a/registry/agent/claude/tsconfig.json
+++ b/software/claude/tsconfig.json
@@ -1,5 +1,5 @@
{
- "extends": "../../../tsconfig.base.json",
+ "extends": "../tsconfig.base.json",
"compilerOptions": {
"declaration": true,
"outDir": "./dist",
diff --git a/registry/software/codex-cli/agentos-package.json b/software/codex-cli/agentos-package.json
similarity index 68%
rename from registry/software/codex-cli/agentos-package.json
rename to software/codex-cli/agentos-package.json
index 07b8d1f1d3..ad23a92b67 100644
--- a/registry/software/codex-cli/agentos-package.json
+++ b/software/codex-cli/agentos-package.json
@@ -6,6 +6,7 @@
"registry": {
"title": "Codex CLI",
"description": "OpenAI Codex CLI integration.",
- "image": "/images/registry/codex.svg"
+ "image": "/images/registry/codex.svg",
+ "category": "agents"
}
}
diff --git a/registry/native/crates/commands/codex-exec/Cargo.toml b/software/codex-cli/native/crates/cmd-codex-exec/Cargo.toml
similarity index 72%
rename from registry/native/crates/commands/codex-exec/Cargo.toml
rename to software/codex-cli/native/crates/cmd-codex-exec/Cargo.toml
index c2859ea274..eeca177f14 100644
--- a/registry/native/crates/commands/codex-exec/Cargo.toml
+++ b/software/codex-cli/native/crates/cmd-codex-exec/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-codex-exec"
version.workspace = true
edition.workspace = true
@@ -10,7 +11,7 @@ name = "codex-exec"
path = "src/main.rs"
[dependencies]
-wasi-http = { package = "secureexec-wasi-http", path = "../../libs/wasi-http" }
+wasi-http = { package = "secureexec-wasi-http", path = "../../../../../toolchain/crates/libs/wasi-http" }
# WASI stub crates for future codex-core dependencies that don't support wasm32-wasip1.
codex-network-proxy = "0.0.0"
diff --git a/registry/native/crates/commands/codex-exec/src/main.rs b/software/codex-cli/native/crates/cmd-codex-exec/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/codex-exec/src/main.rs
rename to software/codex-cli/native/crates/cmd-codex-exec/src/main.rs
diff --git a/registry/native/crates/commands/codex/Cargo.toml b/software/codex-cli/native/crates/cmd-codex/Cargo.toml
similarity index 81%
rename from registry/native/crates/commands/codex/Cargo.toml
rename to software/codex-cli/native/crates/cmd-codex/Cargo.toml
index 41f6109024..cc73f06a16 100644
--- a/registry/native/crates/commands/codex/Cargo.toml
+++ b/software/codex-cli/native/crates/cmd-codex/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-codex"
version.workspace = true
edition.workspace = true
@@ -20,11 +21,11 @@ path = "src/main.rs"
# tokio::process::Command in codex-core when compiled for WASI.
[dependencies]
-wasi-spawn = { package = "secureexec-wasi-spawn", path = "../../libs/wasi-spawn" }
-wasi-http = { package = "secureexec-wasi-http", path = "../../libs/wasi-http" }
+wasi-spawn = { package = "secureexec-wasi-spawn", path = "../../../../../toolchain/crates/libs/wasi-spawn" }
+wasi-http = { package = "secureexec-wasi-http", path = "../../../../../toolchain/crates/libs/wasi-http" }
# TUI dependencies — ratatui for rendering, crossterm for terminal backend
-# crossterm is patched for WASI support (see patches/crates/crossterm/)
+# crossterm is patched for WASI support (see std-patches/crates/crossterm/)
ratatui = { version = "0.29", default-features = false, features = ["crossterm"] }
# WASI stub crates for codex-core dependencies that don't support wasm32-wasip1.
diff --git a/registry/native/crates/commands/codex/src/main.rs b/software/codex-cli/native/crates/cmd-codex/src/main.rs
similarity index 99%
rename from registry/native/crates/commands/codex/src/main.rs
rename to software/codex-cli/native/crates/cmd-codex/src/main.rs
index 5375dfa82e..88f5d80c09 100644
--- a/registry/native/crates/commands/codex/src/main.rs
+++ b/software/codex-cli/native/crates/cmd-codex/src/main.rs
@@ -7,7 +7,7 @@
/// Uses wasi-spawn for process spawning via host_process FFI and
/// wasi-http for HTTP/HTTPS requests via host_net TCP/TLS imports.
///
-/// crossterm is patched for WASI support (see patches/crates/crossterm/):
+/// crossterm is patched for WASI support (see std-patches/crates/crossterm/):
/// - Terminal raw mode tracked in-process (host PTY handles discipline)
/// - Terminal size from COLUMNS/LINES env vars
/// - Event source reads stdin directly and parses ANSI escape sequences
diff --git a/registry/software/codex-cli/package.json b/software/codex-cli/package.json
similarity index 79%
rename from registry/software/codex-cli/package.json
rename to software/codex-cli/package.json
index 7e615f70b6..1e9cbb9517 100644
--- a/registry/software/codex-cli/package.json
+++ b/software/codex-cli/package.json
@@ -19,12 +19,15 @@
},
"scripts": {
"build": "agentos-toolchain stage --commands-dir ../codex/wasm --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/agent/pi-cli/src/index.ts b/software/codex-cli/src/index.ts
similarity index 100%
rename from registry/agent/pi-cli/src/index.ts
rename to software/codex-cli/src/index.ts
diff --git a/registry/tests/wasmvm/codex-exec.test.ts b/software/codex-cli/test/codex-exec.test.ts
similarity index 94%
rename from registry/tests/wasmvm/codex-exec.test.ts
rename to software/codex-cli/test/codex-exec.test.ts
index 1d3da03c42..01087312db 100644
--- a/registry/tests/wasmvm/codex-exec.test.ts
+++ b/software/codex-cli/test/codex-exec.test.ts
@@ -14,9 +14,16 @@
*/
import { describe, it, expect, afterEach } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
-import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+import { existsSync } from 'node:fs';
+import { resolve } from 'node:path';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
+import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
+
+const hasCodexExec =
+ process.env.AGENTOS_CODEX_WASM_E2E === '1' &&
+ hasWasmBinaries &&
+ existsSync(resolve(COMMANDS_DIR, 'codex-exec'));
// Minimal in-memory VFS for kernel tests
class SimpleVFS {
@@ -114,8 +121,8 @@ async function createTestKernel(): Promise<{ kernel: Kernel; vfs: SimpleVFS }> {
return { kernel, vfs };
}
-// TODO(P6): requires codex-exec WASM artifact from an external fork build, intentionally excluded from the fast registry-build gate.
-describe.skip('codex-exec command (WasmVM)', { timeout: 30_000 }, () => {
+// TODO(P6): requires codex-exec WASM artifact from an external fork build, intentionally excluded from the fast software-build gate.
+describeIf(hasCodexExec, 'codex-exec command (WasmVM)', { timeout: 30_000 }, () => {
let kernel: Kernel;
afterEach(async () => {
diff --git a/registry/tests/wasmvm/codex-tui.test.ts b/software/codex-cli/test/codex-tui.test.ts
similarity index 91%
rename from registry/tests/wasmvm/codex-tui.test.ts
rename to software/codex-cli/test/codex-tui.test.ts
index ea004eb986..b5abd5badb 100644
--- a/registry/tests/wasmvm/codex-tui.test.ts
+++ b/software/codex-cli/test/codex-tui.test.ts
@@ -14,11 +14,17 @@
*/
import { describe, it, expect, afterEach } from 'vitest';
-import { TerminalHarness } from './terminal-harness.js';
-import { createWasmVmRuntime } from '../helpers.js';
-import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '../helpers.js';
-import type { Kernel } from '../helpers.js';
-
+import { existsSync } from 'node:fs';
+import { resolve } from 'node:path';
+import { TerminalHarness } from '@rivet-dev/agentos-test-harness';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
+import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
+
+const hasCodex =
+ process.env.AGENTOS_CODEX_WASM_E2E === '1' &&
+ hasWasmBinaries &&
+ existsSync(resolve(COMMANDS_DIR, 'codex'));
const hasApiKey = !!process.env.OPENAI_API_KEY;
/** brush-shell interactive prompt. */
@@ -124,8 +130,8 @@ async function createTestKernel(): Promise<{ kernel: Kernel; vfs: SimpleVFS }> {
// Non-interactive tests (kernel.exec — --help bypasses TUI)
// ---------------------------------------------------------------------------
-// TODO(P6): requires codex WASM artifact from an external fork build, intentionally excluded from the fast registry-build gate.
-describe.skip('codex TUI (WasmVM) - non-interactive', { timeout: 30_000 }, () => {
+// TODO(P6): requires codex WASM artifact from an external fork build, intentionally excluded from the fast software-build gate.
+describeIf(hasCodex, 'codex TUI (WasmVM) - non-interactive', { timeout: 30_000 }, () => {
let kernel: Kernel;
afterEach(async () => {
@@ -155,8 +161,8 @@ describe.skip('codex TUI (WasmVM) - non-interactive', { timeout: 30_000 }, () =>
// Interactive TUI tests (PTY via TerminalHarness)
// ---------------------------------------------------------------------------
-// TODO(P6): requires codex WASM artifact from an external fork build, intentionally excluded from the fast registry-build gate.
-describe.skip('codex TUI (WasmVM) - interactive', { timeout: 30_000 }, () => {
+// TODO(P6): requires codex WASM artifact from an external fork build, intentionally excluded from the fast software-build gate.
+describeIf(hasCodex, 'codex TUI (WasmVM) - interactive', { timeout: 30_000 }, () => {
let kernel: Kernel;
let harness: TerminalHarness;
@@ -261,8 +267,8 @@ describe.skip('codex TUI (WasmVM) - interactive', { timeout: 30_000 }, () => {
// API integration tests (gated behind OPENAI_API_KEY)
// ---------------------------------------------------------------------------
-// TODO(P6): requires codex WASM artifact from an external fork build, intentionally excluded from the fast registry-build gate.
-describe.skip('codex TUI API integration (requires OPENAI_API_KEY)', { timeout: 60_000 }, () => {
+// TODO(P6): requires codex WASM artifact from an external fork build, intentionally excluded from the fast software-build gate.
+describeIf(hasCodex && hasApiKey, 'codex TUI API integration (requires OPENAI_API_KEY)', { timeout: 60_000 }, () => {
let kernel: Kernel;
let harness: TerminalHarness;
diff --git a/registry/software/browserbase/tsconfig.json b/software/codex-cli/tsconfig.json
similarity index 71%
rename from registry/software/browserbase/tsconfig.json
rename to software/codex-cli/tsconfig.json
index 8f24167afd..03ce790ab7 100644
--- a/registry/software/browserbase/tsconfig.json
+++ b/software/codex-cli/tsconfig.json
@@ -1,5 +1,5 @@
{
- "extends": "../../tsconfig.base.json",
+ "extends": "../tsconfig.base.json",
"compilerOptions": {
"outDir": "./dist",
"rootDir": "./src"
diff --git a/registry/agent/codex/agentos-package.json b/software/codex/agentos-package.json
similarity index 78%
rename from registry/agent/codex/agentos-package.json
rename to software/codex/agentos-package.json
index a99b543f00..0a05c9b778 100644
--- a/registry/agent/codex/agentos-package.json
+++ b/software/codex/agentos-package.json
@@ -5,6 +5,8 @@
"beta": true,
"docsHref": "/docs/agents/codex",
"image": "/images/registry/codex.svg",
- "priority": 80
- }
+ "priority": 80,
+ "category": "agents"
+ },
+ "kind": "agent"
}
diff --git a/registry/agent/codex/package.json b/software/codex/package.json
similarity index 75%
rename from registry/agent/codex/package.json
rename to software/codex/package.json
index bdc2e759a0..c17343d8d2 100644
--- a/registry/agent/codex/package.json
+++ b/software/codex/package.json
@@ -13,7 +13,8 @@
}
},
"scripts": {
- "build": "tsc",
+ "prepare-deps": "pnpm --filter @agentos-software/codex-cli exec tsc",
+ "build": "pnpm prepare-deps && tsc",
"check-types": "tsc --noEmit",
"test": "pnpm build && node --test tests/*.test.mjs"
},
@@ -23,6 +24,7 @@
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.7.2"
+ "typescript": "^5.7.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*"
}
}
diff --git a/registry/agent/codex/src/index.ts b/software/codex/src/index.ts
similarity index 100%
rename from registry/agent/codex/src/index.ts
rename to software/codex/src/index.ts
diff --git a/registry/agent/codex/tests/package.test.mjs b/software/codex/tests/package.test.mjs
similarity index 100%
rename from registry/agent/codex/tests/package.test.mjs
rename to software/codex/tests/package.test.mjs
diff --git a/registry/agent/pi-cli/tsconfig.json b/software/codex/tsconfig.json
similarity index 78%
rename from registry/agent/pi-cli/tsconfig.json
rename to software/codex/tsconfig.json
index bff7313256..73a06ddbdb 100644
--- a/registry/agent/pi-cli/tsconfig.json
+++ b/software/codex/tsconfig.json
@@ -1,5 +1,5 @@
{
- "extends": "../../../tsconfig.base.json",
+ "extends": "../tsconfig.base.json",
"compilerOptions": {
"declaration": true,
"outDir": "./dist",
diff --git a/registry/software/common/agentos-package.json b/software/common/agentos-package.json
similarity index 78%
rename from registry/software/common/agentos-package.json
rename to software/common/agentos-package.json
index 4e787157e2..b8dc86c870 100644
--- a/registry/software/common/agentos-package.json
+++ b/software/common/agentos-package.json
@@ -2,6 +2,7 @@
"registry": {
"title": "Common",
"description": "Meta-package: coreutils + sed + grep + gawk + findutils + diffutils + tar + gzip.",
- "priority": 95
+ "priority": 95,
+ "category": "meta"
}
}
diff --git a/registry/software/common/package.json b/software/common/package.json
similarity index 84%
rename from registry/software/common/package.json
rename to software/common/package.json
index 7a422419f4..8194cac3d7 100644
--- a/registry/software/common/package.json
+++ b/software/common/package.json
@@ -19,7 +19,8 @@
},
"scripts": {
"build": "tsc",
- "check-types": "tsc --noEmit"
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"dependencies": {
"@agentos-software/coreutils": "workspace:*",
@@ -34,6 +35,8 @@
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/common/src/index.ts b/software/common/src/index.ts
similarity index 100%
rename from registry/software/common/src/index.ts
rename to software/common/src/index.ts
diff --git a/registry/software/codex-cli/tsconfig.json b/software/common/tsconfig.json
similarity index 71%
rename from registry/software/codex-cli/tsconfig.json
rename to software/common/tsconfig.json
index 8f24167afd..03ce790ab7 100644
--- a/registry/software/codex-cli/tsconfig.json
+++ b/software/common/tsconfig.json
@@ -1,5 +1,5 @@
{
- "extends": "../../tsconfig.base.json",
+ "extends": "../tsconfig.base.json",
"compilerOptions": {
"outDir": "./dist",
"rootDir": "./src"
diff --git a/registry/software/coreutils/agentos-package.json b/software/coreutils/agentos-package.json
similarity index 95%
rename from registry/software/coreutils/agentos-package.json
rename to software/coreutils/agentos-package.json
index fd258428ba..30fdb36450 100644
--- a/registry/software/coreutils/agentos-package.json
+++ b/software/coreutils/agentos-package.json
@@ -122,6 +122,7 @@
"title": "Coreutils",
"description": "sh, cat, ls, cp, mv, rm, sort, and 80+ essential POSIX commands.",
"priority": 45,
- "image": "/images/registry/coreutils.svg"
+ "image": "/images/registry/coreutils.svg",
+ "category": "core"
}
}
diff --git a/registry/software/coreutils/bin/[ b/software/coreutils/bin/[
similarity index 100%
rename from registry/software/coreutils/bin/[
rename to software/coreutils/bin/[
diff --git a/registry/software/coreutils/bin/arch b/software/coreutils/bin/arch
similarity index 100%
rename from registry/software/coreutils/bin/arch
rename to software/coreutils/bin/arch
diff --git a/registry/software/coreutils/bin/b2sum b/software/coreutils/bin/b2sum
similarity index 100%
rename from registry/software/coreutils/bin/b2sum
rename to software/coreutils/bin/b2sum
diff --git a/registry/software/coreutils/bin/base32 b/software/coreutils/bin/base32
similarity index 100%
rename from registry/software/coreutils/bin/base32
rename to software/coreutils/bin/base32
diff --git a/registry/software/coreutils/bin/base64 b/software/coreutils/bin/base64
similarity index 100%
rename from registry/software/coreutils/bin/base64
rename to software/coreutils/bin/base64
diff --git a/registry/software/coreutils/bin/basename b/software/coreutils/bin/basename
similarity index 100%
rename from registry/software/coreutils/bin/basename
rename to software/coreutils/bin/basename
diff --git a/registry/software/coreutils/bin/basenc b/software/coreutils/bin/basenc
similarity index 100%
rename from registry/software/coreutils/bin/basenc
rename to software/coreutils/bin/basenc
diff --git a/registry/software/coreutils/bin/bash b/software/coreutils/bin/bash
similarity index 100%
rename from registry/software/coreutils/bin/bash
rename to software/coreutils/bin/bash
diff --git a/registry/software/coreutils/bin/cat b/software/coreutils/bin/cat
similarity index 100%
rename from registry/software/coreutils/bin/cat
rename to software/coreutils/bin/cat
diff --git a/registry/software/coreutils/bin/chcon b/software/coreutils/bin/chcon
similarity index 100%
rename from registry/software/coreutils/bin/chcon
rename to software/coreutils/bin/chcon
diff --git a/registry/software/coreutils/bin/chgrp b/software/coreutils/bin/chgrp
similarity index 100%
rename from registry/software/coreutils/bin/chgrp
rename to software/coreutils/bin/chgrp
diff --git a/registry/software/coreutils/bin/chmod b/software/coreutils/bin/chmod
similarity index 100%
rename from registry/software/coreutils/bin/chmod
rename to software/coreutils/bin/chmod
diff --git a/registry/software/coreutils/bin/chown b/software/coreutils/bin/chown
similarity index 100%
rename from registry/software/coreutils/bin/chown
rename to software/coreutils/bin/chown
diff --git a/registry/software/coreutils/bin/chroot b/software/coreutils/bin/chroot
similarity index 100%
rename from registry/software/coreutils/bin/chroot
rename to software/coreutils/bin/chroot
diff --git a/registry/software/coreutils/bin/cksum b/software/coreutils/bin/cksum
similarity index 100%
rename from registry/software/coreutils/bin/cksum
rename to software/coreutils/bin/cksum
diff --git a/registry/software/coreutils/bin/column b/software/coreutils/bin/column
similarity index 100%
rename from registry/software/coreutils/bin/column
rename to software/coreutils/bin/column
diff --git a/registry/software/coreutils/bin/comm b/software/coreutils/bin/comm
similarity index 100%
rename from registry/software/coreutils/bin/comm
rename to software/coreutils/bin/comm
diff --git a/registry/software/coreutils/bin/cp b/software/coreutils/bin/cp
similarity index 100%
rename from registry/software/coreutils/bin/cp
rename to software/coreutils/bin/cp
diff --git a/registry/software/coreutils/bin/cut b/software/coreutils/bin/cut
similarity index 100%
rename from registry/software/coreutils/bin/cut
rename to software/coreutils/bin/cut
diff --git a/registry/software/coreutils/bin/date b/software/coreutils/bin/date
similarity index 100%
rename from registry/software/coreutils/bin/date
rename to software/coreutils/bin/date
diff --git a/registry/software/coreutils/bin/dd b/software/coreutils/bin/dd
similarity index 100%
rename from registry/software/coreutils/bin/dd
rename to software/coreutils/bin/dd
diff --git a/registry/software/coreutils/bin/df b/software/coreutils/bin/df
similarity index 100%
rename from registry/software/coreutils/bin/df
rename to software/coreutils/bin/df
diff --git a/registry/software/coreutils/bin/dir b/software/coreutils/bin/dir
similarity index 100%
rename from registry/software/coreutils/bin/dir
rename to software/coreutils/bin/dir
diff --git a/registry/software/coreutils/bin/dircolors b/software/coreutils/bin/dircolors
similarity index 100%
rename from registry/software/coreutils/bin/dircolors
rename to software/coreutils/bin/dircolors
diff --git a/registry/software/coreutils/bin/dirname b/software/coreutils/bin/dirname
similarity index 100%
rename from registry/software/coreutils/bin/dirname
rename to software/coreutils/bin/dirname
diff --git a/registry/software/coreutils/bin/du b/software/coreutils/bin/du
similarity index 100%
rename from registry/software/coreutils/bin/du
rename to software/coreutils/bin/du
diff --git a/registry/software/coreutils/bin/echo b/software/coreutils/bin/echo
similarity index 100%
rename from registry/software/coreutils/bin/echo
rename to software/coreutils/bin/echo
diff --git a/registry/software/coreutils/bin/env b/software/coreutils/bin/env
similarity index 100%
rename from registry/software/coreutils/bin/env
rename to software/coreutils/bin/env
diff --git a/registry/software/coreutils/bin/expand b/software/coreutils/bin/expand
similarity index 100%
rename from registry/software/coreutils/bin/expand
rename to software/coreutils/bin/expand
diff --git a/registry/software/coreutils/bin/expr b/software/coreutils/bin/expr
similarity index 100%
rename from registry/software/coreutils/bin/expr
rename to software/coreutils/bin/expr
diff --git a/registry/software/coreutils/bin/factor b/software/coreutils/bin/factor
similarity index 100%
rename from registry/software/coreutils/bin/factor
rename to software/coreutils/bin/factor
diff --git a/registry/software/coreutils/bin/false b/software/coreutils/bin/false
similarity index 100%
rename from registry/software/coreutils/bin/false
rename to software/coreutils/bin/false
diff --git a/registry/software/coreutils/bin/fmt b/software/coreutils/bin/fmt
similarity index 100%
rename from registry/software/coreutils/bin/fmt
rename to software/coreutils/bin/fmt
diff --git a/registry/software/coreutils/bin/fold b/software/coreutils/bin/fold
similarity index 100%
rename from registry/software/coreutils/bin/fold
rename to software/coreutils/bin/fold
diff --git a/registry/software/coreutils/bin/groups b/software/coreutils/bin/groups
similarity index 100%
rename from registry/software/coreutils/bin/groups
rename to software/coreutils/bin/groups
diff --git a/registry/software/coreutils/bin/head b/software/coreutils/bin/head
similarity index 100%
rename from registry/software/coreutils/bin/head
rename to software/coreutils/bin/head
diff --git a/registry/software/coreutils/bin/hostid b/software/coreutils/bin/hostid
similarity index 100%
rename from registry/software/coreutils/bin/hostid
rename to software/coreutils/bin/hostid
diff --git a/registry/software/coreutils/bin/hostname b/software/coreutils/bin/hostname
similarity index 100%
rename from registry/software/coreutils/bin/hostname
rename to software/coreutils/bin/hostname
diff --git a/registry/software/coreutils/bin/id b/software/coreutils/bin/id
similarity index 100%
rename from registry/software/coreutils/bin/id
rename to software/coreutils/bin/id
diff --git a/registry/software/coreutils/bin/install b/software/coreutils/bin/install
similarity index 100%
rename from registry/software/coreutils/bin/install
rename to software/coreutils/bin/install
diff --git a/registry/software/coreutils/bin/join b/software/coreutils/bin/join
similarity index 100%
rename from registry/software/coreutils/bin/join
rename to software/coreutils/bin/join
diff --git a/registry/software/coreutils/bin/kill b/software/coreutils/bin/kill
similarity index 100%
rename from registry/software/coreutils/bin/kill
rename to software/coreutils/bin/kill
diff --git a/registry/software/coreutils/bin/link b/software/coreutils/bin/link
similarity index 100%
rename from registry/software/coreutils/bin/link
rename to software/coreutils/bin/link
diff --git a/registry/software/coreutils/bin/ln b/software/coreutils/bin/ln
similarity index 100%
rename from registry/software/coreutils/bin/ln
rename to software/coreutils/bin/ln
diff --git a/registry/software/coreutils/bin/logname b/software/coreutils/bin/logname
similarity index 100%
rename from registry/software/coreutils/bin/logname
rename to software/coreutils/bin/logname
diff --git a/registry/software/coreutils/bin/ls b/software/coreutils/bin/ls
similarity index 100%
rename from registry/software/coreutils/bin/ls
rename to software/coreutils/bin/ls
diff --git a/registry/software/coreutils/bin/md5sum b/software/coreutils/bin/md5sum
similarity index 100%
rename from registry/software/coreutils/bin/md5sum
rename to software/coreutils/bin/md5sum
diff --git a/registry/software/coreutils/bin/mkdir b/software/coreutils/bin/mkdir
similarity index 100%
rename from registry/software/coreutils/bin/mkdir
rename to software/coreutils/bin/mkdir
diff --git a/registry/software/coreutils/bin/mkfifo b/software/coreutils/bin/mkfifo
similarity index 100%
rename from registry/software/coreutils/bin/mkfifo
rename to software/coreutils/bin/mkfifo
diff --git a/registry/software/coreutils/bin/mknod b/software/coreutils/bin/mknod
similarity index 100%
rename from registry/software/coreutils/bin/mknod
rename to software/coreutils/bin/mknod
diff --git a/registry/software/coreutils/bin/mktemp b/software/coreutils/bin/mktemp
similarity index 100%
rename from registry/software/coreutils/bin/mktemp
rename to software/coreutils/bin/mktemp
diff --git a/registry/software/coreutils/bin/more b/software/coreutils/bin/more
similarity index 100%
rename from registry/software/coreutils/bin/more
rename to software/coreutils/bin/more
diff --git a/registry/software/coreutils/bin/mv b/software/coreutils/bin/mv
similarity index 100%
rename from registry/software/coreutils/bin/mv
rename to software/coreutils/bin/mv
diff --git a/registry/software/coreutils/bin/nice b/software/coreutils/bin/nice
similarity index 100%
rename from registry/software/coreutils/bin/nice
rename to software/coreutils/bin/nice
diff --git a/registry/software/coreutils/bin/nl b/software/coreutils/bin/nl
similarity index 100%
rename from registry/software/coreutils/bin/nl
rename to software/coreutils/bin/nl
diff --git a/registry/software/coreutils/bin/nohup b/software/coreutils/bin/nohup
similarity index 100%
rename from registry/software/coreutils/bin/nohup
rename to software/coreutils/bin/nohup
diff --git a/registry/software/coreutils/bin/nproc b/software/coreutils/bin/nproc
similarity index 100%
rename from registry/software/coreutils/bin/nproc
rename to software/coreutils/bin/nproc
diff --git a/registry/software/coreutils/bin/numfmt b/software/coreutils/bin/numfmt
similarity index 100%
rename from registry/software/coreutils/bin/numfmt
rename to software/coreutils/bin/numfmt
diff --git a/registry/software/coreutils/bin/od b/software/coreutils/bin/od
similarity index 100%
rename from registry/software/coreutils/bin/od
rename to software/coreutils/bin/od
diff --git a/registry/software/coreutils/bin/paste b/software/coreutils/bin/paste
similarity index 100%
rename from registry/software/coreutils/bin/paste
rename to software/coreutils/bin/paste
diff --git a/registry/software/coreutils/bin/pathchk b/software/coreutils/bin/pathchk
similarity index 100%
rename from registry/software/coreutils/bin/pathchk
rename to software/coreutils/bin/pathchk
diff --git a/registry/software/coreutils/bin/pinky b/software/coreutils/bin/pinky
similarity index 100%
rename from registry/software/coreutils/bin/pinky
rename to software/coreutils/bin/pinky
diff --git a/registry/software/coreutils/bin/printenv b/software/coreutils/bin/printenv
similarity index 100%
rename from registry/software/coreutils/bin/printenv
rename to software/coreutils/bin/printenv
diff --git a/registry/software/coreutils/bin/printf b/software/coreutils/bin/printf
similarity index 100%
rename from registry/software/coreutils/bin/printf
rename to software/coreutils/bin/printf
diff --git a/registry/software/coreutils/bin/ptx b/software/coreutils/bin/ptx
similarity index 100%
rename from registry/software/coreutils/bin/ptx
rename to software/coreutils/bin/ptx
diff --git a/registry/software/coreutils/bin/pwd b/software/coreutils/bin/pwd
similarity index 100%
rename from registry/software/coreutils/bin/pwd
rename to software/coreutils/bin/pwd
diff --git a/registry/software/coreutils/bin/readlink b/software/coreutils/bin/readlink
similarity index 100%
rename from registry/software/coreutils/bin/readlink
rename to software/coreutils/bin/readlink
diff --git a/registry/software/coreutils/bin/realpath b/software/coreutils/bin/realpath
similarity index 100%
rename from registry/software/coreutils/bin/realpath
rename to software/coreutils/bin/realpath
diff --git a/registry/software/coreutils/bin/rev b/software/coreutils/bin/rev
similarity index 100%
rename from registry/software/coreutils/bin/rev
rename to software/coreutils/bin/rev
diff --git a/registry/software/coreutils/bin/rm b/software/coreutils/bin/rm
similarity index 100%
rename from registry/software/coreutils/bin/rm
rename to software/coreutils/bin/rm
diff --git a/registry/software/coreutils/bin/rmdir b/software/coreutils/bin/rmdir
similarity index 100%
rename from registry/software/coreutils/bin/rmdir
rename to software/coreutils/bin/rmdir
diff --git a/registry/software/coreutils/bin/runcon b/software/coreutils/bin/runcon
similarity index 100%
rename from registry/software/coreutils/bin/runcon
rename to software/coreutils/bin/runcon
diff --git a/registry/software/coreutils/bin/seq b/software/coreutils/bin/seq
similarity index 100%
rename from registry/software/coreutils/bin/seq
rename to software/coreutils/bin/seq
diff --git a/registry/software/coreutils/bin/sh b/software/coreutils/bin/sh
similarity index 100%
rename from registry/software/coreutils/bin/sh
rename to software/coreutils/bin/sh
diff --git a/registry/software/coreutils/bin/sha1sum b/software/coreutils/bin/sha1sum
similarity index 100%
rename from registry/software/coreutils/bin/sha1sum
rename to software/coreutils/bin/sha1sum
diff --git a/registry/software/coreutils/bin/sha224sum b/software/coreutils/bin/sha224sum
similarity index 100%
rename from registry/software/coreutils/bin/sha224sum
rename to software/coreutils/bin/sha224sum
diff --git a/registry/software/coreutils/bin/sha256sum b/software/coreutils/bin/sha256sum
similarity index 100%
rename from registry/software/coreutils/bin/sha256sum
rename to software/coreutils/bin/sha256sum
diff --git a/registry/software/coreutils/bin/sha384sum b/software/coreutils/bin/sha384sum
similarity index 100%
rename from registry/software/coreutils/bin/sha384sum
rename to software/coreutils/bin/sha384sum
diff --git a/registry/software/coreutils/bin/sha512sum b/software/coreutils/bin/sha512sum
similarity index 100%
rename from registry/software/coreutils/bin/sha512sum
rename to software/coreutils/bin/sha512sum
diff --git a/registry/software/coreutils/bin/shred b/software/coreutils/bin/shred
similarity index 100%
rename from registry/software/coreutils/bin/shred
rename to software/coreutils/bin/shred
diff --git a/registry/software/coreutils/bin/shuf b/software/coreutils/bin/shuf
similarity index 100%
rename from registry/software/coreutils/bin/shuf
rename to software/coreutils/bin/shuf
diff --git a/registry/software/coreutils/bin/sleep b/software/coreutils/bin/sleep
similarity index 100%
rename from registry/software/coreutils/bin/sleep
rename to software/coreutils/bin/sleep
diff --git a/registry/software/coreutils/bin/sort b/software/coreutils/bin/sort
similarity index 100%
rename from registry/software/coreutils/bin/sort
rename to software/coreutils/bin/sort
diff --git a/registry/software/coreutils/bin/split b/software/coreutils/bin/split
similarity index 100%
rename from registry/software/coreutils/bin/split
rename to software/coreutils/bin/split
diff --git a/registry/software/coreutils/bin/stat b/software/coreutils/bin/stat
similarity index 100%
rename from registry/software/coreutils/bin/stat
rename to software/coreutils/bin/stat
diff --git a/registry/software/coreutils/bin/stdbuf b/software/coreutils/bin/stdbuf
similarity index 100%
rename from registry/software/coreutils/bin/stdbuf
rename to software/coreutils/bin/stdbuf
diff --git a/registry/software/coreutils/bin/strings b/software/coreutils/bin/strings
similarity index 100%
rename from registry/software/coreutils/bin/strings
rename to software/coreutils/bin/strings
diff --git a/registry/software/coreutils/bin/stty b/software/coreutils/bin/stty
similarity index 100%
rename from registry/software/coreutils/bin/stty
rename to software/coreutils/bin/stty
diff --git a/registry/software/coreutils/bin/sum b/software/coreutils/bin/sum
similarity index 100%
rename from registry/software/coreutils/bin/sum
rename to software/coreutils/bin/sum
diff --git a/registry/software/coreutils/bin/sync b/software/coreutils/bin/sync
similarity index 100%
rename from registry/software/coreutils/bin/sync
rename to software/coreutils/bin/sync
diff --git a/registry/software/coreutils/bin/tac b/software/coreutils/bin/tac
similarity index 100%
rename from registry/software/coreutils/bin/tac
rename to software/coreutils/bin/tac
diff --git a/registry/software/coreutils/bin/tail b/software/coreutils/bin/tail
similarity index 100%
rename from registry/software/coreutils/bin/tail
rename to software/coreutils/bin/tail
diff --git a/registry/software/coreutils/bin/tee b/software/coreutils/bin/tee
similarity index 100%
rename from registry/software/coreutils/bin/tee
rename to software/coreutils/bin/tee
diff --git a/registry/software/coreutils/bin/test b/software/coreutils/bin/test
similarity index 100%
rename from registry/software/coreutils/bin/test
rename to software/coreutils/bin/test
diff --git a/registry/software/coreutils/bin/timeout b/software/coreutils/bin/timeout
similarity index 100%
rename from registry/software/coreutils/bin/timeout
rename to software/coreutils/bin/timeout
diff --git a/registry/software/coreutils/bin/touch b/software/coreutils/bin/touch
similarity index 100%
rename from registry/software/coreutils/bin/touch
rename to software/coreutils/bin/touch
diff --git a/registry/software/coreutils/bin/tr b/software/coreutils/bin/tr
similarity index 100%
rename from registry/software/coreutils/bin/tr
rename to software/coreutils/bin/tr
diff --git a/registry/software/coreutils/bin/true b/software/coreutils/bin/true
similarity index 100%
rename from registry/software/coreutils/bin/true
rename to software/coreutils/bin/true
diff --git a/registry/software/coreutils/bin/truncate b/software/coreutils/bin/truncate
similarity index 100%
rename from registry/software/coreutils/bin/truncate
rename to software/coreutils/bin/truncate
diff --git a/registry/software/coreutils/bin/tsort b/software/coreutils/bin/tsort
similarity index 100%
rename from registry/software/coreutils/bin/tsort
rename to software/coreutils/bin/tsort
diff --git a/registry/software/coreutils/bin/tty b/software/coreutils/bin/tty
similarity index 100%
rename from registry/software/coreutils/bin/tty
rename to software/coreutils/bin/tty
diff --git a/registry/software/coreutils/bin/uname b/software/coreutils/bin/uname
similarity index 100%
rename from registry/software/coreutils/bin/uname
rename to software/coreutils/bin/uname
diff --git a/registry/software/coreutils/bin/unexpand b/software/coreutils/bin/unexpand
similarity index 100%
rename from registry/software/coreutils/bin/unexpand
rename to software/coreutils/bin/unexpand
diff --git a/registry/software/coreutils/bin/uniq b/software/coreutils/bin/uniq
similarity index 100%
rename from registry/software/coreutils/bin/uniq
rename to software/coreutils/bin/uniq
diff --git a/registry/software/coreutils/bin/unlink b/software/coreutils/bin/unlink
similarity index 100%
rename from registry/software/coreutils/bin/unlink
rename to software/coreutils/bin/unlink
diff --git a/registry/software/coreutils/bin/uptime b/software/coreutils/bin/uptime
similarity index 100%
rename from registry/software/coreutils/bin/uptime
rename to software/coreutils/bin/uptime
diff --git a/registry/software/coreutils/bin/users b/software/coreutils/bin/users
similarity index 100%
rename from registry/software/coreutils/bin/users
rename to software/coreutils/bin/users
diff --git a/registry/software/coreutils/bin/vdir b/software/coreutils/bin/vdir
similarity index 100%
rename from registry/software/coreutils/bin/vdir
rename to software/coreutils/bin/vdir
diff --git a/registry/software/coreutils/bin/wc b/software/coreutils/bin/wc
similarity index 100%
rename from registry/software/coreutils/bin/wc
rename to software/coreutils/bin/wc
diff --git a/registry/software/coreutils/bin/which b/software/coreutils/bin/which
similarity index 100%
rename from registry/software/coreutils/bin/which
rename to software/coreutils/bin/which
diff --git a/registry/software/coreutils/bin/who b/software/coreutils/bin/who
similarity index 100%
rename from registry/software/coreutils/bin/who
rename to software/coreutils/bin/who
diff --git a/registry/software/coreutils/bin/whoami b/software/coreutils/bin/whoami
similarity index 100%
rename from registry/software/coreutils/bin/whoami
rename to software/coreutils/bin/whoami
diff --git a/registry/software/coreutils/bin/yes b/software/coreutils/bin/yes
similarity index 100%
rename from registry/software/coreutils/bin/yes
rename to software/coreutils/bin/yes
diff --git a/registry/native/crates/commands/arch/Cargo.toml b/software/coreutils/native/crates/cmd-arch/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/arch/Cargo.toml
rename to software/coreutils/native/crates/cmd-arch/Cargo.toml
index 92f2e7757d..cb72652e83 100644
--- a/registry/native/crates/commands/arch/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-arch/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-arch"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/arch/src/main.rs b/software/coreutils/native/crates/cmd-arch/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/arch/src/main.rs
rename to software/coreutils/native/crates/cmd-arch/src/main.rs
diff --git a/registry/native/crates/commands/b2sum/Cargo.toml b/software/coreutils/native/crates/cmd-b2sum/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/b2sum/Cargo.toml
rename to software/coreutils/native/crates/cmd-b2sum/Cargo.toml
index 8219c1fd4b..3f5da391a6 100644
--- a/registry/native/crates/commands/b2sum/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-b2sum/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-b2sum"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/b2sum/src/main.rs b/software/coreutils/native/crates/cmd-b2sum/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/b2sum/src/main.rs
rename to software/coreutils/native/crates/cmd-b2sum/src/main.rs
diff --git a/registry/native/crates/commands/base32/Cargo.toml b/software/coreutils/native/crates/cmd-base32/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/base32/Cargo.toml
rename to software/coreutils/native/crates/cmd-base32/Cargo.toml
index 3e719bf184..29ea0a98a1 100644
--- a/registry/native/crates/commands/base32/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-base32/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-base32"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/base32/src/main.rs b/software/coreutils/native/crates/cmd-base32/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/base32/src/main.rs
rename to software/coreutils/native/crates/cmd-base32/src/main.rs
diff --git a/registry/native/crates/commands/base64/Cargo.toml b/software/coreutils/native/crates/cmd-base64/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/base64/Cargo.toml
rename to software/coreutils/native/crates/cmd-base64/Cargo.toml
index bad7a503e1..105af17592 100644
--- a/registry/native/crates/commands/base64/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-base64/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-base64"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/base64/src/main.rs b/software/coreutils/native/crates/cmd-base64/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/base64/src/main.rs
rename to software/coreutils/native/crates/cmd-base64/src/main.rs
diff --git a/registry/native/crates/commands/basename/Cargo.toml b/software/coreutils/native/crates/cmd-basename/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/basename/Cargo.toml
rename to software/coreutils/native/crates/cmd-basename/Cargo.toml
index 8511991cdc..aac009cc30 100644
--- a/registry/native/crates/commands/basename/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-basename/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-basename"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/basename/src/main.rs b/software/coreutils/native/crates/cmd-basename/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/basename/src/main.rs
rename to software/coreutils/native/crates/cmd-basename/src/main.rs
diff --git a/registry/native/crates/commands/basenc/Cargo.toml b/software/coreutils/native/crates/cmd-basenc/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/basenc/Cargo.toml
rename to software/coreutils/native/crates/cmd-basenc/Cargo.toml
index ad2c8e5a92..9a297f21c0 100644
--- a/registry/native/crates/commands/basenc/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-basenc/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-basenc"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/basenc/src/main.rs b/software/coreutils/native/crates/cmd-basenc/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/basenc/src/main.rs
rename to software/coreutils/native/crates/cmd-basenc/src/main.rs
diff --git a/registry/native/crates/commands/cat/Cargo.toml b/software/coreutils/native/crates/cmd-cat/Cargo.toml
similarity index 90%
rename from registry/native/crates/commands/cat/Cargo.toml
rename to software/coreutils/native/crates/cmd-cat/Cargo.toml
index 16a9d7218e..747109c7cd 100644
--- a/registry/native/crates/commands/cat/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-cat/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-cat"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/cat/src/main.rs b/software/coreutils/native/crates/cmd-cat/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/cat/src/main.rs
rename to software/coreutils/native/crates/cmd-cat/src/main.rs
diff --git a/registry/native/crates/commands/cat/tests/uucore_pipes.rs b/software/coreutils/native/crates/cmd-cat/tests/uucore_pipes.rs
similarity index 100%
rename from registry/native/crates/commands/cat/tests/uucore_pipes.rs
rename to software/coreutils/native/crates/cmd-cat/tests/uucore_pipes.rs
diff --git a/registry/native/crates/commands/chmod/Cargo.toml b/software/coreutils/native/crates/cmd-chmod/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/chmod/Cargo.toml
rename to software/coreutils/native/crates/cmd-chmod/Cargo.toml
index 3a1da3b8c1..9e56965b70 100644
--- a/registry/native/crates/commands/chmod/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-chmod/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-chmod"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/chmod/src/main.rs b/software/coreutils/native/crates/cmd-chmod/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/chmod/src/main.rs
rename to software/coreutils/native/crates/cmd-chmod/src/main.rs
diff --git a/registry/native/crates/commands/cksum/Cargo.toml b/software/coreutils/native/crates/cmd-cksum/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/cksum/Cargo.toml
rename to software/coreutils/native/crates/cmd-cksum/Cargo.toml
index 1beec6b3a4..25df33cb56 100644
--- a/registry/native/crates/commands/cksum/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-cksum/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-cksum"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/cksum/src/main.rs b/software/coreutils/native/crates/cmd-cksum/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/cksum/src/main.rs
rename to software/coreutils/native/crates/cmd-cksum/src/main.rs
diff --git a/registry/native/crates/commands/column/Cargo.toml b/software/coreutils/native/crates/cmd-column/Cargo.toml
similarity index 73%
rename from registry/native/crates/commands/column/Cargo.toml
rename to software/coreutils/native/crates/cmd-column/Cargo.toml
index bca846e4db..8b16759a99 100644
--- a/registry/native/crates/commands/column/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-column/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-column"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "column"
path = "src/main.rs"
[dependencies]
-secureexec-column = { path = "../../libs/column" }
+secureexec-column = { path = "../column" }
diff --git a/registry/native/crates/commands/column/src/main.rs b/software/coreutils/native/crates/cmd-column/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/column/src/main.rs
rename to software/coreutils/native/crates/cmd-column/src/main.rs
diff --git a/registry/native/crates/commands/comm/Cargo.toml b/software/coreutils/native/crates/cmd-comm/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/comm/Cargo.toml
rename to software/coreutils/native/crates/cmd-comm/Cargo.toml
index c748f132f1..91e507f0f8 100644
--- a/registry/native/crates/commands/comm/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-comm/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-comm"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/comm/src/main.rs b/software/coreutils/native/crates/cmd-comm/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/comm/src/main.rs
rename to software/coreutils/native/crates/cmd-comm/src/main.rs
diff --git a/registry/native/crates/commands/cp/Cargo.toml b/software/coreutils/native/crates/cmd-cp/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/cp/Cargo.toml
rename to software/coreutils/native/crates/cmd-cp/Cargo.toml
index 851012ce6e..56a958c1fe 100644
--- a/registry/native/crates/commands/cp/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-cp/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-cp"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/cp/src/main.rs b/software/coreutils/native/crates/cmd-cp/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/cp/src/main.rs
rename to software/coreutils/native/crates/cmd-cp/src/main.rs
diff --git a/registry/native/crates/commands/cut/Cargo.toml b/software/coreutils/native/crates/cmd-cut/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/cut/Cargo.toml
rename to software/coreutils/native/crates/cmd-cut/Cargo.toml
index 75e38c3add..72e5a5f814 100644
--- a/registry/native/crates/commands/cut/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-cut/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-cut"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/cut/src/main.rs b/software/coreutils/native/crates/cmd-cut/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/cut/src/main.rs
rename to software/coreutils/native/crates/cmd-cut/src/main.rs
diff --git a/registry/native/crates/commands/date/Cargo.toml b/software/coreutils/native/crates/cmd-date/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/date/Cargo.toml
rename to software/coreutils/native/crates/cmd-date/Cargo.toml
index 54f324a982..7b0d440e2f 100644
--- a/registry/native/crates/commands/date/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-date/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-date"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/date/src/main.rs b/software/coreutils/native/crates/cmd-date/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/date/src/main.rs
rename to software/coreutils/native/crates/cmd-date/src/main.rs
diff --git a/registry/native/crates/commands/dd/Cargo.toml b/software/coreutils/native/crates/cmd-dd/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/dd/Cargo.toml
rename to software/coreutils/native/crates/cmd-dd/Cargo.toml
index 9f31bd6ea4..744ee8059f 100644
--- a/registry/native/crates/commands/dd/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-dd/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-dd"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/dd/src/main.rs b/software/coreutils/native/crates/cmd-dd/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/dd/src/main.rs
rename to software/coreutils/native/crates/cmd-dd/src/main.rs
diff --git a/registry/native/crates/commands/dircolors/Cargo.toml b/software/coreutils/native/crates/cmd-dircolors/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/dircolors/Cargo.toml
rename to software/coreutils/native/crates/cmd-dircolors/Cargo.toml
index 2fb6f1a59d..86c849c392 100644
--- a/registry/native/crates/commands/dircolors/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-dircolors/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-dircolors"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/dircolors/src/main.rs b/software/coreutils/native/crates/cmd-dircolors/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/dircolors/src/main.rs
rename to software/coreutils/native/crates/cmd-dircolors/src/main.rs
diff --git a/registry/native/crates/commands/dirname/Cargo.toml b/software/coreutils/native/crates/cmd-dirname/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/dirname/Cargo.toml
rename to software/coreutils/native/crates/cmd-dirname/Cargo.toml
index 26e18d7de7..bd1615de6b 100644
--- a/registry/native/crates/commands/dirname/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-dirname/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-dirname"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/dirname/src/main.rs b/software/coreutils/native/crates/cmd-dirname/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/dirname/src/main.rs
rename to software/coreutils/native/crates/cmd-dirname/src/main.rs
diff --git a/registry/native/crates/commands/du/Cargo.toml b/software/coreutils/native/crates/cmd-du/Cargo.toml
similarity index 74%
rename from registry/native/crates/commands/du/Cargo.toml
rename to software/coreutils/native/crates/cmd-du/Cargo.toml
index b2101f3445..8a2cc1e9d3 100644
--- a/registry/native/crates/commands/du/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-du/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-du"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "du"
path = "src/main.rs"
[dependencies]
-secureexec-du = { path = "../../libs/du" }
+secureexec-du = { path = "../du" }
diff --git a/registry/native/crates/commands/du/src/main.rs b/software/coreutils/native/crates/cmd-du/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/du/src/main.rs
rename to software/coreutils/native/crates/cmd-du/src/main.rs
diff --git a/registry/native/crates/commands/echo/Cargo.toml b/software/coreutils/native/crates/cmd-echo/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/echo/Cargo.toml
rename to software/coreutils/native/crates/cmd-echo/Cargo.toml
index 09e32de696..2f882f37be 100644
--- a/registry/native/crates/commands/echo/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-echo/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-echo"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/echo/src/main.rs b/software/coreutils/native/crates/cmd-echo/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/echo/src/main.rs
rename to software/coreutils/native/crates/cmd-echo/src/main.rs
diff --git a/registry/native/crates/commands/env/Cargo.toml b/software/coreutils/native/crates/cmd-env/Cargo.toml
similarity index 62%
rename from registry/native/crates/commands/env/Cargo.toml
rename to software/coreutils/native/crates/cmd-env/Cargo.toml
index f214d9ac47..6fe19a8d7d 100644
--- a/registry/native/crates/commands/env/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-env/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-env"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "env"
path = "src/main.rs"
[dependencies]
-shims = { package = "secureexec-shims", path = "../../libs/shims" }
+shims = { package = "secureexec-shims", path = "../../../../../toolchain/crates/libs/shims" }
diff --git a/registry/native/crates/commands/env/src/main.rs b/software/coreutils/native/crates/cmd-env/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/env/src/main.rs
rename to software/coreutils/native/crates/cmd-env/src/main.rs
diff --git a/registry/native/crates/commands/expand/Cargo.toml b/software/coreutils/native/crates/cmd-expand/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/expand/Cargo.toml
rename to software/coreutils/native/crates/cmd-expand/Cargo.toml
index 9440c6bb9e..08807dc938 100644
--- a/registry/native/crates/commands/expand/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-expand/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-expand"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/expand/src/main.rs b/software/coreutils/native/crates/cmd-expand/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/expand/src/main.rs
rename to software/coreutils/native/crates/cmd-expand/src/main.rs
diff --git a/registry/native/crates/commands/expr/Cargo.toml b/software/coreutils/native/crates/cmd-expr/Cargo.toml
similarity index 73%
rename from registry/native/crates/commands/expr/Cargo.toml
rename to software/coreutils/native/crates/cmd-expr/Cargo.toml
index 68acb90733..10bd466ba0 100644
--- a/registry/native/crates/commands/expr/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-expr/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-expr"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "expr"
path = "src/main.rs"
[dependencies]
-secureexec-expr = { path = "../../libs/expr" }
+secureexec-expr = { path = "../expr" }
diff --git a/registry/native/crates/commands/expr/src/main.rs b/software/coreutils/native/crates/cmd-expr/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/expr/src/main.rs
rename to software/coreutils/native/crates/cmd-expr/src/main.rs
diff --git a/registry/native/crates/commands/factor/Cargo.toml b/software/coreutils/native/crates/cmd-factor/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/factor/Cargo.toml
rename to software/coreutils/native/crates/cmd-factor/Cargo.toml
index 3ded9a0c20..cd4f1f233b 100644
--- a/registry/native/crates/commands/factor/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-factor/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-factor"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/factor/src/main.rs b/software/coreutils/native/crates/cmd-factor/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/factor/src/main.rs
rename to software/coreutils/native/crates/cmd-factor/src/main.rs
diff --git a/registry/native/crates/commands/false/Cargo.toml b/software/coreutils/native/crates/cmd-false/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/false/Cargo.toml
rename to software/coreutils/native/crates/cmd-false/Cargo.toml
index f30511a365..a3660c6acf 100644
--- a/registry/native/crates/commands/false/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-false/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-false"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/false/src/main.rs b/software/coreutils/native/crates/cmd-false/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/false/src/main.rs
rename to software/coreutils/native/crates/cmd-false/src/main.rs
diff --git a/registry/native/crates/commands/fmt/Cargo.toml b/software/coreutils/native/crates/cmd-fmt/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/fmt/Cargo.toml
rename to software/coreutils/native/crates/cmd-fmt/Cargo.toml
index cb2e5ae670..2ebb0f6f6a 100644
--- a/registry/native/crates/commands/fmt/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-fmt/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-fmt"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/fmt/src/main.rs b/software/coreutils/native/crates/cmd-fmt/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/fmt/src/main.rs
rename to software/coreutils/native/crates/cmd-fmt/src/main.rs
diff --git a/registry/native/crates/commands/fold/Cargo.toml b/software/coreutils/native/crates/cmd-fold/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/fold/Cargo.toml
rename to software/coreutils/native/crates/cmd-fold/Cargo.toml
index a8b067be43..7d79e95796 100644
--- a/registry/native/crates/commands/fold/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-fold/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-fold"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/fold/src/main.rs b/software/coreutils/native/crates/cmd-fold/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/fold/src/main.rs
rename to software/coreutils/native/crates/cmd-fold/src/main.rs
diff --git a/registry/native/crates/commands/head/Cargo.toml b/software/coreutils/native/crates/cmd-head/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/head/Cargo.toml
rename to software/coreutils/native/crates/cmd-head/Cargo.toml
index 49d35a6e1b..287d999055 100644
--- a/registry/native/crates/commands/head/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-head/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-head"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/head/src/main.rs b/software/coreutils/native/crates/cmd-head/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/head/src/main.rs
rename to software/coreutils/native/crates/cmd-head/src/main.rs
diff --git a/registry/native/crates/commands/join/Cargo.toml b/software/coreutils/native/crates/cmd-join/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/join/Cargo.toml
rename to software/coreutils/native/crates/cmd-join/Cargo.toml
index 408d1ceb4d..c81c31cb5f 100644
--- a/registry/native/crates/commands/join/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-join/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-join"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/join/src/main.rs b/software/coreutils/native/crates/cmd-join/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/join/src/main.rs
rename to software/coreutils/native/crates/cmd-join/src/main.rs
diff --git a/registry/native/crates/commands/link/Cargo.toml b/software/coreutils/native/crates/cmd-link/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/link/Cargo.toml
rename to software/coreutils/native/crates/cmd-link/Cargo.toml
index 79d9091369..043488ee6c 100644
--- a/registry/native/crates/commands/link/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-link/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-link"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/link/src/main.rs b/software/coreutils/native/crates/cmd-link/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/link/src/main.rs
rename to software/coreutils/native/crates/cmd-link/src/main.rs
diff --git a/registry/native/crates/commands/ln/Cargo.toml b/software/coreutils/native/crates/cmd-ln/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/ln/Cargo.toml
rename to software/coreutils/native/crates/cmd-ln/Cargo.toml
index ebb02bfe6e..92950c1f35 100644
--- a/registry/native/crates/commands/ln/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-ln/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-ln"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/ln/src/main.rs b/software/coreutils/native/crates/cmd-ln/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/ln/src/main.rs
rename to software/coreutils/native/crates/cmd-ln/src/main.rs
diff --git a/registry/native/crates/commands/logname/Cargo.toml b/software/coreutils/native/crates/cmd-logname/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/logname/Cargo.toml
rename to software/coreutils/native/crates/cmd-logname/Cargo.toml
index 6f7bbf5b76..33b6d0d678 100644
--- a/registry/native/crates/commands/logname/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-logname/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-logname"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/logname/src/main.rs b/software/coreutils/native/crates/cmd-logname/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/logname/src/main.rs
rename to software/coreutils/native/crates/cmd-logname/src/main.rs
diff --git a/registry/native/crates/commands/ls/Cargo.toml b/software/coreutils/native/crates/cmd-ls/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/ls/Cargo.toml
rename to software/coreutils/native/crates/cmd-ls/Cargo.toml
index 025bfdfa03..71ba7a86e8 100644
--- a/registry/native/crates/commands/ls/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-ls/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-ls"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/ls/src/main.rs b/software/coreutils/native/crates/cmd-ls/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/ls/src/main.rs
rename to software/coreutils/native/crates/cmd-ls/src/main.rs
diff --git a/registry/native/crates/commands/md5sum/Cargo.toml b/software/coreutils/native/crates/cmd-md5sum/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/md5sum/Cargo.toml
rename to software/coreutils/native/crates/cmd-md5sum/Cargo.toml
index bd499cdc50..ea660b5d0f 100644
--- a/registry/native/crates/commands/md5sum/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-md5sum/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-md5sum"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/md5sum/src/main.rs b/software/coreutils/native/crates/cmd-md5sum/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/md5sum/src/main.rs
rename to software/coreutils/native/crates/cmd-md5sum/src/main.rs
diff --git a/registry/native/crates/commands/mkdir/Cargo.toml b/software/coreutils/native/crates/cmd-mkdir/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/mkdir/Cargo.toml
rename to software/coreutils/native/crates/cmd-mkdir/Cargo.toml
index 2e2cc2de94..7a3e9f4ccf 100644
--- a/registry/native/crates/commands/mkdir/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-mkdir/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-mkdir"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/mkdir/src/main.rs b/software/coreutils/native/crates/cmd-mkdir/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/mkdir/src/main.rs
rename to software/coreutils/native/crates/cmd-mkdir/src/main.rs
diff --git a/registry/native/crates/commands/mktemp/Cargo.toml b/software/coreutils/native/crates/cmd-mktemp/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/mktemp/Cargo.toml
rename to software/coreutils/native/crates/cmd-mktemp/Cargo.toml
index faa0c28810..57935df632 100644
--- a/registry/native/crates/commands/mktemp/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-mktemp/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-mktemp"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/mktemp/src/main.rs b/software/coreutils/native/crates/cmd-mktemp/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/mktemp/src/main.rs
rename to software/coreutils/native/crates/cmd-mktemp/src/main.rs
diff --git a/registry/native/crates/commands/mv/Cargo.toml b/software/coreutils/native/crates/cmd-mv/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/mv/Cargo.toml
rename to software/coreutils/native/crates/cmd-mv/Cargo.toml
index 3e52df17b6..c4999d907c 100644
--- a/registry/native/crates/commands/mv/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-mv/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-mv"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/mv/src/main.rs b/software/coreutils/native/crates/cmd-mv/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/mv/src/main.rs
rename to software/coreutils/native/crates/cmd-mv/src/main.rs
diff --git a/registry/native/crates/commands/mv/tests/simple_mv.rs b/software/coreutils/native/crates/cmd-mv/tests/simple_mv.rs
similarity index 100%
rename from registry/native/crates/commands/mv/tests/simple_mv.rs
rename to software/coreutils/native/crates/cmd-mv/tests/simple_mv.rs
diff --git a/registry/native/crates/commands/nice/Cargo.toml b/software/coreutils/native/crates/cmd-nice/Cargo.toml
similarity index 62%
rename from registry/native/crates/commands/nice/Cargo.toml
rename to software/coreutils/native/crates/cmd-nice/Cargo.toml
index 5f00ac9f4b..2f77be052e 100644
--- a/registry/native/crates/commands/nice/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-nice/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-nice"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "nice"
path = "src/main.rs"
[dependencies]
-shims = { package = "secureexec-shims", path = "../../libs/shims" }
+shims = { package = "secureexec-shims", path = "../../../../../toolchain/crates/libs/shims" }
diff --git a/registry/native/crates/commands/nice/src/main.rs b/software/coreutils/native/crates/cmd-nice/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/nice/src/main.rs
rename to software/coreutils/native/crates/cmd-nice/src/main.rs
diff --git a/registry/native/crates/commands/nl/Cargo.toml b/software/coreutils/native/crates/cmd-nl/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/nl/Cargo.toml
rename to software/coreutils/native/crates/cmd-nl/Cargo.toml
index d1858d3be7..067baf0805 100644
--- a/registry/native/crates/commands/nl/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-nl/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-nl"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/nl/src/main.rs b/software/coreutils/native/crates/cmd-nl/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/nl/src/main.rs
rename to software/coreutils/native/crates/cmd-nl/src/main.rs
diff --git a/registry/native/crates/commands/nohup/Cargo.toml b/software/coreutils/native/crates/cmd-nohup/Cargo.toml
similarity index 62%
rename from registry/native/crates/commands/nohup/Cargo.toml
rename to software/coreutils/native/crates/cmd-nohup/Cargo.toml
index ee2b24fa34..94edf64e00 100644
--- a/registry/native/crates/commands/nohup/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-nohup/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-nohup"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "nohup"
path = "src/main.rs"
[dependencies]
-shims = { package = "secureexec-shims", path = "../../libs/shims" }
+shims = { package = "secureexec-shims", path = "../../../../../toolchain/crates/libs/shims" }
diff --git a/registry/native/crates/commands/nohup/src/main.rs b/software/coreutils/native/crates/cmd-nohup/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/nohup/src/main.rs
rename to software/coreutils/native/crates/cmd-nohup/src/main.rs
diff --git a/registry/native/crates/commands/nohup/tests/streaming.rs b/software/coreutils/native/crates/cmd-nohup/tests/streaming.rs
similarity index 100%
rename from registry/native/crates/commands/nohup/tests/streaming.rs
rename to software/coreutils/native/crates/cmd-nohup/tests/streaming.rs
diff --git a/registry/native/crates/commands/nproc/Cargo.toml b/software/coreutils/native/crates/cmd-nproc/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/nproc/Cargo.toml
rename to software/coreutils/native/crates/cmd-nproc/Cargo.toml
index 9f05c612cc..9c6fc0fbbb 100644
--- a/registry/native/crates/commands/nproc/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-nproc/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-nproc"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/nproc/src/main.rs b/software/coreutils/native/crates/cmd-nproc/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/nproc/src/main.rs
rename to software/coreutils/native/crates/cmd-nproc/src/main.rs
diff --git a/registry/native/crates/commands/numfmt/Cargo.toml b/software/coreutils/native/crates/cmd-numfmt/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/numfmt/Cargo.toml
rename to software/coreutils/native/crates/cmd-numfmt/Cargo.toml
index 18fae1f3a5..6ae2fedb83 100644
--- a/registry/native/crates/commands/numfmt/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-numfmt/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-numfmt"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/numfmt/src/main.rs b/software/coreutils/native/crates/cmd-numfmt/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/numfmt/src/main.rs
rename to software/coreutils/native/crates/cmd-numfmt/src/main.rs
diff --git a/registry/native/crates/commands/od/Cargo.toml b/software/coreutils/native/crates/cmd-od/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/od/Cargo.toml
rename to software/coreutils/native/crates/cmd-od/Cargo.toml
index 6e28c2db60..102a12cdab 100644
--- a/registry/native/crates/commands/od/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-od/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-od"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/od/src/main.rs b/software/coreutils/native/crates/cmd-od/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/od/src/main.rs
rename to software/coreutils/native/crates/cmd-od/src/main.rs
diff --git a/registry/native/crates/commands/paste/Cargo.toml b/software/coreutils/native/crates/cmd-paste/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/paste/Cargo.toml
rename to software/coreutils/native/crates/cmd-paste/Cargo.toml
index 87fb6f9c84..8e45b33c09 100644
--- a/registry/native/crates/commands/paste/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-paste/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-paste"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/paste/src/main.rs b/software/coreutils/native/crates/cmd-paste/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/paste/src/main.rs
rename to software/coreutils/native/crates/cmd-paste/src/main.rs
diff --git a/registry/native/crates/commands/pathchk/Cargo.toml b/software/coreutils/native/crates/cmd-pathchk/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/pathchk/Cargo.toml
rename to software/coreutils/native/crates/cmd-pathchk/Cargo.toml
index a5bd0d8c9a..b675dc27f1 100644
--- a/registry/native/crates/commands/pathchk/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-pathchk/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-pathchk"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/pathchk/src/main.rs b/software/coreutils/native/crates/cmd-pathchk/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/pathchk/src/main.rs
rename to software/coreutils/native/crates/cmd-pathchk/src/main.rs
diff --git a/registry/native/crates/commands/printenv/Cargo.toml b/software/coreutils/native/crates/cmd-printenv/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/printenv/Cargo.toml
rename to software/coreutils/native/crates/cmd-printenv/Cargo.toml
index 463418444e..918b962ea6 100644
--- a/registry/native/crates/commands/printenv/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-printenv/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-printenv"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/printenv/src/main.rs b/software/coreutils/native/crates/cmd-printenv/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/printenv/src/main.rs
rename to software/coreutils/native/crates/cmd-printenv/src/main.rs
diff --git a/registry/native/crates/commands/printf/Cargo.toml b/software/coreutils/native/crates/cmd-printf/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/printf/Cargo.toml
rename to software/coreutils/native/crates/cmd-printf/Cargo.toml
index 3ffe7fe58a..c0512cfd17 100644
--- a/registry/native/crates/commands/printf/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-printf/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-printf"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/printf/src/main.rs b/software/coreutils/native/crates/cmd-printf/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/printf/src/main.rs
rename to software/coreutils/native/crates/cmd-printf/src/main.rs
diff --git a/registry/native/crates/commands/ptx/Cargo.toml b/software/coreutils/native/crates/cmd-ptx/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/ptx/Cargo.toml
rename to software/coreutils/native/crates/cmd-ptx/Cargo.toml
index 7176a63af2..9eefecd190 100644
--- a/registry/native/crates/commands/ptx/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-ptx/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-ptx"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/ptx/src/main.rs b/software/coreutils/native/crates/cmd-ptx/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/ptx/src/main.rs
rename to software/coreutils/native/crates/cmd-ptx/src/main.rs
diff --git a/registry/native/crates/commands/pwd/Cargo.toml b/software/coreutils/native/crates/cmd-pwd/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/pwd/Cargo.toml
rename to software/coreutils/native/crates/cmd-pwd/Cargo.toml
index d61413509a..b3e7ff6a74 100644
--- a/registry/native/crates/commands/pwd/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-pwd/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-pwd"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/pwd/src/main.rs b/software/coreutils/native/crates/cmd-pwd/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/pwd/src/main.rs
rename to software/coreutils/native/crates/cmd-pwd/src/main.rs
diff --git a/registry/native/crates/commands/readlink/Cargo.toml b/software/coreutils/native/crates/cmd-readlink/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/readlink/Cargo.toml
rename to software/coreutils/native/crates/cmd-readlink/Cargo.toml
index e8c96fc77e..7fa48bbe6f 100644
--- a/registry/native/crates/commands/readlink/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-readlink/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-readlink"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/readlink/src/main.rs b/software/coreutils/native/crates/cmd-readlink/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/readlink/src/main.rs
rename to software/coreutils/native/crates/cmd-readlink/src/main.rs
diff --git a/registry/native/crates/commands/realpath/Cargo.toml b/software/coreutils/native/crates/cmd-realpath/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/realpath/Cargo.toml
rename to software/coreutils/native/crates/cmd-realpath/Cargo.toml
index ad8fa957cf..dbbbc9da3a 100644
--- a/registry/native/crates/commands/realpath/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-realpath/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-realpath"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/realpath/src/main.rs b/software/coreutils/native/crates/cmd-realpath/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/realpath/src/main.rs
rename to software/coreutils/native/crates/cmd-realpath/src/main.rs
diff --git a/registry/native/crates/commands/rev/Cargo.toml b/software/coreutils/native/crates/cmd-rev/Cargo.toml
similarity index 74%
rename from registry/native/crates/commands/rev/Cargo.toml
rename to software/coreutils/native/crates/cmd-rev/Cargo.toml
index d08020ac8b..66a1ffd19d 100644
--- a/registry/native/crates/commands/rev/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-rev/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-rev"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "rev"
path = "src/main.rs"
[dependencies]
-secureexec-rev = { path = "../../libs/rev" }
+secureexec-rev = { path = "../rev" }
diff --git a/registry/native/crates/commands/rev/src/main.rs b/software/coreutils/native/crates/cmd-rev/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/rev/src/main.rs
rename to software/coreutils/native/crates/cmd-rev/src/main.rs
diff --git a/registry/native/crates/commands/rm/Cargo.toml b/software/coreutils/native/crates/cmd-rm/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/rm/Cargo.toml
rename to software/coreutils/native/crates/cmd-rm/Cargo.toml
index eb69989f9b..4a9dc744e7 100644
--- a/registry/native/crates/commands/rm/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-rm/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-rm"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/rm/src/main.rs b/software/coreutils/native/crates/cmd-rm/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/rm/src/main.rs
rename to software/coreutils/native/crates/cmd-rm/src/main.rs
diff --git a/registry/native/crates/commands/rmdir/Cargo.toml b/software/coreutils/native/crates/cmd-rmdir/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/rmdir/Cargo.toml
rename to software/coreutils/native/crates/cmd-rmdir/Cargo.toml
index 8773c2ec4c..f9729df6f7 100644
--- a/registry/native/crates/commands/rmdir/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-rmdir/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-rmdir"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/rmdir/src/main.rs b/software/coreutils/native/crates/cmd-rmdir/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/rmdir/src/main.rs
rename to software/coreutils/native/crates/cmd-rmdir/src/main.rs
diff --git a/registry/native/crates/commands/seq/Cargo.toml b/software/coreutils/native/crates/cmd-seq/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/seq/Cargo.toml
rename to software/coreutils/native/crates/cmd-seq/Cargo.toml
index 83762f6eb9..bb035b54fc 100644
--- a/registry/native/crates/commands/seq/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-seq/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-seq"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/seq/src/main.rs b/software/coreutils/native/crates/cmd-seq/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/seq/src/main.rs
rename to software/coreutils/native/crates/cmd-seq/src/main.rs
diff --git a/registry/native/crates/commands/sh/Cargo.toml b/software/coreutils/native/crates/cmd-sh/Cargo.toml
similarity index 94%
rename from registry/native/crates/commands/sh/Cargo.toml
rename to software/coreutils/native/crates/cmd-sh/Cargo.toml
index 3034c95973..51976f0cc4 100644
--- a/registry/native/crates/commands/sh/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-sh/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-sh"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/sh/src/main.rs b/software/coreutils/native/crates/cmd-sh/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/sh/src/main.rs
rename to software/coreutils/native/crates/cmd-sh/src/main.rs
diff --git a/registry/native/crates/commands/sha1sum/Cargo.toml b/software/coreutils/native/crates/cmd-sha1sum/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/sha1sum/Cargo.toml
rename to software/coreutils/native/crates/cmd-sha1sum/Cargo.toml
index 8247916e83..1e4b91ec01 100644
--- a/registry/native/crates/commands/sha1sum/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-sha1sum/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-sha1sum"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/sha1sum/src/main.rs b/software/coreutils/native/crates/cmd-sha1sum/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/sha1sum/src/main.rs
rename to software/coreutils/native/crates/cmd-sha1sum/src/main.rs
diff --git a/registry/native/crates/commands/sha224sum/Cargo.toml b/software/coreutils/native/crates/cmd-sha224sum/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/sha224sum/Cargo.toml
rename to software/coreutils/native/crates/cmd-sha224sum/Cargo.toml
index 8f34c4db79..bdd6f4cb70 100644
--- a/registry/native/crates/commands/sha224sum/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-sha224sum/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-sha224sum"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/sha224sum/src/main.rs b/software/coreutils/native/crates/cmd-sha224sum/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/sha224sum/src/main.rs
rename to software/coreutils/native/crates/cmd-sha224sum/src/main.rs
diff --git a/registry/native/crates/commands/sha256sum/Cargo.toml b/software/coreutils/native/crates/cmd-sha256sum/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/sha256sum/Cargo.toml
rename to software/coreutils/native/crates/cmd-sha256sum/Cargo.toml
index 8d4edba469..a43ebd9ff9 100644
--- a/registry/native/crates/commands/sha256sum/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-sha256sum/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-sha256sum"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/sha256sum/src/main.rs b/software/coreutils/native/crates/cmd-sha256sum/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/sha256sum/src/main.rs
rename to software/coreutils/native/crates/cmd-sha256sum/src/main.rs
diff --git a/registry/native/crates/commands/sha384sum/Cargo.toml b/software/coreutils/native/crates/cmd-sha384sum/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/sha384sum/Cargo.toml
rename to software/coreutils/native/crates/cmd-sha384sum/Cargo.toml
index dc9fc1b53e..3cec44da9d 100644
--- a/registry/native/crates/commands/sha384sum/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-sha384sum/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-sha384sum"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/sha384sum/src/main.rs b/software/coreutils/native/crates/cmd-sha384sum/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/sha384sum/src/main.rs
rename to software/coreutils/native/crates/cmd-sha384sum/src/main.rs
diff --git a/registry/native/crates/commands/sha512sum/Cargo.toml b/software/coreutils/native/crates/cmd-sha512sum/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/sha512sum/Cargo.toml
rename to software/coreutils/native/crates/cmd-sha512sum/Cargo.toml
index 6df4303347..0d15e9ac32 100644
--- a/registry/native/crates/commands/sha512sum/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-sha512sum/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-sha512sum"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/sha512sum/src/main.rs b/software/coreutils/native/crates/cmd-sha512sum/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/sha512sum/src/main.rs
rename to software/coreutils/native/crates/cmd-sha512sum/src/main.rs
diff --git a/registry/native/crates/commands/shred/Cargo.toml b/software/coreutils/native/crates/cmd-shred/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/shred/Cargo.toml
rename to software/coreutils/native/crates/cmd-shred/Cargo.toml
index 841e6f3057..15cb98f87c 100644
--- a/registry/native/crates/commands/shred/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-shred/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-shred"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/shred/src/main.rs b/software/coreutils/native/crates/cmd-shred/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/shred/src/main.rs
rename to software/coreutils/native/crates/cmd-shred/src/main.rs
diff --git a/registry/native/crates/commands/shuf/Cargo.toml b/software/coreutils/native/crates/cmd-shuf/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/shuf/Cargo.toml
rename to software/coreutils/native/crates/cmd-shuf/Cargo.toml
index 0b9b499b18..06dc44cf52 100644
--- a/registry/native/crates/commands/shuf/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-shuf/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-shuf"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/shuf/src/main.rs b/software/coreutils/native/crates/cmd-shuf/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/shuf/src/main.rs
rename to software/coreutils/native/crates/cmd-shuf/src/main.rs
diff --git a/registry/native/crates/commands/sleep/Cargo.toml b/software/coreutils/native/crates/cmd-sleep/Cargo.toml
similarity index 65%
rename from registry/native/crates/commands/sleep/Cargo.toml
rename to software/coreutils/native/crates/cmd-sleep/Cargo.toml
index 9e87d2649b..816b051b22 100644
--- a/registry/native/crates/commands/sleep/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-sleep/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-sleep"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "sleep"
path = "src/main.rs"
[dependencies]
-secureexec-builtins = { path = "../../libs/builtins" }
+secureexec-builtins = { path = "../../../../../toolchain/crates/libs/builtins" }
diff --git a/registry/native/crates/commands/sleep/src/main.rs b/software/coreutils/native/crates/cmd-sleep/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/sleep/src/main.rs
rename to software/coreutils/native/crates/cmd-sleep/src/main.rs
diff --git a/registry/native/crates/commands/sort/Cargo.toml b/software/coreutils/native/crates/cmd-sort/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/sort/Cargo.toml
rename to software/coreutils/native/crates/cmd-sort/Cargo.toml
index 3ed6e1157f..0507575a3b 100644
--- a/registry/native/crates/commands/sort/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-sort/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-sort"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/sort/src/main.rs b/software/coreutils/native/crates/cmd-sort/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/sort/src/main.rs
rename to software/coreutils/native/crates/cmd-sort/src/main.rs
diff --git a/registry/native/crates/commands/sort/tests/external_sort.rs b/software/coreutils/native/crates/cmd-sort/tests/external_sort.rs
similarity index 100%
rename from registry/native/crates/commands/sort/tests/external_sort.rs
rename to software/coreutils/native/crates/cmd-sort/tests/external_sort.rs
diff --git a/registry/native/crates/commands/split/Cargo.toml b/software/coreutils/native/crates/cmd-split/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/split/Cargo.toml
rename to software/coreutils/native/crates/cmd-split/Cargo.toml
index 76ca0362c6..c0aa7cc026 100644
--- a/registry/native/crates/commands/split/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-split/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-split"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/split/src/main.rs b/software/coreutils/native/crates/cmd-split/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/split/src/main.rs
rename to software/coreutils/native/crates/cmd-split/src/main.rs
diff --git a/registry/native/crates/commands/stat/Cargo.toml b/software/coreutils/native/crates/cmd-stat/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/stat/Cargo.toml
rename to software/coreutils/native/crates/cmd-stat/Cargo.toml
index d0587c9e33..ee741b2614 100644
--- a/registry/native/crates/commands/stat/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-stat/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-stat"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/stat/src/main.rs b/software/coreutils/native/crates/cmd-stat/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/stat/src/main.rs
rename to software/coreutils/native/crates/cmd-stat/src/main.rs
diff --git a/registry/native/crates/commands/stdbuf/Cargo.toml b/software/coreutils/native/crates/cmd-stdbuf/Cargo.toml
similarity index 63%
rename from registry/native/crates/commands/stdbuf/Cargo.toml
rename to software/coreutils/native/crates/cmd-stdbuf/Cargo.toml
index 96ecbb0a3f..499e2ef4d7 100644
--- a/registry/native/crates/commands/stdbuf/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-stdbuf/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-stdbuf"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "stdbuf"
path = "src/main.rs"
[dependencies]
-shims = { package = "secureexec-shims", path = "../../libs/shims" }
+shims = { package = "secureexec-shims", path = "../../../../../toolchain/crates/libs/shims" }
diff --git a/registry/native/crates/commands/stdbuf/src/main.rs b/software/coreutils/native/crates/cmd-stdbuf/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/stdbuf/src/main.rs
rename to software/coreutils/native/crates/cmd-stdbuf/src/main.rs
diff --git a/registry/native/crates/commands/stdbuf/tests/streaming.rs b/software/coreutils/native/crates/cmd-stdbuf/tests/streaming.rs
similarity index 100%
rename from registry/native/crates/commands/stdbuf/tests/streaming.rs
rename to software/coreutils/native/crates/cmd-stdbuf/tests/streaming.rs
diff --git a/registry/native/crates/commands/strings/Cargo.toml b/software/coreutils/native/crates/cmd-strings/Cargo.toml
similarity index 71%
rename from registry/native/crates/commands/strings/Cargo.toml
rename to software/coreutils/native/crates/cmd-strings/Cargo.toml
index 7ce5f58a39..4ad7da7c02 100644
--- a/registry/native/crates/commands/strings/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-strings/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-strings"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "strings"
path = "src/main.rs"
[dependencies]
-secureexec-strings-cmd = { path = "../../libs/strings-cmd" }
+secureexec-strings-cmd = { path = "../strings-cmd" }
diff --git a/registry/native/crates/commands/strings/src/main.rs b/software/coreutils/native/crates/cmd-strings/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/strings/src/main.rs
rename to software/coreutils/native/crates/cmd-strings/src/main.rs
diff --git a/registry/native/crates/commands/sum/Cargo.toml b/software/coreutils/native/crates/cmd-sum/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/sum/Cargo.toml
rename to software/coreutils/native/crates/cmd-sum/Cargo.toml
index 5fc71bfcdb..5b07f6452b 100644
--- a/registry/native/crates/commands/sum/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-sum/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-sum"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/sum/src/main.rs b/software/coreutils/native/crates/cmd-sum/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/sum/src/main.rs
rename to software/coreutils/native/crates/cmd-sum/src/main.rs
diff --git a/registry/native/crates/commands/tac/Cargo.toml b/software/coreutils/native/crates/cmd-tac/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/tac/Cargo.toml
rename to software/coreutils/native/crates/cmd-tac/Cargo.toml
index c55250d7bd..f0069010db 100644
--- a/registry/native/crates/commands/tac/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-tac/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-tac"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/tac/src/main.rs b/software/coreutils/native/crates/cmd-tac/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/tac/src/main.rs
rename to software/coreutils/native/crates/cmd-tac/src/main.rs
diff --git a/registry/native/crates/commands/tail/Cargo.toml b/software/coreutils/native/crates/cmd-tail/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/tail/Cargo.toml
rename to software/coreutils/native/crates/cmd-tail/Cargo.toml
index e47b9737ba..7a14ea0dba 100644
--- a/registry/native/crates/commands/tail/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-tail/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-tail"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/tail/src/main.rs b/software/coreutils/native/crates/cmd-tail/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/tail/src/main.rs
rename to software/coreutils/native/crates/cmd-tail/src/main.rs
diff --git a/registry/native/crates/commands/tee/Cargo.toml b/software/coreutils/native/crates/cmd-tee/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/tee/Cargo.toml
rename to software/coreutils/native/crates/cmd-tee/Cargo.toml
index 94185e3cd8..c94c0664e7 100644
--- a/registry/native/crates/commands/tee/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-tee/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-tee"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/tee/src/main.rs b/software/coreutils/native/crates/cmd-tee/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/tee/src/main.rs
rename to software/coreutils/native/crates/cmd-tee/src/main.rs
diff --git a/registry/native/crates/commands/test/Cargo.toml b/software/coreutils/native/crates/cmd-test/Cargo.toml
similarity index 65%
rename from registry/native/crates/commands/test/Cargo.toml
rename to software/coreutils/native/crates/cmd-test/Cargo.toml
index 9fe4f0f638..1a1581e18b 100644
--- a/registry/native/crates/commands/test/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-test/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-test"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "test"
path = "src/main.rs"
[dependencies]
-secureexec-builtins = { path = "../../libs/builtins" }
+secureexec-builtins = { path = "../../../../../toolchain/crates/libs/builtins" }
diff --git a/registry/native/crates/commands/test/src/main.rs b/software/coreutils/native/crates/cmd-test/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/test/src/main.rs
rename to software/coreutils/native/crates/cmd-test/src/main.rs
diff --git a/registry/native/crates/commands/timeout/Cargo.toml b/software/coreutils/native/crates/cmd-timeout/Cargo.toml
similarity index 63%
rename from registry/native/crates/commands/timeout/Cargo.toml
rename to software/coreutils/native/crates/cmd-timeout/Cargo.toml
index f872586c9f..af6e289f59 100644
--- a/registry/native/crates/commands/timeout/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-timeout/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-timeout"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "timeout"
path = "src/main.rs"
[dependencies]
-shims = { package = "secureexec-shims", path = "../../libs/shims" }
+shims = { package = "secureexec-shims", path = "../../../../../toolchain/crates/libs/shims" }
diff --git a/registry/native/crates/commands/timeout/src/main.rs b/software/coreutils/native/crates/cmd-timeout/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/timeout/src/main.rs
rename to software/coreutils/native/crates/cmd-timeout/src/main.rs
diff --git a/registry/native/crates/commands/touch/Cargo.toml b/software/coreutils/native/crates/cmd-touch/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/touch/Cargo.toml
rename to software/coreutils/native/crates/cmd-touch/Cargo.toml
index e88d117a95..6353e89c77 100644
--- a/registry/native/crates/commands/touch/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-touch/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-touch"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/touch/src/main.rs b/software/coreutils/native/crates/cmd-touch/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/touch/src/main.rs
rename to software/coreutils/native/crates/cmd-touch/src/main.rs
diff --git a/registry/native/crates/commands/tr/Cargo.toml b/software/coreutils/native/crates/cmd-tr/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/tr/Cargo.toml
rename to software/coreutils/native/crates/cmd-tr/Cargo.toml
index fcaa590eb7..c11682cac7 100644
--- a/registry/native/crates/commands/tr/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-tr/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-tr"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/tr/src/main.rs b/software/coreutils/native/crates/cmd-tr/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/tr/src/main.rs
rename to software/coreutils/native/crates/cmd-tr/src/main.rs
diff --git a/registry/native/crates/commands/true/Cargo.toml b/software/coreutils/native/crates/cmd-true/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/true/Cargo.toml
rename to software/coreutils/native/crates/cmd-true/Cargo.toml
index 95faf97085..bed79e45c4 100644
--- a/registry/native/crates/commands/true/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-true/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-true"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/true/src/main.rs b/software/coreutils/native/crates/cmd-true/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/true/src/main.rs
rename to software/coreutils/native/crates/cmd-true/src/main.rs
diff --git a/registry/native/crates/commands/truncate/Cargo.toml b/software/coreutils/native/crates/cmd-truncate/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/truncate/Cargo.toml
rename to software/coreutils/native/crates/cmd-truncate/Cargo.toml
index 8a2ea8eef4..65fa7e80fd 100644
--- a/registry/native/crates/commands/truncate/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-truncate/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-truncate"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/truncate/src/main.rs b/software/coreutils/native/crates/cmd-truncate/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/truncate/src/main.rs
rename to software/coreutils/native/crates/cmd-truncate/src/main.rs
diff --git a/registry/native/crates/commands/tsort/Cargo.toml b/software/coreutils/native/crates/cmd-tsort/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/tsort/Cargo.toml
rename to software/coreutils/native/crates/cmd-tsort/Cargo.toml
index 9e17b0c29d..b0e057b0c8 100644
--- a/registry/native/crates/commands/tsort/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-tsort/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-tsort"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/tsort/src/main.rs b/software/coreutils/native/crates/cmd-tsort/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/tsort/src/main.rs
rename to software/coreutils/native/crates/cmd-tsort/src/main.rs
diff --git a/registry/native/crates/commands/uname/Cargo.toml b/software/coreutils/native/crates/cmd-uname/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/uname/Cargo.toml
rename to software/coreutils/native/crates/cmd-uname/Cargo.toml
index 4b3d810d0c..b0f0a8c71a 100644
--- a/registry/native/crates/commands/uname/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-uname/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-uname"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/uname/src/main.rs b/software/coreutils/native/crates/cmd-uname/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/uname/src/main.rs
rename to software/coreutils/native/crates/cmd-uname/src/main.rs
diff --git a/registry/native/crates/commands/unexpand/Cargo.toml b/software/coreutils/native/crates/cmd-unexpand/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/unexpand/Cargo.toml
rename to software/coreutils/native/crates/cmd-unexpand/Cargo.toml
index 539079e2c1..d8a9dc9e78 100644
--- a/registry/native/crates/commands/unexpand/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-unexpand/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-unexpand"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/unexpand/src/main.rs b/software/coreutils/native/crates/cmd-unexpand/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/unexpand/src/main.rs
rename to software/coreutils/native/crates/cmd-unexpand/src/main.rs
diff --git a/registry/native/crates/commands/uniq/Cargo.toml b/software/coreutils/native/crates/cmd-uniq/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/uniq/Cargo.toml
rename to software/coreutils/native/crates/cmd-uniq/Cargo.toml
index 39cef76b95..c3ead17984 100644
--- a/registry/native/crates/commands/uniq/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-uniq/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-uniq"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/uniq/src/main.rs b/software/coreutils/native/crates/cmd-uniq/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/uniq/src/main.rs
rename to software/coreutils/native/crates/cmd-uniq/src/main.rs
diff --git a/registry/native/crates/commands/unlink/Cargo.toml b/software/coreutils/native/crates/cmd-unlink/Cargo.toml
similarity index 86%
rename from registry/native/crates/commands/unlink/Cargo.toml
rename to software/coreutils/native/crates/cmd-unlink/Cargo.toml
index e1a4498758..eb669d0add 100644
--- a/registry/native/crates/commands/unlink/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-unlink/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-unlink"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/unlink/src/main.rs b/software/coreutils/native/crates/cmd-unlink/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/unlink/src/main.rs
rename to software/coreutils/native/crates/cmd-unlink/src/main.rs
diff --git a/registry/native/crates/commands/wc/Cargo.toml b/software/coreutils/native/crates/cmd-wc/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/wc/Cargo.toml
rename to software/coreutils/native/crates/cmd-wc/Cargo.toml
index d2d3a0a73b..728b9fdad7 100644
--- a/registry/native/crates/commands/wc/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-wc/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-wc"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/wc/src/main.rs b/software/coreutils/native/crates/cmd-wc/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/wc/src/main.rs
rename to software/coreutils/native/crates/cmd-wc/src/main.rs
diff --git a/registry/native/crates/commands/which/Cargo.toml b/software/coreutils/native/crates/cmd-which/Cargo.toml
similarity index 62%
rename from registry/native/crates/commands/which/Cargo.toml
rename to software/coreutils/native/crates/cmd-which/Cargo.toml
index 0a6ae7d233..0ea0f38b94 100644
--- a/registry/native/crates/commands/which/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-which/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-which"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "which"
path = "src/main.rs"
[dependencies]
-shims = { package = "secureexec-shims", path = "../../libs/shims" }
+shims = { package = "secureexec-shims", path = "../../../../../toolchain/crates/libs/shims" }
diff --git a/registry/native/crates/commands/which/src/main.rs b/software/coreutils/native/crates/cmd-which/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/which/src/main.rs
rename to software/coreutils/native/crates/cmd-which/src/main.rs
diff --git a/registry/native/crates/commands/which/tests/executable_mode.rs b/software/coreutils/native/crates/cmd-which/tests/executable_mode.rs
similarity index 100%
rename from registry/native/crates/commands/which/tests/executable_mode.rs
rename to software/coreutils/native/crates/cmd-which/tests/executable_mode.rs
diff --git a/registry/native/crates/commands/whoami/Cargo.toml b/software/coreutils/native/crates/cmd-whoami/Cargo.toml
similarity index 65%
rename from registry/native/crates/commands/whoami/Cargo.toml
rename to software/coreutils/native/crates/cmd-whoami/Cargo.toml
index 5aaf67d173..988ca47dae 100644
--- a/registry/native/crates/commands/whoami/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-whoami/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-whoami"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "whoami"
path = "src/main.rs"
[dependencies]
-secureexec-builtins = { path = "../../libs/builtins" }
+secureexec-builtins = { path = "../../../../../toolchain/crates/libs/builtins" }
diff --git a/registry/native/crates/commands/whoami/src/main.rs b/software/coreutils/native/crates/cmd-whoami/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/whoami/src/main.rs
rename to software/coreutils/native/crates/cmd-whoami/src/main.rs
diff --git a/registry/native/crates/commands/yes/Cargo.toml b/software/coreutils/native/crates/cmd-yes/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/yes/Cargo.toml
rename to software/coreutils/native/crates/cmd-yes/Cargo.toml
index 4e6da247bd..d32f9d582d 100644
--- a/registry/native/crates/commands/yes/Cargo.toml
+++ b/software/coreutils/native/crates/cmd-yes/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-yes"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/yes/src/main.rs b/software/coreutils/native/crates/cmd-yes/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/yes/src/main.rs
rename to software/coreutils/native/crates/cmd-yes/src/main.rs
diff --git a/registry/native/crates/libs/column/Cargo.toml b/software/coreutils/native/crates/column/Cargo.toml
similarity index 83%
rename from registry/native/crates/libs/column/Cargo.toml
rename to software/coreutils/native/crates/column/Cargo.toml
index 0215159ee9..3134b792fd 100644
--- a/registry/native/crates/libs/column/Cargo.toml
+++ b/software/coreutils/native/crates/column/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-column"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/column/src/lib.rs b/software/coreutils/native/crates/column/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/column/src/lib.rs
rename to software/coreutils/native/crates/column/src/lib.rs
diff --git a/registry/native/crates/libs/du/Cargo.toml b/software/coreutils/native/crates/du/Cargo.toml
similarity index 83%
rename from registry/native/crates/libs/du/Cargo.toml
rename to software/coreutils/native/crates/du/Cargo.toml
index ad08de95a1..f167b14657 100644
--- a/registry/native/crates/libs/du/Cargo.toml
+++ b/software/coreutils/native/crates/du/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-du"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/du/src/lib.rs b/software/coreutils/native/crates/du/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/du/src/lib.rs
rename to software/coreutils/native/crates/du/src/lib.rs
diff --git a/registry/native/crates/libs/expr/Cargo.toml b/software/coreutils/native/crates/expr/Cargo.toml
similarity index 84%
rename from registry/native/crates/libs/expr/Cargo.toml
rename to software/coreutils/native/crates/expr/Cargo.toml
index 8bd1f300fb..e8f413d5c6 100644
--- a/registry/native/crates/libs/expr/Cargo.toml
+++ b/software/coreutils/native/crates/expr/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-expr"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/expr/src/lib.rs b/software/coreutils/native/crates/expr/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/expr/src/lib.rs
rename to software/coreutils/native/crates/expr/src/lib.rs
diff --git a/registry/native/crates/libs/rev/Cargo.toml b/software/coreutils/native/crates/rev/Cargo.toml
similarity index 83%
rename from registry/native/crates/libs/rev/Cargo.toml
rename to software/coreutils/native/crates/rev/Cargo.toml
index dda6c9d74d..3c8a175e92 100644
--- a/registry/native/crates/libs/rev/Cargo.toml
+++ b/software/coreutils/native/crates/rev/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-rev"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/rev/src/lib.rs b/software/coreutils/native/crates/rev/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/rev/src/lib.rs
rename to software/coreutils/native/crates/rev/src/lib.rs
diff --git a/registry/native/crates/libs/strings-cmd/Cargo.toml b/software/coreutils/native/crates/strings-cmd/Cargo.toml
similarity index 84%
rename from registry/native/crates/libs/strings-cmd/Cargo.toml
rename to software/coreutils/native/crates/strings-cmd/Cargo.toml
index 30e9834b62..7c3c023a54 100644
--- a/registry/native/crates/libs/strings-cmd/Cargo.toml
+++ b/software/coreutils/native/crates/strings-cmd/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-strings-cmd"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/strings-cmd/src/lib.rs b/software/coreutils/native/crates/strings-cmd/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/strings-cmd/src/lib.rs
rename to software/coreutils/native/crates/strings-cmd/src/lib.rs
diff --git a/registry/software/coreutils/package.json b/software/coreutils/package.json
similarity index 63%
rename from registry/software/coreutils/package.json
rename to software/coreutils/package.json
index 02002509ee..5c90435aba 100644
--- a/registry/software/coreutils/package.json
+++ b/software/coreutils/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/agent/pi/src/index.ts b/software/coreutils/src/index.ts
similarity index 100%
rename from registry/agent/pi/src/index.ts
rename to software/coreutils/src/index.ts
diff --git a/registry/tests/wasmvm/shell-redirect.test.ts b/software/coreutils/test/shell-redirect.test.ts
similarity index 96%
rename from registry/tests/wasmvm/shell-redirect.test.ts
rename to software/coreutils/test/shell-redirect.test.ts
index ccee94a39b..aab73cdeb9 100644
--- a/registry/tests/wasmvm/shell-redirect.test.ts
+++ b/software/coreutils/test/shell-redirect.test.ts
@@ -7,7 +7,7 @@ import {
describeIf,
hasWasmBinaries,
type Kernel,
-} from "../helpers.js";
+} from '@rivet-dev/agentos-test-harness';
describeIf(hasWasmBinaries, "wasmvm shell redirects", () => {
let kernel: Kernel | undefined;
diff --git a/registry/tests/wasmvm/shell-terminal.test.ts b/software/coreutils/test/shell-terminal.test.ts
similarity index 98%
rename from registry/tests/wasmvm/shell-terminal.test.ts
rename to software/coreutils/test/shell-terminal.test.ts
index 7efaffbb69..9c5a3788d1 100644
--- a/registry/tests/wasmvm/shell-terminal.test.ts
+++ b/software/coreutils/test/shell-terminal.test.ts
@@ -7,10 +7,10 @@
*/
import { describe, it, expect, afterEach } from "vitest";
-import { TerminalHarness } from './terminal-harness.js';
-import { createWasmVmRuntime } from '../helpers.js';
-import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '../helpers.js';
-import type { Kernel } from "../helpers.js";
+import { TerminalHarness } from '@rivet-dev/agentos-test-harness';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
+import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
/** brush-shell interactive prompt (captured empirically). */
const PROMPT = "sh-0.4$ ";
@@ -169,7 +169,7 @@ describeIf(hasWasmBinaries, "wasmvm-shell-terminal", () => {
expect(harness.screenshotTrimmed()).toBe(
[`${PROMPT}echo hello`, "hello", PROMPT].join("\n"),
);
- });
+ }, 15_000);
it("ls / shows listing — directory entries include /bin from command registration", async () => {
const { kernel } = await createShellKernel();
diff --git a/software/coreutils/tsconfig.json b/software/coreutils/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/coreutils/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/curl/agentos-package.json b/software/curl/agentos-package.json
similarity index 69%
rename from registry/software/curl/agentos-package.json
rename to software/curl/agentos-package.json
index 4b2d55e758..98a4c83f33 100644
--- a/registry/software/curl/agentos-package.json
+++ b/software/curl/agentos-package.json
@@ -6,6 +6,7 @@
"title": "curl",
"description": "HTTP(S) client for fetching URLs and APIs.",
"priority": 50,
- "image": "/images/registry/curl.svg"
+ "image": "/images/registry/curl.svg",
+ "category": "networking"
}
}
diff --git a/registry/software/curl/bin/curl b/software/curl/bin/curl
similarity index 100%
rename from registry/software/curl/bin/curl
rename to software/curl/bin/curl
diff --git a/registry/native/c/curl-upstream-overlay/lib/curl_setup.h b/software/curl/native/c/overlay/lib/curl_setup.h
similarity index 100%
rename from registry/native/c/curl-upstream-overlay/lib/curl_setup.h
rename to software/curl/native/c/overlay/lib/curl_setup.h
diff --git a/registry/native/c/curl-upstream-overlay/lib/hostip.c b/software/curl/native/c/overlay/lib/hostip.c
similarity index 100%
rename from registry/native/c/curl-upstream-overlay/lib/hostip.c
rename to software/curl/native/c/overlay/lib/hostip.c
diff --git a/registry/native/c/curl-upstream-overlay/lib/hostip.h b/software/curl/native/c/overlay/lib/hostip.h
similarity index 100%
rename from registry/native/c/curl-upstream-overlay/lib/hostip.h
rename to software/curl/native/c/overlay/lib/hostip.h
diff --git a/registry/native/c/curl-upstream-overlay/lib/vtls/vtls.c b/software/curl/native/c/overlay/lib/vtls/vtls.c
similarity index 100%
rename from registry/native/c/curl-upstream-overlay/lib/vtls/vtls.c
rename to software/curl/native/c/overlay/lib/vtls/vtls.c
diff --git a/registry/native/c/curl-upstream-overlay/lib/vtls/wasi_tls.c b/software/curl/native/c/overlay/lib/vtls/wasi_tls.c
similarity index 100%
rename from registry/native/c/curl-upstream-overlay/lib/vtls/wasi_tls.c
rename to software/curl/native/c/overlay/lib/vtls/wasi_tls.c
diff --git a/registry/native/c/curl-upstream-overlay/lib/vtls/wasi_tls.h b/software/curl/native/c/overlay/lib/vtls/wasi_tls.h
similarity index 100%
rename from registry/native/c/curl-upstream-overlay/lib/vtls/wasi_tls.h
rename to software/curl/native/c/overlay/lib/vtls/wasi_tls.h
diff --git a/registry/native/crates/commands/curl/Cargo.toml b/software/curl/native/crates/cmd-curl/Cargo.toml
similarity index 61%
rename from registry/native/crates/commands/curl/Cargo.toml
rename to software/curl/native/crates/cmd-curl/Cargo.toml
index 5d5a8a8763..5a65154842 100644
--- a/registry/native/crates/commands/curl/Cargo.toml
+++ b/software/curl/native/crates/cmd-curl/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-curl"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "curl"
path = "src/main.rs"
[dependencies]
-wasi-http = { package = "secureexec-wasi-http", path = "../../libs/wasi-http" }
+wasi-http = { package = "secureexec-wasi-http", path = "../../../../../toolchain/crates/libs/wasi-http" }
diff --git a/registry/native/crates/commands/curl/src/main.rs b/software/curl/native/crates/cmd-curl/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/curl/src/main.rs
rename to software/curl/native/crates/cmd-curl/src/main.rs
diff --git a/registry/software/curl/package.json b/software/curl/package.json
similarity index 61%
rename from registry/software/curl/package.json
rename to software/curl/package.json
index f915b112f3..4e29cd361d 100644
--- a/registry/software/curl/package.json
+++ b/software/curl/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/browserbase/src/index.ts b/software/curl/src/index.ts
similarity index 100%
rename from registry/software/browserbase/src/index.ts
rename to software/curl/src/index.ts
diff --git a/registry/tests/wasmvm/curl.test.ts b/software/curl/test/curl.test.ts
similarity index 99%
rename from registry/tests/wasmvm/curl.test.ts
rename to software/curl/test/curl.test.ts
index da9c1b5600..803554966a 100644
--- a/registry/tests/wasmvm/curl.test.ts
+++ b/software/curl/test/curl.test.ts
@@ -12,7 +12,7 @@
*/
import { describe, it, expect, afterEach, beforeAll, afterAll } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
import {
allowAll,
C_BUILD_DIR,
@@ -23,8 +23,8 @@ import {
hasCWasmBinaries,
hasWasmBinaries,
itIf,
-} from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+} from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
import {
createServer as createHttpServer,
type IncomingMessage,
diff --git a/software/curl/tsconfig.json b/software/curl/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/curl/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/diffutils/agentos-package.json b/software/diffutils/agentos-package.json
similarity index 68%
rename from registry/software/diffutils/agentos-package.json
rename to software/diffutils/agentos-package.json
index 6c96a19370..c9460d579b 100644
--- a/registry/software/diffutils/agentos-package.json
+++ b/software/diffutils/agentos-package.json
@@ -6,6 +6,7 @@
"title": "diffutils",
"description": "GNU diff for comparing files.",
"priority": 6,
- "image": "/images/registry/diffutils.svg"
+ "image": "/images/registry/diffutils.svg",
+ "category": "core"
}
}
diff --git a/registry/software/diffutils/bin/diff b/software/diffutils/bin/diff
similarity index 100%
rename from registry/software/diffutils/bin/diff
rename to software/diffutils/bin/diff
diff --git a/registry/native/crates/commands/diff/Cargo.toml b/software/diffutils/native/crates/cmd-diff/Cargo.toml
similarity index 73%
rename from registry/native/crates/commands/diff/Cargo.toml
rename to software/diffutils/native/crates/cmd-diff/Cargo.toml
index ea9f00c8a2..8cdc14cb7d 100644
--- a/registry/native/crates/commands/diff/Cargo.toml
+++ b/software/diffutils/native/crates/cmd-diff/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-diff"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "diff"
path = "src/main.rs"
[dependencies]
-secureexec-diff = { path = "../../libs/diff" }
+secureexec-diff = { path = "../diff" }
diff --git a/registry/native/crates/commands/diff/src/main.rs b/software/diffutils/native/crates/cmd-diff/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/diff/src/main.rs
rename to software/diffutils/native/crates/cmd-diff/src/main.rs
diff --git a/registry/native/crates/libs/diff/Cargo.toml b/software/diffutils/native/crates/diff/Cargo.toml
similarity index 84%
rename from registry/native/crates/libs/diff/Cargo.toml
rename to software/diffutils/native/crates/diff/Cargo.toml
index 614324b8ee..587bcf5968 100644
--- a/registry/native/crates/libs/diff/Cargo.toml
+++ b/software/diffutils/native/crates/diff/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-diff"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/diff/src/lib.rs b/software/diffutils/native/crates/diff/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/diff/src/lib.rs
rename to software/diffutils/native/crates/diff/src/lib.rs
diff --git a/registry/software/diffutils/package.json b/software/diffutils/package.json
similarity index 62%
rename from registry/software/diffutils/package.json
rename to software/diffutils/package.json
index c750ec29bd..3e54784fbb 100644
--- a/registry/software/diffutils/package.json
+++ b/software/diffutils/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/codex-cli/src/index.ts b/software/diffutils/src/index.ts
similarity index 100%
rename from registry/software/codex-cli/src/index.ts
rename to software/diffutils/src/index.ts
diff --git a/software/diffutils/test/manifest.test.ts b/software/diffutils/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/diffutils/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/diffutils/tsconfig.json b/software/diffutils/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/diffutils/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/duckdb/agentos-package.json b/software/duckdb/agentos-package.json
similarity index 69%
rename from registry/software/duckdb/agentos-package.json
rename to software/duckdb/agentos-package.json
index 7cd73f4e62..bb48072275 100644
--- a/registry/software/duckdb/agentos-package.json
+++ b/software/duckdb/agentos-package.json
@@ -6,6 +6,7 @@
"title": "DuckDB",
"description": "In-process analytics database CLI.",
"priority": 70,
- "image": "/images/registry/duckdb.svg"
+ "image": "/images/registry/duckdb.svg",
+ "category": "data"
}
}
diff --git a/registry/native/c/patches/duckdb/0001-skip-http-object-when-extension-loading-is-disabled.patch b/software/duckdb/native/c/patches/0001-skip-http-object-when-extension-loading-is-disabled.patch
similarity index 100%
rename from registry/native/c/patches/duckdb/0001-skip-http-object-when-extension-loading-is-disabled.patch
rename to software/duckdb/native/c/patches/0001-skip-http-object-when-extension-loading-is-disabled.patch
diff --git a/registry/native/c/patches/duckdb/0002-disable-linenoise-on-wasi.patch b/software/duckdb/native/c/patches/0002-disable-linenoise-on-wasi.patch
similarity index 100%
rename from registry/native/c/patches/duckdb/0002-disable-linenoise-on-wasi.patch
rename to software/duckdb/native/c/patches/0002-disable-linenoise-on-wasi.patch
diff --git a/registry/native/c/patches/duckdb/0003-disable-shell-system-command-on-wasi.patch b/software/duckdb/native/c/patches/0003-disable-shell-system-command-on-wasi.patch
similarity index 100%
rename from registry/native/c/patches/duckdb/0003-disable-shell-system-command-on-wasi.patch
rename to software/duckdb/native/c/patches/0003-disable-shell-system-command-on-wasi.patch
diff --git a/registry/native/c/patches/duckdb/0004-skip-http-util-init-when-extension-loading-is-disabled.patch b/software/duckdb/native/c/patches/0004-skip-http-util-init-when-extension-loading-is-disabled.patch
similarity index 100%
rename from registry/native/c/patches/duckdb/0004-skip-http-util-init-when-extension-loading-is-disabled.patch
rename to software/duckdb/native/c/patches/0004-skip-http-util-init-when-extension-loading-is-disabled.patch
diff --git a/registry/native/c/patches/duckdb/0005-disable-shell-pager-popen-on-wasi.patch b/software/duckdb/native/c/patches/0005-disable-shell-pager-popen-on-wasi.patch
similarity index 100%
rename from registry/native/c/patches/duckdb/0005-disable-shell-pager-popen-on-wasi.patch
rename to software/duckdb/native/c/patches/0005-disable-shell-pager-popen-on-wasi.patch
diff --git a/registry/software/duckdb/package.json b/software/duckdb/package.json
similarity index 61%
rename from registry/software/duckdb/package.json
rename to software/duckdb/package.json
index 19e9bdcb6e..08cea419e8 100644
--- a/registry/software/duckdb/package.json
+++ b/software/duckdb/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/coreutils/src/index.ts b/software/duckdb/src/index.ts
similarity index 100%
rename from registry/software/coreutils/src/index.ts
rename to software/duckdb/src/index.ts
diff --git a/registry/tests/wasmvm/duckdb.test.ts b/software/duckdb/test/duckdb.test.ts
similarity index 97%
rename from registry/tests/wasmvm/duckdb.test.ts
rename to software/duckdb/test/duckdb.test.ts
index f1dddc9d46..f23fce8afa 100644
--- a/registry/tests/wasmvm/duckdb.test.ts
+++ b/software/duckdb/test/duckdb.test.ts
@@ -23,8 +23,8 @@ import {
createWasmVmRuntime,
describeIf,
itIf,
-} from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+} from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
import { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http';
import { existsSync } from 'node:fs';
import { resolve } from 'node:path';
@@ -82,8 +82,8 @@ async function waitForFilesystemPath(
}
}
-// TODO(P6): requires duckdb WASM artifact, intentionally excluded from the fast registry-build gate.
-describe.skip('duckdb command', { timeout: 120_000 }, () => {
+// TODO(P6): requires duckdb WASM artifact, intentionally excluded from the fast software-build gate.
+describeIf(hasWasmDuckDB, 'duckdb command', { timeout: 120_000 }, () => {
let kernel: Kernel | undefined;
afterEach(async () => {
diff --git a/software/duckdb/tsconfig.json b/software/duckdb/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/duckdb/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/software/envsubst/agentos-package.json b/software/envsubst/agentos-package.json
new file mode 100644
index 0000000000..4d990285ff
--- /dev/null
+++ b/software/envsubst/agentos-package.json
@@ -0,0 +1,11 @@
+{
+ "commands": [
+ "envsubst"
+ ],
+ "registry": {
+ "title": "envsubst",
+ "description": "Substitute environment variables in text streams.",
+ "priority": 10,
+ "category": "core"
+ }
+}
diff --git a/registry/native/c/programs/envsubst.c b/software/envsubst/native/c/envsubst.c
similarity index 100%
rename from registry/native/c/programs/envsubst.c
rename to software/envsubst/native/c/envsubst.c
diff --git a/software/envsubst/package.json b/software/envsubst/package.json
new file mode 100644
index 0000000000..d3c3d310af
--- /dev/null
+++ b/software/envsubst/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "@agentos-software/envsubst",
+ "version": "0.3.3",
+ "type": "module",
+ "license": "Apache-2.0",
+ "description": "envsubst environment variable substitution command for AgentOS VMs",
+ "main": "./dist/index.js",
+ "types": "./dist/index.d.ts",
+ "files": [
+ "dist",
+ "!dist/package",
+ "!dist/package.tar"
+ ],
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
+ }
+ },
+ "scripts": {
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
+ },
+ "devDependencies": {
+ "@agentos-software/manifest": "workspace:*",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "@rivet-dev/agentos-toolchain": "workspace:*",
+ "@types/node": "^22.10.2",
+ "typescript": "^5.9.2",
+ "vitest": "^2.1.9"
+ }
+}
diff --git a/registry/software/curl/src/index.ts b/software/envsubst/src/index.ts
similarity index 100%
rename from registry/software/curl/src/index.ts
rename to software/envsubst/src/index.ts
diff --git a/registry/tests/wasmvm/envsubst.test.ts b/software/envsubst/test/envsubst.test.ts
similarity index 95%
rename from registry/tests/wasmvm/envsubst.test.ts
rename to software/envsubst/test/envsubst.test.ts
index 3415284a6d..7cf5bd37de 100644
--- a/registry/tests/wasmvm/envsubst.test.ts
+++ b/software/envsubst/test/envsubst.test.ts
@@ -10,9 +10,9 @@
*/
import { describe, it, expect, afterEach } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
-import { C_BUILD_DIR, COMMANDS_DIR, createKernel } from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
+import { C_BUILD_DIR, COMMANDS_DIR, createKernel, describeIf, hasCWasmBinaries } from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
// Minimal in-memory VFS for kernel tests
class SimpleVFS {
@@ -102,7 +102,7 @@ class SimpleVFS {
}
}
-describe('envsubst command', () => {
+describeIf(hasCWasmBinaries('envsubst'), 'envsubst command', () => {
let kernel: Kernel;
afterEach(async () => {
diff --git a/software/envsubst/tsconfig.json b/software/envsubst/tsconfig.json
new file mode 100644
index 0000000000..73c85c8fee
--- /dev/null
+++ b/software/envsubst/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "dist",
+ "rootDir": "src",
+ "composite": true,
+ "tsBuildInfoFile": "dist/.tsbuildinfo"
+ },
+ "include": [
+ "src/**/*.ts"
+ ]
+}
diff --git a/registry/software/everything/package.json b/software/everything/package.json
similarity index 88%
rename from registry/software/everything/package.json
rename to software/everything/package.json
index c47f10fd6a..168761d047 100644
--- a/registry/software/everything/package.json
+++ b/software/everything/package.json
@@ -19,7 +19,8 @@
},
"scripts": {
"build": "tsc",
- "check-types": "tsc --noEmit"
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"dependencies": {
"@agentos-software/coreutils": "workspace:*",
@@ -44,6 +45,8 @@
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/everything/src/index.ts b/software/everything/src/index.ts
similarity index 100%
rename from registry/software/everything/src/index.ts
rename to software/everything/src/index.ts
diff --git a/software/everything/tsconfig.json b/software/everything/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/everything/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/fd/agentos-package.json b/software/fd/agentos-package.json
similarity index 67%
rename from registry/software/fd/agentos-package.json
rename to software/fd/agentos-package.json
index 2667d95742..636140edab 100644
--- a/registry/software/fd/agentos-package.json
+++ b/software/fd/agentos-package.json
@@ -5,6 +5,7 @@
"registry": {
"title": "fd",
"description": "Fast file finder.",
- "priority": 30
+ "priority": 30,
+ "category": "developer-tools"
}
}
diff --git a/registry/software/fd/bin/fd b/software/fd/bin/fd
similarity index 100%
rename from registry/software/fd/bin/fd
rename to software/fd/bin/fd
diff --git a/registry/native/crates/commands/fd/Cargo.toml b/software/fd/native/crates/cmd-fd/Cargo.toml
similarity index 74%
rename from registry/native/crates/commands/fd/Cargo.toml
rename to software/fd/native/crates/cmd-fd/Cargo.toml
index 12f78cdd30..419fd7f396 100644
--- a/registry/native/crates/commands/fd/Cargo.toml
+++ b/software/fd/native/crates/cmd-fd/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-fd"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "fd"
path = "src/main.rs"
[dependencies]
-secureexec-fd = { path = "../../libs/fd" }
+secureexec-fd = { path = "../fd" }
diff --git a/registry/native/crates/commands/fd/src/main.rs b/software/fd/native/crates/cmd-fd/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/fd/src/main.rs
rename to software/fd/native/crates/cmd-fd/src/main.rs
diff --git a/registry/native/crates/libs/fd/Cargo.toml b/software/fd/native/crates/fd/Cargo.toml
similarity index 84%
rename from registry/native/crates/libs/fd/Cargo.toml
rename to software/fd/native/crates/fd/Cargo.toml
index 2be330866f..47c01c9571 100644
--- a/registry/native/crates/libs/fd/Cargo.toml
+++ b/software/fd/native/crates/fd/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-fd"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/fd/src/lib.rs b/software/fd/native/crates/fd/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/fd/src/lib.rs
rename to software/fd/native/crates/fd/src/lib.rs
diff --git a/registry/software/fd/package.json b/software/fd/package.json
similarity index 61%
rename from registry/software/fd/package.json
rename to software/fd/package.json
index fe9fe5eebe..341a37596a 100644
--- a/registry/software/fd/package.json
+++ b/software/fd/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/diffutils/src/index.ts b/software/fd/src/index.ts
similarity index 100%
rename from registry/software/diffutils/src/index.ts
rename to software/fd/src/index.ts
diff --git a/registry/tests/wasmvm/fd-find.test.ts b/software/fd/test/fd.test.ts
similarity index 98%
rename from registry/tests/wasmvm/fd-find.test.ts
rename to software/fd/test/fd.test.ts
index dfb5faf21d..22b98196cf 100644
--- a/registry/tests/wasmvm/fd-find.test.ts
+++ b/software/fd/test/fd.test.ts
@@ -11,9 +11,9 @@
*/
import { describe, it, expect, afterEach } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
-import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
+import { COMMANDS_DIR, createKernel, describeIf, hasWasmBinaries } from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
// Minimal in-memory VFS for kernel tests
class SimpleVFS {
diff --git a/software/fd/tsconfig.json b/software/fd/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/fd/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/file/agentos-package.json b/software/file/agentos-package.json
similarity index 73%
rename from registry/software/file/agentos-package.json
rename to software/file/agentos-package.json
index a0112ed101..ef6f5acc1c 100644
--- a/registry/software/file/agentos-package.json
+++ b/software/file/agentos-package.json
@@ -5,6 +5,7 @@
"registry": {
"title": "file",
"description": "Detect file types.",
- "priority": 2
+ "priority": 2,
+ "category": "core"
}
}
diff --git a/registry/software/file/bin/file b/software/file/bin/file
similarity index 100%
rename from registry/software/file/bin/file
rename to software/file/bin/file
diff --git a/registry/native/crates/commands/file/Cargo.toml b/software/file/native/crates/cmd-file/Cargo.toml
similarity index 71%
rename from registry/native/crates/commands/file/Cargo.toml
rename to software/file/native/crates/cmd-file/Cargo.toml
index cabc723226..65e6ee9f90 100644
--- a/registry/native/crates/commands/file/Cargo.toml
+++ b/software/file/native/crates/cmd-file/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-file"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "file"
path = "src/main.rs"
[dependencies]
-secureexec-file-cmd = { path = "../../libs/file-cmd" }
+secureexec-file-cmd = { path = "../file-cmd" }
diff --git a/registry/native/crates/commands/file/src/main.rs b/software/file/native/crates/cmd-file/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/file/src/main.rs
rename to software/file/native/crates/cmd-file/src/main.rs
diff --git a/registry/native/crates/libs/file-cmd/Cargo.toml b/software/file/native/crates/file-cmd/Cargo.toml
similarity index 85%
rename from registry/native/crates/libs/file-cmd/Cargo.toml
rename to software/file/native/crates/file-cmd/Cargo.toml
index 7f14225fd9..203113931a 100644
--- a/registry/native/crates/libs/file-cmd/Cargo.toml
+++ b/software/file/native/crates/file-cmd/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-file-cmd"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/file-cmd/src/lib.rs b/software/file/native/crates/file-cmd/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/file-cmd/src/lib.rs
rename to software/file/native/crates/file-cmd/src/lib.rs
diff --git a/registry/software/file/package.json b/software/file/package.json
similarity index 62%
rename from registry/software/file/package.json
rename to software/file/package.json
index 0ed0857785..ade98419b8 100644
--- a/registry/software/file/package.json
+++ b/software/file/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/duckdb/src/index.ts b/software/file/src/index.ts
similarity index 100%
rename from registry/software/duckdb/src/index.ts
rename to software/file/src/index.ts
diff --git a/software/file/test/manifest.test.ts b/software/file/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/file/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/file/tsconfig.json b/software/file/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/file/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/findutils/agentos-package.json b/software/findutils/agentos-package.json
similarity index 73%
rename from registry/software/findutils/agentos-package.json
rename to software/findutils/agentos-package.json
index b093937054..2415eb8b79 100644
--- a/registry/software/findutils/agentos-package.json
+++ b/software/findutils/agentos-package.json
@@ -7,6 +7,7 @@
"title": "findutils",
"description": "GNU find and xargs for file searching and batch execution.",
"priority": 15,
- "image": "/images/registry/findutils.svg"
+ "image": "/images/registry/findutils.svg",
+ "category": "core"
}
}
diff --git a/registry/software/findutils/bin/find b/software/findutils/bin/find
similarity index 100%
rename from registry/software/findutils/bin/find
rename to software/findutils/bin/find
diff --git a/registry/software/findutils/bin/xargs b/software/findutils/bin/xargs
similarity index 100%
rename from registry/software/findutils/bin/xargs
rename to software/findutils/bin/xargs
diff --git a/registry/native/crates/commands/find/Cargo.toml b/software/findutils/native/crates/cmd-find/Cargo.toml
similarity index 73%
rename from registry/native/crates/commands/find/Cargo.toml
rename to software/findutils/native/crates/cmd-find/Cargo.toml
index 1b670a6fcf..f394612385 100644
--- a/registry/native/crates/commands/find/Cargo.toml
+++ b/software/findutils/native/crates/cmd-find/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-find"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "find"
path = "src/main.rs"
[dependencies]
-secureexec-find = { path = "../../libs/find" }
+secureexec-find = { path = "../find" }
diff --git a/registry/native/crates/commands/find/src/main.rs b/software/findutils/native/crates/cmd-find/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/find/src/main.rs
rename to software/findutils/native/crates/cmd-find/src/main.rs
diff --git a/registry/native/crates/commands/xargs/Cargo.toml b/software/findutils/native/crates/cmd-xargs/Cargo.toml
similarity index 62%
rename from registry/native/crates/commands/xargs/Cargo.toml
rename to software/findutils/native/crates/cmd-xargs/Cargo.toml
index 71a8b8cd6f..e43b660a5b 100644
--- a/registry/native/crates/commands/xargs/Cargo.toml
+++ b/software/findutils/native/crates/cmd-xargs/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-xargs"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "xargs"
path = "src/main.rs"
[dependencies]
-shims = { package = "secureexec-shims", path = "../../libs/shims" }
+shims = { package = "secureexec-shims", path = "../../../../../toolchain/crates/libs/shims" }
diff --git a/registry/native/crates/commands/xargs/src/main.rs b/software/findutils/native/crates/cmd-xargs/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/xargs/src/main.rs
rename to software/findutils/native/crates/cmd-xargs/src/main.rs
diff --git a/registry/native/crates/libs/find/Cargo.toml b/software/findutils/native/crates/find/Cargo.toml
similarity index 84%
rename from registry/native/crates/libs/find/Cargo.toml
rename to software/findutils/native/crates/find/Cargo.toml
index 1790edb5e8..4c4cd79502 100644
--- a/registry/native/crates/libs/find/Cargo.toml
+++ b/software/findutils/native/crates/find/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-find"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/find/src/lib.rs b/software/findutils/native/crates/find/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/find/src/lib.rs
rename to software/findutils/native/crates/find/src/lib.rs
diff --git a/registry/software/findutils/package.json b/software/findutils/package.json
similarity index 62%
rename from registry/software/findutils/package.json
rename to software/findutils/package.json
index 25723a270a..41efbac4da 100644
--- a/registry/software/findutils/package.json
+++ b/software/findutils/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/fd/src/index.ts b/software/findutils/src/index.ts
similarity index 100%
rename from registry/software/fd/src/index.ts
rename to software/findutils/src/index.ts
diff --git a/software/findutils/test/findutils.test.ts b/software/findutils/test/findutils.test.ts
new file mode 100644
index 0000000000..52c6ce4ee2
--- /dev/null
+++ b/software/findutils/test/findutils.test.ts
@@ -0,0 +1,73 @@
+/**
+ * Package-owned integration tests for GNU findutils commands.
+ */
+
+import { afterEach, expect, it } from "vitest";
+import {
+ COMMANDS_DIR,
+ createInMemoryFileSystem,
+ createKernel,
+ createWasmVmRuntime,
+ describeIf,
+ hasWasmBinaries,
+ type Kernel,
+} from "@rivet-dev/agentos-test-harness";
+
+function parseLines(stdout: string): string[] {
+ return stdout
+ .split("\n")
+ .map((line) => line.trim())
+ .filter(Boolean)
+ .sort();
+}
+
+describeIf(hasWasmBinaries, "findutils commands", { timeout: 10_000 }, () => {
+ let kernel: Kernel;
+
+ afterEach(async () => {
+ await kernel?.dispose();
+ });
+
+ it("find matches files by name", async () => {
+ const vfs = createInMemoryFileSystem();
+ await vfs.mkdir("/project/src", { recursive: true });
+ await vfs.mkdir("/project/docs", { recursive: true });
+ await vfs.writeFile("/project/src/main.js", "console.log('main')\n");
+ await vfs.writeFile("/project/src/helper.ts", "export {}\n");
+ await vfs.writeFile("/project/docs/readme.md", "# Readme\n");
+
+ kernel = createKernel({ filesystem: vfs });
+ await kernel.mount(createWasmVmRuntime({ commandDirs: [COMMANDS_DIR] }));
+
+ const result = await kernel.exec("find /project -name '*.js'");
+ expect(parseLines(result.stdout)).toEqual(["/project/src/main.js"]);
+ });
+
+ it("find filters directories", async () => {
+ const vfs = createInMemoryFileSystem();
+ await vfs.mkdir("/project/src", { recursive: true });
+ await vfs.mkdir("/project/docs", { recursive: true });
+ await vfs.writeFile("/project/src/main.js", "console.log('main')\n");
+
+ kernel = createKernel({ filesystem: vfs });
+ await kernel.mount(createWasmVmRuntime({ commandDirs: [COMMANDS_DIR] }));
+
+ const result = await kernel.exec("find /project -type d");
+ expect(parseLines(result.stdout)).toEqual([
+ "/project",
+ "/project/docs",
+ "/project/src",
+ ]);
+ });
+
+ it("xargs passes stdin arguments to a command", async () => {
+ const vfs = createInMemoryFileSystem();
+ await vfs.writeFile("/args.txt", "alpha\nbeta\n");
+
+ kernel = createKernel({ filesystem: vfs });
+ await kernel.mount(createWasmVmRuntime({ commandDirs: [COMMANDS_DIR] }));
+
+ const result = await kernel.exec("xargs echo < /args.txt");
+ expect(result.stdout.trim()).toBe("alpha beta");
+ });
+});
diff --git a/software/findutils/tsconfig.json b/software/findutils/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/findutils/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/gawk/agentos-package.json b/software/gawk/agentos-package.json
similarity index 71%
rename from registry/software/gawk/agentos-package.json
rename to software/gawk/agentos-package.json
index 2efcf18704..5b103e0e2b 100644
--- a/registry/software/gawk/agentos-package.json
+++ b/software/gawk/agentos-package.json
@@ -6,6 +6,7 @@
"title": "gawk",
"description": "GNU awk text processing and data extraction.",
"priority": 20,
- "image": "/images/registry/gawk.svg"
+ "image": "/images/registry/gawk.svg",
+ "category": "core"
}
}
diff --git a/registry/software/gawk/bin/awk b/software/gawk/bin/awk
similarity index 100%
rename from registry/software/gawk/bin/awk
rename to software/gawk/bin/awk
diff --git a/registry/native/crates/libs/awk/Cargo.toml b/software/gawk/native/crates/awk/Cargo.toml
similarity index 84%
rename from registry/native/crates/libs/awk/Cargo.toml
rename to software/gawk/native/crates/awk/Cargo.toml
index 6de5ebc66f..c630320b93 100644
--- a/registry/native/crates/libs/awk/Cargo.toml
+++ b/software/gawk/native/crates/awk/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-awk"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/awk/src/lib.rs b/software/gawk/native/crates/awk/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/awk/src/lib.rs
rename to software/gawk/native/crates/awk/src/lib.rs
diff --git a/registry/native/crates/commands/awk/Cargo.toml b/software/gawk/native/crates/cmd-awk/Cargo.toml
similarity index 74%
rename from registry/native/crates/commands/awk/Cargo.toml
rename to software/gawk/native/crates/cmd-awk/Cargo.toml
index 31ccd2a2bd..af4cd03274 100644
--- a/registry/native/crates/commands/awk/Cargo.toml
+++ b/software/gawk/native/crates/cmd-awk/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-awk"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "awk"
path = "src/main.rs"
[dependencies]
-secureexec-awk = { path = "../../libs/awk" }
+secureexec-awk = { path = "../awk" }
diff --git a/registry/native/crates/commands/awk/src/main.rs b/software/gawk/native/crates/cmd-awk/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/awk/src/main.rs
rename to software/gawk/native/crates/cmd-awk/src/main.rs
diff --git a/registry/software/gawk/package.json b/software/gawk/package.json
similarity index 62%
rename from registry/software/gawk/package.json
rename to software/gawk/package.json
index 87da3b8e24..0762795752 100644
--- a/registry/software/gawk/package.json
+++ b/software/gawk/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/file/src/index.ts b/software/gawk/src/index.ts
similarity index 100%
rename from registry/software/file/src/index.ts
rename to software/gawk/src/index.ts
diff --git a/software/gawk/test/manifest.test.ts b/software/gawk/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/gawk/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/gawk/tsconfig.json b/software/gawk/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/gawk/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/git/agentos-package.json b/software/git/agentos-package.json
similarity index 76%
rename from registry/software/git/agentos-package.json
rename to software/git/agentos-package.json
index 0cfc6ad3dc..c58e5c4f32 100644
--- a/registry/software/git/agentos-package.json
+++ b/software/git/agentos-package.json
@@ -10,6 +10,7 @@
"title": "git",
"description": "Git version control (clone, commit, push, pull).",
"priority": 90,
- "image": "/images/registry/git.svg"
+ "image": "/images/registry/git.svg",
+ "category": "developer-tools"
}
}
diff --git a/registry/software/git/bin/git b/software/git/bin/git
similarity index 100%
rename from registry/software/git/bin/git
rename to software/git/bin/git
diff --git a/registry/software/git/bin/git-remote-http b/software/git/bin/git-remote-http
similarity index 100%
rename from registry/software/git/bin/git-remote-http
rename to software/git/bin/git-remote-http
diff --git a/registry/software/git/bin/git-remote-https b/software/git/bin/git-remote-https
similarity index 100%
rename from registry/software/git/bin/git-remote-https
rename to software/git/bin/git-remote-https
diff --git a/registry/native/crates/commands/git/Cargo.toml b/software/git/native/crates/cmd-git/Cargo.toml
similarity index 74%
rename from registry/native/crates/commands/git/Cargo.toml
rename to software/git/native/crates/cmd-git/Cargo.toml
index 3ae1427172..83f16f93c4 100644
--- a/registry/native/crates/commands/git/Cargo.toml
+++ b/software/git/native/crates/cmd-git/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-git"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "git"
path = "src/main.rs"
[dependencies]
-secureexec-git = { path = "../../libs/git" }
+secureexec-git = { path = "../git" }
diff --git a/registry/native/crates/commands/git/src/main.rs b/software/git/native/crates/cmd-git/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/git/src/main.rs
rename to software/git/native/crates/cmd-git/src/main.rs
diff --git a/registry/native/crates/libs/git/Cargo.toml b/software/git/native/crates/git/Cargo.toml
similarity index 64%
rename from registry/native/crates/libs/git/Cargo.toml
rename to software/git/native/crates/git/Cargo.toml
index 59d150be52..5185e88b15 100644
--- a/registry/native/crates/libs/git/Cargo.toml
+++ b/software/git/native/crates/git/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-git"
version.workspace = true
edition.workspace = true
@@ -12,4 +13,4 @@ path = "src/lib.rs"
[dependencies]
sha1 = "0.10.6"
flate2 = "1.1"
-wasi-http = { package = "secureexec-wasi-http", path = "../wasi-http" }
+wasi-http = { package = "secureexec-wasi-http", path = "../../../../../toolchain/crates/libs/wasi-http" }
diff --git a/registry/native/crates/libs/git/README.md b/software/git/native/crates/git/README.md
similarity index 100%
rename from registry/native/crates/libs/git/README.md
rename to software/git/native/crates/git/README.md
diff --git a/registry/native/crates/libs/git/src/lib.rs b/software/git/native/crates/git/src/lib.rs
similarity index 99%
rename from registry/native/crates/libs/git/src/lib.rs
rename to software/git/native/crates/git/src/lib.rs
index bd32b5520f..62a273b237 100644
--- a/registry/native/crates/libs/git/src/lib.rs
+++ b/software/git/native/crates/git/src/lib.rs
@@ -48,7 +48,7 @@ fn print_stdout_line(args: fmt::Arguments<'_>) -> io::Result<()> {
stdout.flush()
}
-const SUPPORT_DOC_PATH: &str = "registry/native/crates/libs/git/README.md";
+const SUPPORT_DOC_PATH: &str = "software/git/native/crates/git/README.md";
const MAX_GIT_OBJECT_BYTES: usize = 128 * 1024 * 1024;
const MAX_GIT_OBJECT_HEADER_BYTES: usize = 128;
const MAX_INDEX_ENTRIES: usize = 1_000_000;
diff --git a/registry/software/git/package.json b/software/git/package.json
similarity index 62%
rename from registry/software/git/package.json
rename to software/git/package.json
index 85e9c331af..e88cb7127f 100644
--- a/registry/software/git/package.json
+++ b/software/git/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/findutils/src/index.ts b/software/git/src/index.ts
similarity index 100%
rename from registry/software/findutils/src/index.ts
rename to software/git/src/index.ts
diff --git a/registry/tests/wasmvm/git.test.ts b/software/git/test/git.test.ts
similarity index 98%
rename from registry/tests/wasmvm/git.test.ts
rename to software/git/test/git.test.ts
index 93264c08ea..4ac767c1ad 100644
--- a/registry/tests/wasmvm/git.test.ts
+++ b/software/git/test/git.test.ts
@@ -11,7 +11,7 @@ import { resolve, join } from 'node:path';
import { tmpdir } from 'node:os';
import { createServer, type Server as HttpServer } from 'node:http';
import { spawn, spawnSync } from 'node:child_process';
-import { createWasmVmRuntime } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
import {
allowAll,
COMMANDS_DIR,
@@ -19,8 +19,8 @@ import {
createKernel,
describeIf,
hasWasmBinaries,
-} from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+} from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
vi.setConfig({ testTimeout: 30_000 });
@@ -76,8 +76,8 @@ async function run(kernel: Kernel, cmd: string): Promise<{ stdout: string; stder
return r;
}
-// TODO(P6): requires git WASM artifact, intentionally excluded from the fast registry-build gate.
-describe.skip('git command', () => {
+// TODO(P6): requires git WASM artifact, intentionally excluded from the fast software-build gate.
+describeIf(hasGit, 'git command', () => {
let kernel: Kernel;
let vfs: any;
let dispose: () => Promise;
@@ -366,7 +366,7 @@ describe.skip('git command', () => {
expect(result.exitCode).not.toBe(0);
expect(result.stderr).toContain('GitSubcommandUnsupported');
expect(result.stderr).toContain('git push');
- expect(result.stderr).toContain('registry/native/crates/libs/git/README.md');
+ expect(result.stderr).toContain('README.md');
});
it('clone rejects SSH-style remotes with a typed unsupported-subcommand error', async () => {
@@ -377,7 +377,7 @@ describe.skip('git command', () => {
expect(result.stderr).toContain('GitSubcommandUnsupported');
expect(result.stderr).toContain('git clone');
expect(result.stderr).toContain('SSH');
- expect(result.stderr).toContain('registry/native/crates/libs/git/README.md');
+ expect(result.stderr).toContain('README.md');
});
it('clone rejects authenticated HTTPS remotes loudly instead of attempting a broken auth flow', async () => {
@@ -391,7 +391,7 @@ describe.skip('git command', () => {
expect(result.stderr).toContain('GitSubcommandUnsupported');
expect(result.stderr).toContain('git clone');
expect(result.stderr).toContain('authenticated HTTP(S) remotes');
- expect(result.stderr).toContain('registry/native/crates/libs/git/README.md');
+ expect(result.stderr).toContain('README.md');
});
describeIf(hasHostGit, 'remote clone over smart HTTP', () => {
diff --git a/software/git/tsconfig.json b/software/git/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/git/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/grep/agentos-package.json b/software/grep/agentos-package.json
similarity index 77%
rename from registry/software/grep/agentos-package.json
rename to software/grep/agentos-package.json
index a67ea41cf1..e75bc0d243 100644
--- a/registry/software/grep/agentos-package.json
+++ b/software/grep/agentos-package.json
@@ -10,6 +10,7 @@
"title": "grep",
"description": "GNU grep pattern matching (grep, egrep, fgrep).",
"priority": 40,
- "image": "/images/registry/grep.svg"
+ "image": "/images/registry/grep.svg",
+ "category": "core"
}
}
diff --git a/registry/software/grep/bin/egrep b/software/grep/bin/egrep
similarity index 100%
rename from registry/software/grep/bin/egrep
rename to software/grep/bin/egrep
diff --git a/registry/software/grep/bin/fgrep b/software/grep/bin/fgrep
similarity index 100%
rename from registry/software/grep/bin/fgrep
rename to software/grep/bin/fgrep
diff --git a/registry/software/grep/bin/grep b/software/grep/bin/grep
similarity index 100%
rename from registry/software/grep/bin/grep
rename to software/grep/bin/grep
diff --git a/registry/native/crates/commands/grep/Cargo.toml b/software/grep/native/crates/cmd-grep/Cargo.toml
similarity index 66%
rename from registry/native/crates/commands/grep/Cargo.toml
rename to software/grep/native/crates/cmd-grep/Cargo.toml
index fc3189a8d5..3214711f24 100644
--- a/registry/native/crates/commands/grep/Cargo.toml
+++ b/software/grep/native/crates/cmd-grep/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-grep"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "grep"
path = "src/main.rs"
[dependencies]
-secureexec-grep = { path = "../../libs/grep" }
+secureexec-grep = { path = "../../../../../toolchain/crates/libs/grep" }
diff --git a/registry/native/crates/commands/grep/src/main.rs b/software/grep/native/crates/cmd-grep/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/grep/src/main.rs
rename to software/grep/native/crates/cmd-grep/src/main.rs
diff --git a/registry/software/grep/package.json b/software/grep/package.json
similarity index 63%
rename from registry/software/grep/package.json
rename to software/grep/package.json
index 095dad7b64..cbacb7eaf2 100644
--- a/registry/software/grep/package.json
+++ b/software/grep/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/gawk/src/index.ts b/software/grep/src/index.ts
similarity index 100%
rename from registry/software/gawk/src/index.ts
rename to software/grep/src/index.ts
diff --git a/software/grep/test/manifest.test.ts b/software/grep/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/grep/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/grep/tsconfig.json b/software/grep/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/grep/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/gzip/agentos-package.json b/software/gzip/agentos-package.json
similarity index 76%
rename from registry/software/gzip/agentos-package.json
rename to software/gzip/agentos-package.json
index 93b1776859..33ceeb2f6e 100644
--- a/registry/software/gzip/agentos-package.json
+++ b/software/gzip/agentos-package.json
@@ -10,6 +10,7 @@
"title": "gzip",
"description": "GNU gzip compression (gzip, gunzip, zcat).",
"priority": 8,
- "image": "/images/registry/gzip.svg"
+ "image": "/images/registry/gzip.svg",
+ "category": "core"
}
}
diff --git a/registry/software/gzip/bin/gunzip b/software/gzip/bin/gunzip
similarity index 100%
rename from registry/software/gzip/bin/gunzip
rename to software/gzip/bin/gunzip
diff --git a/registry/software/gzip/bin/gzip b/software/gzip/bin/gzip
similarity index 100%
rename from registry/software/gzip/bin/gzip
rename to software/gzip/bin/gzip
diff --git a/registry/software/gzip/bin/zcat b/software/gzip/bin/zcat
similarity index 100%
rename from registry/software/gzip/bin/zcat
rename to software/gzip/bin/zcat
diff --git a/registry/native/crates/commands/gzip/Cargo.toml b/software/gzip/native/crates/cmd-gzip/Cargo.toml
similarity index 73%
rename from registry/native/crates/commands/gzip/Cargo.toml
rename to software/gzip/native/crates/cmd-gzip/Cargo.toml
index c6f1842eb4..dafe689b6d 100644
--- a/registry/native/crates/commands/gzip/Cargo.toml
+++ b/software/gzip/native/crates/cmd-gzip/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-gzip"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "gzip"
path = "src/main.rs"
[dependencies]
-secureexec-gzip = { path = "../../libs/gzip" }
+secureexec-gzip = { path = "../gzip" }
diff --git a/registry/native/crates/commands/gzip/src/main.rs b/software/gzip/native/crates/cmd-gzip/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/gzip/src/main.rs
rename to software/gzip/native/crates/cmd-gzip/src/main.rs
diff --git a/registry/native/crates/libs/gzip/Cargo.toml b/software/gzip/native/crates/gzip/Cargo.toml
similarity index 88%
rename from registry/native/crates/libs/gzip/Cargo.toml
rename to software/gzip/native/crates/gzip/Cargo.toml
index eed27c5c29..897731b6d4 100644
--- a/registry/native/crates/libs/gzip/Cargo.toml
+++ b/software/gzip/native/crates/gzip/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-gzip"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/gzip/src/lib.rs b/software/gzip/native/crates/gzip/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/gzip/src/lib.rs
rename to software/gzip/native/crates/gzip/src/lib.rs
diff --git a/registry/software/gzip/package.json b/software/gzip/package.json
similarity index 62%
rename from registry/software/gzip/package.json
rename to software/gzip/package.json
index 088279e99a..f786e380ee 100644
--- a/registry/software/gzip/package.json
+++ b/software/gzip/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/git/src/index.ts b/software/gzip/src/index.ts
similarity index 100%
rename from registry/software/git/src/index.ts
rename to software/gzip/src/index.ts
diff --git a/software/gzip/test/manifest.test.ts b/software/gzip/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/gzip/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/gzip/tsconfig.json b/software/gzip/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/gzip/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/software/http-get/agentos-package.json b/software/http-get/agentos-package.json
new file mode 100644
index 0000000000..4f8fb816f9
--- /dev/null
+++ b/software/http-get/agentos-package.json
@@ -0,0 +1,10 @@
+{
+ "commands": [
+ "http_get"
+ ],
+ "registry": {
+ "title": "http-get",
+ "description": "Minimal HTTP GET fetch helper.",
+ "category": "networking"
+ }
+}
diff --git a/registry/software/http-get/bin/http_get b/software/http-get/bin/http_get
similarity index 100%
rename from registry/software/http-get/bin/http_get
rename to software/http-get/bin/http_get
diff --git a/registry/native/c/programs/http_get.c b/software/http-get/native/c/http_get.c
similarity index 100%
rename from registry/native/c/programs/http_get.c
rename to software/http-get/native/c/http_get.c
diff --git a/registry/software/http-get/package.json b/software/http-get/package.json
similarity index 62%
rename from registry/software/http-get/package.json
rename to software/http-get/package.json
index 38ed2ed4fc..6c700f96cb 100644
--- a/registry/software/http-get/package.json
+++ b/software/http-get/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/grep/src/index.ts b/software/http-get/src/index.ts
similarity index 100%
rename from registry/software/grep/src/index.ts
rename to software/http-get/src/index.ts
diff --git a/software/http-get/test/manifest.test.ts b/software/http-get/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/http-get/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/http-get/tsconfig.json b/software/http-get/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/http-get/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/jq/agentos-package.json b/software/jq/agentos-package.json
similarity index 68%
rename from registry/software/jq/agentos-package.json
rename to software/jq/agentos-package.json
index b5cc20dd01..43e0a6f3c8 100644
--- a/registry/software/jq/agentos-package.json
+++ b/software/jq/agentos-package.json
@@ -6,6 +6,7 @@
"title": "jq",
"description": "Lightweight JSON processor.",
"priority": 80,
- "image": "/images/registry/jq.svg"
+ "image": "/images/registry/jq.svg",
+ "category": "data"
}
}
diff --git a/registry/software/jq/bin/jq b/software/jq/bin/jq
similarity index 100%
rename from registry/software/jq/bin/jq
rename to software/jq/bin/jq
diff --git a/registry/native/crates/commands/jq/Cargo.toml b/software/jq/native/crates/cmd-jq/Cargo.toml
similarity index 74%
rename from registry/native/crates/commands/jq/Cargo.toml
rename to software/jq/native/crates/cmd-jq/Cargo.toml
index 31e46ae09f..bdc904ce10 100644
--- a/registry/native/crates/commands/jq/Cargo.toml
+++ b/software/jq/native/crates/cmd-jq/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-jq"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "jq"
path = "src/main.rs"
[dependencies]
-secureexec-jq = { path = "../../libs/jq" }
+secureexec-jq = { path = "../jq" }
diff --git a/registry/native/crates/commands/jq/src/main.rs b/software/jq/native/crates/cmd-jq/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/jq/src/main.rs
rename to software/jq/native/crates/cmd-jq/src/main.rs
diff --git a/registry/native/crates/libs/jq/Cargo.toml b/software/jq/native/crates/jq/Cargo.toml
similarity index 88%
rename from registry/native/crates/libs/jq/Cargo.toml
rename to software/jq/native/crates/jq/Cargo.toml
index a258274ae3..6a86e30e47 100644
--- a/registry/native/crates/libs/jq/Cargo.toml
+++ b/software/jq/native/crates/jq/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-jq"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/jq/src/lib.rs b/software/jq/native/crates/jq/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/jq/src/lib.rs
rename to software/jq/native/crates/jq/src/lib.rs
diff --git a/registry/software/jq/package.json b/software/jq/package.json
similarity index 61%
rename from registry/software/jq/package.json
rename to software/jq/package.json
index f4be15e4a0..d3a5e417bd 100644
--- a/registry/software/jq/package.json
+++ b/software/jq/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/gzip/src/index.ts b/software/jq/src/index.ts
similarity index 100%
rename from registry/software/gzip/src/index.ts
rename to software/jq/src/index.ts
diff --git a/software/jq/test/manifest.test.ts b/software/jq/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/jq/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/jq/tsconfig.json b/software/jq/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/jq/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/software/opencode/agentos-package.json b/software/opencode/agentos-package.json
new file mode 100644
index 0000000000..c32dead093
--- /dev/null
+++ b/software/opencode/agentos-package.json
@@ -0,0 +1,19 @@
+{
+ "name": "opencode",
+ "agent": {
+ "acpEntrypoint": "agentos-opencode-acp",
+ "env": {
+ "OPENCODE_DISABLE_CONFIG_DEP_INSTALL": "1",
+ "OPENCODE_DISABLE_EMBEDDED_WEB_UI": "1"
+ }
+ },
+ "registry": {
+ "title": "OpenCode",
+ "description": "Run OpenCode, an open-source coding agent, inside agentOS.",
+ "docsHref": "/docs/agents/opencode",
+ "image": "/images/registry/opencode.svg",
+ "priority": 70,
+ "category": "agents"
+ },
+ "kind": "agent"
+}
diff --git a/registry/agent/opencode/package.json b/software/opencode/package.json
similarity index 81%
rename from registry/agent/opencode/package.json
rename to software/opencode/package.json
index c3ab2d9c5c..f231189579 100644
--- a/registry/agent/opencode/package.json
+++ b/software/opencode/package.json
@@ -23,13 +23,16 @@
],
"scripts": {
"build": "node ./scripts/build-opencode-acp.mjs && tsc && rm -rf dist/package dist/package.tar && agentos-toolchain pack . --out dist/package --agent agentos-opencode-acp",
- "check-types": "tsc --noEmit"
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
"bun": "1.3.11",
- "typescript": "^5.7.2"
+ "typescript": "^5.7.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/agent/opencode/scripts/build-opencode-acp.mjs b/software/opencode/scripts/build-opencode-acp.mjs
similarity index 100%
rename from registry/agent/opencode/scripts/build-opencode-acp.mjs
rename to software/opencode/scripts/build-opencode-acp.mjs
diff --git a/registry/agent/opencode/src/adapter.ts b/software/opencode/src/adapter.ts
similarity index 100%
rename from registry/agent/opencode/src/adapter.ts
rename to software/opencode/src/adapter.ts
diff --git a/registry/software/http-get/src/index.ts b/software/opencode/src/index.ts
similarity index 100%
rename from registry/software/http-get/src/index.ts
rename to software/opencode/src/index.ts
diff --git a/registry/agent/opencode/src/opencode-acp.mjs.d.ts b/software/opencode/src/opencode-acp.mjs.d.ts
similarity index 100%
rename from registry/agent/opencode/src/opencode-acp.mjs.d.ts
rename to software/opencode/src/opencode-acp.mjs.d.ts
diff --git a/registry/agent/codex/tsconfig.json b/software/opencode/tsconfig.json
similarity index 78%
rename from registry/agent/codex/tsconfig.json
rename to software/opencode/tsconfig.json
index bff7313256..73a06ddbdb 100644
--- a/registry/agent/codex/tsconfig.json
+++ b/software/opencode/tsconfig.json
@@ -1,5 +1,5 @@
{
- "extends": "../../../tsconfig.base.json",
+ "extends": "../tsconfig.base.json",
"compilerOptions": {
"declaration": true,
"outDir": "./dist",
diff --git a/registry/agent/opencode/upstream/opencode-v1.3.13.patch b/software/opencode/upstream/opencode-v1.3.13.patch
similarity index 100%
rename from registry/agent/opencode/upstream/opencode-v1.3.13.patch
rename to software/opencode/upstream/opencode-v1.3.13.patch
diff --git a/registry/agent/pi-cli/agentos-package.json b/software/pi-cli/agentos-package.json
similarity index 83%
rename from registry/agent/pi-cli/agentos-package.json
rename to software/pi-cli/agentos-package.json
index fdd6c08d5f..9d25dd6f54 100644
--- a/registry/agent/pi-cli/agentos-package.json
+++ b/software/pi-cli/agentos-package.json
@@ -5,5 +5,6 @@
"env": {
"PI_ACP_PI_COMMAND": "pi"
}
- }
+ },
+ "kind": "agent"
}
diff --git a/registry/agent/pi-cli/package.json b/software/pi-cli/package.json
similarity index 83%
rename from registry/agent/pi-cli/package.json
rename to software/pi-cli/package.json
index 080878fbdc..26fee94418 100644
--- a/registry/agent/pi-cli/package.json
+++ b/software/pi-cli/package.json
@@ -24,7 +24,8 @@
],
"scripts": {
"build": "tsc && rm -rf dist/package dist/package.tar && agentos-toolchain pack . --out dist/package --agent pi-acp --prune-native",
- "check-types": "tsc --noEmit"
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"dependencies": {
"@mariozechner/pi-coding-agent": "^0.60.0",
@@ -34,6 +35,8 @@
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.7.2"
+ "typescript": "^5.7.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/jq/src/index.ts b/software/pi-cli/src/index.ts
similarity index 100%
rename from registry/software/jq/src/index.ts
rename to software/pi-cli/src/index.ts
diff --git a/registry/agent/opencode/tsconfig.json b/software/pi-cli/tsconfig.json
similarity index 78%
rename from registry/agent/opencode/tsconfig.json
rename to software/pi-cli/tsconfig.json
index bff7313256..73a06ddbdb 100644
--- a/registry/agent/opencode/tsconfig.json
+++ b/software/pi-cli/tsconfig.json
@@ -1,5 +1,5 @@
{
- "extends": "../../../tsconfig.base.json",
+ "extends": "../tsconfig.base.json",
"compilerOptions": {
"declaration": true,
"outDir": "./dist",
diff --git a/registry/agent/pi/adapter-browser-entry.mjs b/software/pi/adapter-browser-entry.mjs
similarity index 100%
rename from registry/agent/pi/adapter-browser-entry.mjs
rename to software/pi/adapter-browser-entry.mjs
diff --git a/software/pi/agentos-package.json b/software/pi/agentos-package.json
new file mode 100644
index 0000000000..07ebc84234
--- /dev/null
+++ b/software/pi/agentos-package.json
@@ -0,0 +1,15 @@
+{
+ "name": "pi",
+ "agent": {
+ "acpEntrypoint": "pi-sdk-acp",
+ "snapshot": true
+ },
+ "registry": {
+ "title": "PI",
+ "description": "Run the PI coding agent with lightweight, fast execution.",
+ "image": "/images/registry/pi.svg",
+ "priority": 100,
+ "category": "agents"
+ },
+ "kind": "agent"
+}
diff --git a/registry/agent/pi/package.json b/software/pi/package.json
similarity index 92%
rename from registry/agent/pi/package.json
rename to software/pi/package.json
index 40d41edbb5..0a5b41aa6b 100644
--- a/registry/agent/pi/package.json
+++ b/software/pi/package.json
@@ -37,6 +37,8 @@
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.7.2"
+ "esbuild": "^0.27.4",
+ "typescript": "^5.7.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*"
}
}
diff --git a/registry/agent/pi/scripts/build-snapshot-bundle.mjs b/software/pi/scripts/build-snapshot-bundle.mjs
similarity index 100%
rename from registry/agent/pi/scripts/build-snapshot-bundle.mjs
rename to software/pi/scripts/build-snapshot-bundle.mjs
diff --git a/registry/agent/pi/scripts/copy-snapshot-into-package.mjs b/software/pi/scripts/copy-snapshot-into-package.mjs
similarity index 100%
rename from registry/agent/pi/scripts/copy-snapshot-into-package.mjs
rename to software/pi/scripts/copy-snapshot-into-package.mjs
diff --git a/registry/agent/pi/src/adapter.ts b/software/pi/src/adapter.ts
similarity index 100%
rename from registry/agent/pi/src/adapter.ts
rename to software/pi/src/adapter.ts
diff --git a/registry/software/ripgrep/src/index.ts b/software/pi/src/index.ts
similarity index 100%
rename from registry/software/ripgrep/src/index.ts
rename to software/pi/src/index.ts
diff --git a/registry/agent/pi/src/snapshot-entry.ts b/software/pi/src/snapshot-entry.ts
similarity index 100%
rename from registry/agent/pi/src/snapshot-entry.ts
rename to software/pi/src/snapshot-entry.ts
diff --git a/registry/agent/pi/tests/adapter.test.mjs b/software/pi/tests/adapter.test.mjs
similarity index 100%
rename from registry/agent/pi/tests/adapter.test.mjs
rename to software/pi/tests/adapter.test.mjs
diff --git a/registry/agent/pi/tsconfig.json b/software/pi/tsconfig.json
similarity index 81%
rename from registry/agent/pi/tsconfig.json
rename to software/pi/tsconfig.json
index e15131c84e..3ecc60a8e9 100644
--- a/registry/agent/pi/tsconfig.json
+++ b/software/pi/tsconfig.json
@@ -1,5 +1,5 @@
{
- "extends": "../../../tsconfig.base.json",
+ "extends": "../tsconfig.base.json",
"compilerOptions": {
"declaration": true,
"outDir": "./dist",
diff --git a/registry/software/ripgrep/agentos-package.json b/software/ripgrep/agentos-package.json
similarity index 70%
rename from registry/software/ripgrep/agentos-package.json
rename to software/ripgrep/agentos-package.json
index f0ba60fdda..dbc08da455 100644
--- a/registry/software/ripgrep/agentos-package.json
+++ b/software/ripgrep/agentos-package.json
@@ -5,6 +5,7 @@
"registry": {
"title": "ripgrep",
"description": "Fast recursive search (rg).",
- "priority": 85
+ "priority": 85,
+ "category": "developer-tools"
}
}
diff --git a/registry/software/ripgrep/bin/rg b/software/ripgrep/bin/rg
similarity index 100%
rename from registry/software/ripgrep/bin/rg
rename to software/ripgrep/bin/rg
diff --git a/registry/native/crates/commands/rg/Cargo.toml b/software/ripgrep/native/crates/cmd-rg/Cargo.toml
similarity index 66%
rename from registry/native/crates/commands/rg/Cargo.toml
rename to software/ripgrep/native/crates/cmd-rg/Cargo.toml
index cd1ff4690e..f702453e13 100644
--- a/registry/native/crates/commands/rg/Cargo.toml
+++ b/software/ripgrep/native/crates/cmd-rg/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-rg"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "rg"
path = "src/main.rs"
[dependencies]
-secureexec-grep = { path = "../../libs/grep" }
+secureexec-grep = { path = "../../../../../toolchain/crates/libs/grep" }
diff --git a/registry/native/crates/commands/rg/src/main.rs b/software/ripgrep/native/crates/cmd-rg/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/rg/src/main.rs
rename to software/ripgrep/native/crates/cmd-rg/src/main.rs
diff --git a/registry/software/ripgrep/package.json b/software/ripgrep/package.json
similarity index 62%
rename from registry/software/ripgrep/package.json
rename to software/ripgrep/package.json
index 5542da9f8e..c5a65aa786 100644
--- a/registry/software/ripgrep/package.json
+++ b/software/ripgrep/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/sed/src/index.ts b/software/ripgrep/src/index.ts
similarity index 100%
rename from registry/software/sed/src/index.ts
rename to software/ripgrep/src/index.ts
diff --git a/software/ripgrep/test/manifest.test.ts b/software/ripgrep/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/ripgrep/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/ripgrep/tsconfig.json b/software/ripgrep/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/ripgrep/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/sed/agentos-package.json b/software/sed/agentos-package.json
similarity index 71%
rename from registry/software/sed/agentos-package.json
rename to software/sed/agentos-package.json
index 4bc0fe5a76..7f66a6f0ed 100644
--- a/registry/software/sed/agentos-package.json
+++ b/software/sed/agentos-package.json
@@ -6,6 +6,7 @@
"title": "sed",
"description": "GNU stream editor for text transformation.",
"priority": 35,
- "image": "/images/registry/sed.svg"
+ "image": "/images/registry/sed.svg",
+ "category": "core"
}
}
diff --git a/registry/software/sed/bin/sed b/software/sed/bin/sed
similarity index 100%
rename from registry/software/sed/bin/sed
rename to software/sed/bin/sed
diff --git a/registry/native/crates/commands/sed/Cargo.toml b/software/sed/native/crates/cmd-sed/Cargo.toml
similarity index 85%
rename from registry/native/crates/commands/sed/Cargo.toml
rename to software/sed/native/crates/cmd-sed/Cargo.toml
index 9e006c3ba3..990de688db 100644
--- a/registry/native/crates/commands/sed/Cargo.toml
+++ b/software/sed/native/crates/cmd-sed/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-sed"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/commands/sed/src/main.rs b/software/sed/native/crates/cmd-sed/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/sed/src/main.rs
rename to software/sed/native/crates/cmd-sed/src/main.rs
diff --git a/registry/software/sed/package.json b/software/sed/package.json
similarity index 62%
rename from registry/software/sed/package.json
rename to software/sed/package.json
index a5f127ea0d..17c95dddc0 100644
--- a/registry/software/sed/package.json
+++ b/software/sed/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/sqlite3/src/index.ts b/software/sed/src/index.ts
similarity index 100%
rename from registry/software/sqlite3/src/index.ts
rename to software/sed/src/index.ts
diff --git a/software/sed/test/manifest.test.ts b/software/sed/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/sed/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/sed/tsconfig.json b/software/sed/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/sed/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/sqlite3/agentos-package.json b/software/sqlite3/agentos-package.json
similarity index 70%
rename from registry/software/sqlite3/agentos-package.json
rename to software/sqlite3/agentos-package.json
index 6d140af495..8722328cdf 100644
--- a/registry/software/sqlite3/agentos-package.json
+++ b/software/sqlite3/agentos-package.json
@@ -6,6 +6,7 @@
"title": "SQLite3",
"description": "SQLite database command-line interface.",
"priority": 75,
- "image": "/images/registry/sqlite3.svg"
+ "image": "/images/registry/sqlite3.svg",
+ "category": "data"
}
}
diff --git a/registry/software/sqlite3/bin/sqlite3 b/software/sqlite3/bin/sqlite3
similarity index 100%
rename from registry/software/sqlite3/bin/sqlite3
rename to software/sqlite3/bin/sqlite3
diff --git a/registry/native/c/programs/sqlite3_cli.c b/software/sqlite3/native/c/sqlite3_cli.c
similarity index 100%
rename from registry/native/c/programs/sqlite3_cli.c
rename to software/sqlite3/native/c/sqlite3_cli.c
diff --git a/registry/software/sqlite3/package.json b/software/sqlite3/package.json
similarity index 61%
rename from registry/software/sqlite3/package.json
rename to software/sqlite3/package.json
index 26841719db..5efcf9db17 100644
--- a/registry/software/sqlite3/package.json
+++ b/software/sqlite3/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/tar/src/index.ts b/software/sqlite3/src/index.ts
similarity index 100%
rename from registry/software/tar/src/index.ts
rename to software/sqlite3/src/index.ts
diff --git a/registry/tests/wasmvm/sqlite3.test.ts b/software/sqlite3/test/sqlite3.test.ts
similarity index 80%
rename from registry/tests/wasmvm/sqlite3.test.ts
rename to software/sqlite3/test/sqlite3.test.ts
index 2457ce3e1a..f7ff51e015 100644
--- a/registry/tests/wasmvm/sqlite3.test.ts
+++ b/software/sqlite3/test/sqlite3.test.ts
@@ -15,15 +15,23 @@
*/
import { describe, it, expect, afterEach } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
+import { existsSync } from 'node:fs';
+import { resolve } from 'node:path';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
import {
C_BUILD_DIR,
COMMANDS_DIR,
createKernel,
describeIf,
- hasCWasmBinaries,
-} from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+} from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
+
+const SQLITE3_COMMAND_DIRS = [C_BUILD_DIR, COMMANDS_DIR].filter((dir) =>
+ existsSync(dir)
+);
+const hasSqlite3Binary = SQLITE3_COMMAND_DIRS.some((dir) =>
+ existsSync(resolve(dir, 'sqlite3'))
+);
// Minimal in-memory VFS for kernel tests
class SimpleVFS {
@@ -112,9 +120,17 @@ class SimpleVFS {
buffer.set(data.subarray(position, position + available), offset);
return available;
}
+ async pwrite(path: string, offset: number, data: Uint8Array): Promise {
+ const current = this.files.get(path);
+ if (!current) throw new Error(`ENOENT: ${path}`);
+ const next = new Uint8Array(Math.max(current.length, offset + data.length));
+ next.set(current);
+ next.set(data, offset);
+ this.files.set(path, next);
+ }
}
-describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
+describeIf(hasSqlite3Binary, 'sqlite3 command', () => {
let kernel: Kernel;
afterEach(async () => {
@@ -124,7 +140,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('executes SQL from stdin pipe on in-memory database', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
const result = await kernel.exec('sqlite3 :memory:', {
stdin: 'SELECT 1+1 AS result;\n',
@@ -135,7 +151,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('executes multi-statement SQL as command argument', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
// Multi-statement SQL passed as command argument (more reliable than stdin in WASM)
const sql = 'CREATE TABLE t(x INTEGER); INSERT INTO t VALUES(10); INSERT INTO t VALUES(20); INSERT INTO t VALUES(30); SELECT * FROM t ORDER BY x;';
@@ -146,7 +162,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('supports .tables meta-command via SQL setup', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
// Create tables via SQL argument, then query sqlite_master
const sql = "CREATE TABLE alpha(x); CREATE TABLE beta(y); SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1;";
@@ -158,7 +174,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('supports .schema via sqlite_master query', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
const sql = "CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT NOT NULL); SELECT sql FROM sqlite_master WHERE name='users';";
const result = await kernel.exec(`sqlite3 :memory: "${sql}"`);
@@ -168,7 +184,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('supports .dump style output via SQL', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
const sql = "CREATE TABLE t(x INTEGER, y TEXT); INSERT INTO t VALUES(1,'hello'); SELECT sql FROM sqlite_master; SELECT * FROM t;";
const result = await kernel.exec(`sqlite3 :memory: "${sql}"`);
@@ -180,7 +196,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('handles SELECT with multiple columns', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
const result = await kernel.exec('sqlite3 :memory:', {
stdin: "SELECT 'hello' AS greeting, 42 AS number, 3.14 AS pi;\n",
@@ -191,7 +207,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('handles NULL values in output', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
const result = await kernel.exec('sqlite3 :memory:', {
stdin: 'SELECT NULL;\n',
@@ -203,7 +219,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('reports SQL errors on stderr', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
const result = await kernel.exec(`sqlite3 :memory: "SELECT * FROM nonexistent_table;"`);
expect(result.stderr).toContain('no such table');
@@ -212,7 +228,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('defaults to :memory: when no database specified', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
const result = await kernel.exec('sqlite3', {
stdin: 'SELECT 99;\n',
@@ -223,7 +239,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('CREATE TABLE, INSERT, SELECT roundtrip via piped SQL', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
// Multi-statement SQL via command arg (stdin multi-statement has fgetc buffering issues in WASM)
const sql = "CREATE TABLE items(id INTEGER PRIMARY KEY, name TEXT); INSERT INTO items VALUES(1,'apple'); INSERT INTO items VALUES(2,'banana'); SELECT id, name FROM items ORDER BY id;";
@@ -234,7 +250,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('.tables meta-command lists created tables', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
// Multi-statement stdin has fgetc buffering limitations in WASM,
// use SQL command arg to verify table listing behavior
@@ -247,7 +263,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('.schema meta-command shows CREATE TABLE statements', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
// Query schema via sqlite_master (equivalent to .schema output)
const sql = "CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT NOT NULL); SELECT sql FROM sqlite_master WHERE name='users';";
@@ -259,7 +275,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('.dump meta-command outputs INSERT statements for data', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
// Verify dump-equivalent output: schema + data via SQL queries
const sql = "CREATE TABLE t(x INTEGER, y TEXT); INSERT INTO t VALUES(1,'hello'); INSERT INTO t VALUES(2,'world'); SELECT sql FROM sqlite_master WHERE name='t'; SELECT '---'; SELECT x||','||y FROM t ORDER BY x;";
@@ -276,43 +292,26 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
const vfs = new SimpleVFS();
await vfs.mkdir('/tmp', { recursive: true });
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
- // Use shell pipe to create table and insert data, then query back
- // Note: file-based DB uses WASI VFS (open/write/fstat/ftruncate) which
- // requires full POSIX file I/O support through the kernel
+ // File-backed SQLite must persist through the kernel VFS across exec calls.
const createSql = "CREATE TABLE t(x INTEGER); INSERT INTO t VALUES(42); INSERT INTO t VALUES(99);";
const createResult = await kernel.exec(`sqlite3 /tmp/test.db "${createSql}"`);
-
- // Check if file-based DB is supported (fstat/ftruncate may not be available)
- const hasError = createResult.stderr.includes('disk I/O error') ||
- createResult.stderr.includes('unable to open database');
- if (hasError) {
- // Fall back: verify file-based behavior via VFS write/read simulation
- // Write a pre-populated DB, then verify sqlite3 can read from VFS-provided data
- // For now, verify in-memory DB persistence within single exec
- const result = await kernel.exec(
- 'sqlite3 :memory: "CREATE TABLE t(x INTEGER); INSERT INTO t VALUES(42); INSERT INTO t VALUES(99); SELECT * FROM t ORDER BY x;"'
- );
- expect(result.stdout.trim()).toBe('42\n99');
- return;
- }
+ expect(createResult.stderr).toBe('');
// Verify file was created in VFS
const dbData = await vfs.readFile('/tmp/test.db');
expect(dbData.length).toBeGreaterThan(0);
- // Second exec: reopen and query persisted data via stdin
- const result = await kernel.exec('sqlite3 /tmp/test.db', {
- stdin: 'SELECT * FROM t ORDER BY x;\n',
- });
+ // Second exec: reopen and query persisted data.
+ const result = await kernel.exec('sqlite3 /tmp/test.db "SELECT * FROM t ORDER BY x;"');
expect(result.stdout.trim()).toBe('42\n99');
});
it('multi-statement input separated by semicolons', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
// Multi-statement SQL via command arg (semicolons separate statements)
const sql = "CREATE TABLE nums(v); INSERT INTO nums VALUES(10); INSERT INTO nums VALUES(20); SELECT v FROM nums ORDER BY v;";
@@ -323,7 +322,7 @@ describeIf(hasCWasmBinaries('sqlite3'), 'sqlite3 command', () => {
it('SQL syntax error produces error on stderr with non-zero exit', async () => {
const vfs = new SimpleVFS();
kernel = createKernel({ filesystem: vfs as any });
- await kernel.mount(createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }));
+ await kernel.mount(createWasmVmRuntime({ commandDirs: SQLITE3_COMMAND_DIRS }));
// Syntax error via command arg (reliable error output)
const result = await kernel.exec('sqlite3 :memory: "SELEC INVALID SYNTAX;"');
diff --git a/software/sqlite3/tsconfig.json b/software/sqlite3/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/sqlite3/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/tar/agentos-package.json b/software/tar/agentos-package.json
similarity index 67%
rename from registry/software/tar/agentos-package.json
rename to software/tar/agentos-package.json
index ab25a8bbea..94501679ac 100644
--- a/registry/software/tar/agentos-package.json
+++ b/software/tar/agentos-package.json
@@ -6,6 +6,7 @@
"title": "tar",
"description": "GNU tar archiver.",
"priority": 60,
- "image": "/images/registry/tar.svg"
+ "image": "/images/registry/tar.svg",
+ "category": "core"
}
}
diff --git a/registry/software/tar/bin/tar b/software/tar/bin/tar
similarity index 100%
rename from registry/software/tar/bin/tar
rename to software/tar/bin/tar
diff --git a/registry/native/crates/commands/tar/Cargo.toml b/software/tar/native/crates/cmd-tar/Cargo.toml
similarity index 74%
rename from registry/native/crates/commands/tar/Cargo.toml
rename to software/tar/native/crates/cmd-tar/Cargo.toml
index d711b70205..a5ca3d0b4b 100644
--- a/registry/native/crates/commands/tar/Cargo.toml
+++ b/software/tar/native/crates/cmd-tar/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-tar"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "tar"
path = "src/main.rs"
[dependencies]
-secureexec-tar = { path = "../../libs/tar" }
+secureexec-tar = { path = "../tar" }
diff --git a/registry/native/crates/commands/tar/src/main.rs b/software/tar/native/crates/cmd-tar/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/tar/src/main.rs
rename to software/tar/native/crates/cmd-tar/src/main.rs
diff --git a/registry/native/crates/libs/tar/Cargo.toml b/software/tar/native/crates/tar/Cargo.toml
similarity index 88%
rename from registry/native/crates/libs/tar/Cargo.toml
rename to software/tar/native/crates/tar/Cargo.toml
index 6e42ed60f2..f10f711e29 100644
--- a/registry/native/crates/libs/tar/Cargo.toml
+++ b/software/tar/native/crates/tar/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-tar"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/tar/src/lib.rs b/software/tar/native/crates/tar/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/tar/src/lib.rs
rename to software/tar/native/crates/tar/src/lib.rs
diff --git a/registry/software/tar/package.json b/software/tar/package.json
similarity index 61%
rename from registry/software/tar/package.json
rename to software/tar/package.json
index 957a20ed65..a98797c0a6 100644
--- a/registry/software/tar/package.json
+++ b/software/tar/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/tree/src/index.ts b/software/tar/src/index.ts
similarity index 100%
rename from registry/software/tree/src/index.ts
rename to software/tar/src/index.ts
diff --git a/software/tar/test/manifest.test.ts b/software/tar/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/tar/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/tar/tsconfig.json b/software/tar/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/tar/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/tree/agentos-package.json b/software/tree/agentos-package.json
similarity index 76%
rename from registry/software/tree/agentos-package.json
rename to software/tree/agentos-package.json
index f6d6e4e996..9a3df6fcee 100644
--- a/registry/software/tree/agentos-package.json
+++ b/software/tree/agentos-package.json
@@ -5,6 +5,7 @@
"registry": {
"title": "tree",
"description": "Display directory structure as a tree.",
- "priority": 25
+ "priority": 25,
+ "category": "core"
}
}
diff --git a/registry/software/tree/bin/tree b/software/tree/bin/tree
similarity index 100%
rename from registry/software/tree/bin/tree
rename to software/tree/bin/tree
diff --git a/registry/native/crates/commands/tree/Cargo.toml b/software/tree/native/crates/cmd-tree/Cargo.toml
similarity index 73%
rename from registry/native/crates/commands/tree/Cargo.toml
rename to software/tree/native/crates/cmd-tree/Cargo.toml
index 73e0df78d5..e85593575d 100644
--- a/registry/native/crates/commands/tree/Cargo.toml
+++ b/software/tree/native/crates/cmd-tree/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-tree"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "tree"
path = "src/main.rs"
[dependencies]
-secureexec-tree = { path = "../../libs/tree" }
+secureexec-tree = { path = "../tree" }
diff --git a/registry/native/crates/commands/tree/src/main.rs b/software/tree/native/crates/cmd-tree/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/tree/src/main.rs
rename to software/tree/native/crates/cmd-tree/src/main.rs
diff --git a/registry/native/crates/libs/tree/Cargo.toml b/software/tree/native/crates/tree/Cargo.toml
similarity index 83%
rename from registry/native/crates/libs/tree/Cargo.toml
rename to software/tree/native/crates/tree/Cargo.toml
index adac0490e9..e316d0fda4 100644
--- a/registry/native/crates/libs/tree/Cargo.toml
+++ b/software/tree/native/crates/tree/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-tree"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/tree/src/lib.rs b/software/tree/native/crates/tree/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/tree/src/lib.rs
rename to software/tree/native/crates/tree/src/lib.rs
diff --git a/registry/software/tree/package.json b/software/tree/package.json
similarity index 62%
rename from registry/software/tree/package.json
rename to software/tree/package.json
index cca158354b..69c9bb2262 100644
--- a/registry/software/tree/package.json
+++ b/software/tree/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/unzip/src/index.ts b/software/tree/src/index.ts
similarity index 100%
rename from registry/software/unzip/src/index.ts
rename to software/tree/src/index.ts
diff --git a/registry/tests/kernel/tree-test.test.ts b/software/tree/test/tree-test.test.ts
similarity index 97%
rename from registry/tests/kernel/tree-test.test.ts
rename to software/tree/test/tree-test.test.ts
index 850b5e371a..e8324d9b18 100644
--- a/registry/tests/kernel/tree-test.test.ts
+++ b/software/tree/test/tree-test.test.ts
@@ -10,8 +10,8 @@ import {
describeIf,
createIntegrationKernel,
skipUnlessWasmBuilt,
-} from './helpers.ts';
-import type { IntegrationKernelResult } from './helpers.ts';
+} from '@rivet-dev/agentos-test-harness';
+import type { IntegrationKernelResult } from '@rivet-dev/agentos-test-harness';
const wasmSkip = skipUnlessWasmBuilt();
const TREE_COMMAND_TIMEOUT_MS = 20_000;
diff --git a/software/tree/tsconfig.json b/software/tree/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/tree/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/tsconfig.base.json b/software/tsconfig.base.json
similarity index 100%
rename from registry/tsconfig.base.json
rename to software/tsconfig.base.json
diff --git a/registry/software/unzip/agentos-package.json b/software/unzip/agentos-package.json
similarity index 74%
rename from registry/software/unzip/agentos-package.json
rename to software/unzip/agentos-package.json
index 8f395875f0..2260eedf19 100644
--- a/registry/software/unzip/agentos-package.json
+++ b/software/unzip/agentos-package.json
@@ -5,6 +5,7 @@
"registry": {
"title": "unzip",
"description": "Extract zip archives.",
- "priority": 10
+ "priority": 10,
+ "category": "core"
}
}
diff --git a/registry/software/unzip/bin/unzip b/software/unzip/bin/unzip
similarity index 100%
rename from registry/software/unzip/bin/unzip
rename to software/unzip/bin/unzip
diff --git a/registry/native/c/programs/unzip.c b/software/unzip/native/c/unzip.c
similarity index 100%
rename from registry/native/c/programs/unzip.c
rename to software/unzip/native/c/unzip.c
diff --git a/registry/software/unzip/package.json b/software/unzip/package.json
similarity index 62%
rename from registry/software/unzip/package.json
rename to software/unzip/package.json
index 3c400a4cb2..18c8102c80 100644
--- a/registry/software/unzip/package.json
+++ b/software/unzip/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/vim/src/index.ts b/software/unzip/src/index.ts
similarity index 100%
rename from registry/software/vim/src/index.ts
rename to software/unzip/src/index.ts
diff --git a/software/unzip/test/unzip.test.ts b/software/unzip/test/unzip.test.ts
new file mode 100644
index 0000000000..2f01671888
--- /dev/null
+++ b/software/unzip/test/unzip.test.ts
@@ -0,0 +1,219 @@
+/**
+ * Package-owned integration tests for the unzip command.
+ */
+
+import { afterEach, expect, it } from "vitest";
+import {
+ C_BUILD_DIR,
+ COMMANDS_DIR,
+ createInMemoryFileSystem,
+ createKernel,
+ createWasmVmRuntime,
+ describeIf,
+ hasCWasmBinaries,
+ type Kernel,
+} from "@rivet-dev/agentos-test-harness";
+
+interface HostileEntry {
+ name: string;
+ method: number;
+ compressedSize: number;
+ uncompressedSize: number;
+ localOffset: number;
+}
+
+/** Builds a ZIP whose EOCD cd-size field is corrupt so unzip's raw central-directory fallback parser is exercised. */
+function buildFallbackArchive(
+ prefix: Uint8Array,
+ entries: HostileEntry[],
+): Uint8Array {
+ const enc = new TextEncoder();
+ const cdParts: Uint8Array[] = [];
+ for (const entry of entries) {
+ const nameBytes = enc.encode(entry.name);
+ const cd = new Uint8Array(46 + nameBytes.length);
+ const dv = new DataView(cd.buffer);
+ dv.setUint32(0, 0x02014b50, true);
+ dv.setUint16(4, 20, true);
+ dv.setUint16(6, 20, true);
+ dv.setUint16(10, entry.method, true);
+ dv.setUint32(20, entry.compressedSize, true);
+ dv.setUint32(24, entry.uncompressedSize, true);
+ dv.setUint16(28, nameBytes.length, true);
+ dv.setUint32(42, entry.localOffset, true);
+ cd.set(nameBytes, 46);
+ cdParts.push(cd);
+ }
+ const cdOffset = prefix.length;
+ const cdLen = cdParts.reduce((n, part) => n + part.length, 0);
+ const eocd = new Uint8Array(22);
+ const dv = new DataView(eocd.buffer);
+ dv.setUint32(0, 0x06054b50, true);
+ dv.setUint16(8, entries.length, true);
+ dv.setUint16(10, entries.length, true);
+ dv.setUint32(12, 0xffffffff, true);
+ dv.setUint32(16, cdOffset, true);
+ const out = new Uint8Array(prefix.length + cdLen + 22);
+ out.set(prefix, 0);
+ let offset = cdOffset;
+ for (const part of cdParts) {
+ out.set(part, offset);
+ offset += part.length;
+ }
+ out.set(eocd, offset);
+ return out;
+}
+
+describeIf(
+ hasCWasmBinaries("zip", "unzip"),
+ "unzip command",
+ { timeout: 10_000 },
+ () => {
+ let kernel: Kernel;
+
+ afterEach(async () => {
+ await kernel?.dispose();
+ });
+
+ it("extracts a zip archive into a target directory", async () => {
+ const vfs = createInMemoryFileSystem();
+ await vfs.writeFile("/hello.txt", "Hello, World!\n");
+
+ kernel = createKernel({ filesystem: vfs });
+ await kernel.mount(
+ createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
+ );
+
+ const zipResult = await kernel.exec("zip /archive.zip /hello.txt");
+ expect(zipResult.exitCode, zipResult.stderr).toBe(0);
+
+ const unzipResult = await kernel.exec("unzip -d /extracted /archive.zip");
+ expect(unzipResult.exitCode, unzipResult.stderr).toBe(0);
+ expect(await vfs.readTextFile("/extracted/hello.txt")).toBe(
+ "Hello, World!\n",
+ );
+ });
+
+ it("lists archive contents with sizes", async () => {
+ const vfs = createInMemoryFileSystem();
+ await vfs.writeFile("/data.txt", "some data content\n");
+
+ kernel = createKernel({ filesystem: vfs });
+ await kernel.mount(
+ createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
+ );
+
+ const zipResult = await kernel.exec("zip /list-test.zip /data.txt");
+ expect(zipResult.exitCode, zipResult.stderr).toBe(0);
+
+ const listResult = await kernel.exec("unzip -l /list-test.zip");
+ expect(listResult.exitCode, listResult.stderr).toBe(0);
+ expect(listResult.stdout).toContain("data.txt");
+ expect(listResult.stdout).toContain("18");
+ expect(listResult.stdout).toMatch(/1 file/);
+ });
+
+ it("extracts binary file contents exactly", async () => {
+ const vfs = createInMemoryFileSystem();
+ const content = new Uint8Array(256);
+ for (let i = 0; i < 256; i++) content[i] = i;
+ await vfs.writeFile("/binary.bin", content);
+
+ kernel = createKernel({ filesystem: vfs });
+ await kernel.mount(
+ createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
+ );
+
+ const zipResult = await kernel.exec("zip /roundtrip.zip /binary.bin");
+ expect(zipResult.exitCode, zipResult.stderr).toBe(0);
+
+ const unzipResult = await kernel.exec("unzip -d /rt-out /roundtrip.zip");
+ expect(unzipResult.exitCode, unzipResult.stderr).toBe(0);
+
+ const extracted = await vfs.readFile("/rt-out/binary.bin");
+ expect(extracted.length).toBe(256);
+ for (let i = 0; i < 256; i++) {
+ expect(extracted[i]).toBe(i);
+ }
+ });
+
+ it("fallback parser rejects an entry with a wrapping local offset", async () => {
+ const vfs = createInMemoryFileSystem();
+ const bytes = buildFallbackArchive(new Uint8Array(0), [
+ {
+ name: "evil.txt",
+ method: 0,
+ compressedSize: 4,
+ uncompressedSize: 4,
+ localOffset: 0xfffffff0,
+ },
+ ]);
+ await vfs.writeFile("/evil.zip", bytes);
+
+ kernel = createKernel({ filesystem: vfs });
+ await kernel.mount(
+ createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
+ );
+
+ const result = await kernel.exec("unzip -d /out /evil.zip");
+ expect(result.exitCode, result.stderr).toBe(1);
+ expect(result.stderr).toMatch(/error/);
+ expect(await vfs.exists("/out/evil.txt")).toBe(false);
+ });
+
+ it("fallback parser skips an entry whose normalized name is empty", async () => {
+ const vfs = createInMemoryFileSystem();
+ const bytes = buildFallbackArchive(new Uint8Array(0), [
+ {
+ name: "/",
+ method: 0,
+ compressedSize: 0,
+ uncompressedSize: 0,
+ localOffset: 0,
+ },
+ ]);
+ await vfs.writeFile("/empty-name.zip", bytes);
+
+ kernel = createKernel({ filesystem: vfs });
+ await kernel.mount(
+ createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
+ );
+
+ const result = await kernel.exec("unzip /empty-name.zip");
+ expect(result.exitCode, result.stderr).toBe(0);
+ expect(result.stdout).not.toMatch(/error/);
+ expect(result.stderr).not.toMatch(/error/);
+ });
+
+ it("fallback parser caps hostile uncompressed sizes before allocating", async () => {
+ const vfs = createInMemoryFileSystem();
+ const prefix = new Uint8Array(31);
+ const pdv = new DataView(prefix.buffer);
+ pdv.setUint32(0, 0x04034b50, true);
+ pdv.setUint16(4, 20, true);
+ pdv.setUint16(26, 0, true);
+ pdv.setUint16(28, 0, true);
+ prefix[30] = 0x41;
+ const bytes = buildFallbackArchive(prefix, [
+ {
+ name: "big.bin",
+ method: 0,
+ compressedSize: 1,
+ uncompressedSize: 0xffffffff,
+ localOffset: 0,
+ },
+ ]);
+ await vfs.writeFile("/big.zip", bytes);
+
+ kernel = createKernel({ filesystem: vfs });
+ await kernel.mount(
+ createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
+ );
+
+ const result = await kernel.exec("unzip -d /cap-out /big.zip");
+ expect(result.exitCode, result.stderr).toBe(1);
+ expect(result.stderr).toMatch(/too large/);
+ expect(await vfs.exists("/cap-out/big.bin")).toBe(false);
+ });
+ },
+);
diff --git a/software/unzip/tsconfig.json b/software/unzip/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/unzip/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/vim/agentos-package.json b/software/vim/agentos-package.json
similarity index 85%
rename from registry/software/vim/agentos-package.json
rename to software/vim/agentos-package.json
index 24e713cc33..801b9d8a53 100644
--- a/registry/software/vim/agentos-package.json
+++ b/software/vim/agentos-package.json
@@ -19,6 +19,7 @@
"title": "vim",
"description": "Vim text editor with bundled runtime.",
"priority": 65,
- "image": "/images/registry/vim.svg"
+ "image": "/images/registry/vim.svg",
+ "category": "editors"
}
}
diff --git a/registry/native/c/vim/compat.h b/software/vim/native/c/vim-bridge/compat.h
similarity index 100%
rename from registry/native/c/vim/compat.h
rename to software/vim/native/c/vim-bridge/compat.h
diff --git a/registry/native/c/vim/grp.h b/software/vim/native/c/vim-bridge/grp.h
similarity index 100%
rename from registry/native/c/vim/grp.h
rename to software/vim/native/c/vim-bridge/grp.h
diff --git a/registry/native/c/vim/posix_stubs.c b/software/vim/native/c/vim-bridge/posix_stubs.c
similarity index 100%
rename from registry/native/c/vim/posix_stubs.c
rename to software/vim/native/c/vim-bridge/posix_stubs.c
diff --git a/registry/native/c/vim/termcap_stub.c b/software/vim/native/c/vim-bridge/termcap_stub.c
similarity index 100%
rename from registry/native/c/vim/termcap_stub.c
rename to software/vim/native/c/vim-bridge/termcap_stub.c
diff --git a/registry/native/c/vim/termios.h b/software/vim/native/c/vim-bridge/termios.h
similarity index 100%
rename from registry/native/c/vim/termios.h
rename to software/vim/native/c/vim-bridge/termios.h
diff --git a/registry/native/c/vim/termios_bridge.c b/software/vim/native/c/vim-bridge/termios_bridge.c
similarity index 100%
rename from registry/native/c/vim/termios_bridge.c
rename to software/vim/native/c/vim-bridge/termios_bridge.c
diff --git a/registry/software/vim/package.json b/software/vim/package.json
similarity index 62%
rename from registry/software/vim/package.json
rename to software/vim/package.json
index 24e8f7d0d3..28bff54f8b 100644
--- a/registry/software/vim/package.json
+++ b/software/vim/package.json
@@ -19,13 +19,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && node ./scripts/stage-runtime.mjs && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && node ./scripts/stage-runtime.mjs && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/vim/scripts/stage-runtime.mjs b/software/vim/scripts/stage-runtime.mjs
similarity index 100%
rename from registry/software/vim/scripts/stage-runtime.mjs
rename to software/vim/scripts/stage-runtime.mjs
diff --git a/registry/software/vim/share/vim/vim92/autoload/RstFold.vim b/software/vim/share/vim/vim92/autoload/RstFold.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/RstFold.vim
rename to software/vim/share/vim/vim92/autoload/RstFold.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/ada.vim b/software/vim/share/vim/vim92/autoload/ada.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/ada.vim
rename to software/vim/share/vim/vim92/autoload/ada.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/adacomplete.vim b/software/vim/share/vim/vim92/autoload/adacomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/adacomplete.vim
rename to software/vim/share/vim/vim92/autoload/adacomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/bitbake.vim b/software/vim/share/vim/vim92/autoload/bitbake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/bitbake.vim
rename to software/vim/share/vim/vim92/autoload/bitbake.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/ccomplete.vim b/software/vim/share/vim/vim92/autoload/ccomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/ccomplete.vim
rename to software/vim/share/vim/vim92/autoload/ccomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/clojurecomplete.vim b/software/vim/share/vim/vim92/autoload/clojurecomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/clojurecomplete.vim
rename to software/vim/share/vim/vim92/autoload/clojurecomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/context.vim b/software/vim/share/vim/vim92/autoload/context.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/context.vim
rename to software/vim/share/vim/vim92/autoload/context.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/contextcomplete.vim b/software/vim/share/vim/vim92/autoload/contextcomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/contextcomplete.vim
rename to software/vim/share/vim/vim92/autoload/contextcomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/csscomplete.vim b/software/vim/share/vim/vim92/autoload/csscomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/csscomplete.vim
rename to software/vim/share/vim/vim92/autoload/csscomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/decada.vim b/software/vim/share/vim/vim92/autoload/decada.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/decada.vim
rename to software/vim/share/vim/vim92/autoload/decada.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/freebasic.vim b/software/vim/share/vim/vim92/autoload/freebasic.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/freebasic.vim
rename to software/vim/share/vim/vim92/autoload/freebasic.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/getscript.vim b/software/vim/share/vim/vim92/autoload/getscript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/getscript.vim
rename to software/vim/share/vim/vim92/autoload/getscript.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/gnat.vim b/software/vim/share/vim/vim92/autoload/gnat.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/gnat.vim
rename to software/vim/share/vim/vim92/autoload/gnat.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/gzip.vim b/software/vim/share/vim/vim92/autoload/gzip.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/gzip.vim
rename to software/vim/share/vim/vim92/autoload/gzip.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/haskellcomplete.vim b/software/vim/share/vim/vim92/autoload/haskellcomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/haskellcomplete.vim
rename to software/vim/share/vim/vim92/autoload/haskellcomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/htmlcomplete.vim b/software/vim/share/vim/vim92/autoload/htmlcomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/htmlcomplete.vim
rename to software/vim/share/vim/vim92/autoload/htmlcomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/javascriptcomplete.vim b/software/vim/share/vim/vim92/autoload/javascriptcomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/javascriptcomplete.vim
rename to software/vim/share/vim/vim92/autoload/javascriptcomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/netrw.vim b/software/vim/share/vim/vim92/autoload/netrw.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/netrw.vim
rename to software/vim/share/vim/vim92/autoload/netrw.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/netrwFileHandlers.vim b/software/vim/share/vim/vim92/autoload/netrwFileHandlers.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/netrwFileHandlers.vim
rename to software/vim/share/vim/vim92/autoload/netrwFileHandlers.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/netrwSettings.vim b/software/vim/share/vim/vim92/autoload/netrwSettings.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/netrwSettings.vim
rename to software/vim/share/vim/vim92/autoload/netrwSettings.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/netrw_gitignore.vim b/software/vim/share/vim/vim92/autoload/netrw_gitignore.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/netrw_gitignore.vim
rename to software/vim/share/vim/vim92/autoload/netrw_gitignore.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/paste.vim b/software/vim/share/vim/vim92/autoload/paste.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/paste.vim
rename to software/vim/share/vim/vim92/autoload/paste.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/phpcomplete.vim b/software/vim/share/vim/vim92/autoload/phpcomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/phpcomplete.vim
rename to software/vim/share/vim/vim92/autoload/phpcomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/python.vim b/software/vim/share/vim/vim92/autoload/python.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/python.vim
rename to software/vim/share/vim/vim92/autoload/python.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/python3complete.vim b/software/vim/share/vim/vim92/autoload/python3complete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/python3complete.vim
rename to software/vim/share/vim/vim92/autoload/python3complete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/pythoncomplete.vim b/software/vim/share/vim/vim92/autoload/pythoncomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/pythoncomplete.vim
rename to software/vim/share/vim/vim92/autoload/pythoncomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/rubycomplete.vim b/software/vim/share/vim/vim92/autoload/rubycomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/rubycomplete.vim
rename to software/vim/share/vim/vim92/autoload/rubycomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/rust.vim b/software/vim/share/vim/vim92/autoload/rust.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/rust.vim
rename to software/vim/share/vim/vim92/autoload/rust.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/rustfmt.vim b/software/vim/share/vim/vim92/autoload/rustfmt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/rustfmt.vim
rename to software/vim/share/vim/vim92/autoload/rustfmt.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/spellfile.vim b/software/vim/share/vim/vim92/autoload/spellfile.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/spellfile.vim
rename to software/vim/share/vim/vim92/autoload/spellfile.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/sqlcomplete.vim b/software/vim/share/vim/vim92/autoload/sqlcomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/sqlcomplete.vim
rename to software/vim/share/vim/vim92/autoload/sqlcomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/syntaxcomplete.vim b/software/vim/share/vim/vim92/autoload/syntaxcomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/syntaxcomplete.vim
rename to software/vim/share/vim/vim92/autoload/syntaxcomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/tar.vim b/software/vim/share/vim/vim92/autoload/tar.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/tar.vim
rename to software/vim/share/vim/vim92/autoload/tar.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/tohtml.vim b/software/vim/share/vim/vim92/autoload/tohtml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/tohtml.vim
rename to software/vim/share/vim/vim92/autoload/tohtml.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/typeset.vim b/software/vim/share/vim/vim92/autoload/typeset.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/typeset.vim
rename to software/vim/share/vim/vim92/autoload/typeset.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/vimball.vim b/software/vim/share/vim/vim92/autoload/vimball.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/vimball.vim
rename to software/vim/share/vim/vim92/autoload/vimball.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/html32.vim b/software/vim/share/vim/vim92/autoload/xml/html32.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/html32.vim
rename to software/vim/share/vim/vim92/autoload/xml/html32.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/html401f.vim b/software/vim/share/vim/vim92/autoload/xml/html401f.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/html401f.vim
rename to software/vim/share/vim/vim92/autoload/xml/html401f.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/html401s.vim b/software/vim/share/vim/vim92/autoload/xml/html401s.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/html401s.vim
rename to software/vim/share/vim/vim92/autoload/xml/html401s.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/html401t.vim b/software/vim/share/vim/vim92/autoload/xml/html401t.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/html401t.vim
rename to software/vim/share/vim/vim92/autoload/xml/html401t.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/html40f.vim b/software/vim/share/vim/vim92/autoload/xml/html40f.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/html40f.vim
rename to software/vim/share/vim/vim92/autoload/xml/html40f.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/html40s.vim b/software/vim/share/vim/vim92/autoload/xml/html40s.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/html40s.vim
rename to software/vim/share/vim/vim92/autoload/xml/html40s.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/html40t.vim b/software/vim/share/vim/vim92/autoload/xml/html40t.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/html40t.vim
rename to software/vim/share/vim/vim92/autoload/xml/html40t.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/xhtml10f.vim b/software/vim/share/vim/vim92/autoload/xml/xhtml10f.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/xhtml10f.vim
rename to software/vim/share/vim/vim92/autoload/xml/xhtml10f.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/xhtml10s.vim b/software/vim/share/vim/vim92/autoload/xml/xhtml10s.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/xhtml10s.vim
rename to software/vim/share/vim/vim92/autoload/xml/xhtml10s.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/xhtml10t.vim b/software/vim/share/vim/vim92/autoload/xml/xhtml10t.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/xhtml10t.vim
rename to software/vim/share/vim/vim92/autoload/xml/xhtml10t.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/xhtml11.vim b/software/vim/share/vim/vim92/autoload/xml/xhtml11.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/xhtml11.vim
rename to software/vim/share/vim/vim92/autoload/xml/xhtml11.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/xsd.vim b/software/vim/share/vim/vim92/autoload/xml/xsd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/xsd.vim
rename to software/vim/share/vim/vim92/autoload/xml/xsd.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xml/xsl.vim b/software/vim/share/vim/vim92/autoload/xml/xsl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xml/xsl.vim
rename to software/vim/share/vim/vim92/autoload/xml/xsl.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xmlcomplete.vim b/software/vim/share/vim/vim92/autoload/xmlcomplete.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xmlcomplete.vim
rename to software/vim/share/vim/vim92/autoload/xmlcomplete.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/xmlformat.vim b/software/vim/share/vim/vim92/autoload/xmlformat.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/xmlformat.vim
rename to software/vim/share/vim/vim92/autoload/xmlformat.vim
diff --git a/registry/software/vim/share/vim/vim92/autoload/zip.vim b/software/vim/share/vim/vim92/autoload/zip.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/autoload/zip.vim
rename to software/vim/share/vim/vim92/autoload/zip.vim
diff --git a/registry/software/vim/share/vim/vim92/bugreport.vim b/software/vim/share/vim/vim92/bugreport.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/bugreport.vim
rename to software/vim/share/vim/vim92/bugreport.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/blue.vim b/software/vim/share/vim/vim92/colors/blue.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/blue.vim
rename to software/vim/share/vim/vim92/colors/blue.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/darkblue.vim b/software/vim/share/vim/vim92/colors/darkblue.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/darkblue.vim
rename to software/vim/share/vim/vim92/colors/darkblue.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/default.vim b/software/vim/share/vim/vim92/colors/default.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/default.vim
rename to software/vim/share/vim/vim92/colors/default.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/delek.vim b/software/vim/share/vim/vim92/colors/delek.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/delek.vim
rename to software/vim/share/vim/vim92/colors/delek.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/desert.vim b/software/vim/share/vim/vim92/colors/desert.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/desert.vim
rename to software/vim/share/vim/vim92/colors/desert.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/elflord.vim b/software/vim/share/vim/vim92/colors/elflord.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/elflord.vim
rename to software/vim/share/vim/vim92/colors/elflord.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/evening.vim b/software/vim/share/vim/vim92/colors/evening.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/evening.vim
rename to software/vim/share/vim/vim92/colors/evening.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/habamax.vim b/software/vim/share/vim/vim92/colors/habamax.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/habamax.vim
rename to software/vim/share/vim/vim92/colors/habamax.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/industry.vim b/software/vim/share/vim/vim92/colors/industry.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/industry.vim
rename to software/vim/share/vim/vim92/colors/industry.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/koehler.vim b/software/vim/share/vim/vim92/colors/koehler.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/koehler.vim
rename to software/vim/share/vim/vim92/colors/koehler.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/lists/csscolors.vim b/software/vim/share/vim/vim92/colors/lists/csscolors.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/lists/csscolors.vim
rename to software/vim/share/vim/vim92/colors/lists/csscolors.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/lists/default.vim b/software/vim/share/vim/vim92/colors/lists/default.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/lists/default.vim
rename to software/vim/share/vim/vim92/colors/lists/default.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/lunaperche.vim b/software/vim/share/vim/vim92/colors/lunaperche.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/lunaperche.vim
rename to software/vim/share/vim/vim92/colors/lunaperche.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/morning.vim b/software/vim/share/vim/vim92/colors/morning.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/morning.vim
rename to software/vim/share/vim/vim92/colors/morning.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/murphy.vim b/software/vim/share/vim/vim92/colors/murphy.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/murphy.vim
rename to software/vim/share/vim/vim92/colors/murphy.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/pablo.vim b/software/vim/share/vim/vim92/colors/pablo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/pablo.vim
rename to software/vim/share/vim/vim92/colors/pablo.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/peachpuff.vim b/software/vim/share/vim/vim92/colors/peachpuff.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/peachpuff.vim
rename to software/vim/share/vim/vim92/colors/peachpuff.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/quiet.vim b/software/vim/share/vim/vim92/colors/quiet.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/quiet.vim
rename to software/vim/share/vim/vim92/colors/quiet.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/ron.vim b/software/vim/share/vim/vim92/colors/ron.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/ron.vim
rename to software/vim/share/vim/vim92/colors/ron.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/shine.vim b/software/vim/share/vim/vim92/colors/shine.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/shine.vim
rename to software/vim/share/vim/vim92/colors/shine.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/slate.vim b/software/vim/share/vim/vim92/colors/slate.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/slate.vim
rename to software/vim/share/vim/vim92/colors/slate.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/tools/check_colors.vim b/software/vim/share/vim/vim92/colors/tools/check_colors.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/tools/check_colors.vim
rename to software/vim/share/vim/vim92/colors/tools/check_colors.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/torte.vim b/software/vim/share/vim/vim92/colors/torte.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/torte.vim
rename to software/vim/share/vim/vim92/colors/torte.vim
diff --git a/registry/software/vim/share/vim/vim92/colors/zellner.vim b/software/vim/share/vim/vim92/colors/zellner.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/colors/zellner.vim
rename to software/vim/share/vim/vim92/colors/zellner.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/ant.vim b/software/vim/share/vim/vim92/compiler/ant.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/ant.vim
rename to software/vim/share/vim/vim92/compiler/ant.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/bcc.vim b/software/vim/share/vim/vim92/compiler/bcc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/bcc.vim
rename to software/vim/share/vim/vim92/compiler/bcc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/bdf.vim b/software/vim/share/vim/vim92/compiler/bdf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/bdf.vim
rename to software/vim/share/vim/vim92/compiler/bdf.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/cargo.vim b/software/vim/share/vim/vim92/compiler/cargo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/cargo.vim
rename to software/vim/share/vim/vim92/compiler/cargo.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/checkstyle.vim b/software/vim/share/vim/vim92/compiler/checkstyle.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/checkstyle.vim
rename to software/vim/share/vim/vim92/compiler/checkstyle.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/cm3.vim b/software/vim/share/vim/vim92/compiler/cm3.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/cm3.vim
rename to software/vim/share/vim/vim92/compiler/cm3.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/context.vim b/software/vim/share/vim/vim92/compiler/context.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/context.vim
rename to software/vim/share/vim/vim92/compiler/context.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/cs.vim b/software/vim/share/vim/vim92/compiler/cs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/cs.vim
rename to software/vim/share/vim/vim92/compiler/cs.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/csslint.vim b/software/vim/share/vim/vim92/compiler/csslint.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/csslint.vim
rename to software/vim/share/vim/vim92/compiler/csslint.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/cucumber.vim b/software/vim/share/vim/vim92/compiler/cucumber.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/cucumber.vim
rename to software/vim/share/vim/vim92/compiler/cucumber.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/dart.vim b/software/vim/share/vim/vim92/compiler/dart.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/dart.vim
rename to software/vim/share/vim/vim92/compiler/dart.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/dart2js.vim b/software/vim/share/vim/vim92/compiler/dart2js.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/dart2js.vim
rename to software/vim/share/vim/vim92/compiler/dart2js.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/dart2native.vim b/software/vim/share/vim/vim92/compiler/dart2native.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/dart2native.vim
rename to software/vim/share/vim/vim92/compiler/dart2native.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/dartanalyser.vim b/software/vim/share/vim/vim92/compiler/dartanalyser.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/dartanalyser.vim
rename to software/vim/share/vim/vim92/compiler/dartanalyser.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/dartdevc.vim b/software/vim/share/vim/vim92/compiler/dartdevc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/dartdevc.vim
rename to software/vim/share/vim/vim92/compiler/dartdevc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/dartdoc.vim b/software/vim/share/vim/vim92/compiler/dartdoc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/dartdoc.vim
rename to software/vim/share/vim/vim92/compiler/dartdoc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/dartfmt.vim b/software/vim/share/vim/vim92/compiler/dartfmt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/dartfmt.vim
rename to software/vim/share/vim/vim92/compiler/dartfmt.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/decada.vim b/software/vim/share/vim/vim92/compiler/decada.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/decada.vim
rename to software/vim/share/vim/vim92/compiler/decada.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/dot.vim b/software/vim/share/vim/vim92/compiler/dot.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/dot.vim
rename to software/vim/share/vim/vim92/compiler/dot.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/dotnet.vim b/software/vim/share/vim/vim92/compiler/dotnet.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/dotnet.vim
rename to software/vim/share/vim/vim92/compiler/dotnet.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/erlang.vim b/software/vim/share/vim/vim92/compiler/erlang.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/erlang.vim
rename to software/vim/share/vim/vim92/compiler/erlang.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/eruby.vim b/software/vim/share/vim/vim92/compiler/eruby.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/eruby.vim
rename to software/vim/share/vim/vim92/compiler/eruby.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/eslint.vim b/software/vim/share/vim/vim92/compiler/eslint.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/eslint.vim
rename to software/vim/share/vim/vim92/compiler/eslint.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/fbc.vim b/software/vim/share/vim/vim92/compiler/fbc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/fbc.vim
rename to software/vim/share/vim/vim92/compiler/fbc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/fortran_F.vim b/software/vim/share/vim/vim92/compiler/fortran_F.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/fortran_F.vim
rename to software/vim/share/vim/vim92/compiler/fortran_F.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/fortran_cv.vim b/software/vim/share/vim/vim92/compiler/fortran_cv.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/fortran_cv.vim
rename to software/vim/share/vim/vim92/compiler/fortran_cv.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/fortran_elf90.vim b/software/vim/share/vim/vim92/compiler/fortran_elf90.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/fortran_elf90.vim
rename to software/vim/share/vim/vim92/compiler/fortran_elf90.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/fortran_g77.vim b/software/vim/share/vim/vim92/compiler/fortran_g77.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/fortran_g77.vim
rename to software/vim/share/vim/vim92/compiler/fortran_g77.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/fortran_lf95.vim b/software/vim/share/vim/vim92/compiler/fortran_lf95.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/fortran_lf95.vim
rename to software/vim/share/vim/vim92/compiler/fortran_lf95.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/fpc.vim b/software/vim/share/vim/vim92/compiler/fpc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/fpc.vim
rename to software/vim/share/vim/vim92/compiler/fpc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/g95.vim b/software/vim/share/vim/vim92/compiler/g95.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/g95.vim
rename to software/vim/share/vim/vim92/compiler/g95.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/gawk.vim b/software/vim/share/vim/vim92/compiler/gawk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/gawk.vim
rename to software/vim/share/vim/vim92/compiler/gawk.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/gcc.vim b/software/vim/share/vim/vim92/compiler/gcc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/gcc.vim
rename to software/vim/share/vim/vim92/compiler/gcc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/gfortran.vim b/software/vim/share/vim/vim92/compiler/gfortran.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/gfortran.vim
rename to software/vim/share/vim/vim92/compiler/gfortran.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/ghc.vim b/software/vim/share/vim/vim92/compiler/ghc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/ghc.vim
rename to software/vim/share/vim/vim92/compiler/ghc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/gjs.vim b/software/vim/share/vim/vim92/compiler/gjs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/gjs.vim
rename to software/vim/share/vim/vim92/compiler/gjs.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/gnat.vim b/software/vim/share/vim/vim92/compiler/gnat.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/gnat.vim
rename to software/vim/share/vim/vim92/compiler/gnat.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/go.vim b/software/vim/share/vim/vim92/compiler/go.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/go.vim
rename to software/vim/share/vim/vim92/compiler/go.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/haml.vim b/software/vim/share/vim/vim92/compiler/haml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/haml.vim
rename to software/vim/share/vim/vim92/compiler/haml.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/hare.vim b/software/vim/share/vim/vim92/compiler/hare.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/hare.vim
rename to software/vim/share/vim/vim92/compiler/hare.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/hp_acc.vim b/software/vim/share/vim/vim92/compiler/hp_acc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/hp_acc.vim
rename to software/vim/share/vim/vim92/compiler/hp_acc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/icc.vim b/software/vim/share/vim/vim92/compiler/icc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/icc.vim
rename to software/vim/share/vim/vim92/compiler/icc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/icon.vim b/software/vim/share/vim/vim92/compiler/icon.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/icon.vim
rename to software/vim/share/vim/vim92/compiler/icon.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/ifort.vim b/software/vim/share/vim/vim92/compiler/ifort.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/ifort.vim
rename to software/vim/share/vim/vim92/compiler/ifort.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/intel.vim b/software/vim/share/vim/vim92/compiler/intel.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/intel.vim
rename to software/vim/share/vim/vim92/compiler/intel.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/irix5_c.vim b/software/vim/share/vim/vim92/compiler/irix5_c.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/irix5_c.vim
rename to software/vim/share/vim/vim92/compiler/irix5_c.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/irix5_cpp.vim b/software/vim/share/vim/vim92/compiler/irix5_cpp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/irix5_cpp.vim
rename to software/vim/share/vim/vim92/compiler/irix5_cpp.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/javac.vim b/software/vim/share/vim/vim92/compiler/javac.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/javac.vim
rename to software/vim/share/vim/vim92/compiler/javac.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/jest.vim b/software/vim/share/vim/vim92/compiler/jest.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/jest.vim
rename to software/vim/share/vim/vim92/compiler/jest.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/jikes.vim b/software/vim/share/vim/vim92/compiler/jikes.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/jikes.vim
rename to software/vim/share/vim/vim92/compiler/jikes.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/jjs.vim b/software/vim/share/vim/vim92/compiler/jjs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/jjs.vim
rename to software/vim/share/vim/vim92/compiler/jjs.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/jshint.vim b/software/vim/share/vim/vim92/compiler/jshint.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/jshint.vim
rename to software/vim/share/vim/vim92/compiler/jshint.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/jsonlint.vim b/software/vim/share/vim/vim92/compiler/jsonlint.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/jsonlint.vim
rename to software/vim/share/vim/vim92/compiler/jsonlint.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/mcs.vim b/software/vim/share/vim/vim92/compiler/mcs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/mcs.vim
rename to software/vim/share/vim/vim92/compiler/mcs.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/mips_c.vim b/software/vim/share/vim/vim92/compiler/mips_c.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/mips_c.vim
rename to software/vim/share/vim/vim92/compiler/mips_c.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/mipspro_c89.vim b/software/vim/share/vim/vim92/compiler/mipspro_c89.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/mipspro_c89.vim
rename to software/vim/share/vim/vim92/compiler/mipspro_c89.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/mipspro_cpp.vim b/software/vim/share/vim/vim92/compiler/mipspro_cpp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/mipspro_cpp.vim
rename to software/vim/share/vim/vim92/compiler/mipspro_cpp.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/modelsim_vcom.vim b/software/vim/share/vim/vim92/compiler/modelsim_vcom.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/modelsim_vcom.vim
rename to software/vim/share/vim/vim92/compiler/modelsim_vcom.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/msbuild.vim b/software/vim/share/vim/vim92/compiler/msbuild.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/msbuild.vim
rename to software/vim/share/vim/vim92/compiler/msbuild.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/msvc.vim b/software/vim/share/vim/vim92/compiler/msvc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/msvc.vim
rename to software/vim/share/vim/vim92/compiler/msvc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/neato.vim b/software/vim/share/vim/vim92/compiler/neato.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/neato.vim
rename to software/vim/share/vim/vim92/compiler/neato.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/ocaml.vim b/software/vim/share/vim/vim92/compiler/ocaml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/ocaml.vim
rename to software/vim/share/vim/vim92/compiler/ocaml.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/onsgmls.vim b/software/vim/share/vim/vim92/compiler/onsgmls.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/onsgmls.vim
rename to software/vim/share/vim/vim92/compiler/onsgmls.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/pbx.vim b/software/vim/share/vim/vim92/compiler/pbx.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/pbx.vim
rename to software/vim/share/vim/vim92/compiler/pbx.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/perl.vim b/software/vim/share/vim/vim92/compiler/perl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/perl.vim
rename to software/vim/share/vim/vim92/compiler/perl.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/perlcritic.vim b/software/vim/share/vim/vim92/compiler/perlcritic.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/perlcritic.vim
rename to software/vim/share/vim/vim92/compiler/perlcritic.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/php.vim b/software/vim/share/vim/vim92/compiler/php.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/php.vim
rename to software/vim/share/vim/vim92/compiler/php.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/podchecker.vim b/software/vim/share/vim/vim92/compiler/podchecker.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/podchecker.vim
rename to software/vim/share/vim/vim92/compiler/podchecker.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/powershell.vim b/software/vim/share/vim/vim92/compiler/powershell.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/powershell.vim
rename to software/vim/share/vim/vim92/compiler/powershell.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/pylint.vim b/software/vim/share/vim/vim92/compiler/pylint.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/pylint.vim
rename to software/vim/share/vim/vim92/compiler/pylint.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/pyunit.vim b/software/vim/share/vim/vim92/compiler/pyunit.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/pyunit.vim
rename to software/vim/share/vim/vim92/compiler/pyunit.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/raco.vim b/software/vim/share/vim/vim92/compiler/raco.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/raco.vim
rename to software/vim/share/vim/vim92/compiler/raco.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/racomake.vim b/software/vim/share/vim/vim92/compiler/racomake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/racomake.vim
rename to software/vim/share/vim/vim92/compiler/racomake.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/racosetup.vim b/software/vim/share/vim/vim92/compiler/racosetup.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/racosetup.vim
rename to software/vim/share/vim/vim92/compiler/racosetup.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/racotest.vim b/software/vim/share/vim/vim92/compiler/racotest.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/racotest.vim
rename to software/vim/share/vim/vim92/compiler/racotest.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/rake.vim b/software/vim/share/vim/vim92/compiler/rake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/rake.vim
rename to software/vim/share/vim/vim92/compiler/rake.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/rhino.vim b/software/vim/share/vim/vim92/compiler/rhino.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/rhino.vim
rename to software/vim/share/vim/vim92/compiler/rhino.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/rspec.vim b/software/vim/share/vim/vim92/compiler/rspec.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/rspec.vim
rename to software/vim/share/vim/vim92/compiler/rspec.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/rst.vim b/software/vim/share/vim/vim92/compiler/rst.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/rst.vim
rename to software/vim/share/vim/vim92/compiler/rst.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/rubocop.vim b/software/vim/share/vim/vim92/compiler/rubocop.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/rubocop.vim
rename to software/vim/share/vim/vim92/compiler/rubocop.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/ruby.vim b/software/vim/share/vim/vim92/compiler/ruby.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/ruby.vim
rename to software/vim/share/vim/vim92/compiler/ruby.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/rubyunit.vim b/software/vim/share/vim/vim92/compiler/rubyunit.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/rubyunit.vim
rename to software/vim/share/vim/vim92/compiler/rubyunit.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/rustc.vim b/software/vim/share/vim/vim92/compiler/rustc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/rustc.vim
rename to software/vim/share/vim/vim92/compiler/rustc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/sass.vim b/software/vim/share/vim/vim92/compiler/sass.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/sass.vim
rename to software/vim/share/vim/vim92/compiler/sass.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/scdoc.vim b/software/vim/share/vim/vim92/compiler/scdoc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/scdoc.vim
rename to software/vim/share/vim/vim92/compiler/scdoc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/se.vim b/software/vim/share/vim/vim92/compiler/se.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/se.vim
rename to software/vim/share/vim/vim92/compiler/se.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/shellcheck.vim b/software/vim/share/vim/vim92/compiler/shellcheck.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/shellcheck.vim
rename to software/vim/share/vim/vim92/compiler/shellcheck.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/sml.vim b/software/vim/share/vim/vim92/compiler/sml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/sml.vim
rename to software/vim/share/vim/vim92/compiler/sml.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/spectral.vim b/software/vim/share/vim/vim92/compiler/spectral.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/spectral.vim
rename to software/vim/share/vim/vim92/compiler/spectral.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/splint.vim b/software/vim/share/vim/vim92/compiler/splint.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/splint.vim
rename to software/vim/share/vim/vim92/compiler/splint.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/stack.vim b/software/vim/share/vim/vim92/compiler/stack.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/stack.vim
rename to software/vim/share/vim/vim92/compiler/stack.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/standard.vim b/software/vim/share/vim/vim92/compiler/standard.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/standard.vim
rename to software/vim/share/vim/vim92/compiler/standard.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/stylelint.vim b/software/vim/share/vim/vim92/compiler/stylelint.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/stylelint.vim
rename to software/vim/share/vim/vim92/compiler/stylelint.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/tcl.vim b/software/vim/share/vim/vim92/compiler/tcl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/tcl.vim
rename to software/vim/share/vim/vim92/compiler/tcl.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/tex.vim b/software/vim/share/vim/vim92/compiler/tex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/tex.vim
rename to software/vim/share/vim/vim92/compiler/tex.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/tidy.vim b/software/vim/share/vim/vim92/compiler/tidy.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/tidy.vim
rename to software/vim/share/vim/vim92/compiler/tidy.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/ts-node.vim b/software/vim/share/vim/vim92/compiler/ts-node.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/ts-node.vim
rename to software/vim/share/vim/vim92/compiler/ts-node.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/tsc.vim b/software/vim/share/vim/vim92/compiler/tsc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/tsc.vim
rename to software/vim/share/vim/vim92/compiler/tsc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/typedoc.vim b/software/vim/share/vim/vim92/compiler/typedoc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/typedoc.vim
rename to software/vim/share/vim/vim92/compiler/typedoc.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/xbuild.vim b/software/vim/share/vim/vim92/compiler/xbuild.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/xbuild.vim
rename to software/vim/share/vim/vim92/compiler/xbuild.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/xmllint.vim b/software/vim/share/vim/vim92/compiler/xmllint.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/xmllint.vim
rename to software/vim/share/vim/vim92/compiler/xmllint.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/xmlwf.vim b/software/vim/share/vim/vim92/compiler/xmlwf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/xmlwf.vim
rename to software/vim/share/vim/vim92/compiler/xmlwf.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/xo.vim b/software/vim/share/vim/vim92/compiler/xo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/xo.vim
rename to software/vim/share/vim/vim92/compiler/xo.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/yamllint.vim b/software/vim/share/vim/vim92/compiler/yamllint.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/yamllint.vim
rename to software/vim/share/vim/vim92/compiler/yamllint.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/zig.vim b/software/vim/share/vim/vim92/compiler/zig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/zig.vim
rename to software/vim/share/vim/vim92/compiler/zig.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/zig_build.vim b/software/vim/share/vim/vim92/compiler/zig_build.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/zig_build.vim
rename to software/vim/share/vim/vim92/compiler/zig_build.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/zig_build_exe.vim b/software/vim/share/vim/vim92/compiler/zig_build_exe.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/zig_build_exe.vim
rename to software/vim/share/vim/vim92/compiler/zig_build_exe.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/zig_test.vim b/software/vim/share/vim/vim92/compiler/zig_test.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/zig_test.vim
rename to software/vim/share/vim/vim92/compiler/zig_test.vim
diff --git a/registry/software/vim/share/vim/vim92/compiler/zsh.vim b/software/vim/share/vim/vim92/compiler/zsh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/compiler/zsh.vim
rename to software/vim/share/vim/vim92/compiler/zsh.vim
diff --git a/registry/software/vim/share/vim/vim92/debian.vim b/software/vim/share/vim/vim92/debian.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/debian.vim
rename to software/vim/share/vim/vim92/debian.vim
diff --git a/registry/software/vim/share/vim/vim92/defaults.vim b/software/vim/share/vim/vim92/defaults.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/defaults.vim
rename to software/vim/share/vim/vim92/defaults.vim
diff --git a/registry/software/vim/share/vim/vim92/delmenu.vim b/software/vim/share/vim/vim92/delmenu.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/delmenu.vim
rename to software/vim/share/vim/vim92/delmenu.vim
diff --git a/registry/software/vim/share/vim/vim92/evim.vim b/software/vim/share/vim/vim92/evim.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/evim.vim
rename to software/vim/share/vim/vim92/evim.vim
diff --git a/registry/software/vim/share/vim/vim92/filetype.vim b/software/vim/share/vim/vim92/filetype.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/filetype.vim
rename to software/vim/share/vim/vim92/filetype.vim
diff --git a/registry/software/vim/share/vim/vim92/ftoff.vim b/software/vim/share/vim/vim92/ftoff.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftoff.vim
rename to software/vim/share/vim/vim92/ftoff.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin.vim b/software/vim/share/vim/vim92/ftplugin.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin.vim
rename to software/vim/share/vim/vim92/ftplugin.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/8th.vim b/software/vim/share/vim/vim92/ftplugin/8th.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/8th.vim
rename to software/vim/share/vim/vim92/ftplugin/8th.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/a2ps.vim b/software/vim/share/vim/vim92/ftplugin/a2ps.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/a2ps.vim
rename to software/vim/share/vim/vim92/ftplugin/a2ps.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/aap.vim b/software/vim/share/vim/vim92/ftplugin/aap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/aap.vim
rename to software/vim/share/vim/vim92/ftplugin/aap.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/abap.vim b/software/vim/share/vim/vim92/ftplugin/abap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/abap.vim
rename to software/vim/share/vim/vim92/ftplugin/abap.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/abaqus.vim b/software/vim/share/vim/vim92/ftplugin/abaqus.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/abaqus.vim
rename to software/vim/share/vim/vim92/ftplugin/abaqus.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/ada.vim b/software/vim/share/vim/vim92/ftplugin/ada.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/ada.vim
rename to software/vim/share/vim/vim92/ftplugin/ada.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/alsaconf.vim b/software/vim/share/vim/vim92/ftplugin/alsaconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/alsaconf.vim
rename to software/vim/share/vim/vim92/ftplugin/alsaconf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/ant.vim b/software/vim/share/vim/vim92/ftplugin/ant.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/ant.vim
rename to software/vim/share/vim/vim92/ftplugin/ant.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/apache.vim b/software/vim/share/vim/vim92/ftplugin/apache.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/apache.vim
rename to software/vim/share/vim/vim92/ftplugin/apache.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/arch.vim b/software/vim/share/vim/vim92/ftplugin/arch.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/arch.vim
rename to software/vim/share/vim/vim92/ftplugin/arch.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/art.vim b/software/vim/share/vim/vim92/ftplugin/art.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/art.vim
rename to software/vim/share/vim/vim92/ftplugin/art.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/asm.vim b/software/vim/share/vim/vim92/ftplugin/asm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/asm.vim
rename to software/vim/share/vim/vim92/ftplugin/asm.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/aspvbs.vim b/software/vim/share/vim/vim92/ftplugin/aspvbs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/aspvbs.vim
rename to software/vim/share/vim/vim92/ftplugin/aspvbs.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/automake.vim b/software/vim/share/vim/vim92/ftplugin/automake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/automake.vim
rename to software/vim/share/vim/vim92/ftplugin/automake.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/awk.vim b/software/vim/share/vim/vim92/ftplugin/awk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/awk.vim
rename to software/vim/share/vim/vim92/ftplugin/awk.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/bash.vim b/software/vim/share/vim/vim92/ftplugin/bash.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/bash.vim
rename to software/vim/share/vim/vim92/ftplugin/bash.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/basic.vim b/software/vim/share/vim/vim92/ftplugin/basic.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/basic.vim
rename to software/vim/share/vim/vim92/ftplugin/basic.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/bdf.vim b/software/vim/share/vim/vim92/ftplugin/bdf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/bdf.vim
rename to software/vim/share/vim/vim92/ftplugin/bdf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/bitbake.vim b/software/vim/share/vim/vim92/ftplugin/bitbake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/bitbake.vim
rename to software/vim/share/vim/vim92/ftplugin/bitbake.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/bst.vim b/software/vim/share/vim/vim92/ftplugin/bst.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/bst.vim
rename to software/vim/share/vim/vim92/ftplugin/bst.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/btm.vim b/software/vim/share/vim/vim92/ftplugin/btm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/btm.vim
rename to software/vim/share/vim/vim92/ftplugin/btm.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/bzl.vim b/software/vim/share/vim/vim92/ftplugin/bzl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/bzl.vim
rename to software/vim/share/vim/vim92/ftplugin/bzl.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/c.vim b/software/vim/share/vim/vim92/ftplugin/c.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/c.vim
rename to software/vim/share/vim/vim92/ftplugin/c.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/calendar.vim b/software/vim/share/vim/vim92/ftplugin/calendar.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/calendar.vim
rename to software/vim/share/vim/vim92/ftplugin/calendar.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/cdrdaoconf.vim b/software/vim/share/vim/vim92/ftplugin/cdrdaoconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/cdrdaoconf.vim
rename to software/vim/share/vim/vim92/ftplugin/cdrdaoconf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/cfg.vim b/software/vim/share/vim/vim92/ftplugin/cfg.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/cfg.vim
rename to software/vim/share/vim/vim92/ftplugin/cfg.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/ch.vim b/software/vim/share/vim/vim92/ftplugin/ch.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/ch.vim
rename to software/vim/share/vim/vim92/ftplugin/ch.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/changelog.vim b/software/vim/share/vim/vim92/ftplugin/changelog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/changelog.vim
rename to software/vim/share/vim/vim92/ftplugin/changelog.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/chatito.vim b/software/vim/share/vim/vim92/ftplugin/chatito.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/chatito.vim
rename to software/vim/share/vim/vim92/ftplugin/chatito.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/chicken.vim b/software/vim/share/vim/vim92/ftplugin/chicken.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/chicken.vim
rename to software/vim/share/vim/vim92/ftplugin/chicken.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/clojure.vim b/software/vim/share/vim/vim92/ftplugin/clojure.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/clojure.vim
rename to software/vim/share/vim/vim92/ftplugin/clojure.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/cmake.vim b/software/vim/share/vim/vim92/ftplugin/cmake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/cmake.vim
rename to software/vim/share/vim/vim92/ftplugin/cmake.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/cobol.vim b/software/vim/share/vim/vim92/ftplugin/cobol.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/cobol.vim
rename to software/vim/share/vim/vim92/ftplugin/cobol.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/conf.vim b/software/vim/share/vim/vim92/ftplugin/conf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/conf.vim
rename to software/vim/share/vim/vim92/ftplugin/conf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/config.vim b/software/vim/share/vim/vim92/ftplugin/config.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/config.vim
rename to software/vim/share/vim/vim92/ftplugin/config.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/confini.vim b/software/vim/share/vim/vim92/ftplugin/confini.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/confini.vim
rename to software/vim/share/vim/vim92/ftplugin/confini.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/context.vim b/software/vim/share/vim/vim92/ftplugin/context.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/context.vim
rename to software/vim/share/vim/vim92/ftplugin/context.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/cpp.vim b/software/vim/share/vim/vim92/ftplugin/cpp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/cpp.vim
rename to software/vim/share/vim/vim92/ftplugin/cpp.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/crm.vim b/software/vim/share/vim/vim92/ftplugin/crm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/crm.vim
rename to software/vim/share/vim/vim92/ftplugin/crm.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/crontab.vim b/software/vim/share/vim/vim92/ftplugin/crontab.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/crontab.vim
rename to software/vim/share/vim/vim92/ftplugin/crontab.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/cs.vim b/software/vim/share/vim/vim92/ftplugin/cs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/cs.vim
rename to software/vim/share/vim/vim92/ftplugin/cs.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/csc.vim b/software/vim/share/vim/vim92/ftplugin/csc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/csc.vim
rename to software/vim/share/vim/vim92/ftplugin/csc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/csh.vim b/software/vim/share/vim/vim92/ftplugin/csh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/csh.vim
rename to software/vim/share/vim/vim92/ftplugin/csh.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/css.vim b/software/vim/share/vim/vim92/ftplugin/css.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/css.vim
rename to software/vim/share/vim/vim92/ftplugin/css.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/cucumber.vim b/software/vim/share/vim/vim92/ftplugin/cucumber.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/cucumber.vim
rename to software/vim/share/vim/vim92/ftplugin/cucumber.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/cvsrc.vim b/software/vim/share/vim/vim92/ftplugin/cvsrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/cvsrc.vim
rename to software/vim/share/vim/vim92/ftplugin/cvsrc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/debchangelog.vim b/software/vim/share/vim/vim92/ftplugin/debchangelog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/debchangelog.vim
rename to software/vim/share/vim/vim92/ftplugin/debchangelog.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/debcontrol.vim b/software/vim/share/vim/vim92/ftplugin/debcontrol.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/debcontrol.vim
rename to software/vim/share/vim/vim92/ftplugin/debcontrol.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/denyhosts.vim b/software/vim/share/vim/vim92/ftplugin/denyhosts.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/denyhosts.vim
rename to software/vim/share/vim/vim92/ftplugin/denyhosts.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/desktop.vim b/software/vim/share/vim/vim92/ftplugin/desktop.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/desktop.vim
rename to software/vim/share/vim/vim92/ftplugin/desktop.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/dictconf.vim b/software/vim/share/vim/vim92/ftplugin/dictconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/dictconf.vim
rename to software/vim/share/vim/vim92/ftplugin/dictconf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/dictdconf.vim b/software/vim/share/vim/vim92/ftplugin/dictdconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/dictdconf.vim
rename to software/vim/share/vim/vim92/ftplugin/dictdconf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/diff.vim b/software/vim/share/vim/vim92/ftplugin/diff.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/diff.vim
rename to software/vim/share/vim/vim92/ftplugin/diff.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/dircolors.vim b/software/vim/share/vim/vim92/ftplugin/dircolors.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/dircolors.vim
rename to software/vim/share/vim/vim92/ftplugin/dircolors.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/docbk.vim b/software/vim/share/vim/vim92/ftplugin/docbk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/docbk.vim
rename to software/vim/share/vim/vim92/ftplugin/docbk.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/dockerfile.vim b/software/vim/share/vim/vim92/ftplugin/dockerfile.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/dockerfile.vim
rename to software/vim/share/vim/vim92/ftplugin/dockerfile.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/dosbatch.vim b/software/vim/share/vim/vim92/ftplugin/dosbatch.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/dosbatch.vim
rename to software/vim/share/vim/vim92/ftplugin/dosbatch.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/dosini.vim b/software/vim/share/vim/vim92/ftplugin/dosini.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/dosini.vim
rename to software/vim/share/vim/vim92/ftplugin/dosini.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/dtd.vim b/software/vim/share/vim/vim92/ftplugin/dtd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/dtd.vim
rename to software/vim/share/vim/vim92/ftplugin/dtd.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/dtrace.vim b/software/vim/share/vim/vim92/ftplugin/dtrace.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/dtrace.vim
rename to software/vim/share/vim/vim92/ftplugin/dtrace.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/dune.vim b/software/vim/share/vim/vim92/ftplugin/dune.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/dune.vim
rename to software/vim/share/vim/vim92/ftplugin/dune.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/eiffel.vim b/software/vim/share/vim/vim92/ftplugin/eiffel.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/eiffel.vim
rename to software/vim/share/vim/vim92/ftplugin/eiffel.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/elinks.vim b/software/vim/share/vim/vim92/ftplugin/elinks.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/elinks.vim
rename to software/vim/share/vim/vim92/ftplugin/elinks.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/elixir.vim b/software/vim/share/vim/vim92/ftplugin/elixir.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/elixir.vim
rename to software/vim/share/vim/vim92/ftplugin/elixir.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/elm.vim b/software/vim/share/vim/vim92/ftplugin/elm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/elm.vim
rename to software/vim/share/vim/vim92/ftplugin/elm.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/erlang.vim b/software/vim/share/vim/vim92/ftplugin/erlang.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/erlang.vim
rename to software/vim/share/vim/vim92/ftplugin/erlang.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/eruby.vim b/software/vim/share/vim/vim92/ftplugin/eruby.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/eruby.vim
rename to software/vim/share/vim/vim92/ftplugin/eruby.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/eterm.vim b/software/vim/share/vim/vim92/ftplugin/eterm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/eterm.vim
rename to software/vim/share/vim/vim92/ftplugin/eterm.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/expect.vim b/software/vim/share/vim/vim92/ftplugin/expect.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/expect.vim
rename to software/vim/share/vim/vim92/ftplugin/expect.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/falcon.vim b/software/vim/share/vim/vim92/ftplugin/falcon.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/falcon.vim
rename to software/vim/share/vim/vim92/ftplugin/falcon.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/fennel.vim b/software/vim/share/vim/vim92/ftplugin/fennel.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/fennel.vim
rename to software/vim/share/vim/vim92/ftplugin/fennel.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/fetchmail.vim b/software/vim/share/vim/vim92/ftplugin/fetchmail.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/fetchmail.vim
rename to software/vim/share/vim/vim92/ftplugin/fetchmail.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/fish.vim b/software/vim/share/vim/vim92/ftplugin/fish.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/fish.vim
rename to software/vim/share/vim/vim92/ftplugin/fish.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/flexwiki.vim b/software/vim/share/vim/vim92/ftplugin/flexwiki.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/flexwiki.vim
rename to software/vim/share/vim/vim92/ftplugin/flexwiki.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/fortran.vim b/software/vim/share/vim/vim92/ftplugin/fortran.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/fortran.vim
rename to software/vim/share/vim/vim92/ftplugin/fortran.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/fpcmake.vim b/software/vim/share/vim/vim92/ftplugin/fpcmake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/fpcmake.vim
rename to software/vim/share/vim/vim92/ftplugin/fpcmake.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/framescript.vim b/software/vim/share/vim/vim92/ftplugin/framescript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/framescript.vim
rename to software/vim/share/vim/vim92/ftplugin/framescript.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/freebasic.vim b/software/vim/share/vim/vim92/ftplugin/freebasic.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/freebasic.vim
rename to software/vim/share/vim/vim92/ftplugin/freebasic.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/fstab.vim b/software/vim/share/vim/vim92/ftplugin/fstab.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/fstab.vim
rename to software/vim/share/vim/vim92/ftplugin/fstab.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/fvwm.vim b/software/vim/share/vim/vim92/ftplugin/fvwm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/fvwm.vim
rename to software/vim/share/vim/vim92/ftplugin/fvwm.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gdb.vim b/software/vim/share/vim/vim92/ftplugin/gdb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gdb.vim
rename to software/vim/share/vim/vim92/ftplugin/gdb.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gdscript.vim b/software/vim/share/vim/vim92/ftplugin/gdscript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gdscript.vim
rename to software/vim/share/vim/vim92/ftplugin/gdscript.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gdshader.vim b/software/vim/share/vim/vim92/ftplugin/gdshader.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gdshader.vim
rename to software/vim/share/vim/vim92/ftplugin/gdshader.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gitattributes.vim b/software/vim/share/vim/vim92/ftplugin/gitattributes.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gitattributes.vim
rename to software/vim/share/vim/vim92/ftplugin/gitattributes.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gitcommit.vim b/software/vim/share/vim/vim92/ftplugin/gitcommit.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gitcommit.vim
rename to software/vim/share/vim/vim92/ftplugin/gitcommit.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gitconfig.vim b/software/vim/share/vim/vim92/ftplugin/gitconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gitconfig.vim
rename to software/vim/share/vim/vim92/ftplugin/gitconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gitignore.vim b/software/vim/share/vim/vim92/ftplugin/gitignore.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gitignore.vim
rename to software/vim/share/vim/vim92/ftplugin/gitignore.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gitrebase.vim b/software/vim/share/vim/vim92/ftplugin/gitrebase.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gitrebase.vim
rename to software/vim/share/vim/vim92/ftplugin/gitrebase.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gitsendemail.vim b/software/vim/share/vim/vim92/ftplugin/gitsendemail.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gitsendemail.vim
rename to software/vim/share/vim/vim92/ftplugin/gitsendemail.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/go.vim b/software/vim/share/vim/vim92/ftplugin/go.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/go.vim
rename to software/vim/share/vim/vim92/ftplugin/go.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gpg.vim b/software/vim/share/vim/vim92/ftplugin/gpg.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gpg.vim
rename to software/vim/share/vim/vim92/ftplugin/gpg.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gprof.vim b/software/vim/share/vim/vim92/ftplugin/gprof.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gprof.vim
rename to software/vim/share/vim/vim92/ftplugin/gprof.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/groovy.vim b/software/vim/share/vim/vim92/ftplugin/groovy.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/groovy.vim
rename to software/vim/share/vim/vim92/ftplugin/groovy.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/group.vim b/software/vim/share/vim/vim92/ftplugin/group.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/group.vim
rename to software/vim/share/vim/vim92/ftplugin/group.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/grub.vim b/software/vim/share/vim/vim92/ftplugin/grub.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/grub.vim
rename to software/vim/share/vim/vim92/ftplugin/grub.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/gyp.vim b/software/vim/share/vim/vim92/ftplugin/gyp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/gyp.vim
rename to software/vim/share/vim/vim92/ftplugin/gyp.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/haml.vim b/software/vim/share/vim/vim92/ftplugin/haml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/haml.vim
rename to software/vim/share/vim/vim92/ftplugin/haml.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/hamster.vim b/software/vim/share/vim/vim92/ftplugin/hamster.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/hamster.vim
rename to software/vim/share/vim/vim92/ftplugin/hamster.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/hare.vim b/software/vim/share/vim/vim92/ftplugin/hare.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/hare.vim
rename to software/vim/share/vim/vim92/ftplugin/hare.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/haskell.vim b/software/vim/share/vim/vim92/ftplugin/haskell.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/haskell.vim
rename to software/vim/share/vim/vim92/ftplugin/haskell.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/heex.vim b/software/vim/share/vim/vim92/ftplugin/heex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/heex.vim
rename to software/vim/share/vim/vim92/ftplugin/heex.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/help.vim b/software/vim/share/vim/vim92/ftplugin/help.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/help.vim
rename to software/vim/share/vim/vim92/ftplugin/help.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/hgcommit.vim b/software/vim/share/vim/vim92/ftplugin/hgcommit.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/hgcommit.vim
rename to software/vim/share/vim/vim92/ftplugin/hgcommit.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/hog.vim b/software/vim/share/vim/vim92/ftplugin/hog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/hog.vim
rename to software/vim/share/vim/vim92/ftplugin/hog.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/hostconf.vim b/software/vim/share/vim/vim92/ftplugin/hostconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/hostconf.vim
rename to software/vim/share/vim/vim92/ftplugin/hostconf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/hostsaccess.vim b/software/vim/share/vim/vim92/ftplugin/hostsaccess.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/hostsaccess.vim
rename to software/vim/share/vim/vim92/ftplugin/hostsaccess.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/html.vim b/software/vim/share/vim/vim92/ftplugin/html.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/html.vim
rename to software/vim/share/vim/vim92/ftplugin/html.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/htmldjango.vim b/software/vim/share/vim/vim92/ftplugin/htmldjango.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/htmldjango.vim
rename to software/vim/share/vim/vim92/ftplugin/htmldjango.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/i3config.vim b/software/vim/share/vim/vim92/ftplugin/i3config.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/i3config.vim
rename to software/vim/share/vim/vim92/ftplugin/i3config.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/icon.vim b/software/vim/share/vim/vim92/ftplugin/icon.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/icon.vim
rename to software/vim/share/vim/vim92/ftplugin/icon.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/indent.vim b/software/vim/share/vim/vim92/ftplugin/indent.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/indent.vim
rename to software/vim/share/vim/vim92/ftplugin/indent.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/initex.vim b/software/vim/share/vim/vim92/ftplugin/initex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/initex.vim
rename to software/vim/share/vim/vim92/ftplugin/initex.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/ishd.vim b/software/vim/share/vim/vim92/ftplugin/ishd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/ishd.vim
rename to software/vim/share/vim/vim92/ftplugin/ishd.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/j.vim b/software/vim/share/vim/vim92/ftplugin/j.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/j.vim
rename to software/vim/share/vim/vim92/ftplugin/j.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/java.vim b/software/vim/share/vim/vim92/ftplugin/java.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/java.vim
rename to software/vim/share/vim/vim92/ftplugin/java.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/javascript.vim b/software/vim/share/vim/vim92/ftplugin/javascript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/javascript.vim
rename to software/vim/share/vim/vim92/ftplugin/javascript.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/javascriptreact.vim b/software/vim/share/vim/vim92/ftplugin/javascriptreact.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/javascriptreact.vim
rename to software/vim/share/vim/vim92/ftplugin/javascriptreact.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/jproperties.vim b/software/vim/share/vim/vim92/ftplugin/jproperties.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/jproperties.vim
rename to software/vim/share/vim/vim92/ftplugin/jproperties.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/json.vim b/software/vim/share/vim/vim92/ftplugin/json.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/json.vim
rename to software/vim/share/vim/vim92/ftplugin/json.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/jsonc.vim b/software/vim/share/vim/vim92/ftplugin/jsonc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/jsonc.vim
rename to software/vim/share/vim/vim92/ftplugin/jsonc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/jsonnet.vim b/software/vim/share/vim/vim92/ftplugin/jsonnet.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/jsonnet.vim
rename to software/vim/share/vim/vim92/ftplugin/jsonnet.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/jsp.vim b/software/vim/share/vim/vim92/ftplugin/jsp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/jsp.vim
rename to software/vim/share/vim/vim92/ftplugin/jsp.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/julia.vim b/software/vim/share/vim/vim92/ftplugin/julia.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/julia.vim
rename to software/vim/share/vim/vim92/ftplugin/julia.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/kconfig.vim b/software/vim/share/vim/vim92/ftplugin/kconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/kconfig.vim
rename to software/vim/share/vim/vim92/ftplugin/kconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/kwt.vim b/software/vim/share/vim/vim92/ftplugin/kwt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/kwt.vim
rename to software/vim/share/vim/vim92/ftplugin/kwt.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/ld.vim b/software/vim/share/vim/vim92/ftplugin/ld.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/ld.vim
rename to software/vim/share/vim/vim92/ftplugin/ld.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/less.vim b/software/vim/share/vim/vim92/ftplugin/less.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/less.vim
rename to software/vim/share/vim/vim92/ftplugin/less.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/lftp.vim b/software/vim/share/vim/vim92/ftplugin/lftp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/lftp.vim
rename to software/vim/share/vim/vim92/ftplugin/lftp.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/libao.vim b/software/vim/share/vim/vim92/ftplugin/libao.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/libao.vim
rename to software/vim/share/vim/vim92/ftplugin/libao.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/limits.vim b/software/vim/share/vim/vim92/ftplugin/limits.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/limits.vim
rename to software/vim/share/vim/vim92/ftplugin/limits.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/liquid.vim b/software/vim/share/vim/vim92/ftplugin/liquid.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/liquid.vim
rename to software/vim/share/vim/vim92/ftplugin/liquid.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/lisp.vim b/software/vim/share/vim/vim92/ftplugin/lisp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/lisp.vim
rename to software/vim/share/vim/vim92/ftplugin/lisp.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/logcheck.vim b/software/vim/share/vim/vim92/ftplugin/logcheck.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/logcheck.vim
rename to software/vim/share/vim/vim92/ftplugin/logcheck.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/loginaccess.vim b/software/vim/share/vim/vim92/ftplugin/loginaccess.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/loginaccess.vim
rename to software/vim/share/vim/vim92/ftplugin/loginaccess.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/logindefs.vim b/software/vim/share/vim/vim92/ftplugin/logindefs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/logindefs.vim
rename to software/vim/share/vim/vim92/ftplugin/logindefs.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/logtalk.dict b/software/vim/share/vim/vim92/ftplugin/logtalk.dict
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/logtalk.dict
rename to software/vim/share/vim/vim92/ftplugin/logtalk.dict
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/logtalk.vim b/software/vim/share/vim/vim92/ftplugin/logtalk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/logtalk.vim
rename to software/vim/share/vim/vim92/ftplugin/logtalk.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/lprolog.vim b/software/vim/share/vim/vim92/ftplugin/lprolog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/lprolog.vim
rename to software/vim/share/vim/vim92/ftplugin/lprolog.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/lua.vim b/software/vim/share/vim/vim92/ftplugin/lua.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/lua.vim
rename to software/vim/share/vim/vim92/ftplugin/lua.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/lynx.vim b/software/vim/share/vim/vim92/ftplugin/lynx.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/lynx.vim
rename to software/vim/share/vim/vim92/ftplugin/lynx.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/m3build.vim b/software/vim/share/vim/vim92/ftplugin/m3build.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/m3build.vim
rename to software/vim/share/vim/vim92/ftplugin/m3build.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/m3quake.vim b/software/vim/share/vim/vim92/ftplugin/m3quake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/m3quake.vim
rename to software/vim/share/vim/vim92/ftplugin/m3quake.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/m4.vim b/software/vim/share/vim/vim92/ftplugin/m4.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/m4.vim
rename to software/vim/share/vim/vim92/ftplugin/m4.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/mail.vim b/software/vim/share/vim/vim92/ftplugin/mail.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/mail.vim
rename to software/vim/share/vim/vim92/ftplugin/mail.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/mailaliases.vim b/software/vim/share/vim/vim92/ftplugin/mailaliases.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/mailaliases.vim
rename to software/vim/share/vim/vim92/ftplugin/mailaliases.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/mailcap.vim b/software/vim/share/vim/vim92/ftplugin/mailcap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/mailcap.vim
rename to software/vim/share/vim/vim92/ftplugin/mailcap.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/make.vim b/software/vim/share/vim/vim92/ftplugin/make.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/make.vim
rename to software/vim/share/vim/vim92/ftplugin/make.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/man.vim b/software/vim/share/vim/vim92/ftplugin/man.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/man.vim
rename to software/vim/share/vim/vim92/ftplugin/man.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/manconf.vim b/software/vim/share/vim/vim92/ftplugin/manconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/manconf.vim
rename to software/vim/share/vim/vim92/ftplugin/manconf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/markdown.vim b/software/vim/share/vim/vim92/ftplugin/markdown.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/markdown.vim
rename to software/vim/share/vim/vim92/ftplugin/markdown.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/masm.vim b/software/vim/share/vim/vim92/ftplugin/masm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/masm.vim
rename to software/vim/share/vim/vim92/ftplugin/masm.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/matlab.vim b/software/vim/share/vim/vim92/ftplugin/matlab.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/matlab.vim
rename to software/vim/share/vim/vim92/ftplugin/matlab.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/mermaid.vim b/software/vim/share/vim/vim92/ftplugin/mermaid.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/mermaid.vim
rename to software/vim/share/vim/vim92/ftplugin/mermaid.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/meson.vim b/software/vim/share/vim/vim92/ftplugin/meson.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/meson.vim
rename to software/vim/share/vim/vim92/ftplugin/meson.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/mf.vim b/software/vim/share/vim/vim92/ftplugin/mf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/mf.vim
rename to software/vim/share/vim/vim92/ftplugin/mf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/mma.vim b/software/vim/share/vim/vim92/ftplugin/mma.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/mma.vim
rename to software/vim/share/vim/vim92/ftplugin/mma.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/modconf.vim b/software/vim/share/vim/vim92/ftplugin/modconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/modconf.vim
rename to software/vim/share/vim/vim92/ftplugin/modconf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/modula2.vim b/software/vim/share/vim/vim92/ftplugin/modula2.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/modula2.vim
rename to software/vim/share/vim/vim92/ftplugin/modula2.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/modula3.vim b/software/vim/share/vim/vim92/ftplugin/modula3.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/modula3.vim
rename to software/vim/share/vim/vim92/ftplugin/modula3.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/mp.vim b/software/vim/share/vim/vim92/ftplugin/mp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/mp.vim
rename to software/vim/share/vim/vim92/ftplugin/mp.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/mplayerconf.vim b/software/vim/share/vim/vim92/ftplugin/mplayerconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/mplayerconf.vim
rename to software/vim/share/vim/vim92/ftplugin/mplayerconf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/mrxvtrc.vim b/software/vim/share/vim/vim92/ftplugin/mrxvtrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/mrxvtrc.vim
rename to software/vim/share/vim/vim92/ftplugin/mrxvtrc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/msmessages.vim b/software/vim/share/vim/vim92/ftplugin/msmessages.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/msmessages.vim
rename to software/vim/share/vim/vim92/ftplugin/msmessages.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/muttrc.vim b/software/vim/share/vim/vim92/ftplugin/muttrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/muttrc.vim
rename to software/vim/share/vim/vim92/ftplugin/muttrc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/nanorc.vim b/software/vim/share/vim/vim92/ftplugin/nanorc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/nanorc.vim
rename to software/vim/share/vim/vim92/ftplugin/nanorc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/neomuttrc.vim b/software/vim/share/vim/vim92/ftplugin/neomuttrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/neomuttrc.vim
rename to software/vim/share/vim/vim92/ftplugin/neomuttrc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/netrc.vim b/software/vim/share/vim/vim92/ftplugin/netrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/netrc.vim
rename to software/vim/share/vim/vim92/ftplugin/netrc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/nginx.vim b/software/vim/share/vim/vim92/ftplugin/nginx.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/nginx.vim
rename to software/vim/share/vim/vim92/ftplugin/nginx.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/nroff.vim b/software/vim/share/vim/vim92/ftplugin/nroff.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/nroff.vim
rename to software/vim/share/vim/vim92/ftplugin/nroff.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/nsis.vim b/software/vim/share/vim/vim92/ftplugin/nsis.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/nsis.vim
rename to software/vim/share/vim/vim92/ftplugin/nsis.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/objc.vim b/software/vim/share/vim/vim92/ftplugin/objc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/objc.vim
rename to software/vim/share/vim/vim92/ftplugin/objc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/obse.vim b/software/vim/share/vim/vim92/ftplugin/obse.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/obse.vim
rename to software/vim/share/vim/vim92/ftplugin/obse.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/ocaml.vim b/software/vim/share/vim/vim92/ftplugin/ocaml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/ocaml.vim
rename to software/vim/share/vim/vim92/ftplugin/ocaml.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/occam.vim b/software/vim/share/vim/vim92/ftplugin/occam.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/occam.vim
rename to software/vim/share/vim/vim92/ftplugin/occam.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/octave.vim b/software/vim/share/vim/vim92/ftplugin/octave.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/octave.vim
rename to software/vim/share/vim/vim92/ftplugin/octave.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/openvpn.vim b/software/vim/share/vim/vim92/ftplugin/openvpn.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/openvpn.vim
rename to software/vim/share/vim/vim92/ftplugin/openvpn.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/pamconf.vim b/software/vim/share/vim/vim92/ftplugin/pamconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/pamconf.vim
rename to software/vim/share/vim/vim92/ftplugin/pamconf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/pascal.vim b/software/vim/share/vim/vim92/ftplugin/pascal.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/pascal.vim
rename to software/vim/share/vim/vim92/ftplugin/pascal.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/passwd.vim b/software/vim/share/vim/vim92/ftplugin/passwd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/passwd.vim
rename to software/vim/share/vim/vim92/ftplugin/passwd.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/pbtxt.vim b/software/vim/share/vim/vim92/ftplugin/pbtxt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/pbtxt.vim
rename to software/vim/share/vim/vim92/ftplugin/pbtxt.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/pdf.vim b/software/vim/share/vim/vim92/ftplugin/pdf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/pdf.vim
rename to software/vim/share/vim/vim92/ftplugin/pdf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/perl.vim b/software/vim/share/vim/vim92/ftplugin/perl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/perl.vim
rename to software/vim/share/vim/vim92/ftplugin/perl.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/php.vim b/software/vim/share/vim/vim92/ftplugin/php.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/php.vim
rename to software/vim/share/vim/vim92/ftplugin/php.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/pinfo.vim b/software/vim/share/vim/vim92/ftplugin/pinfo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/pinfo.vim
rename to software/vim/share/vim/vim92/ftplugin/pinfo.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/plaintex.vim b/software/vim/share/vim/vim92/ftplugin/plaintex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/plaintex.vim
rename to software/vim/share/vim/vim92/ftplugin/plaintex.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/pod.vim b/software/vim/share/vim/vim92/ftplugin/pod.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/pod.vim
rename to software/vim/share/vim/vim92/ftplugin/pod.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/poefilter.vim b/software/vim/share/vim/vim92/ftplugin/poefilter.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/poefilter.vim
rename to software/vim/share/vim/vim92/ftplugin/poefilter.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/poke.vim b/software/vim/share/vim/vim92/ftplugin/poke.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/poke.vim
rename to software/vim/share/vim/vim92/ftplugin/poke.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/postscr.vim b/software/vim/share/vim/vim92/ftplugin/postscr.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/postscr.vim
rename to software/vim/share/vim/vim92/ftplugin/postscr.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/procmail.vim b/software/vim/share/vim/vim92/ftplugin/procmail.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/procmail.vim
rename to software/vim/share/vim/vim92/ftplugin/procmail.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/prolog.vim b/software/vim/share/vim/vim92/ftplugin/prolog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/prolog.vim
rename to software/vim/share/vim/vim92/ftplugin/prolog.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/protocols.vim b/software/vim/share/vim/vim92/ftplugin/protocols.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/protocols.vim
rename to software/vim/share/vim/vim92/ftplugin/protocols.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/ps1.vim b/software/vim/share/vim/vim92/ftplugin/ps1.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/ps1.vim
rename to software/vim/share/vim/vim92/ftplugin/ps1.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/ps1xml.vim b/software/vim/share/vim/vim92/ftplugin/ps1xml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/ps1xml.vim
rename to software/vim/share/vim/vim92/ftplugin/ps1xml.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/pyrex.vim b/software/vim/share/vim/vim92/ftplugin/pyrex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/pyrex.vim
rename to software/vim/share/vim/vim92/ftplugin/pyrex.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/python.vim b/software/vim/share/vim/vim92/ftplugin/python.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/python.vim
rename to software/vim/share/vim/vim92/ftplugin/python.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/qb64.vim b/software/vim/share/vim/vim92/ftplugin/qb64.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/qb64.vim
rename to software/vim/share/vim/vim92/ftplugin/qb64.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/qf.vim b/software/vim/share/vim/vim92/ftplugin/qf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/qf.vim
rename to software/vim/share/vim/vim92/ftplugin/qf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/quake.vim b/software/vim/share/vim/vim92/ftplugin/quake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/quake.vim
rename to software/vim/share/vim/vim92/ftplugin/quake.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/quarto.vim b/software/vim/share/vim/vim92/ftplugin/quarto.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/quarto.vim
rename to software/vim/share/vim/vim92/ftplugin/quarto.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/r.vim b/software/vim/share/vim/vim92/ftplugin/r.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/r.vim
rename to software/vim/share/vim/vim92/ftplugin/r.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/racc.vim b/software/vim/share/vim/vim92/ftplugin/racc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/racc.vim
rename to software/vim/share/vim/vim92/ftplugin/racc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/racket.vim b/software/vim/share/vim/vim92/ftplugin/racket.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/racket.vim
rename to software/vim/share/vim/vim92/ftplugin/racket.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/raku.vim b/software/vim/share/vim/vim92/ftplugin/raku.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/raku.vim
rename to software/vim/share/vim/vim92/ftplugin/raku.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/readline.vim b/software/vim/share/vim/vim92/ftplugin/readline.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/readline.vim
rename to software/vim/share/vim/vim92/ftplugin/readline.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/registry.vim b/software/vim/share/vim/vim92/ftplugin/registry.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/registry.vim
rename to software/vim/share/vim/vim92/ftplugin/registry.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/reva.vim b/software/vim/share/vim/vim92/ftplugin/reva.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/reva.vim
rename to software/vim/share/vim/vim92/ftplugin/reva.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/rhelp.vim b/software/vim/share/vim/vim92/ftplugin/rhelp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/rhelp.vim
rename to software/vim/share/vim/vim92/ftplugin/rhelp.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/rmd.vim b/software/vim/share/vim/vim92/ftplugin/rmd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/rmd.vim
rename to software/vim/share/vim/vim92/ftplugin/rmd.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/rnc.vim b/software/vim/share/vim/vim92/ftplugin/rnc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/rnc.vim
rename to software/vim/share/vim/vim92/ftplugin/rnc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/rnoweb.vim b/software/vim/share/vim/vim92/ftplugin/rnoweb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/rnoweb.vim
rename to software/vim/share/vim/vim92/ftplugin/rnoweb.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/routeros.vim b/software/vim/share/vim/vim92/ftplugin/routeros.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/routeros.vim
rename to software/vim/share/vim/vim92/ftplugin/routeros.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/rpl.vim b/software/vim/share/vim/vim92/ftplugin/rpl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/rpl.vim
rename to software/vim/share/vim/vim92/ftplugin/rpl.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/rrst.vim b/software/vim/share/vim/vim92/ftplugin/rrst.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/rrst.vim
rename to software/vim/share/vim/vim92/ftplugin/rrst.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/rst.vim b/software/vim/share/vim/vim92/ftplugin/rst.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/rst.vim
rename to software/vim/share/vim/vim92/ftplugin/rst.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/ruby.vim b/software/vim/share/vim/vim92/ftplugin/ruby.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/ruby.vim
rename to software/vim/share/vim/vim92/ftplugin/ruby.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/rust.vim b/software/vim/share/vim/vim92/ftplugin/rust.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/rust.vim
rename to software/vim/share/vim/vim92/ftplugin/rust.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/sass.vim b/software/vim/share/vim/vim92/ftplugin/sass.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/sass.vim
rename to software/vim/share/vim/vim92/ftplugin/sass.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/sbt.vim b/software/vim/share/vim/vim92/ftplugin/sbt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/sbt.vim
rename to software/vim/share/vim/vim92/ftplugin/sbt.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/scala.vim b/software/vim/share/vim/vim92/ftplugin/scala.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/scala.vim
rename to software/vim/share/vim/vim92/ftplugin/scala.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/scdoc.vim b/software/vim/share/vim/vim92/ftplugin/scdoc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/scdoc.vim
rename to software/vim/share/vim/vim92/ftplugin/scdoc.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/scheme.vim b/software/vim/share/vim/vim92/ftplugin/scheme.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/scheme.vim
rename to software/vim/share/vim/vim92/ftplugin/scheme.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/screen.vim b/software/vim/share/vim/vim92/ftplugin/screen.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/screen.vim
rename to software/vim/share/vim/vim92/ftplugin/screen.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/scss.vim b/software/vim/share/vim/vim92/ftplugin/scss.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/scss.vim
rename to software/vim/share/vim/vim92/ftplugin/scss.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/sensors.vim b/software/vim/share/vim/vim92/ftplugin/sensors.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/sensors.vim
rename to software/vim/share/vim/vim92/ftplugin/sensors.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/services.vim b/software/vim/share/vim/vim92/ftplugin/services.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/services.vim
rename to software/vim/share/vim/vim92/ftplugin/services.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/setserial.vim b/software/vim/share/vim/vim92/ftplugin/setserial.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/setserial.vim
rename to software/vim/share/vim/vim92/ftplugin/setserial.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/sexplib.vim b/software/vim/share/vim/vim92/ftplugin/sexplib.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/sexplib.vim
rename to software/vim/share/vim/vim92/ftplugin/sexplib.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/sgml.vim b/software/vim/share/vim/vim92/ftplugin/sgml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/sgml.vim
rename to software/vim/share/vim/vim92/ftplugin/sgml.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/sh.vim b/software/vim/share/vim/vim92/ftplugin/sh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/sh.vim
rename to software/vim/share/vim/vim92/ftplugin/sh.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/sieve.vim b/software/vim/share/vim/vim92/ftplugin/sieve.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/sieve.vim
rename to software/vim/share/vim/vim92/ftplugin/sieve.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/slpconf.vim b/software/vim/share/vim/vim92/ftplugin/slpconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/slpconf.vim
rename to software/vim/share/vim/vim92/ftplugin/slpconf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/slpreg.vim b/software/vim/share/vim/vim92/ftplugin/slpreg.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/slpreg.vim
rename to software/vim/share/vim/vim92/ftplugin/slpreg.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/slpspi.vim b/software/vim/share/vim/vim92/ftplugin/slpspi.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/slpspi.vim
rename to software/vim/share/vim/vim92/ftplugin/slpspi.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/solution.vim b/software/vim/share/vim/vim92/ftplugin/solution.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/solution.vim
rename to software/vim/share/vim/vim92/ftplugin/solution.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/spec.vim b/software/vim/share/vim/vim92/ftplugin/spec.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/spec.vim
rename to software/vim/share/vim/vim92/ftplugin/spec.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/sql.vim b/software/vim/share/vim/vim92/ftplugin/sql.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/sql.vim
rename to software/vim/share/vim/vim92/ftplugin/sql.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/ssa.vim b/software/vim/share/vim/vim92/ftplugin/ssa.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/ssa.vim
rename to software/vim/share/vim/vim92/ftplugin/ssa.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/sshconfig.vim b/software/vim/share/vim/vim92/ftplugin/sshconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/sshconfig.vim
rename to software/vim/share/vim/vim92/ftplugin/sshconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/sudoers.vim b/software/vim/share/vim/vim92/ftplugin/sudoers.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/sudoers.vim
rename to software/vim/share/vim/vim92/ftplugin/sudoers.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/svg.vim b/software/vim/share/vim/vim92/ftplugin/svg.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/svg.vim
rename to software/vim/share/vim/vim92/ftplugin/svg.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/swayconfig.vim b/software/vim/share/vim/vim92/ftplugin/swayconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/swayconfig.vim
rename to software/vim/share/vim/vim92/ftplugin/swayconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/swift.vim b/software/vim/share/vim/vim92/ftplugin/swift.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/swift.vim
rename to software/vim/share/vim/vim92/ftplugin/swift.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/swiftgyb.vim b/software/vim/share/vim/vim92/ftplugin/swiftgyb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/swiftgyb.vim
rename to software/vim/share/vim/vim92/ftplugin/swiftgyb.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/sysctl.vim b/software/vim/share/vim/vim92/ftplugin/sysctl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/sysctl.vim
rename to software/vim/share/vim/vim92/ftplugin/sysctl.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/systemd.vim b/software/vim/share/vim/vim92/ftplugin/systemd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/systemd.vim
rename to software/vim/share/vim/vim92/ftplugin/systemd.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/systemverilog.vim b/software/vim/share/vim/vim92/ftplugin/systemverilog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/systemverilog.vim
rename to software/vim/share/vim/vim92/ftplugin/systemverilog.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/tap.vim b/software/vim/share/vim/vim92/ftplugin/tap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/tap.vim
rename to software/vim/share/vim/vim92/ftplugin/tap.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/tcl.vim b/software/vim/share/vim/vim92/ftplugin/tcl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/tcl.vim
rename to software/vim/share/vim/vim92/ftplugin/tcl.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/tcsh.vim b/software/vim/share/vim/vim92/ftplugin/tcsh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/tcsh.vim
rename to software/vim/share/vim/vim92/ftplugin/tcsh.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/terminfo.vim b/software/vim/share/vim/vim92/ftplugin/terminfo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/terminfo.vim
rename to software/vim/share/vim/vim92/ftplugin/terminfo.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/tex.vim b/software/vim/share/vim/vim92/ftplugin/tex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/tex.vim
rename to software/vim/share/vim/vim92/ftplugin/tex.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/text.vim b/software/vim/share/vim/vim92/ftplugin/text.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/text.vim
rename to software/vim/share/vim/vim92/ftplugin/text.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/tidy.vim b/software/vim/share/vim/vim92/ftplugin/tidy.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/tidy.vim
rename to software/vim/share/vim/vim92/ftplugin/tidy.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/tmux.vim b/software/vim/share/vim/vim92/ftplugin/tmux.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/tmux.vim
rename to software/vim/share/vim/vim92/ftplugin/tmux.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/toml.vim b/software/vim/share/vim/vim92/ftplugin/toml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/toml.vim
rename to software/vim/share/vim/vim92/ftplugin/toml.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/treetop.vim b/software/vim/share/vim/vim92/ftplugin/treetop.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/treetop.vim
rename to software/vim/share/vim/vim92/ftplugin/treetop.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/tt2html.vim b/software/vim/share/vim/vim92/ftplugin/tt2html.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/tt2html.vim
rename to software/vim/share/vim/vim92/ftplugin/tt2html.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/typescript.vim b/software/vim/share/vim/vim92/ftplugin/typescript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/typescript.vim
rename to software/vim/share/vim/vim92/ftplugin/typescript.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/typescriptreact.vim b/software/vim/share/vim/vim92/ftplugin/typescriptreact.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/typescriptreact.vim
rename to software/vim/share/vim/vim92/ftplugin/typescriptreact.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/udevconf.vim b/software/vim/share/vim/vim92/ftplugin/udevconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/udevconf.vim
rename to software/vim/share/vim/vim92/ftplugin/udevconf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/udevperm.vim b/software/vim/share/vim/vim92/ftplugin/udevperm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/udevperm.vim
rename to software/vim/share/vim/vim92/ftplugin/udevperm.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/udevrules.vim b/software/vim/share/vim/vim92/ftplugin/udevrules.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/udevrules.vim
rename to software/vim/share/vim/vim92/ftplugin/udevrules.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/updatedb.vim b/software/vim/share/vim/vim92/ftplugin/updatedb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/updatedb.vim
rename to software/vim/share/vim/vim92/ftplugin/updatedb.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/vb.vim b/software/vim/share/vim/vim92/ftplugin/vb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/vb.vim
rename to software/vim/share/vim/vim92/ftplugin/vb.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/vdf.vim b/software/vim/share/vim/vim92/ftplugin/vdf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/vdf.vim
rename to software/vim/share/vim/vim92/ftplugin/vdf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/verilog.vim b/software/vim/share/vim/vim92/ftplugin/verilog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/verilog.vim
rename to software/vim/share/vim/vim92/ftplugin/verilog.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/vhdl.vim b/software/vim/share/vim/vim92/ftplugin/vhdl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/vhdl.vim
rename to software/vim/share/vim/vim92/ftplugin/vhdl.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/vim.vim b/software/vim/share/vim/vim92/ftplugin/vim.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/vim.vim
rename to software/vim/share/vim/vim92/ftplugin/vim.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/vroom.vim b/software/vim/share/vim/vim92/ftplugin/vroom.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/vroom.vim
rename to software/vim/share/vim/vim92/ftplugin/vroom.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/vue.vim b/software/vim/share/vim/vim92/ftplugin/vue.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/vue.vim
rename to software/vim/share/vim/vim92/ftplugin/vue.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/wast.vim b/software/vim/share/vim/vim92/ftplugin/wast.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/wast.vim
rename to software/vim/share/vim/vim92/ftplugin/wast.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/wget.vim b/software/vim/share/vim/vim92/ftplugin/wget.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/wget.vim
rename to software/vim/share/vim/vim92/ftplugin/wget.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/wget2.vim b/software/vim/share/vim/vim92/ftplugin/wget2.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/wget2.vim
rename to software/vim/share/vim/vim92/ftplugin/wget2.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/xdefaults.vim b/software/vim/share/vim/vim92/ftplugin/xdefaults.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/xdefaults.vim
rename to software/vim/share/vim/vim92/ftplugin/xdefaults.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/xf86conf.vim b/software/vim/share/vim/vim92/ftplugin/xf86conf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/xf86conf.vim
rename to software/vim/share/vim/vim92/ftplugin/xf86conf.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/xhtml.vim b/software/vim/share/vim/vim92/ftplugin/xhtml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/xhtml.vim
rename to software/vim/share/vim/vim92/ftplugin/xhtml.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/xinetd.vim b/software/vim/share/vim/vim92/ftplugin/xinetd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/xinetd.vim
rename to software/vim/share/vim/vim92/ftplugin/xinetd.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/xml.vim b/software/vim/share/vim/vim92/ftplugin/xml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/xml.vim
rename to software/vim/share/vim/vim92/ftplugin/xml.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/xmodmap.vim b/software/vim/share/vim/vim92/ftplugin/xmodmap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/xmodmap.vim
rename to software/vim/share/vim/vim92/ftplugin/xmodmap.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/xs.vim b/software/vim/share/vim/vim92/ftplugin/xs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/xs.vim
rename to software/vim/share/vim/vim92/ftplugin/xs.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/xsd.vim b/software/vim/share/vim/vim92/ftplugin/xsd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/xsd.vim
rename to software/vim/share/vim/vim92/ftplugin/xsd.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/xslt.vim b/software/vim/share/vim/vim92/ftplugin/xslt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/xslt.vim
rename to software/vim/share/vim/vim92/ftplugin/xslt.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/yaml.vim b/software/vim/share/vim/vim92/ftplugin/yaml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/yaml.vim
rename to software/vim/share/vim/vim92/ftplugin/yaml.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/zig.vim b/software/vim/share/vim/vim92/ftplugin/zig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/zig.vim
rename to software/vim/share/vim/vim92/ftplugin/zig.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/zimbu.vim b/software/vim/share/vim/vim92/ftplugin/zimbu.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/zimbu.vim
rename to software/vim/share/vim/vim92/ftplugin/zimbu.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugin/zsh.vim b/software/vim/share/vim/vim92/ftplugin/zsh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugin/zsh.vim
rename to software/vim/share/vim/vim92/ftplugin/zsh.vim
diff --git a/registry/software/vim/share/vim/vim92/ftplugof.vim b/software/vim/share/vim/vim92/ftplugof.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/ftplugof.vim
rename to software/vim/share/vim/vim92/ftplugof.vim
diff --git a/registry/software/vim/share/vim/vim92/gvimrc_example.vim b/software/vim/share/vim/vim92/gvimrc_example.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/gvimrc_example.vim
rename to software/vim/share/vim/vim92/gvimrc_example.vim
diff --git a/registry/software/vim/share/vim/vim92/indent.vim b/software/vim/share/vim/vim92/indent.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent.vim
rename to software/vim/share/vim/vim92/indent.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/aap.vim b/software/vim/share/vim/vim92/indent/aap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/aap.vim
rename to software/vim/share/vim/vim92/indent/aap.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/ada.vim b/software/vim/share/vim/vim92/indent/ada.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/ada.vim
rename to software/vim/share/vim/vim92/indent/ada.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/ant.vim b/software/vim/share/vim/vim92/indent/ant.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/ant.vim
rename to software/vim/share/vim/vim92/indent/ant.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/automake.vim b/software/vim/share/vim/vim92/indent/automake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/automake.vim
rename to software/vim/share/vim/vim92/indent/automake.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/awk.vim b/software/vim/share/vim/vim92/indent/awk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/awk.vim
rename to software/vim/share/vim/vim92/indent/awk.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/bash.vim b/software/vim/share/vim/vim92/indent/bash.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/bash.vim
rename to software/vim/share/vim/vim92/indent/bash.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/basic.vim b/software/vim/share/vim/vim92/indent/basic.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/basic.vim
rename to software/vim/share/vim/vim92/indent/basic.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/bib.vim b/software/vim/share/vim/vim92/indent/bib.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/bib.vim
rename to software/vim/share/vim/vim92/indent/bib.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/bitbake.vim b/software/vim/share/vim/vim92/indent/bitbake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/bitbake.vim
rename to software/vim/share/vim/vim92/indent/bitbake.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/bst.vim b/software/vim/share/vim/vim92/indent/bst.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/bst.vim
rename to software/vim/share/vim/vim92/indent/bst.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/bzl.vim b/software/vim/share/vim/vim92/indent/bzl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/bzl.vim
rename to software/vim/share/vim/vim92/indent/bzl.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/c.vim b/software/vim/share/vim/vim92/indent/c.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/c.vim
rename to software/vim/share/vim/vim92/indent/c.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/cdl.vim b/software/vim/share/vim/vim92/indent/cdl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/cdl.vim
rename to software/vim/share/vim/vim92/indent/cdl.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/ch.vim b/software/vim/share/vim/vim92/indent/ch.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/ch.vim
rename to software/vim/share/vim/vim92/indent/ch.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/chaiscript.vim b/software/vim/share/vim/vim92/indent/chaiscript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/chaiscript.vim
rename to software/vim/share/vim/vim92/indent/chaiscript.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/changelog.vim b/software/vim/share/vim/vim92/indent/changelog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/changelog.vim
rename to software/vim/share/vim/vim92/indent/changelog.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/chatito.vim b/software/vim/share/vim/vim92/indent/chatito.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/chatito.vim
rename to software/vim/share/vim/vim92/indent/chatito.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/clojure.vim b/software/vim/share/vim/vim92/indent/clojure.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/clojure.vim
rename to software/vim/share/vim/vim92/indent/clojure.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/cmake.vim b/software/vim/share/vim/vim92/indent/cmake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/cmake.vim
rename to software/vim/share/vim/vim92/indent/cmake.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/cobol.vim b/software/vim/share/vim/vim92/indent/cobol.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/cobol.vim
rename to software/vim/share/vim/vim92/indent/cobol.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/config.vim b/software/vim/share/vim/vim92/indent/config.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/config.vim
rename to software/vim/share/vim/vim92/indent/config.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/context.vim b/software/vim/share/vim/vim92/indent/context.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/context.vim
rename to software/vim/share/vim/vim92/indent/context.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/cpp.vim b/software/vim/share/vim/vim92/indent/cpp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/cpp.vim
rename to software/vim/share/vim/vim92/indent/cpp.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/cs.vim b/software/vim/share/vim/vim92/indent/cs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/cs.vim
rename to software/vim/share/vim/vim92/indent/cs.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/css.vim b/software/vim/share/vim/vim92/indent/css.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/css.vim
rename to software/vim/share/vim/vim92/indent/css.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/cucumber.vim b/software/vim/share/vim/vim92/indent/cucumber.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/cucumber.vim
rename to software/vim/share/vim/vim92/indent/cucumber.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/cuda.vim b/software/vim/share/vim/vim92/indent/cuda.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/cuda.vim
rename to software/vim/share/vim/vim92/indent/cuda.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/d.vim b/software/vim/share/vim/vim92/indent/d.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/d.vim
rename to software/vim/share/vim/vim92/indent/d.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/dictconf.vim b/software/vim/share/vim/vim92/indent/dictconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/dictconf.vim
rename to software/vim/share/vim/vim92/indent/dictconf.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/dictdconf.vim b/software/vim/share/vim/vim92/indent/dictdconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/dictdconf.vim
rename to software/vim/share/vim/vim92/indent/dictdconf.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/docbk.vim b/software/vim/share/vim/vim92/indent/docbk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/docbk.vim
rename to software/vim/share/vim/vim92/indent/docbk.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/dosbatch.vim b/software/vim/share/vim/vim92/indent/dosbatch.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/dosbatch.vim
rename to software/vim/share/vim/vim92/indent/dosbatch.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/dtd.vim b/software/vim/share/vim/vim92/indent/dtd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/dtd.vim
rename to software/vim/share/vim/vim92/indent/dtd.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/dtrace.vim b/software/vim/share/vim/vim92/indent/dtrace.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/dtrace.vim
rename to software/vim/share/vim/vim92/indent/dtrace.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/dune.vim b/software/vim/share/vim/vim92/indent/dune.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/dune.vim
rename to software/vim/share/vim/vim92/indent/dune.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/dylan.vim b/software/vim/share/vim/vim92/indent/dylan.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/dylan.vim
rename to software/vim/share/vim/vim92/indent/dylan.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/eiffel.vim b/software/vim/share/vim/vim92/indent/eiffel.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/eiffel.vim
rename to software/vim/share/vim/vim92/indent/eiffel.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/elm.vim b/software/vim/share/vim/vim92/indent/elm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/elm.vim
rename to software/vim/share/vim/vim92/indent/elm.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/erlang.vim b/software/vim/share/vim/vim92/indent/erlang.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/erlang.vim
rename to software/vim/share/vim/vim92/indent/erlang.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/eruby.vim b/software/vim/share/vim/vim92/indent/eruby.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/eruby.vim
rename to software/vim/share/vim/vim92/indent/eruby.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/eterm.vim b/software/vim/share/vim/vim92/indent/eterm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/eterm.vim
rename to software/vim/share/vim/vim92/indent/eterm.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/expect.vim b/software/vim/share/vim/vim92/indent/expect.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/expect.vim
rename to software/vim/share/vim/vim92/indent/expect.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/falcon.vim b/software/vim/share/vim/vim92/indent/falcon.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/falcon.vim
rename to software/vim/share/vim/vim92/indent/falcon.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/fennel.vim b/software/vim/share/vim/vim92/indent/fennel.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/fennel.vim
rename to software/vim/share/vim/vim92/indent/fennel.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/fish.vim b/software/vim/share/vim/vim92/indent/fish.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/fish.vim
rename to software/vim/share/vim/vim92/indent/fish.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/fortran.vim b/software/vim/share/vim/vim92/indent/fortran.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/fortran.vim
rename to software/vim/share/vim/vim92/indent/fortran.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/framescript.vim b/software/vim/share/vim/vim92/indent/framescript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/framescript.vim
rename to software/vim/share/vim/vim92/indent/framescript.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/freebasic.vim b/software/vim/share/vim/vim92/indent/freebasic.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/freebasic.vim
rename to software/vim/share/vim/vim92/indent/freebasic.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/gdscript.vim b/software/vim/share/vim/vim92/indent/gdscript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/gdscript.vim
rename to software/vim/share/vim/vim92/indent/gdscript.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/gitconfig.vim b/software/vim/share/vim/vim92/indent/gitconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/gitconfig.vim
rename to software/vim/share/vim/vim92/indent/gitconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/gitolite.vim b/software/vim/share/vim/vim92/indent/gitolite.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/gitolite.vim
rename to software/vim/share/vim/vim92/indent/gitolite.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/go.vim b/software/vim/share/vim/vim92/indent/go.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/go.vim
rename to software/vim/share/vim/vim92/indent/go.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/gyp.vim b/software/vim/share/vim/vim92/indent/gyp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/gyp.vim
rename to software/vim/share/vim/vim92/indent/gyp.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/haml.vim b/software/vim/share/vim/vim92/indent/haml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/haml.vim
rename to software/vim/share/vim/vim92/indent/haml.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/hamster.vim b/software/vim/share/vim/vim92/indent/hamster.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/hamster.vim
rename to software/vim/share/vim/vim92/indent/hamster.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/hare.vim b/software/vim/share/vim/vim92/indent/hare.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/hare.vim
rename to software/vim/share/vim/vim92/indent/hare.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/hog.vim b/software/vim/share/vim/vim92/indent/hog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/hog.vim
rename to software/vim/share/vim/vim92/indent/hog.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/html.vim b/software/vim/share/vim/vim92/indent/html.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/html.vim
rename to software/vim/share/vim/vim92/indent/html.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/htmldjango.vim b/software/vim/share/vim/vim92/indent/htmldjango.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/htmldjango.vim
rename to software/vim/share/vim/vim92/indent/htmldjango.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/idlang.vim b/software/vim/share/vim/vim92/indent/idlang.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/idlang.vim
rename to software/vim/share/vim/vim92/indent/idlang.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/ishd.vim b/software/vim/share/vim/vim92/indent/ishd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/ishd.vim
rename to software/vim/share/vim/vim92/indent/ishd.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/j.vim b/software/vim/share/vim/vim92/indent/j.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/j.vim
rename to software/vim/share/vim/vim92/indent/j.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/java.vim b/software/vim/share/vim/vim92/indent/java.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/java.vim
rename to software/vim/share/vim/vim92/indent/java.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/javascript.vim b/software/vim/share/vim/vim92/indent/javascript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/javascript.vim
rename to software/vim/share/vim/vim92/indent/javascript.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/javascriptreact.vim b/software/vim/share/vim/vim92/indent/javascriptreact.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/javascriptreact.vim
rename to software/vim/share/vim/vim92/indent/javascriptreact.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/json.vim b/software/vim/share/vim/vim92/indent/json.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/json.vim
rename to software/vim/share/vim/vim92/indent/json.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/jsonc.vim b/software/vim/share/vim/vim92/indent/jsonc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/jsonc.vim
rename to software/vim/share/vim/vim92/indent/jsonc.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/jsp.vim b/software/vim/share/vim/vim92/indent/jsp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/jsp.vim
rename to software/vim/share/vim/vim92/indent/jsp.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/julia.vim b/software/vim/share/vim/vim92/indent/julia.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/julia.vim
rename to software/vim/share/vim/vim92/indent/julia.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/krl.vim b/software/vim/share/vim/vim92/indent/krl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/krl.vim
rename to software/vim/share/vim/vim92/indent/krl.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/ld.vim b/software/vim/share/vim/vim92/indent/ld.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/ld.vim
rename to software/vim/share/vim/vim92/indent/ld.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/less.vim b/software/vim/share/vim/vim92/indent/less.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/less.vim
rename to software/vim/share/vim/vim92/indent/less.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/lifelines.vim b/software/vim/share/vim/vim92/indent/lifelines.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/lifelines.vim
rename to software/vim/share/vim/vim92/indent/lifelines.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/liquid.vim b/software/vim/share/vim/vim92/indent/liquid.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/liquid.vim
rename to software/vim/share/vim/vim92/indent/liquid.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/lisp.vim b/software/vim/share/vim/vim92/indent/lisp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/lisp.vim
rename to software/vim/share/vim/vim92/indent/lisp.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/logtalk.vim b/software/vim/share/vim/vim92/indent/logtalk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/logtalk.vim
rename to software/vim/share/vim/vim92/indent/logtalk.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/lua.vim b/software/vim/share/vim/vim92/indent/lua.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/lua.vim
rename to software/vim/share/vim/vim92/indent/lua.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/mail.vim b/software/vim/share/vim/vim92/indent/mail.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/mail.vim
rename to software/vim/share/vim/vim92/indent/mail.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/make.vim b/software/vim/share/vim/vim92/indent/make.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/make.vim
rename to software/vim/share/vim/vim92/indent/make.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/matlab.vim b/software/vim/share/vim/vim92/indent/matlab.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/matlab.vim
rename to software/vim/share/vim/vim92/indent/matlab.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/meson.vim b/software/vim/share/vim/vim92/indent/meson.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/meson.vim
rename to software/vim/share/vim/vim92/indent/meson.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/mf.vim b/software/vim/share/vim/vim92/indent/mf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/mf.vim
rename to software/vim/share/vim/vim92/indent/mf.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/mma.vim b/software/vim/share/vim/vim92/indent/mma.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/mma.vim
rename to software/vim/share/vim/vim92/indent/mma.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/mp.vim b/software/vim/share/vim/vim92/indent/mp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/mp.vim
rename to software/vim/share/vim/vim92/indent/mp.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/nginx.vim b/software/vim/share/vim/vim92/indent/nginx.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/nginx.vim
rename to software/vim/share/vim/vim92/indent/nginx.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/nsis.vim b/software/vim/share/vim/vim92/indent/nsis.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/nsis.vim
rename to software/vim/share/vim/vim92/indent/nsis.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/objc.vim b/software/vim/share/vim/vim92/indent/objc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/objc.vim
rename to software/vim/share/vim/vim92/indent/objc.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/obse.vim b/software/vim/share/vim/vim92/indent/obse.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/obse.vim
rename to software/vim/share/vim/vim92/indent/obse.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/ocaml.vim b/software/vim/share/vim/vim92/indent/ocaml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/ocaml.vim
rename to software/vim/share/vim/vim92/indent/ocaml.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/occam.vim b/software/vim/share/vim/vim92/indent/occam.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/occam.vim
rename to software/vim/share/vim/vim92/indent/occam.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/pascal.vim b/software/vim/share/vim/vim92/indent/pascal.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/pascal.vim
rename to software/vim/share/vim/vim92/indent/pascal.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/perl.vim b/software/vim/share/vim/vim92/indent/perl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/perl.vim
rename to software/vim/share/vim/vim92/indent/perl.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/php.vim b/software/vim/share/vim/vim92/indent/php.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/php.vim
rename to software/vim/share/vim/vim92/indent/php.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/postscr.vim b/software/vim/share/vim/vim92/indent/postscr.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/postscr.vim
rename to software/vim/share/vim/vim92/indent/postscr.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/pov.vim b/software/vim/share/vim/vim92/indent/pov.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/pov.vim
rename to software/vim/share/vim/vim92/indent/pov.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/prolog.vim b/software/vim/share/vim/vim92/indent/prolog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/prolog.vim
rename to software/vim/share/vim/vim92/indent/prolog.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/ps1.vim b/software/vim/share/vim/vim92/indent/ps1.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/ps1.vim
rename to software/vim/share/vim/vim92/indent/ps1.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/pyrex.vim b/software/vim/share/vim/vim92/indent/pyrex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/pyrex.vim
rename to software/vim/share/vim/vim92/indent/pyrex.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/python.vim b/software/vim/share/vim/vim92/indent/python.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/python.vim
rename to software/vim/share/vim/vim92/indent/python.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/qb64.vim b/software/vim/share/vim/vim92/indent/qb64.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/qb64.vim
rename to software/vim/share/vim/vim92/indent/qb64.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/quarto.vim b/software/vim/share/vim/vim92/indent/quarto.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/quarto.vim
rename to software/vim/share/vim/vim92/indent/quarto.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/r.vim b/software/vim/share/vim/vim92/indent/r.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/r.vim
rename to software/vim/share/vim/vim92/indent/r.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/racket.vim b/software/vim/share/vim/vim92/indent/racket.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/racket.vim
rename to software/vim/share/vim/vim92/indent/racket.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/raku.vim b/software/vim/share/vim/vim92/indent/raku.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/raku.vim
rename to software/vim/share/vim/vim92/indent/raku.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/raml.vim b/software/vim/share/vim/vim92/indent/raml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/raml.vim
rename to software/vim/share/vim/vim92/indent/raml.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/readline.vim b/software/vim/share/vim/vim92/indent/readline.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/readline.vim
rename to software/vim/share/vim/vim92/indent/readline.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/rhelp.vim b/software/vim/share/vim/vim92/indent/rhelp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/rhelp.vim
rename to software/vim/share/vim/vim92/indent/rhelp.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/rmd.vim b/software/vim/share/vim/vim92/indent/rmd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/rmd.vim
rename to software/vim/share/vim/vim92/indent/rmd.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/rnoweb.vim b/software/vim/share/vim/vim92/indent/rnoweb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/rnoweb.vim
rename to software/vim/share/vim/vim92/indent/rnoweb.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/rpl.vim b/software/vim/share/vim/vim92/indent/rpl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/rpl.vim
rename to software/vim/share/vim/vim92/indent/rpl.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/rrst.vim b/software/vim/share/vim/vim92/indent/rrst.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/rrst.vim
rename to software/vim/share/vim/vim92/indent/rrst.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/rst.vim b/software/vim/share/vim/vim92/indent/rst.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/rst.vim
rename to software/vim/share/vim/vim92/indent/rst.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/ruby.vim b/software/vim/share/vim/vim92/indent/ruby.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/ruby.vim
rename to software/vim/share/vim/vim92/indent/ruby.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/rust.vim b/software/vim/share/vim/vim92/indent/rust.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/rust.vim
rename to software/vim/share/vim/vim92/indent/rust.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/sas.vim b/software/vim/share/vim/vim92/indent/sas.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/sas.vim
rename to software/vim/share/vim/vim92/indent/sas.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/sass.vim b/software/vim/share/vim/vim92/indent/sass.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/sass.vim
rename to software/vim/share/vim/vim92/indent/sass.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/scala.vim b/software/vim/share/vim/vim92/indent/scala.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/scala.vim
rename to software/vim/share/vim/vim92/indent/scala.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/scheme.vim b/software/vim/share/vim/vim92/indent/scheme.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/scheme.vim
rename to software/vim/share/vim/vim92/indent/scheme.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/scss.vim b/software/vim/share/vim/vim92/indent/scss.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/scss.vim
rename to software/vim/share/vim/vim92/indent/scss.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/sdl.vim b/software/vim/share/vim/vim92/indent/sdl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/sdl.vim
rename to software/vim/share/vim/vim92/indent/sdl.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/sh.vim b/software/vim/share/vim/vim92/indent/sh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/sh.vim
rename to software/vim/share/vim/vim92/indent/sh.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/sml.vim b/software/vim/share/vim/vim92/indent/sml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/sml.vim
rename to software/vim/share/vim/vim92/indent/sml.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/solidity.vim b/software/vim/share/vim/vim92/indent/solidity.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/solidity.vim
rename to software/vim/share/vim/vim92/indent/solidity.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/sql.vim b/software/vim/share/vim/vim92/indent/sql.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/sql.vim
rename to software/vim/share/vim/vim92/indent/sql.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/sqlanywhere.vim b/software/vim/share/vim/vim92/indent/sqlanywhere.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/sqlanywhere.vim
rename to software/vim/share/vim/vim92/indent/sqlanywhere.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/sshconfig.vim b/software/vim/share/vim/vim92/indent/sshconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/sshconfig.vim
rename to software/vim/share/vim/vim92/indent/sshconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/systemverilog.vim b/software/vim/share/vim/vim92/indent/systemverilog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/systemverilog.vim
rename to software/vim/share/vim/vim92/indent/systemverilog.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/tcl.vim b/software/vim/share/vim/vim92/indent/tcl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/tcl.vim
rename to software/vim/share/vim/vim92/indent/tcl.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/tcsh.vim b/software/vim/share/vim/vim92/indent/tcsh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/tcsh.vim
rename to software/vim/share/vim/vim92/indent/tcsh.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/teraterm.vim b/software/vim/share/vim/vim92/indent/teraterm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/teraterm.vim
rename to software/vim/share/vim/vim92/indent/teraterm.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/tex.vim b/software/vim/share/vim/vim92/indent/tex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/tex.vim
rename to software/vim/share/vim/vim92/indent/tex.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/tf.vim b/software/vim/share/vim/vim92/indent/tf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/tf.vim
rename to software/vim/share/vim/vim92/indent/tf.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/tilde.vim b/software/vim/share/vim/vim92/indent/tilde.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/tilde.vim
rename to software/vim/share/vim/vim92/indent/tilde.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/treetop.vim b/software/vim/share/vim/vim92/indent/treetop.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/treetop.vim
rename to software/vim/share/vim/vim92/indent/treetop.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/typescript.vim b/software/vim/share/vim/vim92/indent/typescript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/typescript.vim
rename to software/vim/share/vim/vim92/indent/typescript.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/vb.vim b/software/vim/share/vim/vim92/indent/vb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/vb.vim
rename to software/vim/share/vim/vim92/indent/vb.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/verilog.vim b/software/vim/share/vim/vim92/indent/verilog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/verilog.vim
rename to software/vim/share/vim/vim92/indent/verilog.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/vhdl.vim b/software/vim/share/vim/vim92/indent/vhdl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/vhdl.vim
rename to software/vim/share/vim/vim92/indent/vhdl.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/vim.vim b/software/vim/share/vim/vim92/indent/vim.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/vim.vim
rename to software/vim/share/vim/vim92/indent/vim.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/vroom.vim b/software/vim/share/vim/vim92/indent/vroom.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/vroom.vim
rename to software/vim/share/vim/vim92/indent/vroom.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/vue.vim b/software/vim/share/vim/vim92/indent/vue.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/vue.vim
rename to software/vim/share/vim/vim92/indent/vue.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/wast.vim b/software/vim/share/vim/vim92/indent/wast.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/wast.vim
rename to software/vim/share/vim/vim92/indent/wast.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/xf86conf.vim b/software/vim/share/vim/vim92/indent/xf86conf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/xf86conf.vim
rename to software/vim/share/vim/vim92/indent/xf86conf.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/xhtml.vim b/software/vim/share/vim/vim92/indent/xhtml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/xhtml.vim
rename to software/vim/share/vim/vim92/indent/xhtml.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/xinetd.vim b/software/vim/share/vim/vim92/indent/xinetd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/xinetd.vim
rename to software/vim/share/vim/vim92/indent/xinetd.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/xml.vim b/software/vim/share/vim/vim92/indent/xml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/xml.vim
rename to software/vim/share/vim/vim92/indent/xml.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/xsd.vim b/software/vim/share/vim/vim92/indent/xsd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/xsd.vim
rename to software/vim/share/vim/vim92/indent/xsd.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/xslt.vim b/software/vim/share/vim/vim92/indent/xslt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/xslt.vim
rename to software/vim/share/vim/vim92/indent/xslt.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/yacc.vim b/software/vim/share/vim/vim92/indent/yacc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/yacc.vim
rename to software/vim/share/vim/vim92/indent/yacc.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/yaml.vim b/software/vim/share/vim/vim92/indent/yaml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/yaml.vim
rename to software/vim/share/vim/vim92/indent/yaml.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/zig.vim b/software/vim/share/vim/vim92/indent/zig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/zig.vim
rename to software/vim/share/vim/vim92/indent/zig.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/zimbu.vim b/software/vim/share/vim/vim92/indent/zimbu.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/zimbu.vim
rename to software/vim/share/vim/vim92/indent/zimbu.vim
diff --git a/registry/software/vim/share/vim/vim92/indent/zsh.vim b/software/vim/share/vim/vim92/indent/zsh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indent/zsh.vim
rename to software/vim/share/vim/vim92/indent/zsh.vim
diff --git a/registry/software/vim/share/vim/vim92/indoff.vim b/software/vim/share/vim/vim92/indoff.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/indoff.vim
rename to software/vim/share/vim/vim92/indoff.vim
diff --git a/registry/software/vim/share/vim/vim92/macros/editexisting.vim b/software/vim/share/vim/vim92/macros/editexisting.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/editexisting.vim
rename to software/vim/share/vim/vim92/macros/editexisting.vim
diff --git a/registry/software/vim/share/vim/vim92/macros/hanoi/click.me b/software/vim/share/vim/vim92/macros/hanoi/click.me
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/hanoi/click.me
rename to software/vim/share/vim/vim92/macros/hanoi/click.me
diff --git a/registry/software/vim/share/vim/vim92/macros/hanoi/hanoi.vim b/software/vim/share/vim/vim92/macros/hanoi/hanoi.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/hanoi/hanoi.vim
rename to software/vim/share/vim/vim92/macros/hanoi/hanoi.vim
diff --git a/registry/software/vim/share/vim/vim92/macros/hanoi/poster b/software/vim/share/vim/vim92/macros/hanoi/poster
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/hanoi/poster
rename to software/vim/share/vim/vim92/macros/hanoi/poster
diff --git a/registry/software/vim/share/vim/vim92/macros/justify.vim b/software/vim/share/vim/vim92/macros/justify.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/justify.vim
rename to software/vim/share/vim/vim92/macros/justify.vim
diff --git a/registry/software/vim/share/vim/vim92/macros/less.bat b/software/vim/share/vim/vim92/macros/less.bat
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/less.bat
rename to software/vim/share/vim/vim92/macros/less.bat
diff --git a/registry/software/vim/share/vim/vim92/macros/less.sh b/software/vim/share/vim/vim92/macros/less.sh
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/less.sh
rename to software/vim/share/vim/vim92/macros/less.sh
diff --git a/registry/software/vim/share/vim/vim92/macros/less.vim b/software/vim/share/vim/vim92/macros/less.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/less.vim
rename to software/vim/share/vim/vim92/macros/less.vim
diff --git a/registry/software/vim/share/vim/vim92/macros/life/click.me b/software/vim/share/vim/vim92/macros/life/click.me
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/life/click.me
rename to software/vim/share/vim/vim92/macros/life/click.me
diff --git a/registry/software/vim/share/vim/vim92/macros/life/life.vim b/software/vim/share/vim/vim92/macros/life/life.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/life/life.vim
rename to software/vim/share/vim/vim92/macros/life/life.vim
diff --git a/registry/software/vim/share/vim/vim92/macros/matchit.vim b/software/vim/share/vim/vim92/macros/matchit.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/matchit.vim
rename to software/vim/share/vim/vim92/macros/matchit.vim
diff --git a/registry/software/vim/share/vim/vim92/macros/maze/Makefile b/software/vim/share/vim/vim92/macros/maze/Makefile
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/maze/Makefile
rename to software/vim/share/vim/vim92/macros/maze/Makefile
diff --git a/registry/software/vim/share/vim/vim92/macros/maze/maze.c b/software/vim/share/vim/vim92/macros/maze/maze.c
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/maze/maze.c
rename to software/vim/share/vim/vim92/macros/maze/maze.c
diff --git a/registry/software/vim/share/vim/vim92/macros/maze/maze_5.78 b/software/vim/share/vim/vim92/macros/maze/maze_5.78
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/maze/maze_5.78
rename to software/vim/share/vim/vim92/macros/maze/maze_5.78
diff --git a/registry/software/vim/share/vim/vim92/macros/maze/maze_mac b/software/vim/share/vim/vim92/macros/maze/maze_mac
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/maze/maze_mac
rename to software/vim/share/vim/vim92/macros/maze/maze_mac
diff --git a/registry/software/vim/share/vim/vim92/macros/maze/mazeansi.c b/software/vim/share/vim/vim92/macros/maze/mazeansi.c
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/maze/mazeansi.c
rename to software/vim/share/vim/vim92/macros/maze/mazeansi.c
diff --git a/registry/software/vim/share/vim/vim92/macros/maze/mazeclean.c b/software/vim/share/vim/vim92/macros/maze/mazeclean.c
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/maze/mazeclean.c
rename to software/vim/share/vim/vim92/macros/maze/mazeclean.c
diff --git a/registry/software/vim/share/vim/vim92/macros/maze/poster b/software/vim/share/vim/vim92/macros/maze/poster
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/maze/poster
rename to software/vim/share/vim/vim92/macros/maze/poster
diff --git a/registry/software/vim/share/vim/vim92/macros/shellmenu.vim b/software/vim/share/vim/vim92/macros/shellmenu.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/shellmenu.vim
rename to software/vim/share/vim/vim92/macros/shellmenu.vim
diff --git a/registry/software/vim/share/vim/vim92/macros/swapmous.vim b/software/vim/share/vim/vim92/macros/swapmous.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/swapmous.vim
rename to software/vim/share/vim/vim92/macros/swapmous.vim
diff --git a/registry/software/vim/share/vim/vim92/macros/urm/examples b/software/vim/share/vim/vim92/macros/urm/examples
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/urm/examples
rename to software/vim/share/vim/vim92/macros/urm/examples
diff --git a/registry/software/vim/share/vim/vim92/macros/urm/urm b/software/vim/share/vim/vim92/macros/urm/urm
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/urm/urm
rename to software/vim/share/vim/vim92/macros/urm/urm
diff --git a/registry/software/vim/share/vim/vim92/macros/urm/urm.vim b/software/vim/share/vim/vim92/macros/urm/urm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/macros/urm/urm.vim
rename to software/vim/share/vim/vim92/macros/urm/urm.vim
diff --git a/registry/software/vim/share/vim/vim92/menu.vim b/software/vim/share/vim/vim92/menu.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/menu.vim
rename to software/vim/share/vim/vim92/menu.vim
diff --git a/registry/software/vim/share/vim/vim92/mswin.vim b/software/vim/share/vim/vim92/mswin.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/mswin.vim
rename to software/vim/share/vim/vim92/mswin.vim
diff --git a/registry/software/vim/share/vim/vim92/optwin.vim b/software/vim/share/vim/vim92/optwin.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/optwin.vim
rename to software/vim/share/vim/vim92/optwin.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/getscriptPlugin.vim b/software/vim/share/vim/vim92/plugin/getscriptPlugin.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/getscriptPlugin.vim
rename to software/vim/share/vim/vim92/plugin/getscriptPlugin.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/gzip.vim b/software/vim/share/vim/vim92/plugin/gzip.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/gzip.vim
rename to software/vim/share/vim/vim92/plugin/gzip.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/logiPat.vim b/software/vim/share/vim/vim92/plugin/logiPat.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/logiPat.vim
rename to software/vim/share/vim/vim92/plugin/logiPat.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/manpager.vim b/software/vim/share/vim/vim92/plugin/manpager.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/manpager.vim
rename to software/vim/share/vim/vim92/plugin/manpager.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/matchparen.vim b/software/vim/share/vim/vim92/plugin/matchparen.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/matchparen.vim
rename to software/vim/share/vim/vim92/plugin/matchparen.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/netrwPlugin.vim b/software/vim/share/vim/vim92/plugin/netrwPlugin.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/netrwPlugin.vim
rename to software/vim/share/vim/vim92/plugin/netrwPlugin.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/rrhelper.vim b/software/vim/share/vim/vim92/plugin/rrhelper.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/rrhelper.vim
rename to software/vim/share/vim/vim92/plugin/rrhelper.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/spellfile.vim b/software/vim/share/vim/vim92/plugin/spellfile.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/spellfile.vim
rename to software/vim/share/vim/vim92/plugin/spellfile.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/tarPlugin.vim b/software/vim/share/vim/vim92/plugin/tarPlugin.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/tarPlugin.vim
rename to software/vim/share/vim/vim92/plugin/tarPlugin.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/tohtml.vim b/software/vim/share/vim/vim92/plugin/tohtml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/tohtml.vim
rename to software/vim/share/vim/vim92/plugin/tohtml.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/vimballPlugin.vim b/software/vim/share/vim/vim92/plugin/vimballPlugin.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/vimballPlugin.vim
rename to software/vim/share/vim/vim92/plugin/vimballPlugin.vim
diff --git a/registry/software/vim/share/vim/vim92/plugin/zipPlugin.vim b/software/vim/share/vim/vim92/plugin/zipPlugin.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/plugin/zipPlugin.vim
rename to software/vim/share/vim/vim92/plugin/zipPlugin.vim
diff --git a/registry/software/vim/share/vim/vim92/scripts.vim b/software/vim/share/vim/vim92/scripts.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/scripts.vim
rename to software/vim/share/vim/vim92/scripts.vim
diff --git a/registry/software/vim/share/vim/vim92/synmenu.vim b/software/vim/share/vim/vim92/synmenu.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/synmenu.vim
rename to software/vim/share/vim/vim92/synmenu.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/2html.vim b/software/vim/share/vim/vim92/syntax/2html.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/2html.vim
rename to software/vim/share/vim/vim92/syntax/2html.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/8th.vim b/software/vim/share/vim/vim92/syntax/8th.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/8th.vim
rename to software/vim/share/vim/vim92/syntax/8th.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/a2ps.vim b/software/vim/share/vim/vim92/syntax/a2ps.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/a2ps.vim
rename to software/vim/share/vim/vim92/syntax/a2ps.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/a65.vim b/software/vim/share/vim/vim92/syntax/a65.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/a65.vim
rename to software/vim/share/vim/vim92/syntax/a65.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/aap.vim b/software/vim/share/vim/vim92/syntax/aap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/aap.vim
rename to software/vim/share/vim/vim92/syntax/aap.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/abap.vim b/software/vim/share/vim/vim92/syntax/abap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/abap.vim
rename to software/vim/share/vim/vim92/syntax/abap.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/abaqus.vim b/software/vim/share/vim/vim92/syntax/abaqus.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/abaqus.vim
rename to software/vim/share/vim/vim92/syntax/abaqus.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/abc.vim b/software/vim/share/vim/vim92/syntax/abc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/abc.vim
rename to software/vim/share/vim/vim92/syntax/abc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/abel.vim b/software/vim/share/vim/vim92/syntax/abel.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/abel.vim
rename to software/vim/share/vim/vim92/syntax/abel.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/acedb.vim b/software/vim/share/vim/vim92/syntax/acedb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/acedb.vim
rename to software/vim/share/vim/vim92/syntax/acedb.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ada.vim b/software/vim/share/vim/vim92/syntax/ada.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ada.vim
rename to software/vim/share/vim/vim92/syntax/ada.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/aflex.vim b/software/vim/share/vim/vim92/syntax/aflex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/aflex.vim
rename to software/vim/share/vim/vim92/syntax/aflex.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ahdl.vim b/software/vim/share/vim/vim92/syntax/ahdl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ahdl.vim
rename to software/vim/share/vim/vim92/syntax/ahdl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/aidl.vim b/software/vim/share/vim/vim92/syntax/aidl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/aidl.vim
rename to software/vim/share/vim/vim92/syntax/aidl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/alsaconf.vim b/software/vim/share/vim/vim92/syntax/alsaconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/alsaconf.vim
rename to software/vim/share/vim/vim92/syntax/alsaconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/amiga.vim b/software/vim/share/vim/vim92/syntax/amiga.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/amiga.vim
rename to software/vim/share/vim/vim92/syntax/amiga.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/aml.vim b/software/vim/share/vim/vim92/syntax/aml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/aml.vim
rename to software/vim/share/vim/vim92/syntax/aml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ampl.vim b/software/vim/share/vim/vim92/syntax/ampl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ampl.vim
rename to software/vim/share/vim/vim92/syntax/ampl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ant.vim b/software/vim/share/vim/vim92/syntax/ant.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ant.vim
rename to software/vim/share/vim/vim92/syntax/ant.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/antlr.vim b/software/vim/share/vim/vim92/syntax/antlr.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/antlr.vim
rename to software/vim/share/vim/vim92/syntax/antlr.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/apache.vim b/software/vim/share/vim/vim92/syntax/apache.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/apache.vim
rename to software/vim/share/vim/vim92/syntax/apache.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/apachestyle.vim b/software/vim/share/vim/vim92/syntax/apachestyle.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/apachestyle.vim
rename to software/vim/share/vim/vim92/syntax/apachestyle.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/aptconf.vim b/software/vim/share/vim/vim92/syntax/aptconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/aptconf.vim
rename to software/vim/share/vim/vim92/syntax/aptconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/arch.vim b/software/vim/share/vim/vim92/syntax/arch.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/arch.vim
rename to software/vim/share/vim/vim92/syntax/arch.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/arduino.vim b/software/vim/share/vim/vim92/syntax/arduino.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/arduino.vim
rename to software/vim/share/vim/vim92/syntax/arduino.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/art.vim b/software/vim/share/vim/vim92/syntax/art.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/art.vim
rename to software/vim/share/vim/vim92/syntax/art.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/asciidoc.vim b/software/vim/share/vim/vim92/syntax/asciidoc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/asciidoc.vim
rename to software/vim/share/vim/vim92/syntax/asciidoc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/asm.vim b/software/vim/share/vim/vim92/syntax/asm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/asm.vim
rename to software/vim/share/vim/vim92/syntax/asm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/asm68k.vim b/software/vim/share/vim/vim92/syntax/asm68k.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/asm68k.vim
rename to software/vim/share/vim/vim92/syntax/asm68k.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/asmh8300.vim b/software/vim/share/vim/vim92/syntax/asmh8300.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/asmh8300.vim
rename to software/vim/share/vim/vim92/syntax/asmh8300.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/asn.vim b/software/vim/share/vim/vim92/syntax/asn.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/asn.vim
rename to software/vim/share/vim/vim92/syntax/asn.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/aspperl.vim b/software/vim/share/vim/vim92/syntax/aspperl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/aspperl.vim
rename to software/vim/share/vim/vim92/syntax/aspperl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/aspvbs.vim b/software/vim/share/vim/vim92/syntax/aspvbs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/aspvbs.vim
rename to software/vim/share/vim/vim92/syntax/aspvbs.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/asterisk.vim b/software/vim/share/vim/vim92/syntax/asterisk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/asterisk.vim
rename to software/vim/share/vim/vim92/syntax/asterisk.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/asteriskvm.vim b/software/vim/share/vim/vim92/syntax/asteriskvm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/asteriskvm.vim
rename to software/vim/share/vim/vim92/syntax/asteriskvm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/atlas.vim b/software/vim/share/vim/vim92/syntax/atlas.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/atlas.vim
rename to software/vim/share/vim/vim92/syntax/atlas.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/autodoc.vim b/software/vim/share/vim/vim92/syntax/autodoc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/autodoc.vim
rename to software/vim/share/vim/vim92/syntax/autodoc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/autohotkey.vim b/software/vim/share/vim/vim92/syntax/autohotkey.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/autohotkey.vim
rename to software/vim/share/vim/vim92/syntax/autohotkey.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/autoit.vim b/software/vim/share/vim/vim92/syntax/autoit.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/autoit.vim
rename to software/vim/share/vim/vim92/syntax/autoit.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/automake.vim b/software/vim/share/vim/vim92/syntax/automake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/automake.vim
rename to software/vim/share/vim/vim92/syntax/automake.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ave.vim b/software/vim/share/vim/vim92/syntax/ave.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ave.vim
rename to software/vim/share/vim/vim92/syntax/ave.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/avra.vim b/software/vim/share/vim/vim92/syntax/avra.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/avra.vim
rename to software/vim/share/vim/vim92/syntax/avra.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/awk.vim b/software/vim/share/vim/vim92/syntax/awk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/awk.vim
rename to software/vim/share/vim/vim92/syntax/awk.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ayacc.vim b/software/vim/share/vim/vim92/syntax/ayacc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ayacc.vim
rename to software/vim/share/vim/vim92/syntax/ayacc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/b.vim b/software/vim/share/vim/vim92/syntax/b.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/b.vim
rename to software/vim/share/vim/vim92/syntax/b.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/baan.vim b/software/vim/share/vim/vim92/syntax/baan.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/baan.vim
rename to software/vim/share/vim/vim92/syntax/baan.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/bash.vim b/software/vim/share/vim/vim92/syntax/bash.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/bash.vim
rename to software/vim/share/vim/vim92/syntax/bash.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/basic.vim b/software/vim/share/vim/vim92/syntax/basic.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/basic.vim
rename to software/vim/share/vim/vim92/syntax/basic.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/bc.vim b/software/vim/share/vim/vim92/syntax/bc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/bc.vim
rename to software/vim/share/vim/vim92/syntax/bc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/bdf.vim b/software/vim/share/vim/vim92/syntax/bdf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/bdf.vim
rename to software/vim/share/vim/vim92/syntax/bdf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/bib.vim b/software/vim/share/vim/vim92/syntax/bib.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/bib.vim
rename to software/vim/share/vim/vim92/syntax/bib.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/bindzone.vim b/software/vim/share/vim/vim92/syntax/bindzone.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/bindzone.vim
rename to software/vim/share/vim/vim92/syntax/bindzone.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/bitbake.vim b/software/vim/share/vim/vim92/syntax/bitbake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/bitbake.vim
rename to software/vim/share/vim/vim92/syntax/bitbake.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/blank.vim b/software/vim/share/vim/vim92/syntax/blank.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/blank.vim
rename to software/vim/share/vim/vim92/syntax/blank.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/bsdl.vim b/software/vim/share/vim/vim92/syntax/bsdl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/bsdl.vim
rename to software/vim/share/vim/vim92/syntax/bsdl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/bst.vim b/software/vim/share/vim/vim92/syntax/bst.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/bst.vim
rename to software/vim/share/vim/vim92/syntax/bst.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/btm.vim b/software/vim/share/vim/vim92/syntax/btm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/btm.vim
rename to software/vim/share/vim/vim92/syntax/btm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/bzl.vim b/software/vim/share/vim/vim92/syntax/bzl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/bzl.vim
rename to software/vim/share/vim/vim92/syntax/bzl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/bzr.vim b/software/vim/share/vim/vim92/syntax/bzr.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/bzr.vim
rename to software/vim/share/vim/vim92/syntax/bzr.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/c.vim b/software/vim/share/vim/vim92/syntax/c.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/c.vim
rename to software/vim/share/vim/vim92/syntax/c.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cabal.vim b/software/vim/share/vim/vim92/syntax/cabal.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cabal.vim
rename to software/vim/share/vim/vim92/syntax/cabal.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cabalconfig.vim b/software/vim/share/vim/vim92/syntax/cabalconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cabalconfig.vim
rename to software/vim/share/vim/vim92/syntax/cabalconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cabalproject.vim b/software/vim/share/vim/vim92/syntax/cabalproject.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cabalproject.vim
rename to software/vim/share/vim/vim92/syntax/cabalproject.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/calendar.vim b/software/vim/share/vim/vim92/syntax/calendar.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/calendar.vim
rename to software/vim/share/vim/vim92/syntax/calendar.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/catalog.vim b/software/vim/share/vim/vim92/syntax/catalog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/catalog.vim
rename to software/vim/share/vim/vim92/syntax/catalog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cdl.vim b/software/vim/share/vim/vim92/syntax/cdl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cdl.vim
rename to software/vim/share/vim/vim92/syntax/cdl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cdrdaoconf.vim b/software/vim/share/vim/vim92/syntax/cdrdaoconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cdrdaoconf.vim
rename to software/vim/share/vim/vim92/syntax/cdrdaoconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cdrtoc.vim b/software/vim/share/vim/vim92/syntax/cdrtoc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cdrtoc.vim
rename to software/vim/share/vim/vim92/syntax/cdrtoc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cf.vim b/software/vim/share/vim/vim92/syntax/cf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cf.vim
rename to software/vim/share/vim/vim92/syntax/cf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cfg.vim b/software/vim/share/vim/vim92/syntax/cfg.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cfg.vim
rename to software/vim/share/vim/vim92/syntax/cfg.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ch.vim b/software/vim/share/vim/vim92/syntax/ch.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ch.vim
rename to software/vim/share/vim/vim92/syntax/ch.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/chaiscript.vim b/software/vim/share/vim/vim92/syntax/chaiscript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/chaiscript.vim
rename to software/vim/share/vim/vim92/syntax/chaiscript.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/change.vim b/software/vim/share/vim/vim92/syntax/change.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/change.vim
rename to software/vim/share/vim/vim92/syntax/change.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/changelog.vim b/software/vim/share/vim/vim92/syntax/changelog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/changelog.vim
rename to software/vim/share/vim/vim92/syntax/changelog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/chaskell.vim b/software/vim/share/vim/vim92/syntax/chaskell.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/chaskell.vim
rename to software/vim/share/vim/vim92/syntax/chaskell.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/chatito.vim b/software/vim/share/vim/vim92/syntax/chatito.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/chatito.vim
rename to software/vim/share/vim/vim92/syntax/chatito.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cheetah.vim b/software/vim/share/vim/vim92/syntax/cheetah.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cheetah.vim
rename to software/vim/share/vim/vim92/syntax/cheetah.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/chicken.vim b/software/vim/share/vim/vim92/syntax/chicken.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/chicken.vim
rename to software/vim/share/vim/vim92/syntax/chicken.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/chill.vim b/software/vim/share/vim/vim92/syntax/chill.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/chill.vim
rename to software/vim/share/vim/vim92/syntax/chill.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/chordpro.vim b/software/vim/share/vim/vim92/syntax/chordpro.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/chordpro.vim
rename to software/vim/share/vim/vim92/syntax/chordpro.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cl.vim b/software/vim/share/vim/vim92/syntax/cl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cl.vim
rename to software/vim/share/vim/vim92/syntax/cl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/clean.vim b/software/vim/share/vim/vim92/syntax/clean.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/clean.vim
rename to software/vim/share/vim/vim92/syntax/clean.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/clipper.vim b/software/vim/share/vim/vim92/syntax/clipper.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/clipper.vim
rename to software/vim/share/vim/vim92/syntax/clipper.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/clojure.vim b/software/vim/share/vim/vim92/syntax/clojure.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/clojure.vim
rename to software/vim/share/vim/vim92/syntax/clojure.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cmake.vim b/software/vim/share/vim/vim92/syntax/cmake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cmake.vim
rename to software/vim/share/vim/vim92/syntax/cmake.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cmod.vim b/software/vim/share/vim/vim92/syntax/cmod.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cmod.vim
rename to software/vim/share/vim/vim92/syntax/cmod.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cmusrc.vim b/software/vim/share/vim/vim92/syntax/cmusrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cmusrc.vim
rename to software/vim/share/vim/vim92/syntax/cmusrc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cobol.vim b/software/vim/share/vim/vim92/syntax/cobol.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cobol.vim
rename to software/vim/share/vim/vim92/syntax/cobol.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/coco.vim b/software/vim/share/vim/vim92/syntax/coco.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/coco.vim
rename to software/vim/share/vim/vim92/syntax/coco.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/colortest.vim b/software/vim/share/vim/vim92/syntax/colortest.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/colortest.vim
rename to software/vim/share/vim/vim92/syntax/colortest.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/conaryrecipe.vim b/software/vim/share/vim/vim92/syntax/conaryrecipe.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/conaryrecipe.vim
rename to software/vim/share/vim/vim92/syntax/conaryrecipe.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/conf.vim b/software/vim/share/vim/vim92/syntax/conf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/conf.vim
rename to software/vim/share/vim/vim92/syntax/conf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/config.vim b/software/vim/share/vim/vim92/syntax/config.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/config.vim
rename to software/vim/share/vim/vim92/syntax/config.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/confini.vim b/software/vim/share/vim/vim92/syntax/confini.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/confini.vim
rename to software/vim/share/vim/vim92/syntax/confini.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/context.vim b/software/vim/share/vim/vim92/syntax/context.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/context.vim
rename to software/vim/share/vim/vim92/syntax/context.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cpp.vim b/software/vim/share/vim/vim92/syntax/cpp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cpp.vim
rename to software/vim/share/vim/vim92/syntax/cpp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/crm.vim b/software/vim/share/vim/vim92/syntax/crm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/crm.vim
rename to software/vim/share/vim/vim92/syntax/crm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/crontab.vim b/software/vim/share/vim/vim92/syntax/crontab.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/crontab.vim
rename to software/vim/share/vim/vim92/syntax/crontab.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cs.vim b/software/vim/share/vim/vim92/syntax/cs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cs.vim
rename to software/vim/share/vim/vim92/syntax/cs.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/csc.vim b/software/vim/share/vim/vim92/syntax/csc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/csc.vim
rename to software/vim/share/vim/vim92/syntax/csc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/csdl.vim b/software/vim/share/vim/vim92/syntax/csdl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/csdl.vim
rename to software/vim/share/vim/vim92/syntax/csdl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/csh.vim b/software/vim/share/vim/vim92/syntax/csh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/csh.vim
rename to software/vim/share/vim/vim92/syntax/csh.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/csp.vim b/software/vim/share/vim/vim92/syntax/csp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/csp.vim
rename to software/vim/share/vim/vim92/syntax/csp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/css.vim b/software/vim/share/vim/vim92/syntax/css.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/css.vim
rename to software/vim/share/vim/vim92/syntax/css.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cterm.vim b/software/vim/share/vim/vim92/syntax/cterm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cterm.vim
rename to software/vim/share/vim/vim92/syntax/cterm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ctrlh.vim b/software/vim/share/vim/vim92/syntax/ctrlh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ctrlh.vim
rename to software/vim/share/vim/vim92/syntax/ctrlh.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cucumber.vim b/software/vim/share/vim/vim92/syntax/cucumber.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cucumber.vim
rename to software/vim/share/vim/vim92/syntax/cucumber.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cuda.vim b/software/vim/share/vim/vim92/syntax/cuda.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cuda.vim
rename to software/vim/share/vim/vim92/syntax/cuda.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cupl.vim b/software/vim/share/vim/vim92/syntax/cupl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cupl.vim
rename to software/vim/share/vim/vim92/syntax/cupl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cuplsim.vim b/software/vim/share/vim/vim92/syntax/cuplsim.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cuplsim.vim
rename to software/vim/share/vim/vim92/syntax/cuplsim.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cvs.vim b/software/vim/share/vim/vim92/syntax/cvs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cvs.vim
rename to software/vim/share/vim/vim92/syntax/cvs.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cvsrc.vim b/software/vim/share/vim/vim92/syntax/cvsrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cvsrc.vim
rename to software/vim/share/vim/vim92/syntax/cvsrc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cweb.vim b/software/vim/share/vim/vim92/syntax/cweb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cweb.vim
rename to software/vim/share/vim/vim92/syntax/cweb.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cynlib.vim b/software/vim/share/vim/vim92/syntax/cynlib.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cynlib.vim
rename to software/vim/share/vim/vim92/syntax/cynlib.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/cynpp.vim b/software/vim/share/vim/vim92/syntax/cynpp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/cynpp.vim
rename to software/vim/share/vim/vim92/syntax/cynpp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/d.vim b/software/vim/share/vim/vim92/syntax/d.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/d.vim
rename to software/vim/share/vim/vim92/syntax/d.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dart.vim b/software/vim/share/vim/vim92/syntax/dart.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dart.vim
rename to software/vim/share/vim/vim92/syntax/dart.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/datascript.vim b/software/vim/share/vim/vim92/syntax/datascript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/datascript.vim
rename to software/vim/share/vim/vim92/syntax/datascript.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dcd.vim b/software/vim/share/vim/vim92/syntax/dcd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dcd.vim
rename to software/vim/share/vim/vim92/syntax/dcd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dcl.vim b/software/vim/share/vim/vim92/syntax/dcl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dcl.vim
rename to software/vim/share/vim/vim92/syntax/dcl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/debchangelog.vim b/software/vim/share/vim/vim92/syntax/debchangelog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/debchangelog.vim
rename to software/vim/share/vim/vim92/syntax/debchangelog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/debcontrol.vim b/software/vim/share/vim/vim92/syntax/debcontrol.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/debcontrol.vim
rename to software/vim/share/vim/vim92/syntax/debcontrol.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/debcopyright.vim b/software/vim/share/vim/vim92/syntax/debcopyright.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/debcopyright.vim
rename to software/vim/share/vim/vim92/syntax/debcopyright.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/debsources.vim b/software/vim/share/vim/vim92/syntax/debsources.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/debsources.vim
rename to software/vim/share/vim/vim92/syntax/debsources.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/def.vim b/software/vim/share/vim/vim92/syntax/def.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/def.vim
rename to software/vim/share/vim/vim92/syntax/def.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/denyhosts.vim b/software/vim/share/vim/vim92/syntax/denyhosts.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/denyhosts.vim
rename to software/vim/share/vim/vim92/syntax/denyhosts.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dep3patch.vim b/software/vim/share/vim/vim92/syntax/dep3patch.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dep3patch.vim
rename to software/vim/share/vim/vim92/syntax/dep3patch.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/desc.vim b/software/vim/share/vim/vim92/syntax/desc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/desc.vim
rename to software/vim/share/vim/vim92/syntax/desc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/desktop.vim b/software/vim/share/vim/vim92/syntax/desktop.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/desktop.vim
rename to software/vim/share/vim/vim92/syntax/desktop.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dictconf.vim b/software/vim/share/vim/vim92/syntax/dictconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dictconf.vim
rename to software/vim/share/vim/vim92/syntax/dictconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dictdconf.vim b/software/vim/share/vim/vim92/syntax/dictdconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dictdconf.vim
rename to software/vim/share/vim/vim92/syntax/dictdconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/diff.vim b/software/vim/share/vim/vim92/syntax/diff.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/diff.vim
rename to software/vim/share/vim/vim92/syntax/diff.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dircolors.vim b/software/vim/share/vim/vim92/syntax/dircolors.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dircolors.vim
rename to software/vim/share/vim/vim92/syntax/dircolors.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dirpager.vim b/software/vim/share/vim/vim92/syntax/dirpager.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dirpager.vim
rename to software/vim/share/vim/vim92/syntax/dirpager.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/diva.vim b/software/vim/share/vim/vim92/syntax/diva.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/diva.vim
rename to software/vim/share/vim/vim92/syntax/diva.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/django.vim b/software/vim/share/vim/vim92/syntax/django.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/django.vim
rename to software/vim/share/vim/vim92/syntax/django.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dns.vim b/software/vim/share/vim/vim92/syntax/dns.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dns.vim
rename to software/vim/share/vim/vim92/syntax/dns.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dnsmasq.vim b/software/vim/share/vim/vim92/syntax/dnsmasq.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dnsmasq.vim
rename to software/vim/share/vim/vim92/syntax/dnsmasq.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/docbk.vim b/software/vim/share/vim/vim92/syntax/docbk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/docbk.vim
rename to software/vim/share/vim/vim92/syntax/docbk.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/docbksgml.vim b/software/vim/share/vim/vim92/syntax/docbksgml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/docbksgml.vim
rename to software/vim/share/vim/vim92/syntax/docbksgml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/docbkxml.vim b/software/vim/share/vim/vim92/syntax/docbkxml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/docbkxml.vim
rename to software/vim/share/vim/vim92/syntax/docbkxml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dockerfile.vim b/software/vim/share/vim/vim92/syntax/dockerfile.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dockerfile.vim
rename to software/vim/share/vim/vim92/syntax/dockerfile.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dosbatch.vim b/software/vim/share/vim/vim92/syntax/dosbatch.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dosbatch.vim
rename to software/vim/share/vim/vim92/syntax/dosbatch.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dosini.vim b/software/vim/share/vim/vim92/syntax/dosini.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dosini.vim
rename to software/vim/share/vim/vim92/syntax/dosini.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dot.vim b/software/vim/share/vim/vim92/syntax/dot.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dot.vim
rename to software/vim/share/vim/vim92/syntax/dot.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/doxygen.vim b/software/vim/share/vim/vim92/syntax/doxygen.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/doxygen.vim
rename to software/vim/share/vim/vim92/syntax/doxygen.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dracula.vim b/software/vim/share/vim/vim92/syntax/dracula.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dracula.vim
rename to software/vim/share/vim/vim92/syntax/dracula.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dsl.vim b/software/vim/share/vim/vim92/syntax/dsl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dsl.vim
rename to software/vim/share/vim/vim92/syntax/dsl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dtd.vim b/software/vim/share/vim/vim92/syntax/dtd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dtd.vim
rename to software/vim/share/vim/vim92/syntax/dtd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dtml.vim b/software/vim/share/vim/vim92/syntax/dtml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dtml.vim
rename to software/vim/share/vim/vim92/syntax/dtml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dtrace.vim b/software/vim/share/vim/vim92/syntax/dtrace.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dtrace.vim
rename to software/vim/share/vim/vim92/syntax/dtrace.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dts.vim b/software/vim/share/vim/vim92/syntax/dts.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dts.vim
rename to software/vim/share/vim/vim92/syntax/dts.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dune.vim b/software/vim/share/vim/vim92/syntax/dune.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dune.vim
rename to software/vim/share/vim/vim92/syntax/dune.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dylan.vim b/software/vim/share/vim/vim92/syntax/dylan.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dylan.vim
rename to software/vim/share/vim/vim92/syntax/dylan.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dylanintr.vim b/software/vim/share/vim/vim92/syntax/dylanintr.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dylanintr.vim
rename to software/vim/share/vim/vim92/syntax/dylanintr.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/dylanlid.vim b/software/vim/share/vim/vim92/syntax/dylanlid.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/dylanlid.vim
rename to software/vim/share/vim/vim92/syntax/dylanlid.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ecd.vim b/software/vim/share/vim/vim92/syntax/ecd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ecd.vim
rename to software/vim/share/vim/vim92/syntax/ecd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/edif.vim b/software/vim/share/vim/vim92/syntax/edif.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/edif.vim
rename to software/vim/share/vim/vim92/syntax/edif.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/editorconfig.vim b/software/vim/share/vim/vim92/syntax/editorconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/editorconfig.vim
rename to software/vim/share/vim/vim92/syntax/editorconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/eiffel.vim b/software/vim/share/vim/vim92/syntax/eiffel.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/eiffel.vim
rename to software/vim/share/vim/vim92/syntax/eiffel.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/elf.vim b/software/vim/share/vim/vim92/syntax/elf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/elf.vim
rename to software/vim/share/vim/vim92/syntax/elf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/elinks.vim b/software/vim/share/vim/vim92/syntax/elinks.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/elinks.vim
rename to software/vim/share/vim/vim92/syntax/elinks.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/elm.vim b/software/vim/share/vim/vim92/syntax/elm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/elm.vim
rename to software/vim/share/vim/vim92/syntax/elm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/elmfilt.vim b/software/vim/share/vim/vim92/syntax/elmfilt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/elmfilt.vim
rename to software/vim/share/vim/vim92/syntax/elmfilt.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/erlang.vim b/software/vim/share/vim/vim92/syntax/erlang.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/erlang.vim
rename to software/vim/share/vim/vim92/syntax/erlang.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/eruby.vim b/software/vim/share/vim/vim92/syntax/eruby.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/eruby.vim
rename to software/vim/share/vim/vim92/syntax/eruby.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/esmtprc.vim b/software/vim/share/vim/vim92/syntax/esmtprc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/esmtprc.vim
rename to software/vim/share/vim/vim92/syntax/esmtprc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/esqlc.vim b/software/vim/share/vim/vim92/syntax/esqlc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/esqlc.vim
rename to software/vim/share/vim/vim92/syntax/esqlc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/esterel.vim b/software/vim/share/vim/vim92/syntax/esterel.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/esterel.vim
rename to software/vim/share/vim/vim92/syntax/esterel.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/eterm.vim b/software/vim/share/vim/vim92/syntax/eterm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/eterm.vim
rename to software/vim/share/vim/vim92/syntax/eterm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/euphoria3.vim b/software/vim/share/vim/vim92/syntax/euphoria3.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/euphoria3.vim
rename to software/vim/share/vim/vim92/syntax/euphoria3.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/euphoria4.vim b/software/vim/share/vim/vim92/syntax/euphoria4.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/euphoria4.vim
rename to software/vim/share/vim/vim92/syntax/euphoria4.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/eviews.vim b/software/vim/share/vim/vim92/syntax/eviews.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/eviews.vim
rename to software/vim/share/vim/vim92/syntax/eviews.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/exim.vim b/software/vim/share/vim/vim92/syntax/exim.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/exim.vim
rename to software/vim/share/vim/vim92/syntax/exim.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/expect.vim b/software/vim/share/vim/vim92/syntax/expect.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/expect.vim
rename to software/vim/share/vim/vim92/syntax/expect.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/exports.vim b/software/vim/share/vim/vim92/syntax/exports.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/exports.vim
rename to software/vim/share/vim/vim92/syntax/exports.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/falcon.vim b/software/vim/share/vim/vim92/syntax/falcon.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/falcon.vim
rename to software/vim/share/vim/vim92/syntax/falcon.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/fan.vim b/software/vim/share/vim/vim92/syntax/fan.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/fan.vim
rename to software/vim/share/vim/vim92/syntax/fan.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/fasm.vim b/software/vim/share/vim/vim92/syntax/fasm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/fasm.vim
rename to software/vim/share/vim/vim92/syntax/fasm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/fdcc.vim b/software/vim/share/vim/vim92/syntax/fdcc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/fdcc.vim
rename to software/vim/share/vim/vim92/syntax/fdcc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/fetchmail.vim b/software/vim/share/vim/vim92/syntax/fetchmail.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/fetchmail.vim
rename to software/vim/share/vim/vim92/syntax/fetchmail.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/fgl.vim b/software/vim/share/vim/vim92/syntax/fgl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/fgl.vim
rename to software/vim/share/vim/vim92/syntax/fgl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/fish.vim b/software/vim/share/vim/vim92/syntax/fish.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/fish.vim
rename to software/vim/share/vim/vim92/syntax/fish.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/flexwiki.vim b/software/vim/share/vim/vim92/syntax/flexwiki.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/flexwiki.vim
rename to software/vim/share/vim/vim92/syntax/flexwiki.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/focexec.vim b/software/vim/share/vim/vim92/syntax/focexec.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/focexec.vim
rename to software/vim/share/vim/vim92/syntax/focexec.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/form.vim b/software/vim/share/vim/vim92/syntax/form.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/form.vim
rename to software/vim/share/vim/vim92/syntax/form.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/forth.vim b/software/vim/share/vim/vim92/syntax/forth.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/forth.vim
rename to software/vim/share/vim/vim92/syntax/forth.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/fortran.vim b/software/vim/share/vim/vim92/syntax/fortran.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/fortran.vim
rename to software/vim/share/vim/vim92/syntax/fortran.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/foxpro.vim b/software/vim/share/vim/vim92/syntax/foxpro.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/foxpro.vim
rename to software/vim/share/vim/vim92/syntax/foxpro.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/fpcmake.vim b/software/vim/share/vim/vim92/syntax/fpcmake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/fpcmake.vim
rename to software/vim/share/vim/vim92/syntax/fpcmake.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/framescript.vim b/software/vim/share/vim/vim92/syntax/framescript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/framescript.vim
rename to software/vim/share/vim/vim92/syntax/framescript.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/freebasic.vim b/software/vim/share/vim/vim92/syntax/freebasic.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/freebasic.vim
rename to software/vim/share/vim/vim92/syntax/freebasic.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/fstab.vim b/software/vim/share/vim/vim92/syntax/fstab.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/fstab.vim
rename to software/vim/share/vim/vim92/syntax/fstab.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/fvwm.vim b/software/vim/share/vim/vim92/syntax/fvwm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/fvwm.vim
rename to software/vim/share/vim/vim92/syntax/fvwm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/fvwm2m4.vim b/software/vim/share/vim/vim92/syntax/fvwm2m4.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/fvwm2m4.vim
rename to software/vim/share/vim/vim92/syntax/fvwm2m4.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gdb.vim b/software/vim/share/vim/vim92/syntax/gdb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gdb.vim
rename to software/vim/share/vim/vim92/syntax/gdb.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gdmo.vim b/software/vim/share/vim/vim92/syntax/gdmo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gdmo.vim
rename to software/vim/share/vim/vim92/syntax/gdmo.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gdresource.vim b/software/vim/share/vim/vim92/syntax/gdresource.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gdresource.vim
rename to software/vim/share/vim/vim92/syntax/gdresource.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gdscript.vim b/software/vim/share/vim/vim92/syntax/gdscript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gdscript.vim
rename to software/vim/share/vim/vim92/syntax/gdscript.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gdshader.vim b/software/vim/share/vim/vim92/syntax/gdshader.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gdshader.vim
rename to software/vim/share/vim/vim92/syntax/gdshader.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gedcom.vim b/software/vim/share/vim/vim92/syntax/gedcom.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gedcom.vim
rename to software/vim/share/vim/vim92/syntax/gedcom.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gemtext.vim b/software/vim/share/vim/vim92/syntax/gemtext.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gemtext.vim
rename to software/vim/share/vim/vim92/syntax/gemtext.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gift.vim b/software/vim/share/vim/vim92/syntax/gift.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gift.vim
rename to software/vim/share/vim/vim92/syntax/gift.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/git.vim b/software/vim/share/vim/vim92/syntax/git.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/git.vim
rename to software/vim/share/vim/vim92/syntax/git.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gitattributes.vim b/software/vim/share/vim/vim92/syntax/gitattributes.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gitattributes.vim
rename to software/vim/share/vim/vim92/syntax/gitattributes.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gitcommit.vim b/software/vim/share/vim/vim92/syntax/gitcommit.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gitcommit.vim
rename to software/vim/share/vim/vim92/syntax/gitcommit.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gitconfig.vim b/software/vim/share/vim/vim92/syntax/gitconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gitconfig.vim
rename to software/vim/share/vim/vim92/syntax/gitconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gitignore.vim b/software/vim/share/vim/vim92/syntax/gitignore.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gitignore.vim
rename to software/vim/share/vim/vim92/syntax/gitignore.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gitolite.vim b/software/vim/share/vim/vim92/syntax/gitolite.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gitolite.vim
rename to software/vim/share/vim/vim92/syntax/gitolite.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gitrebase.vim b/software/vim/share/vim/vim92/syntax/gitrebase.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gitrebase.vim
rename to software/vim/share/vim/vim92/syntax/gitrebase.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gitsendemail.vim b/software/vim/share/vim/vim92/syntax/gitsendemail.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gitsendemail.vim
rename to software/vim/share/vim/vim92/syntax/gitsendemail.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gkrellmrc.vim b/software/vim/share/vim/vim92/syntax/gkrellmrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gkrellmrc.vim
rename to software/vim/share/vim/vim92/syntax/gkrellmrc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gnash.vim b/software/vim/share/vim/vim92/syntax/gnash.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gnash.vim
rename to software/vim/share/vim/vim92/syntax/gnash.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gnuplot.vim b/software/vim/share/vim/vim92/syntax/gnuplot.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gnuplot.vim
rename to software/vim/share/vim/vim92/syntax/gnuplot.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/go.vim b/software/vim/share/vim/vim92/syntax/go.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/go.vim
rename to software/vim/share/vim/vim92/syntax/go.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/godoc.vim b/software/vim/share/vim/vim92/syntax/godoc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/godoc.vim
rename to software/vim/share/vim/vim92/syntax/godoc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gp.vim b/software/vim/share/vim/vim92/syntax/gp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gp.vim
rename to software/vim/share/vim/vim92/syntax/gp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gpg.vim b/software/vim/share/vim/vim92/syntax/gpg.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gpg.vim
rename to software/vim/share/vim/vim92/syntax/gpg.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gprof.vim b/software/vim/share/vim/vim92/syntax/gprof.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gprof.vim
rename to software/vim/share/vim/vim92/syntax/gprof.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/grads.vim b/software/vim/share/vim/vim92/syntax/grads.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/grads.vim
rename to software/vim/share/vim/vim92/syntax/grads.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gretl.vim b/software/vim/share/vim/vim92/syntax/gretl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gretl.vim
rename to software/vim/share/vim/vim92/syntax/gretl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/groff.vim b/software/vim/share/vim/vim92/syntax/groff.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/groff.vim
rename to software/vim/share/vim/vim92/syntax/groff.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/groovy.vim b/software/vim/share/vim/vim92/syntax/groovy.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/groovy.vim
rename to software/vim/share/vim/vim92/syntax/groovy.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/group.vim b/software/vim/share/vim/vim92/syntax/group.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/group.vim
rename to software/vim/share/vim/vim92/syntax/group.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/grub.vim b/software/vim/share/vim/vim92/syntax/grub.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/grub.vim
rename to software/vim/share/vim/vim92/syntax/grub.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gsp.vim b/software/vim/share/vim/vim92/syntax/gsp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gsp.vim
rename to software/vim/share/vim/vim92/syntax/gsp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gtkrc.vim b/software/vim/share/vim/vim92/syntax/gtkrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gtkrc.vim
rename to software/vim/share/vim/vim92/syntax/gtkrc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gvpr.vim b/software/vim/share/vim/vim92/syntax/gvpr.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gvpr.vim
rename to software/vim/share/vim/vim92/syntax/gvpr.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/gyp.vim b/software/vim/share/vim/vim92/syntax/gyp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/gyp.vim
rename to software/vim/share/vim/vim92/syntax/gyp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/haml.vim b/software/vim/share/vim/vim92/syntax/haml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/haml.vim
rename to software/vim/share/vim/vim92/syntax/haml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hamster.vim b/software/vim/share/vim/vim92/syntax/hamster.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hamster.vim
rename to software/vim/share/vim/vim92/syntax/hamster.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hare.vim b/software/vim/share/vim/vim92/syntax/hare.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hare.vim
rename to software/vim/share/vim/vim92/syntax/hare.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/haskell.vim b/software/vim/share/vim/vim92/syntax/haskell.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/haskell.vim
rename to software/vim/share/vim/vim92/syntax/haskell.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/haste.vim b/software/vim/share/vim/vim92/syntax/haste.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/haste.vim
rename to software/vim/share/vim/vim92/syntax/haste.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hastepreproc.vim b/software/vim/share/vim/vim92/syntax/hastepreproc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hastepreproc.vim
rename to software/vim/share/vim/vim92/syntax/hastepreproc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hb.vim b/software/vim/share/vim/vim92/syntax/hb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hb.vim
rename to software/vim/share/vim/vim92/syntax/hb.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/help.vim b/software/vim/share/vim/vim92/syntax/help.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/help.vim
rename to software/vim/share/vim/vim92/syntax/help.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/help_ru.vim b/software/vim/share/vim/vim92/syntax/help_ru.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/help_ru.vim
rename to software/vim/share/vim/vim92/syntax/help_ru.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hercules.vim b/software/vim/share/vim/vim92/syntax/hercules.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hercules.vim
rename to software/vim/share/vim/vim92/syntax/hercules.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hex.vim b/software/vim/share/vim/vim92/syntax/hex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hex.vim
rename to software/vim/share/vim/vim92/syntax/hex.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hgcommit.vim b/software/vim/share/vim/vim92/syntax/hgcommit.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hgcommit.vim
rename to software/vim/share/vim/vim92/syntax/hgcommit.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hitest.vim b/software/vim/share/vim/vim92/syntax/hitest.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hitest.vim
rename to software/vim/share/vim/vim92/syntax/hitest.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hlsplaylist.vim b/software/vim/share/vim/vim92/syntax/hlsplaylist.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hlsplaylist.vim
rename to software/vim/share/vim/vim92/syntax/hlsplaylist.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hog.vim b/software/vim/share/vim/vim92/syntax/hog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hog.vim
rename to software/vim/share/vim/vim92/syntax/hog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hollywood.vim b/software/vim/share/vim/vim92/syntax/hollywood.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hollywood.vim
rename to software/vim/share/vim/vim92/syntax/hollywood.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hostconf.vim b/software/vim/share/vim/vim92/syntax/hostconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hostconf.vim
rename to software/vim/share/vim/vim92/syntax/hostconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/hostsaccess.vim b/software/vim/share/vim/vim92/syntax/hostsaccess.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/hostsaccess.vim
rename to software/vim/share/vim/vim92/syntax/hostsaccess.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/html.vim b/software/vim/share/vim/vim92/syntax/html.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/html.vim
rename to software/vim/share/vim/vim92/syntax/html.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/htmlcheetah.vim b/software/vim/share/vim/vim92/syntax/htmlcheetah.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/htmlcheetah.vim
rename to software/vim/share/vim/vim92/syntax/htmlcheetah.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/htmldjango.vim b/software/vim/share/vim/vim92/syntax/htmldjango.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/htmldjango.vim
rename to software/vim/share/vim/vim92/syntax/htmldjango.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/htmlm4.vim b/software/vim/share/vim/vim92/syntax/htmlm4.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/htmlm4.vim
rename to software/vim/share/vim/vim92/syntax/htmlm4.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/htmlos.vim b/software/vim/share/vim/vim92/syntax/htmlos.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/htmlos.vim
rename to software/vim/share/vim/vim92/syntax/htmlos.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/i3config.vim b/software/vim/share/vim/vim92/syntax/i3config.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/i3config.vim
rename to software/vim/share/vim/vim92/syntax/i3config.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ia64.vim b/software/vim/share/vim/vim92/syntax/ia64.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ia64.vim
rename to software/vim/share/vim/vim92/syntax/ia64.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ibasic.vim b/software/vim/share/vim/vim92/syntax/ibasic.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ibasic.vim
rename to software/vim/share/vim/vim92/syntax/ibasic.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/icemenu.vim b/software/vim/share/vim/vim92/syntax/icemenu.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/icemenu.vim
rename to software/vim/share/vim/vim92/syntax/icemenu.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/icon.vim b/software/vim/share/vim/vim92/syntax/icon.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/icon.vim
rename to software/vim/share/vim/vim92/syntax/icon.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/idl.vim b/software/vim/share/vim/vim92/syntax/idl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/idl.vim
rename to software/vim/share/vim/vim92/syntax/idl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/idlang.vim b/software/vim/share/vim/vim92/syntax/idlang.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/idlang.vim
rename to software/vim/share/vim/vim92/syntax/idlang.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/indent.vim b/software/vim/share/vim/vim92/syntax/indent.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/indent.vim
rename to software/vim/share/vim/vim92/syntax/indent.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/inform.vim b/software/vim/share/vim/vim92/syntax/inform.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/inform.vim
rename to software/vim/share/vim/vim92/syntax/inform.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/initex.vim b/software/vim/share/vim/vim92/syntax/initex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/initex.vim
rename to software/vim/share/vim/vim92/syntax/initex.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/initng.vim b/software/vim/share/vim/vim92/syntax/initng.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/initng.vim
rename to software/vim/share/vim/vim92/syntax/initng.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/inittab.vim b/software/vim/share/vim/vim92/syntax/inittab.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/inittab.vim
rename to software/vim/share/vim/vim92/syntax/inittab.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ipfilter.vim b/software/vim/share/vim/vim92/syntax/ipfilter.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ipfilter.vim
rename to software/vim/share/vim/vim92/syntax/ipfilter.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ishd.vim b/software/vim/share/vim/vim92/syntax/ishd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ishd.vim
rename to software/vim/share/vim/vim92/syntax/ishd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/iss.vim b/software/vim/share/vim/vim92/syntax/iss.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/iss.vim
rename to software/vim/share/vim/vim92/syntax/iss.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ist.vim b/software/vim/share/vim/vim92/syntax/ist.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ist.vim
rename to software/vim/share/vim/vim92/syntax/ist.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/j.vim b/software/vim/share/vim/vim92/syntax/j.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/j.vim
rename to software/vim/share/vim/vim92/syntax/j.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/jal.vim b/software/vim/share/vim/vim92/syntax/jal.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/jal.vim
rename to software/vim/share/vim/vim92/syntax/jal.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/jam.vim b/software/vim/share/vim/vim92/syntax/jam.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/jam.vim
rename to software/vim/share/vim/vim92/syntax/jam.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/jargon.vim b/software/vim/share/vim/vim92/syntax/jargon.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/jargon.vim
rename to software/vim/share/vim/vim92/syntax/jargon.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/java.vim b/software/vim/share/vim/vim92/syntax/java.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/java.vim
rename to software/vim/share/vim/vim92/syntax/java.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/javacc.vim b/software/vim/share/vim/vim92/syntax/javacc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/javacc.vim
rename to software/vim/share/vim/vim92/syntax/javacc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/javascript.vim b/software/vim/share/vim/vim92/syntax/javascript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/javascript.vim
rename to software/vim/share/vim/vim92/syntax/javascript.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/javascriptreact.vim b/software/vim/share/vim/vim92/syntax/javascriptreact.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/javascriptreact.vim
rename to software/vim/share/vim/vim92/syntax/javascriptreact.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/jess.vim b/software/vim/share/vim/vim92/syntax/jess.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/jess.vim
rename to software/vim/share/vim/vim92/syntax/jess.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/jgraph.vim b/software/vim/share/vim/vim92/syntax/jgraph.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/jgraph.vim
rename to software/vim/share/vim/vim92/syntax/jgraph.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/jovial.vim b/software/vim/share/vim/vim92/syntax/jovial.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/jovial.vim
rename to software/vim/share/vim/vim92/syntax/jovial.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/jproperties.vim b/software/vim/share/vim/vim92/syntax/jproperties.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/jproperties.vim
rename to software/vim/share/vim/vim92/syntax/jproperties.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/json.vim b/software/vim/share/vim/vim92/syntax/json.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/json.vim
rename to software/vim/share/vim/vim92/syntax/json.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/jsonc.vim b/software/vim/share/vim/vim92/syntax/jsonc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/jsonc.vim
rename to software/vim/share/vim/vim92/syntax/jsonc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/jsp.vim b/software/vim/share/vim/vim92/syntax/jsp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/jsp.vim
rename to software/vim/share/vim/vim92/syntax/jsp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/julia.vim b/software/vim/share/vim/vim92/syntax/julia.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/julia.vim
rename to software/vim/share/vim/vim92/syntax/julia.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/kconfig.vim b/software/vim/share/vim/vim92/syntax/kconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/kconfig.vim
rename to software/vim/share/vim/vim92/syntax/kconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/kivy.vim b/software/vim/share/vim/vim92/syntax/kivy.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/kivy.vim
rename to software/vim/share/vim/vim92/syntax/kivy.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/kix.vim b/software/vim/share/vim/vim92/syntax/kix.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/kix.vim
rename to software/vim/share/vim/vim92/syntax/kix.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/krl.vim b/software/vim/share/vim/vim92/syntax/krl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/krl.vim
rename to software/vim/share/vim/vim92/syntax/krl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/kscript.vim b/software/vim/share/vim/vim92/syntax/kscript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/kscript.vim
rename to software/vim/share/vim/vim92/syntax/kscript.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/kwt.vim b/software/vim/share/vim/vim92/syntax/kwt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/kwt.vim
rename to software/vim/share/vim/vim92/syntax/kwt.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lace.vim b/software/vim/share/vim/vim92/syntax/lace.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lace.vim
rename to software/vim/share/vim/vim92/syntax/lace.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/latte.vim b/software/vim/share/vim/vim92/syntax/latte.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/latte.vim
rename to software/vim/share/vim/vim92/syntax/latte.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lc.vim b/software/vim/share/vim/vim92/syntax/lc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lc.vim
rename to software/vim/share/vim/vim92/syntax/lc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ld.vim b/software/vim/share/vim/vim92/syntax/ld.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ld.vim
rename to software/vim/share/vim/vim92/syntax/ld.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ldapconf.vim b/software/vim/share/vim/vim92/syntax/ldapconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ldapconf.vim
rename to software/vim/share/vim/vim92/syntax/ldapconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ldif.vim b/software/vim/share/vim/vim92/syntax/ldif.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ldif.vim
rename to software/vim/share/vim/vim92/syntax/ldif.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/less.vim b/software/vim/share/vim/vim92/syntax/less.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/less.vim
rename to software/vim/share/vim/vim92/syntax/less.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lex.vim b/software/vim/share/vim/vim92/syntax/lex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lex.vim
rename to software/vim/share/vim/vim92/syntax/lex.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lftp.vim b/software/vim/share/vim/vim92/syntax/lftp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lftp.vim
rename to software/vim/share/vim/vim92/syntax/lftp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lhaskell.vim b/software/vim/share/vim/vim92/syntax/lhaskell.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lhaskell.vim
rename to software/vim/share/vim/vim92/syntax/lhaskell.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/libao.vim b/software/vim/share/vim/vim92/syntax/libao.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/libao.vim
rename to software/vim/share/vim/vim92/syntax/libao.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lifelines.vim b/software/vim/share/vim/vim92/syntax/lifelines.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lifelines.vim
rename to software/vim/share/vim/vim92/syntax/lifelines.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lilo.vim b/software/vim/share/vim/vim92/syntax/lilo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lilo.vim
rename to software/vim/share/vim/vim92/syntax/lilo.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/limits.vim b/software/vim/share/vim/vim92/syntax/limits.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/limits.vim
rename to software/vim/share/vim/vim92/syntax/limits.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/liquid.vim b/software/vim/share/vim/vim92/syntax/liquid.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/liquid.vim
rename to software/vim/share/vim/vim92/syntax/liquid.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lisp.vim b/software/vim/share/vim/vim92/syntax/lisp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lisp.vim
rename to software/vim/share/vim/vim92/syntax/lisp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lite.vim b/software/vim/share/vim/vim92/syntax/lite.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lite.vim
rename to software/vim/share/vim/vim92/syntax/lite.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/litestep.vim b/software/vim/share/vim/vim92/syntax/litestep.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/litestep.vim
rename to software/vim/share/vim/vim92/syntax/litestep.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/loginaccess.vim b/software/vim/share/vim/vim92/syntax/loginaccess.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/loginaccess.vim
rename to software/vim/share/vim/vim92/syntax/loginaccess.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/logindefs.vim b/software/vim/share/vim/vim92/syntax/logindefs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/logindefs.vim
rename to software/vim/share/vim/vim92/syntax/logindefs.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/logtalk.vim b/software/vim/share/vim/vim92/syntax/logtalk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/logtalk.vim
rename to software/vim/share/vim/vim92/syntax/logtalk.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lotos.vim b/software/vim/share/vim/vim92/syntax/lotos.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lotos.vim
rename to software/vim/share/vim/vim92/syntax/lotos.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lout.vim b/software/vim/share/vim/vim92/syntax/lout.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lout.vim
rename to software/vim/share/vim/vim92/syntax/lout.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lpc.vim b/software/vim/share/vim/vim92/syntax/lpc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lpc.vim
rename to software/vim/share/vim/vim92/syntax/lpc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lprolog.vim b/software/vim/share/vim/vim92/syntax/lprolog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lprolog.vim
rename to software/vim/share/vim/vim92/syntax/lprolog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lscript.vim b/software/vim/share/vim/vim92/syntax/lscript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lscript.vim
rename to software/vim/share/vim/vim92/syntax/lscript.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lsl.vim b/software/vim/share/vim/vim92/syntax/lsl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lsl.vim
rename to software/vim/share/vim/vim92/syntax/lsl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lss.vim b/software/vim/share/vim/vim92/syntax/lss.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lss.vim
rename to software/vim/share/vim/vim92/syntax/lss.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lua.vim b/software/vim/share/vim/vim92/syntax/lua.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lua.vim
rename to software/vim/share/vim/vim92/syntax/lua.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lynx.vim b/software/vim/share/vim/vim92/syntax/lynx.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lynx.vim
rename to software/vim/share/vim/vim92/syntax/lynx.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/lyrics.vim b/software/vim/share/vim/vim92/syntax/lyrics.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/lyrics.vim
rename to software/vim/share/vim/vim92/syntax/lyrics.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/m3build.vim b/software/vim/share/vim/vim92/syntax/m3build.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/m3build.vim
rename to software/vim/share/vim/vim92/syntax/m3build.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/m3quake.vim b/software/vim/share/vim/vim92/syntax/m3quake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/m3quake.vim
rename to software/vim/share/vim/vim92/syntax/m3quake.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/m4.vim b/software/vim/share/vim/vim92/syntax/m4.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/m4.vim
rename to software/vim/share/vim/vim92/syntax/m4.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mail.vim b/software/vim/share/vim/vim92/syntax/mail.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mail.vim
rename to software/vim/share/vim/vim92/syntax/mail.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mailaliases.vim b/software/vim/share/vim/vim92/syntax/mailaliases.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mailaliases.vim
rename to software/vim/share/vim/vim92/syntax/mailaliases.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mailcap.vim b/software/vim/share/vim/vim92/syntax/mailcap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mailcap.vim
rename to software/vim/share/vim/vim92/syntax/mailcap.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/make.vim b/software/vim/share/vim/vim92/syntax/make.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/make.vim
rename to software/vim/share/vim/vim92/syntax/make.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mallard.vim b/software/vim/share/vim/vim92/syntax/mallard.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mallard.vim
rename to software/vim/share/vim/vim92/syntax/mallard.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/man.vim b/software/vim/share/vim/vim92/syntax/man.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/man.vim
rename to software/vim/share/vim/vim92/syntax/man.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/manconf.vim b/software/vim/share/vim/vim92/syntax/manconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/manconf.vim
rename to software/vim/share/vim/vim92/syntax/manconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/manual.vim b/software/vim/share/vim/vim92/syntax/manual.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/manual.vim
rename to software/vim/share/vim/vim92/syntax/manual.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/maple.vim b/software/vim/share/vim/vim92/syntax/maple.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/maple.vim
rename to software/vim/share/vim/vim92/syntax/maple.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/markdown.vim b/software/vim/share/vim/vim92/syntax/markdown.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/markdown.vim
rename to software/vim/share/vim/vim92/syntax/markdown.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/masm.vim b/software/vim/share/vim/vim92/syntax/masm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/masm.vim
rename to software/vim/share/vim/vim92/syntax/masm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mason.vim b/software/vim/share/vim/vim92/syntax/mason.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mason.vim
rename to software/vim/share/vim/vim92/syntax/mason.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/master.vim b/software/vim/share/vim/vim92/syntax/master.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/master.vim
rename to software/vim/share/vim/vim92/syntax/master.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/matlab.vim b/software/vim/share/vim/vim92/syntax/matlab.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/matlab.vim
rename to software/vim/share/vim/vim92/syntax/matlab.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/maxima.vim b/software/vim/share/vim/vim92/syntax/maxima.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/maxima.vim
rename to software/vim/share/vim/vim92/syntax/maxima.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mel.vim b/software/vim/share/vim/vim92/syntax/mel.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mel.vim
rename to software/vim/share/vim/vim92/syntax/mel.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mermaid.vim b/software/vim/share/vim/vim92/syntax/mermaid.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mermaid.vim
rename to software/vim/share/vim/vim92/syntax/mermaid.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/meson.vim b/software/vim/share/vim/vim92/syntax/meson.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/meson.vim
rename to software/vim/share/vim/vim92/syntax/meson.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/messages.vim b/software/vim/share/vim/vim92/syntax/messages.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/messages.vim
rename to software/vim/share/vim/vim92/syntax/messages.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mf.vim b/software/vim/share/vim/vim92/syntax/mf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mf.vim
rename to software/vim/share/vim/vim92/syntax/mf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mgl.vim b/software/vim/share/vim/vim92/syntax/mgl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mgl.vim
rename to software/vim/share/vim/vim92/syntax/mgl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mgp.vim b/software/vim/share/vim/vim92/syntax/mgp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mgp.vim
rename to software/vim/share/vim/vim92/syntax/mgp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mib.vim b/software/vim/share/vim/vim92/syntax/mib.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mib.vim
rename to software/vim/share/vim/vim92/syntax/mib.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mix.vim b/software/vim/share/vim/vim92/syntax/mix.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mix.vim
rename to software/vim/share/vim/vim92/syntax/mix.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mma.vim b/software/vim/share/vim/vim92/syntax/mma.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mma.vim
rename to software/vim/share/vim/vim92/syntax/mma.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mmix.vim b/software/vim/share/vim/vim92/syntax/mmix.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mmix.vim
rename to software/vim/share/vim/vim92/syntax/mmix.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mmp.vim b/software/vim/share/vim/vim92/syntax/mmp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mmp.vim
rename to software/vim/share/vim/vim92/syntax/mmp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/modconf.vim b/software/vim/share/vim/vim92/syntax/modconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/modconf.vim
rename to software/vim/share/vim/vim92/syntax/modconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/model.vim b/software/vim/share/vim/vim92/syntax/model.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/model.vim
rename to software/vim/share/vim/vim92/syntax/model.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/modsim3.vim b/software/vim/share/vim/vim92/syntax/modsim3.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/modsim3.vim
rename to software/vim/share/vim/vim92/syntax/modsim3.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/modula2.vim b/software/vim/share/vim/vim92/syntax/modula2.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/modula2.vim
rename to software/vim/share/vim/vim92/syntax/modula2.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/modula3.vim b/software/vim/share/vim/vim92/syntax/modula3.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/modula3.vim
rename to software/vim/share/vim/vim92/syntax/modula3.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/monk.vim b/software/vim/share/vim/vim92/syntax/monk.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/monk.vim
rename to software/vim/share/vim/vim92/syntax/monk.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/moo.vim b/software/vim/share/vim/vim92/syntax/moo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/moo.vim
rename to software/vim/share/vim/vim92/syntax/moo.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mp.vim b/software/vim/share/vim/vim92/syntax/mp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mp.vim
rename to software/vim/share/vim/vim92/syntax/mp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mplayerconf.vim b/software/vim/share/vim/vim92/syntax/mplayerconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mplayerconf.vim
rename to software/vim/share/vim/vim92/syntax/mplayerconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mrxvtrc.vim b/software/vim/share/vim/vim92/syntax/mrxvtrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mrxvtrc.vim
rename to software/vim/share/vim/vim92/syntax/mrxvtrc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/msidl.vim b/software/vim/share/vim/vim92/syntax/msidl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/msidl.vim
rename to software/vim/share/vim/vim92/syntax/msidl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/msmessages.vim b/software/vim/share/vim/vim92/syntax/msmessages.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/msmessages.vim
rename to software/vim/share/vim/vim92/syntax/msmessages.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/msql.vim b/software/vim/share/vim/vim92/syntax/msql.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/msql.vim
rename to software/vim/share/vim/vim92/syntax/msql.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mupad.vim b/software/vim/share/vim/vim92/syntax/mupad.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mupad.vim
rename to software/vim/share/vim/vim92/syntax/mupad.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/murphi.vim b/software/vim/share/vim/vim92/syntax/murphi.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/murphi.vim
rename to software/vim/share/vim/vim92/syntax/murphi.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mush.vim b/software/vim/share/vim/vim92/syntax/mush.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mush.vim
rename to software/vim/share/vim/vim92/syntax/mush.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/muttrc.vim b/software/vim/share/vim/vim92/syntax/muttrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/muttrc.vim
rename to software/vim/share/vim/vim92/syntax/muttrc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/mysql.vim b/software/vim/share/vim/vim92/syntax/mysql.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/mysql.vim
rename to software/vim/share/vim/vim92/syntax/mysql.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/n1ql.vim b/software/vim/share/vim/vim92/syntax/n1ql.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/n1ql.vim
rename to software/vim/share/vim/vim92/syntax/n1ql.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/named.vim b/software/vim/share/vim/vim92/syntax/named.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/named.vim
rename to software/vim/share/vim/vim92/syntax/named.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/nanorc.vim b/software/vim/share/vim/vim92/syntax/nanorc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/nanorc.vim
rename to software/vim/share/vim/vim92/syntax/nanorc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/nasm.vim b/software/vim/share/vim/vim92/syntax/nasm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/nasm.vim
rename to software/vim/share/vim/vim92/syntax/nasm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/nastran.vim b/software/vim/share/vim/vim92/syntax/nastran.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/nastran.vim
rename to software/vim/share/vim/vim92/syntax/nastran.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/natural.vim b/software/vim/share/vim/vim92/syntax/natural.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/natural.vim
rename to software/vim/share/vim/vim92/syntax/natural.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ncf.vim b/software/vim/share/vim/vim92/syntax/ncf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ncf.vim
rename to software/vim/share/vim/vim92/syntax/ncf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/neomuttrc.vim b/software/vim/share/vim/vim92/syntax/neomuttrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/neomuttrc.vim
rename to software/vim/share/vim/vim92/syntax/neomuttrc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/netrc.vim b/software/vim/share/vim/vim92/syntax/netrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/netrc.vim
rename to software/vim/share/vim/vim92/syntax/netrc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/netrw.vim b/software/vim/share/vim/vim92/syntax/netrw.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/netrw.vim
rename to software/vim/share/vim/vim92/syntax/netrw.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/nginx.vim b/software/vim/share/vim/vim92/syntax/nginx.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/nginx.vim
rename to software/vim/share/vim/vim92/syntax/nginx.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ninja.vim b/software/vim/share/vim/vim92/syntax/ninja.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ninja.vim
rename to software/vim/share/vim/vim92/syntax/ninja.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/nix.vim b/software/vim/share/vim/vim92/syntax/nix.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/nix.vim
rename to software/vim/share/vim/vim92/syntax/nix.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/nosyntax.vim b/software/vim/share/vim/vim92/syntax/nosyntax.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/nosyntax.vim
rename to software/vim/share/vim/vim92/syntax/nosyntax.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/nqc.vim b/software/vim/share/vim/vim92/syntax/nqc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/nqc.vim
rename to software/vim/share/vim/vim92/syntax/nqc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/nroff.vim b/software/vim/share/vim/vim92/syntax/nroff.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/nroff.vim
rename to software/vim/share/vim/vim92/syntax/nroff.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/nsis.vim b/software/vim/share/vim/vim92/syntax/nsis.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/nsis.vim
rename to software/vim/share/vim/vim92/syntax/nsis.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/obj.vim b/software/vim/share/vim/vim92/syntax/obj.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/obj.vim
rename to software/vim/share/vim/vim92/syntax/obj.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/objc.vim b/software/vim/share/vim/vim92/syntax/objc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/objc.vim
rename to software/vim/share/vim/vim92/syntax/objc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/objcpp.vim b/software/vim/share/vim/vim92/syntax/objcpp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/objcpp.vim
rename to software/vim/share/vim/vim92/syntax/objcpp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/obse.vim b/software/vim/share/vim/vim92/syntax/obse.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/obse.vim
rename to software/vim/share/vim/vim92/syntax/obse.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ocaml.vim b/software/vim/share/vim/vim92/syntax/ocaml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ocaml.vim
rename to software/vim/share/vim/vim92/syntax/ocaml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/occam.vim b/software/vim/share/vim/vim92/syntax/occam.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/occam.vim
rename to software/vim/share/vim/vim92/syntax/occam.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/omnimark.vim b/software/vim/share/vim/vim92/syntax/omnimark.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/omnimark.vim
rename to software/vim/share/vim/vim92/syntax/omnimark.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/opam.vim b/software/vim/share/vim/vim92/syntax/opam.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/opam.vim
rename to software/vim/share/vim/vim92/syntax/opam.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/openroad.vim b/software/vim/share/vim/vim92/syntax/openroad.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/openroad.vim
rename to software/vim/share/vim/vim92/syntax/openroad.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/openscad.vim b/software/vim/share/vim/vim92/syntax/openscad.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/openscad.vim
rename to software/vim/share/vim/vim92/syntax/openscad.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/openvpn.vim b/software/vim/share/vim/vim92/syntax/openvpn.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/openvpn.vim
rename to software/vim/share/vim/vim92/syntax/openvpn.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/opl.vim b/software/vim/share/vim/vim92/syntax/opl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/opl.vim
rename to software/vim/share/vim/vim92/syntax/opl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ora.vim b/software/vim/share/vim/vim92/syntax/ora.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ora.vim
rename to software/vim/share/vim/vim92/syntax/ora.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pamconf.vim b/software/vim/share/vim/vim92/syntax/pamconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pamconf.vim
rename to software/vim/share/vim/vim92/syntax/pamconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pamenv.vim b/software/vim/share/vim/vim92/syntax/pamenv.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pamenv.vim
rename to software/vim/share/vim/vim92/syntax/pamenv.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/papp.vim b/software/vim/share/vim/vim92/syntax/papp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/papp.vim
rename to software/vim/share/vim/vim92/syntax/papp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pascal.vim b/software/vim/share/vim/vim92/syntax/pascal.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pascal.vim
rename to software/vim/share/vim/vim92/syntax/pascal.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/passwd.vim b/software/vim/share/vim/vim92/syntax/passwd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/passwd.vim
rename to software/vim/share/vim/vim92/syntax/passwd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pbtxt.vim b/software/vim/share/vim/vim92/syntax/pbtxt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pbtxt.vim
rename to software/vim/share/vim/vim92/syntax/pbtxt.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pcap.vim b/software/vim/share/vim/vim92/syntax/pcap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pcap.vim
rename to software/vim/share/vim/vim92/syntax/pcap.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pccts.vim b/software/vim/share/vim/vim92/syntax/pccts.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pccts.vim
rename to software/vim/share/vim/vim92/syntax/pccts.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pdf.vim b/software/vim/share/vim/vim92/syntax/pdf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pdf.vim
rename to software/vim/share/vim/vim92/syntax/pdf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/perl.vim b/software/vim/share/vim/vim92/syntax/perl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/perl.vim
rename to software/vim/share/vim/vim92/syntax/perl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pf.vim b/software/vim/share/vim/vim92/syntax/pf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pf.vim
rename to software/vim/share/vim/vim92/syntax/pf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pfmain.vim b/software/vim/share/vim/vim92/syntax/pfmain.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pfmain.vim
rename to software/vim/share/vim/vim92/syntax/pfmain.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/php.vim b/software/vim/share/vim/vim92/syntax/php.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/php.vim
rename to software/vim/share/vim/vim92/syntax/php.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/phtml.vim b/software/vim/share/vim/vim92/syntax/phtml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/phtml.vim
rename to software/vim/share/vim/vim92/syntax/phtml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pic.vim b/software/vim/share/vim/vim92/syntax/pic.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pic.vim
rename to software/vim/share/vim/vim92/syntax/pic.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pike.vim b/software/vim/share/vim/vim92/syntax/pike.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pike.vim
rename to software/vim/share/vim/vim92/syntax/pike.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pilrc.vim b/software/vim/share/vim/vim92/syntax/pilrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pilrc.vim
rename to software/vim/share/vim/vim92/syntax/pilrc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pine.vim b/software/vim/share/vim/vim92/syntax/pine.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pine.vim
rename to software/vim/share/vim/vim92/syntax/pine.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pinfo.vim b/software/vim/share/vim/vim92/syntax/pinfo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pinfo.vim
rename to software/vim/share/vim/vim92/syntax/pinfo.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/plaintex.vim b/software/vim/share/vim/vim92/syntax/plaintex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/plaintex.vim
rename to software/vim/share/vim/vim92/syntax/plaintex.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pli.vim b/software/vim/share/vim/vim92/syntax/pli.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pli.vim
rename to software/vim/share/vim/vim92/syntax/pli.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/plm.vim b/software/vim/share/vim/vim92/syntax/plm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/plm.vim
rename to software/vim/share/vim/vim92/syntax/plm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/plp.vim b/software/vim/share/vim/vim92/syntax/plp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/plp.vim
rename to software/vim/share/vim/vim92/syntax/plp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/plsql.vim b/software/vim/share/vim/vim92/syntax/plsql.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/plsql.vim
rename to software/vim/share/vim/vim92/syntax/plsql.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/po.vim b/software/vim/share/vim/vim92/syntax/po.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/po.vim
rename to software/vim/share/vim/vim92/syntax/po.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pod.vim b/software/vim/share/vim/vim92/syntax/pod.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pod.vim
rename to software/vim/share/vim/vim92/syntax/pod.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/poefilter.vim b/software/vim/share/vim/vim92/syntax/poefilter.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/poefilter.vim
rename to software/vim/share/vim/vim92/syntax/poefilter.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/poke.vim b/software/vim/share/vim/vim92/syntax/poke.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/poke.vim
rename to software/vim/share/vim/vim92/syntax/poke.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/postscr.vim b/software/vim/share/vim/vim92/syntax/postscr.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/postscr.vim
rename to software/vim/share/vim/vim92/syntax/postscr.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pov.vim b/software/vim/share/vim/vim92/syntax/pov.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pov.vim
rename to software/vim/share/vim/vim92/syntax/pov.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/povini.vim b/software/vim/share/vim/vim92/syntax/povini.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/povini.vim
rename to software/vim/share/vim/vim92/syntax/povini.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ppd.vim b/software/vim/share/vim/vim92/syntax/ppd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ppd.vim
rename to software/vim/share/vim/vim92/syntax/ppd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ppwiz.vim b/software/vim/share/vim/vim92/syntax/ppwiz.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ppwiz.vim
rename to software/vim/share/vim/vim92/syntax/ppwiz.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/prescribe.vim b/software/vim/share/vim/vim92/syntax/prescribe.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/prescribe.vim
rename to software/vim/share/vim/vim92/syntax/prescribe.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/privoxy.vim b/software/vim/share/vim/vim92/syntax/privoxy.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/privoxy.vim
rename to software/vim/share/vim/vim92/syntax/privoxy.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/procmail.vim b/software/vim/share/vim/vim92/syntax/procmail.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/procmail.vim
rename to software/vim/share/vim/vim92/syntax/procmail.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/progress.vim b/software/vim/share/vim/vim92/syntax/progress.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/progress.vim
rename to software/vim/share/vim/vim92/syntax/progress.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/prolog.vim b/software/vim/share/vim/vim92/syntax/prolog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/prolog.vim
rename to software/vim/share/vim/vim92/syntax/prolog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/promela.vim b/software/vim/share/vim/vim92/syntax/promela.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/promela.vim
rename to software/vim/share/vim/vim92/syntax/promela.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/proto.vim b/software/vim/share/vim/vim92/syntax/proto.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/proto.vim
rename to software/vim/share/vim/vim92/syntax/proto.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/protocols.vim b/software/vim/share/vim/vim92/syntax/protocols.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/protocols.vim
rename to software/vim/share/vim/vim92/syntax/protocols.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ps1.vim b/software/vim/share/vim/vim92/syntax/ps1.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ps1.vim
rename to software/vim/share/vim/vim92/syntax/ps1.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ps1xml.vim b/software/vim/share/vim/vim92/syntax/ps1xml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ps1xml.vim
rename to software/vim/share/vim/vim92/syntax/ps1xml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/psf.vim b/software/vim/share/vim/vim92/syntax/psf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/psf.vim
rename to software/vim/share/vim/vim92/syntax/psf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/psl.vim b/software/vim/share/vim/vim92/syntax/psl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/psl.vim
rename to software/vim/share/vim/vim92/syntax/psl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ptcap.vim b/software/vim/share/vim/vim92/syntax/ptcap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ptcap.vim
rename to software/vim/share/vim/vim92/syntax/ptcap.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/purifylog.vim b/software/vim/share/vim/vim92/syntax/purifylog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/purifylog.vim
rename to software/vim/share/vim/vim92/syntax/purifylog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/pyrex.vim b/software/vim/share/vim/vim92/syntax/pyrex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/pyrex.vim
rename to software/vim/share/vim/vim92/syntax/pyrex.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/python.vim b/software/vim/share/vim/vim92/syntax/python.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/python.vim
rename to software/vim/share/vim/vim92/syntax/python.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/python2.vim b/software/vim/share/vim/vim92/syntax/python2.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/python2.vim
rename to software/vim/share/vim/vim92/syntax/python2.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/qb64.vim b/software/vim/share/vim/vim92/syntax/qb64.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/qb64.vim
rename to software/vim/share/vim/vim92/syntax/qb64.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/qf.vim b/software/vim/share/vim/vim92/syntax/qf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/qf.vim
rename to software/vim/share/vim/vim92/syntax/qf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/quake.vim b/software/vim/share/vim/vim92/syntax/quake.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/quake.vim
rename to software/vim/share/vim/vim92/syntax/quake.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/quarto.vim b/software/vim/share/vim/vim92/syntax/quarto.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/quarto.vim
rename to software/vim/share/vim/vim92/syntax/quarto.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/r.vim b/software/vim/share/vim/vim92/syntax/r.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/r.vim
rename to software/vim/share/vim/vim92/syntax/r.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/racc.vim b/software/vim/share/vim/vim92/syntax/racc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/racc.vim
rename to software/vim/share/vim/vim92/syntax/racc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/racket.vim b/software/vim/share/vim/vim92/syntax/racket.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/racket.vim
rename to software/vim/share/vim/vim92/syntax/racket.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/radiance.vim b/software/vim/share/vim/vim92/syntax/radiance.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/radiance.vim
rename to software/vim/share/vim/vim92/syntax/radiance.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/raku.vim b/software/vim/share/vim/vim92/syntax/raku.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/raku.vim
rename to software/vim/share/vim/vim92/syntax/raku.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/raml.vim b/software/vim/share/vim/vim92/syntax/raml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/raml.vim
rename to software/vim/share/vim/vim92/syntax/raml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ratpoison.vim b/software/vim/share/vim/vim92/syntax/ratpoison.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ratpoison.vim
rename to software/vim/share/vim/vim92/syntax/ratpoison.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rc.vim b/software/vim/share/vim/vim92/syntax/rc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rc.vim
rename to software/vim/share/vim/vim92/syntax/rc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rcs.vim b/software/vim/share/vim/vim92/syntax/rcs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rcs.vim
rename to software/vim/share/vim/vim92/syntax/rcs.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rcslog.vim b/software/vim/share/vim/vim92/syntax/rcslog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rcslog.vim
rename to software/vim/share/vim/vim92/syntax/rcslog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/readline.vim b/software/vim/share/vim/vim92/syntax/readline.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/readline.vim
rename to software/vim/share/vim/vim92/syntax/readline.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rebol.vim b/software/vim/share/vim/vim92/syntax/rebol.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rebol.vim
rename to software/vim/share/vim/vim92/syntax/rebol.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/redif.vim b/software/vim/share/vim/vim92/syntax/redif.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/redif.vim
rename to software/vim/share/vim/vim92/syntax/redif.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/registry.vim b/software/vim/share/vim/vim92/syntax/registry.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/registry.vim
rename to software/vim/share/vim/vim92/syntax/registry.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rego.vim b/software/vim/share/vim/vim92/syntax/rego.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rego.vim
rename to software/vim/share/vim/vim92/syntax/rego.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/remind.vim b/software/vim/share/vim/vim92/syntax/remind.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/remind.vim
rename to software/vim/share/vim/vim92/syntax/remind.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/resolv.vim b/software/vim/share/vim/vim92/syntax/resolv.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/resolv.vim
rename to software/vim/share/vim/vim92/syntax/resolv.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/reva.vim b/software/vim/share/vim/vim92/syntax/reva.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/reva.vim
rename to software/vim/share/vim/vim92/syntax/reva.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rexx.vim b/software/vim/share/vim/vim92/syntax/rexx.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rexx.vim
rename to software/vim/share/vim/vim92/syntax/rexx.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rhelp.vim b/software/vim/share/vim/vim92/syntax/rhelp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rhelp.vim
rename to software/vim/share/vim/vim92/syntax/rhelp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rib.vim b/software/vim/share/vim/vim92/syntax/rib.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rib.vim
rename to software/vim/share/vim/vim92/syntax/rib.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rmd.vim b/software/vim/share/vim/vim92/syntax/rmd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rmd.vim
rename to software/vim/share/vim/vim92/syntax/rmd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rnc.vim b/software/vim/share/vim/vim92/syntax/rnc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rnc.vim
rename to software/vim/share/vim/vim92/syntax/rnc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rng.vim b/software/vim/share/vim/vim92/syntax/rng.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rng.vim
rename to software/vim/share/vim/vim92/syntax/rng.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rnoweb.vim b/software/vim/share/vim/vim92/syntax/rnoweb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rnoweb.vim
rename to software/vim/share/vim/vim92/syntax/rnoweb.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/robots.vim b/software/vim/share/vim/vim92/syntax/robots.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/robots.vim
rename to software/vim/share/vim/vim92/syntax/robots.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/routeros.vim b/software/vim/share/vim/vim92/syntax/routeros.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/routeros.vim
rename to software/vim/share/vim/vim92/syntax/routeros.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rpcgen.vim b/software/vim/share/vim/vim92/syntax/rpcgen.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rpcgen.vim
rename to software/vim/share/vim/vim92/syntax/rpcgen.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rpl.vim b/software/vim/share/vim/vim92/syntax/rpl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rpl.vim
rename to software/vim/share/vim/vim92/syntax/rpl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rrst.vim b/software/vim/share/vim/vim92/syntax/rrst.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rrst.vim
rename to software/vim/share/vim/vim92/syntax/rrst.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rst.vim b/software/vim/share/vim/vim92/syntax/rst.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rst.vim
rename to software/vim/share/vim/vim92/syntax/rst.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rtf.vim b/software/vim/share/vim/vim92/syntax/rtf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rtf.vim
rename to software/vim/share/vim/vim92/syntax/rtf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ruby.vim b/software/vim/share/vim/vim92/syntax/ruby.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ruby.vim
rename to software/vim/share/vim/vim92/syntax/ruby.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/rust.vim b/software/vim/share/vim/vim92/syntax/rust.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/rust.vim
rename to software/vim/share/vim/vim92/syntax/rust.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/samba.vim b/software/vim/share/vim/vim92/syntax/samba.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/samba.vim
rename to software/vim/share/vim/vim92/syntax/samba.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sas.vim b/software/vim/share/vim/vim92/syntax/sas.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sas.vim
rename to software/vim/share/vim/vim92/syntax/sas.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sass.vim b/software/vim/share/vim/vim92/syntax/sass.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sass.vim
rename to software/vim/share/vim/vim92/syntax/sass.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sather.vim b/software/vim/share/vim/vim92/syntax/sather.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sather.vim
rename to software/vim/share/vim/vim92/syntax/sather.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sbt.vim b/software/vim/share/vim/vim92/syntax/sbt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sbt.vim
rename to software/vim/share/vim/vim92/syntax/sbt.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/scala.vim b/software/vim/share/vim/vim92/syntax/scala.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/scala.vim
rename to software/vim/share/vim/vim92/syntax/scala.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/scdoc.vim b/software/vim/share/vim/vim92/syntax/scdoc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/scdoc.vim
rename to software/vim/share/vim/vim92/syntax/scdoc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/scheme.vim b/software/vim/share/vim/vim92/syntax/scheme.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/scheme.vim
rename to software/vim/share/vim/vim92/syntax/scheme.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/scilab.vim b/software/vim/share/vim/vim92/syntax/scilab.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/scilab.vim
rename to software/vim/share/vim/vim92/syntax/scilab.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/screen.vim b/software/vim/share/vim/vim92/syntax/screen.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/screen.vim
rename to software/vim/share/vim/vim92/syntax/screen.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/scss.vim b/software/vim/share/vim/vim92/syntax/scss.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/scss.vim
rename to software/vim/share/vim/vim92/syntax/scss.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sd.vim b/software/vim/share/vim/vim92/syntax/sd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sd.vim
rename to software/vim/share/vim/vim92/syntax/sd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sdc.vim b/software/vim/share/vim/vim92/syntax/sdc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sdc.vim
rename to software/vim/share/vim/vim92/syntax/sdc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sdl.vim b/software/vim/share/vim/vim92/syntax/sdl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sdl.vim
rename to software/vim/share/vim/vim92/syntax/sdl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sed.vim b/software/vim/share/vim/vim92/syntax/sed.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sed.vim
rename to software/vim/share/vim/vim92/syntax/sed.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sendpr.vim b/software/vim/share/vim/vim92/syntax/sendpr.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sendpr.vim
rename to software/vim/share/vim/vim92/syntax/sendpr.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sensors.vim b/software/vim/share/vim/vim92/syntax/sensors.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sensors.vim
rename to software/vim/share/vim/vim92/syntax/sensors.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/services.vim b/software/vim/share/vim/vim92/syntax/services.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/services.vim
rename to software/vim/share/vim/vim92/syntax/services.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/setserial.vim b/software/vim/share/vim/vim92/syntax/setserial.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/setserial.vim
rename to software/vim/share/vim/vim92/syntax/setserial.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sexplib.vim b/software/vim/share/vim/vim92/syntax/sexplib.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sexplib.vim
rename to software/vim/share/vim/vim92/syntax/sexplib.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sgml.vim b/software/vim/share/vim/vim92/syntax/sgml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sgml.vim
rename to software/vim/share/vim/vim92/syntax/sgml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sgmldecl.vim b/software/vim/share/vim/vim92/syntax/sgmldecl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sgmldecl.vim
rename to software/vim/share/vim/vim92/syntax/sgmldecl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sgmllnx.vim b/software/vim/share/vim/vim92/syntax/sgmllnx.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sgmllnx.vim
rename to software/vim/share/vim/vim92/syntax/sgmllnx.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sh.vim b/software/vim/share/vim/vim92/syntax/sh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sh.vim
rename to software/vim/share/vim/vim92/syntax/sh.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/shared/context-data-context.vim b/software/vim/share/vim/vim92/syntax/shared/context-data-context.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/shared/context-data-context.vim
rename to software/vim/share/vim/vim92/syntax/shared/context-data-context.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/shared/context-data-interfaces.vim b/software/vim/share/vim/vim92/syntax/shared/context-data-interfaces.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/shared/context-data-interfaces.vim
rename to software/vim/share/vim/vim92/syntax/shared/context-data-interfaces.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/shared/context-data-metafun.vim b/software/vim/share/vim/vim92/syntax/shared/context-data-metafun.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/shared/context-data-metafun.vim
rename to software/vim/share/vim/vim92/syntax/shared/context-data-metafun.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/shared/context-data-tex.vim b/software/vim/share/vim/vim92/syntax/shared/context-data-tex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/shared/context-data-tex.vim
rename to software/vim/share/vim/vim92/syntax/shared/context-data-tex.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/shared/hgcommitDiff.vim b/software/vim/share/vim/vim92/syntax/shared/hgcommitDiff.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/shared/hgcommitDiff.vim
rename to software/vim/share/vim/vim92/syntax/shared/hgcommitDiff.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/shared/typescriptcommon.vim b/software/vim/share/vim/vim92/syntax/shared/typescriptcommon.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/shared/typescriptcommon.vim
rename to software/vim/share/vim/vim92/syntax/shared/typescriptcommon.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sicad.vim b/software/vim/share/vim/vim92/syntax/sicad.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sicad.vim
rename to software/vim/share/vim/vim92/syntax/sicad.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sieve.vim b/software/vim/share/vim/vim92/syntax/sieve.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sieve.vim
rename to software/vim/share/vim/vim92/syntax/sieve.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sil.vim b/software/vim/share/vim/vim92/syntax/sil.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sil.vim
rename to software/vim/share/vim/vim92/syntax/sil.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/simula.vim b/software/vim/share/vim/vim92/syntax/simula.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/simula.vim
rename to software/vim/share/vim/vim92/syntax/simula.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sinda.vim b/software/vim/share/vim/vim92/syntax/sinda.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sinda.vim
rename to software/vim/share/vim/vim92/syntax/sinda.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sindacmp.vim b/software/vim/share/vim/vim92/syntax/sindacmp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sindacmp.vim
rename to software/vim/share/vim/vim92/syntax/sindacmp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sindaout.vim b/software/vim/share/vim/vim92/syntax/sindaout.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sindaout.vim
rename to software/vim/share/vim/vim92/syntax/sindaout.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sisu.vim b/software/vim/share/vim/vim92/syntax/sisu.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sisu.vim
rename to software/vim/share/vim/vim92/syntax/sisu.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/skill.vim b/software/vim/share/vim/vim92/syntax/skill.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/skill.vim
rename to software/vim/share/vim/vim92/syntax/skill.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sl.vim b/software/vim/share/vim/vim92/syntax/sl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sl.vim
rename to software/vim/share/vim/vim92/syntax/sl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/slang.vim b/software/vim/share/vim/vim92/syntax/slang.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/slang.vim
rename to software/vim/share/vim/vim92/syntax/slang.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/slice.vim b/software/vim/share/vim/vim92/syntax/slice.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/slice.vim
rename to software/vim/share/vim/vim92/syntax/slice.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/slpconf.vim b/software/vim/share/vim/vim92/syntax/slpconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/slpconf.vim
rename to software/vim/share/vim/vim92/syntax/slpconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/slpreg.vim b/software/vim/share/vim/vim92/syntax/slpreg.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/slpreg.vim
rename to software/vim/share/vim/vim92/syntax/slpreg.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/slpspi.vim b/software/vim/share/vim/vim92/syntax/slpspi.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/slpspi.vim
rename to software/vim/share/vim/vim92/syntax/slpspi.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/slrnrc.vim b/software/vim/share/vim/vim92/syntax/slrnrc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/slrnrc.vim
rename to software/vim/share/vim/vim92/syntax/slrnrc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/slrnsc.vim b/software/vim/share/vim/vim92/syntax/slrnsc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/slrnsc.vim
rename to software/vim/share/vim/vim92/syntax/slrnsc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sm.vim b/software/vim/share/vim/vim92/syntax/sm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sm.vim
rename to software/vim/share/vim/vim92/syntax/sm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/smarty.vim b/software/vim/share/vim/vim92/syntax/smarty.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/smarty.vim
rename to software/vim/share/vim/vim92/syntax/smarty.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/smcl.vim b/software/vim/share/vim/vim92/syntax/smcl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/smcl.vim
rename to software/vim/share/vim/vim92/syntax/smcl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/smil.vim b/software/vim/share/vim/vim92/syntax/smil.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/smil.vim
rename to software/vim/share/vim/vim92/syntax/smil.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/smith.vim b/software/vim/share/vim/vim92/syntax/smith.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/smith.vim
rename to software/vim/share/vim/vim92/syntax/smith.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sml.vim b/software/vim/share/vim/vim92/syntax/sml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sml.vim
rename to software/vim/share/vim/vim92/syntax/sml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/snnsnet.vim b/software/vim/share/vim/vim92/syntax/snnsnet.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/snnsnet.vim
rename to software/vim/share/vim/vim92/syntax/snnsnet.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/snnspat.vim b/software/vim/share/vim/vim92/syntax/snnspat.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/snnspat.vim
rename to software/vim/share/vim/vim92/syntax/snnspat.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/snnsres.vim b/software/vim/share/vim/vim92/syntax/snnsres.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/snnsres.vim
rename to software/vim/share/vim/vim92/syntax/snnsres.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/snobol4.vim b/software/vim/share/vim/vim92/syntax/snobol4.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/snobol4.vim
rename to software/vim/share/vim/vim92/syntax/snobol4.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/solidity.vim b/software/vim/share/vim/vim92/syntax/solidity.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/solidity.vim
rename to software/vim/share/vim/vim92/syntax/solidity.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/spec.vim b/software/vim/share/vim/vim92/syntax/spec.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/spec.vim
rename to software/vim/share/vim/vim92/syntax/spec.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/specman.vim b/software/vim/share/vim/vim92/syntax/specman.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/specman.vim
rename to software/vim/share/vim/vim92/syntax/specman.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/spice.vim b/software/vim/share/vim/vim92/syntax/spice.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/spice.vim
rename to software/vim/share/vim/vim92/syntax/spice.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/splint.vim b/software/vim/share/vim/vim92/syntax/splint.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/splint.vim
rename to software/vim/share/vim/vim92/syntax/splint.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/spup.vim b/software/vim/share/vim/vim92/syntax/spup.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/spup.vim
rename to software/vim/share/vim/vim92/syntax/spup.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/spyce.vim b/software/vim/share/vim/vim92/syntax/spyce.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/spyce.vim
rename to software/vim/share/vim/vim92/syntax/spyce.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sql.vim b/software/vim/share/vim/vim92/syntax/sql.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sql.vim
rename to software/vim/share/vim/vim92/syntax/sql.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sqlanywhere.vim b/software/vim/share/vim/vim92/syntax/sqlanywhere.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sqlanywhere.vim
rename to software/vim/share/vim/vim92/syntax/sqlanywhere.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sqlforms.vim b/software/vim/share/vim/vim92/syntax/sqlforms.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sqlforms.vim
rename to software/vim/share/vim/vim92/syntax/sqlforms.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sqlhana.vim b/software/vim/share/vim/vim92/syntax/sqlhana.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sqlhana.vim
rename to software/vim/share/vim/vim92/syntax/sqlhana.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sqlinformix.vim b/software/vim/share/vim/vim92/syntax/sqlinformix.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sqlinformix.vim
rename to software/vim/share/vim/vim92/syntax/sqlinformix.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sqlj.vim b/software/vim/share/vim/vim92/syntax/sqlj.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sqlj.vim
rename to software/vim/share/vim/vim92/syntax/sqlj.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sqloracle.vim b/software/vim/share/vim/vim92/syntax/sqloracle.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sqloracle.vim
rename to software/vim/share/vim/vim92/syntax/sqloracle.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sqr.vim b/software/vim/share/vim/vim92/syntax/sqr.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sqr.vim
rename to software/vim/share/vim/vim92/syntax/sqr.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/squid.vim b/software/vim/share/vim/vim92/syntax/squid.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/squid.vim
rename to software/vim/share/vim/vim92/syntax/squid.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/squirrel.vim b/software/vim/share/vim/vim92/syntax/squirrel.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/squirrel.vim
rename to software/vim/share/vim/vim92/syntax/squirrel.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/srec.vim b/software/vim/share/vim/vim92/syntax/srec.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/srec.vim
rename to software/vim/share/vim/vim92/syntax/srec.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/srt.vim b/software/vim/share/vim/vim92/syntax/srt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/srt.vim
rename to software/vim/share/vim/vim92/syntax/srt.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/ssa.vim b/software/vim/share/vim/vim92/syntax/ssa.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/ssa.vim
rename to software/vim/share/vim/vim92/syntax/ssa.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sshconfig.vim b/software/vim/share/vim/vim92/syntax/sshconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sshconfig.vim
rename to software/vim/share/vim/vim92/syntax/sshconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sshdconfig.vim b/software/vim/share/vim/vim92/syntax/sshdconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sshdconfig.vim
rename to software/vim/share/vim/vim92/syntax/sshdconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/st.vim b/software/vim/share/vim/vim92/syntax/st.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/st.vim
rename to software/vim/share/vim/vim92/syntax/st.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/stata.vim b/software/vim/share/vim/vim92/syntax/stata.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/stata.vim
rename to software/vim/share/vim/vim92/syntax/stata.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/stp.vim b/software/vim/share/vim/vim92/syntax/stp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/stp.vim
rename to software/vim/share/vim/vim92/syntax/stp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/strace.vim b/software/vim/share/vim/vim92/syntax/strace.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/strace.vim
rename to software/vim/share/vim/vim92/syntax/strace.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/structurizr.vim b/software/vim/share/vim/vim92/syntax/structurizr.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/structurizr.vim
rename to software/vim/share/vim/vim92/syntax/structurizr.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sudoers.vim b/software/vim/share/vim/vim92/syntax/sudoers.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sudoers.vim
rename to software/vim/share/vim/vim92/syntax/sudoers.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/svg.vim b/software/vim/share/vim/vim92/syntax/svg.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/svg.vim
rename to software/vim/share/vim/vim92/syntax/svg.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/svn.vim b/software/vim/share/vim/vim92/syntax/svn.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/svn.vim
rename to software/vim/share/vim/vim92/syntax/svn.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/swayconfig.vim b/software/vim/share/vim/vim92/syntax/swayconfig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/swayconfig.vim
rename to software/vim/share/vim/vim92/syntax/swayconfig.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/swift.vim b/software/vim/share/vim/vim92/syntax/swift.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/swift.vim
rename to software/vim/share/vim/vim92/syntax/swift.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/swiftgyb.vim b/software/vim/share/vim/vim92/syntax/swiftgyb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/swiftgyb.vim
rename to software/vim/share/vim/vim92/syntax/swiftgyb.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/syncolor.vim b/software/vim/share/vim/vim92/syntax/syncolor.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/syncolor.vim
rename to software/vim/share/vim/vim92/syntax/syncolor.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/synload.vim b/software/vim/share/vim/vim92/syntax/synload.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/synload.vim
rename to software/vim/share/vim/vim92/syntax/synload.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/syntax.vim b/software/vim/share/vim/vim92/syntax/syntax.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/syntax.vim
rename to software/vim/share/vim/vim92/syntax/syntax.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/sysctl.vim b/software/vim/share/vim/vim92/syntax/sysctl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/sysctl.vim
rename to software/vim/share/vim/vim92/syntax/sysctl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/systemd.vim b/software/vim/share/vim/vim92/syntax/systemd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/systemd.vim
rename to software/vim/share/vim/vim92/syntax/systemd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/systemverilog.vim b/software/vim/share/vim/vim92/syntax/systemverilog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/systemverilog.vim
rename to software/vim/share/vim/vim92/syntax/systemverilog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tads.vim b/software/vim/share/vim/vim92/syntax/tads.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tads.vim
rename to software/vim/share/vim/vim92/syntax/tads.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tags.vim b/software/vim/share/vim/vim92/syntax/tags.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tags.vim
rename to software/vim/share/vim/vim92/syntax/tags.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tak.vim b/software/vim/share/vim/vim92/syntax/tak.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tak.vim
rename to software/vim/share/vim/vim92/syntax/tak.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/takcmp.vim b/software/vim/share/vim/vim92/syntax/takcmp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/takcmp.vim
rename to software/vim/share/vim/vim92/syntax/takcmp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/takout.vim b/software/vim/share/vim/vim92/syntax/takout.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/takout.vim
rename to software/vim/share/vim/vim92/syntax/takout.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tap.vim b/software/vim/share/vim/vim92/syntax/tap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tap.vim
rename to software/vim/share/vim/vim92/syntax/tap.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tar.vim b/software/vim/share/vim/vim92/syntax/tar.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tar.vim
rename to software/vim/share/vim/vim92/syntax/tar.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/taskdata.vim b/software/vim/share/vim/vim92/syntax/taskdata.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/taskdata.vim
rename to software/vim/share/vim/vim92/syntax/taskdata.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/taskedit.vim b/software/vim/share/vim/vim92/syntax/taskedit.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/taskedit.vim
rename to software/vim/share/vim/vim92/syntax/taskedit.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tasm.vim b/software/vim/share/vim/vim92/syntax/tasm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tasm.vim
rename to software/vim/share/vim/vim92/syntax/tasm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tcl.vim b/software/vim/share/vim/vim92/syntax/tcl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tcl.vim
rename to software/vim/share/vim/vim92/syntax/tcl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tcsh.vim b/software/vim/share/vim/vim92/syntax/tcsh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tcsh.vim
rename to software/vim/share/vim/vim92/syntax/tcsh.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/template.vim b/software/vim/share/vim/vim92/syntax/template.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/template.vim
rename to software/vim/share/vim/vim92/syntax/template.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/teraterm.vim b/software/vim/share/vim/vim92/syntax/teraterm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/teraterm.vim
rename to software/vim/share/vim/vim92/syntax/teraterm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/terminfo.vim b/software/vim/share/vim/vim92/syntax/terminfo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/terminfo.vim
rename to software/vim/share/vim/vim92/syntax/terminfo.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tex.vim b/software/vim/share/vim/vim92/syntax/tex.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tex.vim
rename to software/vim/share/vim/vim92/syntax/tex.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/texinfo.vim b/software/vim/share/vim/vim92/syntax/texinfo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/texinfo.vim
rename to software/vim/share/vim/vim92/syntax/texinfo.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/texmf.vim b/software/vim/share/vim/vim92/syntax/texmf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/texmf.vim
rename to software/vim/share/vim/vim92/syntax/texmf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tf.vim b/software/vim/share/vim/vim92/syntax/tf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tf.vim
rename to software/vim/share/vim/vim92/syntax/tf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tidy.vim b/software/vim/share/vim/vim92/syntax/tidy.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tidy.vim
rename to software/vim/share/vim/vim92/syntax/tidy.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tilde.vim b/software/vim/share/vim/vim92/syntax/tilde.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tilde.vim
rename to software/vim/share/vim/vim92/syntax/tilde.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tli.vim b/software/vim/share/vim/vim92/syntax/tli.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tli.vim
rename to software/vim/share/vim/vim92/syntax/tli.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tmux.vim b/software/vim/share/vim/vim92/syntax/tmux.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tmux.vim
rename to software/vim/share/vim/vim92/syntax/tmux.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/toml.vim b/software/vim/share/vim/vim92/syntax/toml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/toml.vim
rename to software/vim/share/vim/vim92/syntax/toml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tpp.vim b/software/vim/share/vim/vim92/syntax/tpp.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tpp.vim
rename to software/vim/share/vim/vim92/syntax/tpp.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/trasys.vim b/software/vim/share/vim/vim92/syntax/trasys.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/trasys.vim
rename to software/vim/share/vim/vim92/syntax/trasys.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/treetop.vim b/software/vim/share/vim/vim92/syntax/treetop.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/treetop.vim
rename to software/vim/share/vim/vim92/syntax/treetop.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/trustees.vim b/software/vim/share/vim/vim92/syntax/trustees.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/trustees.vim
rename to software/vim/share/vim/vim92/syntax/trustees.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tsalt.vim b/software/vim/share/vim/vim92/syntax/tsalt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tsalt.vim
rename to software/vim/share/vim/vim92/syntax/tsalt.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tsscl.vim b/software/vim/share/vim/vim92/syntax/tsscl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tsscl.vim
rename to software/vim/share/vim/vim92/syntax/tsscl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tssgm.vim b/software/vim/share/vim/vim92/syntax/tssgm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tssgm.vim
rename to software/vim/share/vim/vim92/syntax/tssgm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tssop.vim b/software/vim/share/vim/vim92/syntax/tssop.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tssop.vim
rename to software/vim/share/vim/vim92/syntax/tssop.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tt2.vim b/software/vim/share/vim/vim92/syntax/tt2.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tt2.vim
rename to software/vim/share/vim/vim92/syntax/tt2.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tt2html.vim b/software/vim/share/vim/vim92/syntax/tt2html.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tt2html.vim
rename to software/vim/share/vim/vim92/syntax/tt2html.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/tt2js.vim b/software/vim/share/vim/vim92/syntax/tt2js.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/tt2js.vim
rename to software/vim/share/vim/vim92/syntax/tt2js.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/typescript.vim b/software/vim/share/vim/vim92/syntax/typescript.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/typescript.vim
rename to software/vim/share/vim/vim92/syntax/typescript.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/typescriptreact.vim b/software/vim/share/vim/vim92/syntax/typescriptreact.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/typescriptreact.vim
rename to software/vim/share/vim/vim92/syntax/typescriptreact.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/uc.vim b/software/vim/share/vim/vim92/syntax/uc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/uc.vim
rename to software/vim/share/vim/vim92/syntax/uc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/udevconf.vim b/software/vim/share/vim/vim92/syntax/udevconf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/udevconf.vim
rename to software/vim/share/vim/vim92/syntax/udevconf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/udevperm.vim b/software/vim/share/vim/vim92/syntax/udevperm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/udevperm.vim
rename to software/vim/share/vim/vim92/syntax/udevperm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/udevrules.vim b/software/vim/share/vim/vim92/syntax/udevrules.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/udevrules.vim
rename to software/vim/share/vim/vim92/syntax/udevrules.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/uil.vim b/software/vim/share/vim/vim92/syntax/uil.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/uil.vim
rename to software/vim/share/vim/vim92/syntax/uil.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/updatedb.vim b/software/vim/share/vim/vim92/syntax/updatedb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/updatedb.vim
rename to software/vim/share/vim/vim92/syntax/updatedb.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/upstart.vim b/software/vim/share/vim/vim92/syntax/upstart.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/upstart.vim
rename to software/vim/share/vim/vim92/syntax/upstart.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/upstreamdat.vim b/software/vim/share/vim/vim92/syntax/upstreamdat.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/upstreamdat.vim
rename to software/vim/share/vim/vim92/syntax/upstreamdat.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/upstreaminstalllog.vim b/software/vim/share/vim/vim92/syntax/upstreaminstalllog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/upstreaminstalllog.vim
rename to software/vim/share/vim/vim92/syntax/upstreaminstalllog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/upstreamlog.vim b/software/vim/share/vim/vim92/syntax/upstreamlog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/upstreamlog.vim
rename to software/vim/share/vim/vim92/syntax/upstreamlog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/upstreamrpt.vim b/software/vim/share/vim/vim92/syntax/upstreamrpt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/upstreamrpt.vim
rename to software/vim/share/vim/vim92/syntax/upstreamrpt.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/usserverlog.vim b/software/vim/share/vim/vim92/syntax/usserverlog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/usserverlog.vim
rename to software/vim/share/vim/vim92/syntax/usserverlog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/usw2kagtlog.vim b/software/vim/share/vim/vim92/syntax/usw2kagtlog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/usw2kagtlog.vim
rename to software/vim/share/vim/vim92/syntax/usw2kagtlog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/valgrind.vim b/software/vim/share/vim/vim92/syntax/valgrind.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/valgrind.vim
rename to software/vim/share/vim/vim92/syntax/valgrind.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/vb.vim b/software/vim/share/vim/vim92/syntax/vb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/vb.vim
rename to software/vim/share/vim/vim92/syntax/vb.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/vdf.vim b/software/vim/share/vim/vim92/syntax/vdf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/vdf.vim
rename to software/vim/share/vim/vim92/syntax/vdf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/vera.vim b/software/vim/share/vim/vim92/syntax/vera.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/vera.vim
rename to software/vim/share/vim/vim92/syntax/vera.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/verilog.vim b/software/vim/share/vim/vim92/syntax/verilog.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/verilog.vim
rename to software/vim/share/vim/vim92/syntax/verilog.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/verilogams.vim b/software/vim/share/vim/vim92/syntax/verilogams.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/verilogams.vim
rename to software/vim/share/vim/vim92/syntax/verilogams.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/vgrindefs.vim b/software/vim/share/vim/vim92/syntax/vgrindefs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/vgrindefs.vim
rename to software/vim/share/vim/vim92/syntax/vgrindefs.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/vhdl.vim b/software/vim/share/vim/vim92/syntax/vhdl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/vhdl.vim
rename to software/vim/share/vim/vim92/syntax/vhdl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/vim.vim b/software/vim/share/vim/vim92/syntax/vim.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/vim.vim
rename to software/vim/share/vim/vim92/syntax/vim.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/viminfo.vim b/software/vim/share/vim/vim92/syntax/viminfo.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/viminfo.vim
rename to software/vim/share/vim/vim92/syntax/viminfo.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/virata.vim b/software/vim/share/vim/vim92/syntax/virata.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/virata.vim
rename to software/vim/share/vim/vim92/syntax/virata.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/vmasm.vim b/software/vim/share/vim/vim92/syntax/vmasm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/vmasm.vim
rename to software/vim/share/vim/vim92/syntax/vmasm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/voscm.vim b/software/vim/share/vim/vim92/syntax/voscm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/voscm.vim
rename to software/vim/share/vim/vim92/syntax/voscm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/vrml.vim b/software/vim/share/vim/vim92/syntax/vrml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/vrml.vim
rename to software/vim/share/vim/vim92/syntax/vrml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/vroom.vim b/software/vim/share/vim/vim92/syntax/vroom.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/vroom.vim
rename to software/vim/share/vim/vim92/syntax/vroom.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/vsejcl.vim b/software/vim/share/vim/vim92/syntax/vsejcl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/vsejcl.vim
rename to software/vim/share/vim/vim92/syntax/vsejcl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/vue.vim b/software/vim/share/vim/vim92/syntax/vue.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/vue.vim
rename to software/vim/share/vim/vim92/syntax/vue.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/wast.vim b/software/vim/share/vim/vim92/syntax/wast.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/wast.vim
rename to software/vim/share/vim/vim92/syntax/wast.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/wdiff.vim b/software/vim/share/vim/vim92/syntax/wdiff.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/wdiff.vim
rename to software/vim/share/vim/vim92/syntax/wdiff.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/wdl.vim b/software/vim/share/vim/vim92/syntax/wdl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/wdl.vim
rename to software/vim/share/vim/vim92/syntax/wdl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/web.vim b/software/vim/share/vim/vim92/syntax/web.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/web.vim
rename to software/vim/share/vim/vim92/syntax/web.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/webmacro.vim b/software/vim/share/vim/vim92/syntax/webmacro.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/webmacro.vim
rename to software/vim/share/vim/vim92/syntax/webmacro.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/wget.vim b/software/vim/share/vim/vim92/syntax/wget.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/wget.vim
rename to software/vim/share/vim/vim92/syntax/wget.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/wget2.vim b/software/vim/share/vim/vim92/syntax/wget2.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/wget2.vim
rename to software/vim/share/vim/vim92/syntax/wget2.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/whitespace.vim b/software/vim/share/vim/vim92/syntax/whitespace.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/whitespace.vim
rename to software/vim/share/vim/vim92/syntax/whitespace.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/winbatch.vim b/software/vim/share/vim/vim92/syntax/winbatch.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/winbatch.vim
rename to software/vim/share/vim/vim92/syntax/winbatch.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/wml.vim b/software/vim/share/vim/vim92/syntax/wml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/wml.vim
rename to software/vim/share/vim/vim92/syntax/wml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/wsh.vim b/software/vim/share/vim/vim92/syntax/wsh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/wsh.vim
rename to software/vim/share/vim/vim92/syntax/wsh.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/wsml.vim b/software/vim/share/vim/vim92/syntax/wsml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/wsml.vim
rename to software/vim/share/vim/vim92/syntax/wsml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/wvdial.vim b/software/vim/share/vim/vim92/syntax/wvdial.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/wvdial.vim
rename to software/vim/share/vim/vim92/syntax/wvdial.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xbl.vim b/software/vim/share/vim/vim92/syntax/xbl.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xbl.vim
rename to software/vim/share/vim/vim92/syntax/xbl.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xdefaults.vim b/software/vim/share/vim/vim92/syntax/xdefaults.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xdefaults.vim
rename to software/vim/share/vim/vim92/syntax/xdefaults.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xf86conf.vim b/software/vim/share/vim/vim92/syntax/xf86conf.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xf86conf.vim
rename to software/vim/share/vim/vim92/syntax/xf86conf.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xhtml.vim b/software/vim/share/vim/vim92/syntax/xhtml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xhtml.vim
rename to software/vim/share/vim/vim92/syntax/xhtml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xinetd.vim b/software/vim/share/vim/vim92/syntax/xinetd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xinetd.vim
rename to software/vim/share/vim/vim92/syntax/xinetd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xkb.vim b/software/vim/share/vim/vim92/syntax/xkb.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xkb.vim
rename to software/vim/share/vim/vim92/syntax/xkb.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xmath.vim b/software/vim/share/vim/vim92/syntax/xmath.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xmath.vim
rename to software/vim/share/vim/vim92/syntax/xmath.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xml.vim b/software/vim/share/vim/vim92/syntax/xml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xml.vim
rename to software/vim/share/vim/vim92/syntax/xml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xmodmap.vim b/software/vim/share/vim/vim92/syntax/xmodmap.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xmodmap.vim
rename to software/vim/share/vim/vim92/syntax/xmodmap.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xpm.vim b/software/vim/share/vim/vim92/syntax/xpm.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xpm.vim
rename to software/vim/share/vim/vim92/syntax/xpm.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xpm2.vim b/software/vim/share/vim/vim92/syntax/xpm2.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xpm2.vim
rename to software/vim/share/vim/vim92/syntax/xpm2.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xquery.vim b/software/vim/share/vim/vim92/syntax/xquery.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xquery.vim
rename to software/vim/share/vim/vim92/syntax/xquery.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xs.vim b/software/vim/share/vim/vim92/syntax/xs.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xs.vim
rename to software/vim/share/vim/vim92/syntax/xs.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xsd.vim b/software/vim/share/vim/vim92/syntax/xsd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xsd.vim
rename to software/vim/share/vim/vim92/syntax/xsd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xslt.vim b/software/vim/share/vim/vim92/syntax/xslt.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xslt.vim
rename to software/vim/share/vim/vim92/syntax/xslt.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/xxd.vim b/software/vim/share/vim/vim92/syntax/xxd.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/xxd.vim
rename to software/vim/share/vim/vim92/syntax/xxd.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/yacc.vim b/software/vim/share/vim/vim92/syntax/yacc.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/yacc.vim
rename to software/vim/share/vim/vim92/syntax/yacc.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/yaml.vim b/software/vim/share/vim/vim92/syntax/yaml.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/yaml.vim
rename to software/vim/share/vim/vim92/syntax/yaml.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/z8a.vim b/software/vim/share/vim/vim92/syntax/z8a.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/z8a.vim
rename to software/vim/share/vim/vim92/syntax/z8a.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/zig.vim b/software/vim/share/vim/vim92/syntax/zig.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/zig.vim
rename to software/vim/share/vim/vim92/syntax/zig.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/zimbu.vim b/software/vim/share/vim/vim92/syntax/zimbu.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/zimbu.vim
rename to software/vim/share/vim/vim92/syntax/zimbu.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/zir.vim b/software/vim/share/vim/vim92/syntax/zir.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/zir.vim
rename to software/vim/share/vim/vim92/syntax/zir.vim
diff --git a/registry/software/vim/share/vim/vim92/syntax/zsh.vim b/software/vim/share/vim/vim92/syntax/zsh.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/syntax/zsh.vim
rename to software/vim/share/vim/vim92/syntax/zsh.vim
diff --git a/registry/software/vim/share/vim/vim92/vimrc_example.vim b/software/vim/share/vim/vim92/vimrc_example.vim
similarity index 100%
rename from registry/software/vim/share/vim/vim92/vimrc_example.vim
rename to software/vim/share/vim/vim92/vimrc_example.vim
diff --git a/registry/software/vix/src/index.ts b/software/vim/src/index.ts
similarity index 100%
rename from registry/software/vix/src/index.ts
rename to software/vim/src/index.ts
diff --git a/software/vim/test/manifest.test.ts b/software/vim/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/vim/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/vim/tsconfig.json b/software/vim/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/vim/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/wget/agentos-package.json b/software/wget/agentos-package.json
similarity index 66%
rename from registry/software/wget/agentos-package.json
rename to software/wget/agentos-package.json
index db274f6149..245dc4dd4f 100644
--- a/registry/software/wget/agentos-package.json
+++ b/software/wget/agentos-package.json
@@ -6,6 +6,7 @@
"title": "wget",
"description": "GNU wget file downloader.",
"priority": 55,
- "image": "/images/registry/wget.svg"
+ "image": "/images/registry/wget.svg",
+ "category": "networking"
}
}
diff --git a/registry/native/c/programs/wget.c b/software/wget/native/c/wget.c
similarity index 100%
rename from registry/native/c/programs/wget.c
rename to software/wget/native/c/wget.c
diff --git a/registry/software/wget/package.json b/software/wget/package.json
similarity index 62%
rename from registry/software/wget/package.json
rename to software/wget/package.json
index c73531a083..c4b0c4f441 100644
--- a/registry/software/wget/package.json
+++ b/software/wget/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/wget/src/index.ts b/software/wget/src/index.ts
similarity index 100%
rename from registry/software/wget/src/index.ts
rename to software/wget/src/index.ts
diff --git a/registry/tests/wasmvm/wget.test.ts b/software/wget/test/wget.test.ts
similarity index 96%
rename from registry/tests/wasmvm/wget.test.ts
rename to software/wget/test/wget.test.ts
index e1121f6b36..eb79a00bd5 100644
--- a/registry/tests/wasmvm/wget.test.ts
+++ b/software/wget/test/wget.test.ts
@@ -12,9 +12,9 @@
*/
import { describe, it, expect, afterEach, beforeAll, afterAll } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
-import { C_BUILD_DIR, COMMANDS_DIR, createKernel, describeIf, hasCWasmBinaries } from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
+import { C_BUILD_DIR, COMMANDS_DIR, createKernel, describeIf, hasCWasmBinaries } from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
import { createServer, type Server, type IncomingMessage, type ServerResponse } from 'node:http';
// Minimal in-memory VFS for kernel tests
@@ -117,8 +117,8 @@ class SimpleVFS {
}
}
-// TODO(P6): requires wget WASM artifact, intentionally excluded from the fast registry-build gate.
-describe.skip('wget command', () => {
+// TODO(P6): requires wget WASM artifact, intentionally excluded from the fast software-build gate.
+describeIf(hasCWasmBinaries('wget'), 'wget command', () => {
let kernel: Kernel;
let server: Server;
let port: number;
diff --git a/software/wget/tsconfig.json b/software/wget/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/wget/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/yq/agentos-package.json b/software/yq/agentos-package.json
similarity index 73%
rename from registry/software/yq/agentos-package.json
rename to software/yq/agentos-package.json
index b753aea6ee..d6de19566d 100644
--- a/registry/software/yq/agentos-package.json
+++ b/software/yq/agentos-package.json
@@ -5,6 +5,7 @@
"registry": {
"title": "yq",
"description": "YAML/JSON processor.",
- "priority": 4
+ "priority": 4,
+ "category": "data"
}
}
diff --git a/registry/software/yq/bin/yq b/software/yq/bin/yq
similarity index 100%
rename from registry/software/yq/bin/yq
rename to software/yq/bin/yq
diff --git a/registry/native/crates/commands/yq/Cargo.toml b/software/yq/native/crates/cmd-yq/Cargo.toml
similarity index 74%
rename from registry/native/crates/commands/yq/Cargo.toml
rename to software/yq/native/crates/cmd-yq/Cargo.toml
index 77dadef52c..dfa19879f9 100644
--- a/registry/native/crates/commands/yq/Cargo.toml
+++ b/software/yq/native/crates/cmd-yq/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "cmd-yq"
version.workspace = true
edition.workspace = true
@@ -10,4 +11,4 @@ name = "yq"
path = "src/main.rs"
[dependencies]
-secureexec-yq = { path = "../../libs/yq" }
+secureexec-yq = { path = "../yq" }
diff --git a/registry/native/crates/commands/yq/src/main.rs b/software/yq/native/crates/cmd-yq/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/yq/src/main.rs
rename to software/yq/native/crates/cmd-yq/src/main.rs
diff --git a/registry/native/crates/libs/yq/Cargo.toml b/software/yq/native/crates/yq/Cargo.toml
similarity index 90%
rename from registry/native/crates/libs/yq/Cargo.toml
rename to software/yq/native/crates/yq/Cargo.toml
index ec7336b20c..5712402a21 100644
--- a/registry/native/crates/libs/yq/Cargo.toml
+++ b/software/yq/native/crates/yq/Cargo.toml
@@ -1,4 +1,5 @@
[package]
+workspace = "../../../../../toolchain"
name = "secureexec-yq"
version.workspace = true
edition.workspace = true
diff --git a/registry/native/crates/libs/yq/src/lib.rs b/software/yq/native/crates/yq/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/yq/src/lib.rs
rename to software/yq/native/crates/yq/src/lib.rs
diff --git a/registry/software/yq/package.json b/software/yq/package.json
similarity index 62%
rename from registry/software/yq/package.json
rename to software/yq/package.json
index 4ce45c0b4b..6d782b9112 100644
--- a/registry/software/yq/package.json
+++ b/software/yq/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/yq/src/index.ts b/software/yq/src/index.ts
similarity index 100%
rename from registry/software/yq/src/index.ts
rename to software/yq/src/index.ts
diff --git a/software/yq/test/manifest.test.ts b/software/yq/test/manifest.test.ts
new file mode 100644
index 0000000000..89139d33b8
--- /dev/null
+++ b/software/yq/test/manifest.test.ts
@@ -0,0 +1,19 @@
+import { readFileSync } from "node:fs";
+import { join } from "node:path";
+import { describe, expect, it } from "vitest";
+
+const packageDir = new URL("..", import.meta.url).pathname;
+
+describe("package manifest", () => {
+ it("declares command binaries", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(packageDir, "agentos-package.json"), "utf8"),
+ );
+
+ expect(manifest.commands?.length ?? 0).toBeGreaterThan(0);
+ for (const command of manifest.commands) {
+ expect(typeof command).toBe("string");
+ expect(command.length).toBeGreaterThan(0);
+ }
+ });
+});
diff --git a/software/yq/tsconfig.json b/software/yq/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/yq/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/software/zip/agentos-package.json b/software/zip/agentos-package.json
similarity index 73%
rename from registry/software/zip/agentos-package.json
rename to software/zip/agentos-package.json
index 298bd79a77..b2f8cb34ab 100644
--- a/registry/software/zip/agentos-package.json
+++ b/software/zip/agentos-package.json
@@ -5,6 +5,7 @@
"registry": {
"title": "zip",
"description": "Create zip archives.",
- "priority": 12
+ "priority": 12,
+ "category": "core"
}
}
diff --git a/registry/software/zip/bin/zip b/software/zip/bin/zip
similarity index 100%
rename from registry/software/zip/bin/zip
rename to software/zip/bin/zip
diff --git a/registry/native/c/programs/zip.c b/software/zip/native/c/zip.c
similarity index 100%
rename from registry/native/c/programs/zip.c
rename to software/zip/native/c/zip.c
diff --git a/registry/software/zip/package.json b/software/zip/package.json
similarity index 62%
rename from registry/software/zip/package.json
rename to software/zip/package.json
index 73b23a0971..6136a36e47 100644
--- a/registry/software/zip/package.json
+++ b/software/zip/package.json
@@ -18,13 +18,16 @@
}
},
"scripts": {
- "build": "agentos-toolchain stage --commands-dir ../../native/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
- "check-types": "tsc --noEmit"
+ "build": "agentos-toolchain stage --commands-dir ../../toolchain/target/wasm32-wasip1/release/commands --if-missing skip && tsc && agentos-toolchain build",
+ "check-types": "tsc --noEmit",
+ "test": "vitest run test/ --passWithNoTests"
},
"devDependencies": {
"@agentos-software/manifest": "workspace:*",
"@rivet-dev/agentos-toolchain": "workspace:*",
"@types/node": "^22.10.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.2",
+ "@rivet-dev/agentos-test-harness": "workspace:*",
+ "vitest": "^2.1.9"
}
}
diff --git a/registry/software/zip/src/index.ts b/software/zip/src/index.ts
similarity index 100%
rename from registry/software/zip/src/index.ts
rename to software/zip/src/index.ts
diff --git a/software/zip/test/zip.test.ts b/software/zip/test/zip.test.ts
new file mode 100644
index 0000000000..509390e1e7
--- /dev/null
+++ b/software/zip/test/zip.test.ts
@@ -0,0 +1,56 @@
+/**
+ * Package-owned integration tests for the zip command.
+ */
+
+import { afterEach, expect, it } from "vitest";
+import {
+ C_BUILD_DIR,
+ COMMANDS_DIR,
+ createInMemoryFileSystem,
+ createKernel,
+ createWasmVmRuntime,
+ describeIf,
+ hasCWasmBinaries,
+ type Kernel,
+} from "@rivet-dev/agentos-test-harness";
+
+describeIf(hasCWasmBinaries("zip"), "zip command", { timeout: 10_000 }, () => {
+ let kernel: Kernel;
+
+ afterEach(async () => {
+ await kernel?.dispose();
+ });
+
+ it("creates a zip archive for a single file", async () => {
+ const vfs = createInMemoryFileSystem();
+ await vfs.writeFile("/hello.txt", "Hello, World!\n");
+
+ kernel = createKernel({ filesystem: vfs });
+ await kernel.mount(
+ createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
+ );
+
+ const result = await kernel.exec("zip /archive.zip /hello.txt");
+ expect(result.exitCode, result.stderr).toBe(0);
+
+ const archive = await vfs.readFile("/archive.zip");
+ expect(archive.length).toBeGreaterThan(0);
+ expect(Array.from(archive.slice(0, 2))).toEqual([0x50, 0x4b]);
+ });
+
+ it("creates a zip archive recursively", async () => {
+ const vfs = createInMemoryFileSystem();
+ await vfs.mkdir("/mydir");
+ await vfs.writeFile("/mydir/a.txt", "file a\n");
+ await vfs.writeFile("/mydir/b.txt", "file b\n");
+
+ kernel = createKernel({ filesystem: vfs });
+ await kernel.mount(
+ createWasmVmRuntime({ commandDirs: [C_BUILD_DIR, COMMANDS_DIR] }),
+ );
+
+ const result = await kernel.exec("zip -r /dir.zip /mydir");
+ expect(result.exitCode, result.stderr).toBe(0);
+ expect(await vfs.exists("/dir.zip")).toBe(true);
+ });
+});
diff --git a/software/zip/tsconfig.json b/software/zip/tsconfig.json
new file mode 100644
index 0000000000..03ce790ab7
--- /dev/null
+++ b/software/zip/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"]
+}
diff --git a/test-harness/package.json b/test-harness/package.json
new file mode 100644
index 0000000000..d6a0be4681
--- /dev/null
+++ b/test-harness/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "@rivet-dev/agentos-test-harness",
+ "version": "0.0.0",
+ "private": true,
+ "type": "module",
+ "license": "Apache-2.0",
+ "main": "./src/index.ts",
+ "types": "./src/index.ts",
+ "exports": {
+ ".": "./src/index.ts"
+ },
+ "scripts": {
+ "check-types": "tsc --noEmit"
+ },
+ "dependencies": {
+ "@rivet-dev/agentos-vm-test-harness": "workspace:*"
+ },
+ "devDependencies": {
+ "typescript": "^5.9.2"
+ }
+}
diff --git a/test-harness/src/index.ts b/test-harness/src/index.ts
new file mode 100644
index 0000000000..cb139a8665
--- /dev/null
+++ b/test-harness/src/index.ts
@@ -0,0 +1 @@
+export * from "@rivet-dev/agentos-vm-test-harness";
diff --git a/test-harness/tsconfig.json b/test-harness/tsconfig.json
new file mode 100644
index 0000000000..d47274867f
--- /dev/null
+++ b/test-harness/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../software/tsconfig.base.json",
+ "compilerOptions": {
+ "noEmit": true
+ },
+ "include": ["src/**/*"]
+}
diff --git a/registry/native/Cargo.lock b/toolchain/Cargo.lock
similarity index 96%
rename from registry/native/Cargo.lock
rename to toolchain/Cargo.lock
index fb7e69a723..5356b72d22 100644
--- a/registry/native/Cargo.lock
+++ b/toolchain/Cargo.lock
@@ -163,6 +163,20 @@ version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
+[[package]]
+name = "assert_fs"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ecf5c70ca07b7f80220bce936f0556a960ca6fb00fc2bd4125b5e581b218137"
+dependencies = [
+ "anstyle",
+ "globwalk",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "tempfile",
+]
+
[[package]]
name = "async-recursion"
version = "1.1.1"
@@ -636,6 +650,15 @@ dependencies = [
"terminal_size",
]
+[[package]]
+name = "clap_complete"
+version = "4.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7a9bfdb35811f9e59832f0f05975114d2251b415fb534108e6f34060fd772"
+dependencies = [
+ "clap",
+]
+
[[package]]
name = "clap_derive"
version = "4.6.0"
@@ -654,6 +677,16 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
+[[package]]
+name = "clap_mangen"
+version = "0.2.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e30ffc187e2e3aeafcd1c6e2aa416e29739454c0ccaa419226d5ecd181f2d78"
+dependencies = [
+ "clap",
+ "roff",
+]
+
[[package]]
name = "cmd-arch"
version = "0.1.0"
@@ -1662,6 +1695,22 @@ dependencies = [
"typenum",
]
+[[package]]
+name = "ctor"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "424e0138278faeb2b401f174ad17e715c829512d74f3d1e81eb43365c2e0590e"
+dependencies = [
+ "ctor-proc-macro",
+ "dtor",
+]
+
+[[package]]
+name = "ctor-proc-macro"
+version = "0.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1"
+
[[package]]
name = "ctrlc"
version = "3.5.2"
@@ -1783,6 +1832,12 @@ dependencies = [
"syn",
]
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
[[package]]
name = "digest"
version = "0.10.7"
@@ -1813,6 +1868,21 @@ dependencies = [
"litrs",
]
+[[package]]
+name = "dtor"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "404d02eeb088a82cfd873006cb713fe411306c7d182c344905e101fb1167d301"
+dependencies = [
+ "dtor-proc-macro",
+]
+
+[[package]]
+name = "dtor-proc-macro"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5"
+
[[package]]
name = "dunce"
version = "1.0.5"
@@ -1930,6 +2000,15 @@ dependencies = [
"miniz_oxide",
]
+[[package]]
+name = "float-cmp"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8"
+dependencies = [
+ "num-traits",
+]
+
[[package]]
name = "fluent"
version = "0.17.0"
@@ -2188,6 +2267,30 @@ version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
+[[package]]
+name = "globset"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757"
+dependencies = [
+ "bitflags 2.11.0",
+ "ignore",
+ "walkdir",
+]
+
[[package]]
name = "half"
version = "2.7.1"
@@ -2570,6 +2673,22 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+[[package]]
+name = "ignore"
+version = "0.4.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b915661dd01db3f05050265b2477bcc6527b3792388e2749b41623cc592be67d"
+dependencies = [
+ "crossbeam-deque",
+ "globset",
+ "log",
+ "memchr",
+ "regex-automata",
+ "same-file",
+ "walkdir",
+ "winapi-util",
+]
+
[[package]]
name = "indenter"
version = "0.3.4"
@@ -3038,6 +3157,12 @@ dependencies = [
"memchr",
]
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
[[package]]
name = "normalize-path"
version = "0.2.1"
@@ -3407,6 +3532,36 @@ dependencies = [
"zerocopy",
]
+[[package]]
+name = "predicates"
+version = "3.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "float-cmp",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
[[package]]
name = "prettyplease"
version = "0.2.37"
@@ -3668,6 +3823,12 @@ dependencies = [
"libc",
]
+[[package]]
+name = "roff"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "323c417e1d9665a65b263ec744ba09030cfb277e9daa0b018a4ab62e57bc8189"
+
[[package]]
name = "rpds"
version = "1.2.0"
@@ -3915,16 +4076,24 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5a00cdbffacbccf02decb7577da5e298c091bdee492a2a1b87a3d8b0cc5b7c5"
dependencies = [
+ "assert_fs",
"clap",
+ "clap_complete",
+ "clap_mangen",
+ "ctor",
"fancy-regex 0.17.0",
"memchr",
"memmap2",
"once_cell",
"phf 0.13.1",
"phf_codegen 0.13.1",
+ "predicates",
"regex",
+ "sysinfo",
"tempfile",
- "uucore 0.7.0",
+ "terminal_size",
+ "textwrap",
+ "uucore 0.5.0",
]
[[package]]
@@ -4130,6 +4299,12 @@ version = "1.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+[[package]]
+name = "smawk"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100"
+
[[package]]
name = "spin"
version = "0.10.0"
@@ -4301,6 +4476,24 @@ dependencies = [
"phf_codegen 0.11.3",
]
+[[package]]
+name = "termtree"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683"
+
+[[package]]
+name = "textwrap"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057"
+dependencies = [
+ "smawk",
+ "terminal_size",
+ "unicode-linebreak",
+ "unicode-width 0.2.0",
+]
+
[[package]]
name = "thiserror"
version = "1.0.69"
@@ -4563,6 +4756,12 @@ version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
+
[[package]]
name = "unicode-segmentation"
version = "1.12.0"
@@ -5616,6 +5815,26 @@ dependencies = [
"wild",
]
+[[package]]
+name = "uucore"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5eddd390f3fdef74f104a948559e6de29203f60f8f563c8c9f528cd4c88ee78"
+dependencies = [
+ "clap",
+ "fluent",
+ "fluent-bundle",
+ "fluent-syntax",
+ "libc",
+ "nix 0.30.1",
+ "os_display",
+ "phf 0.13.1",
+ "thiserror 2.0.18",
+ "unic-langid",
+ "uucore_procs 0.5.0",
+ "wild",
+]
+
[[package]]
name = "uucore"
version = "0.7.0"
@@ -5679,6 +5898,16 @@ dependencies = [
"quote",
]
+[[package]]
+name = "uucore_procs"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47148309a1f7a989d165dabbbc7f2bf156d7ff6affe7d69c1c5bfb822e663ae6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
[[package]]
name = "uucore_procs"
version = "0.7.0"
diff --git a/toolchain/Cargo.toml b/toolchain/Cargo.toml
new file mode 100644
index 0000000000..124085bce2
--- /dev/null
+++ b/toolchain/Cargo.toml
@@ -0,0 +1,30 @@
+[workspace]
+resolver = "2"
+members = [
+ "crates/wasi-ext",
+ "crates/libs/*",
+ "crates/commands/*",
+ "stubs/codex-otel",
+ "stubs/ctrlc",
+ "stubs/hostname",
+ "../software/*/native/crates/*",
+]
+
+[workspace.package]
+version = "0.1.0"
+edition = "2021"
+license = "Apache-2.0"
+
+[profile.release]
+opt-level = "z"
+lto = true
+codegen-units = 1
+strip = true
+
+# WASM-compatible stubs for crates that don't support wasm32-wasip1
+[patch.crates-io]
+ctrlc = { path = "stubs/ctrlc" }
+hostname = { path = "stubs/hostname" }
+uucore = { path = "stubs/uucore" }
+codex-network-proxy = { path = "stubs/codex-network-proxy" }
+codex-otel = { path = "stubs/codex-otel" }
diff --git a/registry/native/Makefile b/toolchain/Makefile
similarity index 85%
rename from registry/native/Makefile
rename to toolchain/Makefile
index adb69498b3..e14e52b982 100644
--- a/registry/native/Makefile
+++ b/toolchain/Makefile
@@ -4,19 +4,22 @@ RELEASE_DIR := target/$(WASM_TARGET)/release
# Standalone binary output directory (configurable)
COMMANDS_DIR ?= $(RELEASE_DIR)/commands
-# Detect patched std: if patches/ has .patch files and patch-std.sh exists, use patched sysroot
-PATCHES := $(wildcard patches/*.patch)
+# Detect patched std: if std-patches/ has .patch files and patch-std.sh exists, use patched sysroot
+PATCHES := $(wildcard std-patches/*.patch)
PATCH_SCRIPT := scripts/patch-std.sh
# Resolve WASI sysroot for CRT/libc needed by -Z build-std linking
# Uses rustc without +toolchain override so rust-toolchain.toml is respected
WASI_SYSROOT_SELF_CONTAINED := $(shell rustc --print sysroot)/lib/rustlib/$(WASM_TARGET)/lib/self-contained
-# Discover command binary names from crates/commands/. Keep known slow/heavy
-# commands out of the default registry gate; they can still be built explicitly
+# Discover command binary names from colocated package crates plus toolchain
+# helper crates. Keep known slow/heavy commands out of the default software
+# gate; they can still be built explicitly
# with `make cmd/`.
+SOFTWARE_COMMAND_CRATES := $(wildcard ../software/*/native/crates/cmd-*)
+TOOLCHAIN_COMMAND_CRATES := $(wildcard crates/commands/*)
SKIPPED_BULK_COMMANDS := _stubs git codex codex-exec
-COMMAND_NAMES := $(filter-out $(SKIPPED_BULK_COMMANDS),$(notdir $(wildcard crates/commands/*)))
+COMMAND_NAMES := $(filter-out $(SKIPPED_BULK_COMMANDS),$(patsubst cmd-%,%,$(notdir $(SOFTWARE_COMMAND_CRATES))) $(notdir $(TOOLCHAIN_COMMAND_CRATES)))
COMMAND_PACKAGES := $(addprefix -p cmd-,$(COMMAND_NAMES))
# Alias symlinks: link_name:target_binary
@@ -48,18 +51,18 @@ all: wasm
# Build the fast command set that lands in COMMANDS_DIR: Rust commands except
# known heavy/external ones, then the opted-in fast C commands. Heavy commands
# (git, duckdb, vim), generated helpers (_stubs), and the external codex build
-# are intentionally excluded from the default registry-build gate.
+# are intentionally excluded from the default software-build gate.
commands: wasm
$(MAKE) -C c programs install
# Build the real wasm32-wasip1 `codex-exec` agent engine from the codex fork
# (branch wasi-port-codex-core). The fork ships a committed, idempotent, self-prepping build script
# (it prepares the rustup sysroot for -Z build-std and restores it on exit — no manual stash), so
-# this folds codex into the toolchain: `make -C registry/native codex` produces and installs
-# registry/software/codex/wasm/{codex-exec,codex}. Override CODEX_REPO if the fork is not at the
+# this folds codex into the toolchain: `make -C toolchain codex` produces and installs
+# software/codex/wasm/{codex-exec,codex}. Override CODEX_REPO if the fork is not at the
# default sibling path. See the fork's docs/wasi-build.md for the toolchain constraints, and the
# remaining work to source the CRT from wasi-sdk so the prebuilt rust target need not be installed.
-AGENTOS_ROOT := $(abspath $(CURDIR)/../..)
+AGENTOS_ROOT := $(abspath $(CURDIR)/..)
CODEX_REPO ?= $(abspath $(AGENTOS_ROOT)/../codex-rs/codex-rs)
codex:
@if [ -x "$(CODEX_REPO)/scripts/build-wasi-codex-exec.sh" ]; then \
@@ -106,7 +109,7 @@ vendor:
fi
@# Source-replacement config so cargo builds from the patched vendor/ tree
@# instead of the crates.io registry cache. This file is gitignored, so a
- @# fresh checkout (CI) has none; without it every patches/crates/*.patch
+ @# fresh checkout (CI) has none; without it every std-patches/crates/*.patch
@# wasi fix is silently ignored and crates like uu_tac fail to compile for
@# wasm32-wasip1. `cargo vendor` prints the exact config (including the
@# synced std-dep sources) on stdout, so capture it above.
@@ -144,7 +147,7 @@ wasm-opt-check:
# Build all standalone command binaries, optimize, strip .wasm extension, create symlinks
wasm: vendor patch-vendor patch-std wasm-opt-check
# --cfg tokio_unstable lifts tokio's wasm `compile_error!` so the patched
- # tokio process/net modules (patches/crates/tokio) compile on wasm32-wasip1.
+ # tokio process/net modules (std-patches/crates/tokio) compile on wasm32-wasip1.
# Needed by codex (tokio::process/net). Harmless for commands not using tokio.
RUSTFLAGS="-C link-arg=-L$(WASI_SYSROOT_SELF_CONTAINED) --cfg tokio_unstable" \
cargo build --target $(WASM_TARGET) \
@@ -201,34 +204,27 @@ wasm: vendor patch-vendor patch-std wasm-opt-check
# ---------------------------------------------------------------------------
# Uniform per-binary entry point: `make cmd/` builds ONE command binary
# into $(COMMANDS_DIR), dispatching to the toolchain that owns it:
-# Rust crates/commands/ (cargo package cmd-, via wasm-cmd)
-# C the C opt-in set below (registry/native/c, patched sysroot)
+# Rust software/*/native/crates/cmd- or crates/commands/
+# (cargo package cmd-, via wasm-cmd)
+# C the C opt-in set below (toolchain/c, patched sysroot)
# codex the codex fork build (codex, codex-exec)
-# external hand-built drop-zone binaries with no source pipeline yet
-# `just registry-native-cmd ` calls this. `make wasm` builds the fast
+# `just toolchain-cmd ` calls this. `make wasm` builds the fast
# Rust set; `make -C c programs install` builds/installs the fast C set.
C_COMMANDS := zip unzip envsubst sqlite3 curl wget duckdb vim http_get
-EXTERNAL_COMMANDS := vix
.PHONY: cmd/%
cmd/%:
@name="$*"; \
- if [ -d "crates/commands/$$name" ]; then \
+ crate_dir=$$(find ../software -path "*/native/crates/cmd-$$name" -type d -print -quit); \
+ if [ -n "$$crate_dir" ] || [ -d "crates/commands/$$name" ]; then \
$(MAKE) wasm-cmd CMD=$$name; \
elif echo " $(C_COMMANDS) " | grep -q " $$name "; then \
src=$$name; [ "$$name" = "sqlite3" ] && src=sqlite3_cli; \
$(MAKE) -C c sysroot "build/$$src" && $(MAKE) -C c install COMMANDS="$$name"; \
elif [ "$$name" = "codex" ] || [ "$$name" = "codex-exec" ]; then \
$(MAKE) codex-required; \
- elif echo " $(EXTERNAL_COMMANDS) " | grep -q " $$name "; then \
- if [ -f "$(COMMANDS_DIR)/$$name" ]; then \
- echo "cmd/$$name: external hand-built binary present at $(COMMANDS_DIR)/$$name"; \
- else \
- echo "ERROR: '$$name' has no source pipeline yet — place the hand-built wasm binary at $(COMMANDS_DIR)/$$name (see registry/README.md)"; \
- exit 1; \
- fi; \
else \
- echo "ERROR: unknown command '$$name' (no crates/commands/$$name; not in C_COMMANDS, codex, or EXTERNAL_COMMANDS)"; \
+ echo "ERROR: unknown command '$$name' (no software/*/native/crates/cmd-$$name or crates/commands/$$name; not in C_COMMANDS or codex)"; \
exit 1; \
fi
@@ -237,7 +233,9 @@ cmd/%:
.PHONY: wasm-cmd
wasm-cmd: vendor patch-vendor patch-std wasm-opt-check
@test -n "$(CMD)" || { echo "ERROR: pass CMD= (a dir under crates/commands/)"; exit 1; }
- @test -d "crates/commands/$(CMD)" || { echo "ERROR: no crates/commands/$(CMD)"; exit 1; }
+ @crate_dir=$$(find ../software -path "*/native/crates/cmd-$(CMD)" -type d -print -quit); \
+ test -n "$$crate_dir" || test -d "crates/commands/$(CMD)" || { \
+ echo "ERROR: no software/*/native/crates/cmd-$(CMD) or crates/commands/$(CMD)"; exit 1; }
RUSTFLAGS="-C link-arg=-L$(WASI_SYSROOT_SELF_CONTAINED) --cfg tokio_unstable" \
cargo build --target $(WASM_TARGET) \
-Z build-std=std,panic_abort \
diff --git a/registry/native/c/Makefile b/toolchain/c/Makefile
similarity index 88%
rename from registry/native/c/Makefile
rename to toolchain/c/Makefile
index f297344082..a82fcba527 100644
--- a/registry/native/c/Makefile
+++ b/toolchain/c/Makefile
@@ -2,7 +2,7 @@
#
# Targets:
# wasi-sdk Download and cache wasi-sdk toolchain
-# programs Compile all .c files in programs/ to WASM binaries
+# programs Compile package C commands and C test programs to WASM binaries
# sysroot Build patched wasi-libc sysroot (invokes patch-wasi-libc.sh)
# install Copy opted-in real commands to COMMANDS_DIR
# native Compile all .c files to native binaries (for parity testing)
@@ -42,6 +42,10 @@ VENDOR_DIR := vendor
WASI_SDK_DIR := $(VENDOR_DIR)/wasi-sdk
BUILD_DIR := build
NATIVE_DIR := build/native
+SOFTWARE_DIR := ../../software
+TEST_PROGRAMS_DIR := ../test-programs
+C_SOURCE_DIRS := $(TEST_PROGRAMS_DIR) $(wildcard $(SOFTWARE_DIR)/*/native/c)
+c_source = $(firstword $(foreach dir,$(C_SOURCE_DIRS),$(wildcard $(dir)/$(1).c)))
# Toolchain
CC := $(WASI_SDK_DIR)/bin/clang
@@ -62,23 +66,23 @@ NATIVE_CFLAGS := -O0 -g -D_LARGEFILE64_SOURCE -I include/
# COMMANDS_DIR for install target (configurable, matches Rust binary output)
COMMANDS_DIR ?= ../target/wasm32-wasip1/release/commands
-# Fast real commands installed by the default registry gate. Slow/heavy commands
+# Fast real commands installed by the default software gate. Slow/heavy commands
# (duckdb, vim) remain available through explicit parent `make cmd/`.
COMMANDS := zip unzip envsubst sqlite3 curl http_get
# Programs requiring patched sysroot (Tier 2+ custom host imports)
PATCHED_PROGRAMS := http_get_test isatty_test getpid_test getppid_test getppid_verify userinfo pipe_test dup_test spawn_child spawn_exit_code pipeline kill_child waitpid_return waitpid_edge syscall_coverage getpwuid_test signal_tests sigaction_self sigaction_behavior delayed_tcp_echo delayed_kill pipe_edge tcp_accept_spawn tcp_echo tcp_server http_server udp_echo unix_socket signal_handler http_get dns_lookup sqlite3_cli curl wget fs_probe
-# Discover all .c source files in programs/
-ALL_SOURCES := $(wildcard programs/*.c)
+# Discover all package command and test-program C source files.
+ALL_SOURCES := $(foreach dir,$(C_SOURCE_DIRS),$(wildcard $(dir)/*.c))
SKIPPED_BULK_PROGRAMS := wget
# Exclude patched-sysroot programs when only vanilla sysroot is available
ifeq ($(wildcard $(PATCHED_SYSROOT)/lib/wasm32-wasi/libc.a),)
- EXCLUDED := $(addsuffix .c,$(addprefix programs/,$(PATCHED_PROGRAMS)))
- SOURCES := $(filter-out $(EXCLUDED) $(addsuffix .c,$(addprefix programs/,$(SKIPPED_BULK_PROGRAMS))),$(ALL_SOURCES))
+ EXCLUDED := $(foreach program,$(PATCHED_PROGRAMS),$(call c_source,$(program)))
+ SOURCES := $(filter-out $(EXCLUDED) $(foreach program,$(SKIPPED_BULK_PROGRAMS),$(call c_source,$(program))),$(ALL_SOURCES))
else
- SOURCES := $(filter-out $(addsuffix .c,$(addprefix programs/,$(SKIPPED_BULK_PROGRAMS))),$(ALL_SOURCES))
+ SOURCES := $(filter-out $(foreach program,$(SKIPPED_BULK_PROGRAMS),$(call c_source,$(program))),$(ALL_SOURCES))
endif
# Program names (without .c extension)
@@ -98,6 +102,8 @@ WASM_OUTPUTS := $(addprefix $(BUILD_DIR)/,$(WASM_PROG_NAMES)) $(EXTRA_WASM_OUTPU
# Native output targets
NATIVE_OUTPUTS := $(addprefix $(NATIVE_DIR)/,$(NATIVE_PROG_NAMES))
+.SECONDEXPANSION:
+
.PHONY: all wasi-sdk programs sysroot install native clean wasm-opt-check os-test os-test-native
HAS_WASM_OPT := $(shell command -v wasm-opt >/dev/null 2>&1 && echo 1 || echo 0)
@@ -143,7 +149,7 @@ CURL_RELEASE_VERSION := 8.11.1
CURL_RELEASE_TAG := 8_11_1
CURL_RELEASE_URL := https://github.com/curl/curl/releases/download/curl-$(CURL_RELEASE_TAG)/curl-$(CURL_RELEASE_VERSION).tar.xz
CURL_UPSTREAM_BUILD_DIR := $(BUILD_DIR)/curl-upstream
-CURL_UPSTREAM_OVERLAY_DIR := curl-upstream-overlay
+CURL_UPSTREAM_OVERLAY_DIR := ../../software/curl/native/c/overlay
CURL_UPSTREAM_OVERLAY_FILES := $(wildcard $(CURL_UPSTREAM_OVERLAY_DIR)/lib/*.c $(CURL_UPSTREAM_OVERLAY_DIR)/lib/*.h $(CURL_UPSTREAM_OVERLAY_DIR)/lib/vtls/*.c $(CURL_UPSTREAM_OVERLAY_DIR)/lib/vtls/*.h)
MINIZIP_URL := https://github.com/madler/zlib/archive/refs/tags/v1.3.1.zip
# duckdb-wasm currently documents DuckDB v1.5.0 in its README. We build the
@@ -406,8 +412,8 @@ libc-test-native: fetch-libc-test
# --- Patched sysroot (delegates to patch-wasi-libc.sh) ---
-WASI_LIBC_PATCHES := $(wildcard ../patches/wasi-libc/*.patch)
-WASI_LIBC_OVERRIDES := $(wildcard ../patches/wasi-libc-overrides/*.c)
+WASI_LIBC_PATCHES := $(wildcard ../std-patches/wasi-libc/*.patch)
+WASI_LIBC_OVERRIDES := $(wildcard ../std-patches/wasi-libc-overrides/*.c)
LLVM_RUNTIME_PATCHES := $(wildcard patches/llvm-project/*.patch)
$(PATCHED_SYSROOT)/lib/wasm32-wasi/libc.a: wasi-sdk ../scripts/patch-wasi-libc.sh scripts/build-llvm-runtimes.sh $(WASI_LIBC_PATCHES) $(WASI_LIBC_OVERRIDES) $(LLVM_RUNTIME_PATCHES)
@@ -435,7 +441,7 @@ programs: wasi-sdk fetch-fast-libs wasm-opt-check $(WASM_OUTPUTS)
@echo "=== Build complete ==="
# Default rule: single-file programs
-$(BUILD_DIR)/%: programs/%.c $(WASI_SDK_DIR)/bin/clang
+$(BUILD_DIR)/%: $$(call c_source,$$*) $(WASI_SDK_DIR)/bin/clang
@mkdir -p $(BUILD_DIR)
$(CC) $(WASM_CFLAGS) -o $@.wasm $<
@if [ "$(HAS_WASM_OPT)" = "1" ]; then \
@@ -449,9 +455,9 @@ $(BUILD_DIR)/%: programs/%.c $(WASI_SDK_DIR)/bin/clang
# Add overrides here for programs that link vendored libraries.
# json_parse: links cJSON library
-$(BUILD_DIR)/json_parse: programs/json_parse.c libs/cjson/cJSON.c $(WASI_SDK_DIR)/bin/clang
+$(BUILD_DIR)/json_parse: $(call c_source,json_parse) libs/cjson/cJSON.c $(WASI_SDK_DIR)/bin/clang
@mkdir -p $(BUILD_DIR)
- $(CC) $(WASM_CFLAGS) -Ilibs/cjson -o $@.wasm programs/json_parse.c libs/cjson/cJSON.c
+ $(CC) $(WASM_CFLAGS) -Ilibs/cjson -o $@.wasm $(call c_source,json_parse) libs/cjson/cJSON.c
@if [ "$(HAS_WASM_OPT)" = "1" ]; then \
wasm-opt -O3 --strip-debug $@.wasm -o $@; \
else \
@@ -459,9 +465,9 @@ $(BUILD_DIR)/json_parse: programs/json_parse.c libs/cjson/cJSON.c $(WASI_SDK_DIR
fi
@rm -f $@.wasm
-$(NATIVE_DIR)/json_parse: programs/json_parse.c libs/cjson/cJSON.c
+$(NATIVE_DIR)/json_parse: $(call c_source,json_parse) libs/cjson/cJSON.c
@mkdir -p $(NATIVE_DIR)
- $(NATIVE_CC) $(NATIVE_CFLAGS) -Ilibs/cjson -o $@ programs/json_parse.c libs/cjson/cJSON.c
+ $(NATIVE_CC) $(NATIVE_CFLAGS) -Ilibs/cjson -o $@ $(call c_source,json_parse) libs/cjson/cJSON.c
# sqlite3_mem: links SQLite amalgamation
SQLITE_COMMON := -DSQLITE_OMIT_WAL -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_THREADSAFE=0 \
@@ -469,31 +475,31 @@ SQLITE_COMMON := -DSQLITE_OMIT_WAL -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_THREAD
SQLITE_WASM := -DSQLITE_OS_OTHER $(SQLITE_COMMON) -lwasi-emulated-signal -lwasi-emulated-mman
SQLITE_NATIVE := $(SQLITE_COMMON)
-$(BUILD_DIR)/sqlite3_mem: programs/sqlite3_mem.c libs/sqlite3/sqlite3.c $(WASI_SDK_DIR)/bin/clang
+$(BUILD_DIR)/sqlite3_mem: $(call c_source,sqlite3_mem) libs/sqlite3/sqlite3.c $(WASI_SDK_DIR)/bin/clang
@mkdir -p $(BUILD_DIR)
$(CC) --target=wasm32-wasip1 --sysroot=$(SYSROOT) -Os -I include/ \
$(SQLITE_WASM) -Ilibs/sqlite3 -Wl,--initial-memory=16777216 -o $@ \
- programs/sqlite3_mem.c libs/sqlite3/sqlite3.c
+ $(call c_source,sqlite3_mem) libs/sqlite3/sqlite3.c
-$(NATIVE_DIR)/sqlite3_mem: programs/sqlite3_mem.c libs/sqlite3/sqlite3.c
+$(NATIVE_DIR)/sqlite3_mem: $(call c_source,sqlite3_mem) libs/sqlite3/sqlite3.c
@mkdir -p $(NATIVE_DIR)
$(NATIVE_CC) $(NATIVE_CFLAGS) $(SQLITE_NATIVE) -Ilibs/sqlite3 -o $@ \
- programs/sqlite3_mem.c libs/sqlite3/sqlite3.c -lm -lpthread
+ $(call c_source,sqlite3_mem) libs/sqlite3/sqlite3.c -lm -lpthread
# sqlite3_cli: full CLI, links SQLite amalgamation (installed as sqlite3)
# Uses -Os (not -O2) + no wasm-opt — higher optimization breaks SQLite's
# internal function pointer tables in WASM indirect call table.
# Uses --initial-memory=16777216 (16MB) for SQLite's malloc requirements.
-$(BUILD_DIR)/sqlite3_cli: programs/sqlite3_cli.c libs/sqlite3/sqlite3.c $(WASI_SDK_DIR)/bin/clang
+$(BUILD_DIR)/sqlite3_cli: $(call c_source,sqlite3_cli) libs/sqlite3/sqlite3.c $(WASI_SDK_DIR)/bin/clang
@mkdir -p $(BUILD_DIR)
$(CC) --target=wasm32-wasip1 --sysroot=$(SYSROOT) -Os -I include/ \
$(SQLITE_WASM) -Ilibs/sqlite3 -Wl,--initial-memory=16777216 \
- -o $@ programs/sqlite3_cli.c libs/sqlite3/sqlite3.c
+ -o $@ $(call c_source,sqlite3_cli) libs/sqlite3/sqlite3.c
-$(NATIVE_DIR)/sqlite3_cli: programs/sqlite3_cli.c libs/sqlite3/sqlite3.c
+$(NATIVE_DIR)/sqlite3_cli: $(call c_source,sqlite3_cli) libs/sqlite3/sqlite3.c
@mkdir -p $(NATIVE_DIR)
$(NATIVE_CC) $(NATIVE_CFLAGS) $(SQLITE_NATIVE) -Ilibs/sqlite3 -o $@ \
- programs/sqlite3_cli.c libs/sqlite3/sqlite3.c -lm -lpthread
+ $(call c_source,sqlite3_cli) libs/sqlite3/sqlite3.c -lm -lpthread
# zip: links zlib + minizip
ZLIB_SRCS := libs/zlib/adler32.c libs/zlib/compress.c libs/zlib/crc32.c libs/zlib/deflate.c \
@@ -502,9 +508,9 @@ ZLIB_SRCS := libs/zlib/adler32.c libs/zlib/compress.c libs/zlib/crc32.c libs/z
MINIZIP_SRCS := libs/minizip/ioapi.c libs/minizip/zip.c
ZIP_INCLUDES := -Ilibs/zlib -Ilibs/minizip
-$(BUILD_DIR)/zip: programs/zip.c $(ZLIB_SRCS) $(MINIZIP_SRCS) $(WASI_SDK_DIR)/bin/clang
+$(BUILD_DIR)/zip: $(call c_source,zip) $(ZLIB_SRCS) $(MINIZIP_SRCS) $(WASI_SDK_DIR)/bin/clang
@mkdir -p $(BUILD_DIR)
- $(CC) $(WASM_CFLAGS) $(ZIP_INCLUDES) -o $@.wasm programs/zip.c $(ZLIB_SRCS) $(MINIZIP_SRCS)
+ $(CC) $(WASM_CFLAGS) $(ZIP_INCLUDES) -o $@.wasm $(call c_source,zip) $(ZLIB_SRCS) $(MINIZIP_SRCS)
@if [ "$(HAS_WASM_OPT)" = "1" ]; then \
wasm-opt -O3 --strip-debug $@.wasm -o $@; \
else \
@@ -512,16 +518,16 @@ $(BUILD_DIR)/zip: programs/zip.c $(ZLIB_SRCS) $(MINIZIP_SRCS) $(WASI_SDK_DIR)/bi
fi
@rm -f $@.wasm
-$(NATIVE_DIR)/zip: programs/zip.c $(ZLIB_SRCS) $(MINIZIP_SRCS)
+$(NATIVE_DIR)/zip: $(call c_source,zip) $(ZLIB_SRCS) $(MINIZIP_SRCS)
@mkdir -p $(NATIVE_DIR)
- $(NATIVE_CC) $(NATIVE_CFLAGS) $(ZIP_INCLUDES) -o $@ programs/zip.c $(ZLIB_SRCS) $(MINIZIP_SRCS)
+ $(NATIVE_CC) $(NATIVE_CFLAGS) $(ZIP_INCLUDES) -o $@ $(call c_source,zip) $(ZLIB_SRCS) $(MINIZIP_SRCS)
# unzip: links zlib + minizip (unzip side)
MINIZIP_UNZIP_SRCS := libs/minizip/ioapi.c libs/minizip/unzip.c
-$(BUILD_DIR)/unzip: programs/unzip.c $(ZLIB_SRCS) $(MINIZIP_UNZIP_SRCS) $(WASI_SDK_DIR)/bin/clang
+$(BUILD_DIR)/unzip: $(call c_source,unzip) $(ZLIB_SRCS) $(MINIZIP_UNZIP_SRCS) $(WASI_SDK_DIR)/bin/clang
@mkdir -p $(BUILD_DIR)
- $(CC) $(WASM_CFLAGS) $(ZIP_INCLUDES) -o $@.wasm programs/unzip.c $(ZLIB_SRCS) $(MINIZIP_UNZIP_SRCS)
+ $(CC) $(WASM_CFLAGS) $(ZIP_INCLUDES) -o $@.wasm $(call c_source,unzip) $(ZLIB_SRCS) $(MINIZIP_UNZIP_SRCS)
@if [ "$(HAS_WASM_OPT)" = "1" ]; then \
wasm-opt -O3 --strip-debug $@.wasm -o $@; \
else \
@@ -529,9 +535,9 @@ $(BUILD_DIR)/unzip: programs/unzip.c $(ZLIB_SRCS) $(MINIZIP_UNZIP_SRCS) $(WASI_S
fi
@rm -f $@.wasm
-$(NATIVE_DIR)/unzip: programs/unzip.c $(ZLIB_SRCS) $(MINIZIP_UNZIP_SRCS)
+$(NATIVE_DIR)/unzip: $(call c_source,unzip) $(ZLIB_SRCS) $(MINIZIP_UNZIP_SRCS)
@mkdir -p $(NATIVE_DIR)
- $(NATIVE_CC) $(NATIVE_CFLAGS) $(ZIP_INCLUDES) -o $@ programs/unzip.c $(ZLIB_SRCS) $(MINIZIP_UNZIP_SRCS)
+ $(NATIVE_CC) $(NATIVE_CFLAGS) $(ZIP_INCLUDES) -o $@ $(call c_source,unzip) $(ZLIB_SRCS) $(MINIZIP_UNZIP_SRCS)
# curl_test: links libcurl (HTTP/HTTPS build for WASM via host_net + host_tls)
CURL_SRCS := $(wildcard libs/curl/lib/*.c) $(wildcard libs/curl/lib/vauth/*.c) \
@@ -555,11 +561,11 @@ $(BUILD_DIR)/curl: scripts/build-curl-upstream.sh $(CURL_UPSTREAM_OVERLAY_FILES)
--output "$(abspath $@)"
# wget: minimal wget built on libcurl
-$(BUILD_DIR)/wget: programs/wget.c $(CURL_SRCS) $(WASI_SDK_DIR)/bin/clang
+$(BUILD_DIR)/wget: $(call c_source,wget) $(CURL_SRCS) $(WASI_SDK_DIR)/bin/clang
@mkdir -p $(BUILD_DIR)
$(CC) $(WASM_CFLAGS) $(CURL_LIB_DEFS) $(CURL_INCLUDES) \
-lwasi-emulated-signal \
- -o $@.wasm programs/wget.c $(CURL_SRCS)
+ -o $@.wasm $(call c_source,wget) $(CURL_SRCS)
@if [ "$(HAS_WASM_OPT)" = "1" ]; then \
wasm-opt -O3 --strip-debug --all-features $@.wasm -o $@; \
else \
@@ -567,9 +573,9 @@ $(BUILD_DIR)/wget: programs/wget.c $(CURL_SRCS) $(WASI_SDK_DIR)/bin/clang
fi
@rm -f $@.wasm
-$(NATIVE_DIR)/wget: programs/wget.c
+$(NATIVE_DIR)/wget: $(call c_source,wget)
@mkdir -p $(NATIVE_DIR)
- $(NATIVE_CC) $(NATIVE_CFLAGS) -o $@ programs/wget.c -lcurl
+ $(NATIVE_CC) $(NATIVE_CFLAGS) -o $@ $(call c_source,wget) -lcurl
# duckdb: upstream DuckDB CLI built from source with our patched WASI/POSIX sysroot
$(BUILD_DIR)/duckdb: libs/duckdb/CMakeLists.txt $(PATCHED_SYSROOT)/lib/wasm32-wasi/libc.a $(WASI_SDK_DIR)/bin/clang $(WASI_SDK_DIR)/bin/clang++ cmake/FindThreads.cmake scripts/build-duckdb.sh include/fcntl.h include/ifaddrs.h include/net/if.h include/sys/ioctl.h
@@ -582,6 +588,7 @@ $(BUILD_DIR)/duckdb: libs/duckdb/CMakeLists.txt $(PATCHED_SYSROOT)/lib/wasm32-wa
MODULE_PATH="$(abspath cmake)" \
OVERLAY_INCLUDE_DIR="$(abspath include)" \
DUCKDB_GIT_DESCRIBE="$(DUCKDB_GIT_DESCRIBE)" \
+ PATCH_DIR="$(abspath ../../software/duckdb/native/c/patches)" \
bash scripts/build-duckdb.sh
# --- Compile all C programs to native binaries (for parity testing) ---
@@ -593,7 +600,7 @@ native: $(NATIVE_OUTPUTS)
@echo "Output: $(NATIVE_DIR)/"
@echo "=== Build complete ==="
-$(NATIVE_DIR)/%: programs/%.c
+$(NATIVE_DIR)/%: $$(call c_source,$$*)
@mkdir -p $(NATIVE_DIR)
$(NATIVE_CC) $(NATIVE_CFLAGS) -o $@ $<
@@ -645,7 +652,7 @@ clean:
# swap files work; kept here for archaeology.
VIM_VERSION ?= v9.2.0780
VIM_SRC := libs/vim
-VIM_BRIDGE_SRC := vim
+VIM_BRIDGE_SRC := ../../software/vim/native/c/vim-bridge
VIM_BRIDGE_BUILD := $(BUILD_DIR)/vim-bridge
VIM_BRIDGE_OBJS := $(VIM_BRIDGE_BUILD)/termios_bridge.o $(VIM_BRIDGE_BUILD)/termcap_stub.o $(VIM_BRIDGE_BUILD)/posix_stubs.o
VIM_WCC := $(VIM_BRIDGE_BUILD)/wcc
diff --git a/registry/native/c/cmake/FindThreads.cmake b/toolchain/c/cmake/FindThreads.cmake
similarity index 100%
rename from registry/native/c/cmake/FindThreads.cmake
rename to toolchain/c/cmake/FindThreads.cmake
diff --git a/registry/native/c/include/fcntl.h b/toolchain/c/include/fcntl.h
similarity index 100%
rename from registry/native/c/include/fcntl.h
rename to toolchain/c/include/fcntl.h
diff --git a/registry/native/c/include/ifaddrs.h b/toolchain/c/include/ifaddrs.h
similarity index 100%
rename from registry/native/c/include/ifaddrs.h
rename to toolchain/c/include/ifaddrs.h
diff --git a/registry/native/c/include/net/if.h b/toolchain/c/include/net/if.h
similarity index 100%
rename from registry/native/c/include/net/if.h
rename to toolchain/c/include/net/if.h
diff --git a/registry/native/c/include/posix_spawn_compat.h b/toolchain/c/include/posix_spawn_compat.h
similarity index 100%
rename from registry/native/c/include/posix_spawn_compat.h
rename to toolchain/c/include/posix_spawn_compat.h
diff --git a/registry/native/c/include/sched.h b/toolchain/c/include/sched.h
similarity index 100%
rename from registry/native/c/include/sched.h
rename to toolchain/c/include/sched.h
diff --git a/registry/native/c/include/sys/ioctl.h b/toolchain/c/include/sys/ioctl.h
similarity index 100%
rename from registry/native/c/include/sys/ioctl.h
rename to toolchain/c/include/sys/ioctl.h
diff --git a/registry/native/c/patches/llvm-project/0001-libunwind-wasm-exception-support.patch b/toolchain/c/patches/llvm-project/0001-libunwind-wasm-exception-support.patch
similarity index 100%
rename from registry/native/c/patches/llvm-project/0001-libunwind-wasm-exception-support.patch
rename to toolchain/c/patches/llvm-project/0001-libunwind-wasm-exception-support.patch
diff --git a/registry/native/c/scripts/build-curl-upstream.sh b/toolchain/c/scripts/build-curl-upstream.sh
similarity index 100%
rename from registry/native/c/scripts/build-curl-upstream.sh
rename to toolchain/c/scripts/build-curl-upstream.sh
diff --git a/registry/native/c/scripts/build-duckdb.sh b/toolchain/c/scripts/build-duckdb.sh
similarity index 94%
rename from registry/native/c/scripts/build-duckdb.sh
rename to toolchain/c/scripts/build-duckdb.sh
index 76320f8619..78a36025a8 100644
--- a/registry/native/c/scripts/build-duckdb.sh
+++ b/toolchain/c/scripts/build-duckdb.sh
@@ -22,7 +22,7 @@ set -euo pipefail
TOOLCHAIN_FILE="$WASI_SDK_DIR/share/cmake/wasi-sdk.cmake"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-PATCH_DIR="$SCRIPT_DIR/../patches/duckdb"
+: "${PATCH_DIR:=$SCRIPT_DIR/../patches/duckdb}"
COMMON_FLAGS="-I$OVERLAY_INCLUDE_DIR -D_WASI_EMULATED_PTHREAD -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_PROCESS_CLOCKS"
COMMON_CXX_FLAGS="$COMMON_FLAGS -DDUCKDB_DISABLE_EXTENSION_LOAD -DSQLITE_NOHAVE_SYSTEM -DSQLITE_OMIT_POPEN -fwasm-exceptions -DWEBDB_FAST_EXCEPTIONS=1"
CXX_STDLIB_INCLUDE="$SYSROOT_DIR/include/wasm32-wasi/c++/v1"
@@ -67,13 +67,13 @@ mkdir -p "$DUCKDB_BUILD_DIR"
mkdir -p "$SHIM_BUILD_DIR"
"$WASI_SDK_DIR/bin/clang" $SHIM_CFLAGS \
- -c "$SCRIPT_DIR/../../patches/wasi-libc-overrides/fcntl.c" \
+ -c "$SCRIPT_DIR/../../std-patches/wasi-libc-overrides/fcntl.c" \
-o "$SHIM_BUILD_DIR/fcntl.o"
"$WASI_SDK_DIR/bin/clang" $SHIM_CFLAGS \
- -c "$SCRIPT_DIR/../../patches/wasi-libc-overrides/mlock.c" \
+ -c "$SCRIPT_DIR/../../std-patches/wasi-libc-overrides/mlock.c" \
-o "$SHIM_BUILD_DIR/mlock.o"
"$WASI_SDK_DIR/bin/clang" $SHIM_CFLAGS \
- -c "$SCRIPT_DIR/../../patches/wasi-libc-overrides/sched.c" \
+ -c "$SCRIPT_DIR/../../std-patches/wasi-libc-overrides/sched.c" \
-o "$SHIM_BUILD_DIR/sched.o"
cmake \
diff --git a/registry/native/c/scripts/build-llvm-runtimes.sh b/toolchain/c/scripts/build-llvm-runtimes.sh
similarity index 100%
rename from registry/native/c/scripts/build-llvm-runtimes.sh
rename to toolchain/c/scripts/build-llvm-runtimes.sh
diff --git a/registry/tests/wasmvm/c-parity.test.ts b/toolchain/conformance/c-parity.test.ts
similarity index 99%
rename from registry/tests/wasmvm/c-parity.test.ts
rename to toolchain/conformance/c-parity.test.ts
index 84daa0a463..477e2428c3 100644
--- a/registry/tests/wasmvm/c-parity.test.ts
+++ b/toolchain/conformance/c-parity.test.ts
@@ -8,7 +8,7 @@
*/
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
import {
COMMANDS_DIR,
C_BUILD_DIR,
@@ -16,8 +16,8 @@ import {
describeIf,
hasWasmBinaries,
itIf,
-} from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+} from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
import { existsSync } from 'node:fs';
import { writeFile as fsWriteFile, readFile as fsReadFile, mkdtemp, rm, mkdir as fsMkdir } from 'node:fs/promises';
import { spawn } from 'node:child_process';
diff --git a/registry/tests/wasmvm/ci-artifact-availability.test.ts b/toolchain/conformance/ci-artifact-availability.test.ts
similarity index 95%
rename from registry/tests/wasmvm/ci-artifact-availability.test.ts
rename to toolchain/conformance/ci-artifact-availability.test.ts
index 5f86752143..5174ed654a 100644
--- a/registry/tests/wasmvm/ci-artifact-availability.test.ts
+++ b/toolchain/conformance/ci-artifact-availability.test.ts
@@ -7,7 +7,7 @@
*/
import { describe, it, expect } from 'vitest';
-import { COMMANDS_DIR, C_BUILD_DIR, itIf } from '../helpers.js';
+import { COMMANDS_DIR, C_BUILD_DIR, itIf } from '@rivet-dev/agentos-test-harness';
import { existsSync } from 'node:fs';
import { join } from 'node:path';
diff --git a/registry/tests/kernel/ci-wasm-artifact-availability.test.ts b/toolchain/conformance/ci-wasm-artifact-availability.test.ts
similarity index 94%
rename from registry/tests/kernel/ci-wasm-artifact-availability.test.ts
rename to toolchain/conformance/ci-wasm-artifact-availability.test.ts
index 5f4c420669..d16843da0f 100644
--- a/registry/tests/kernel/ci-wasm-artifact-availability.test.ts
+++ b/toolchain/conformance/ci-wasm-artifact-availability.test.ts
@@ -9,7 +9,7 @@
import { describe, it, expect } from 'vitest';
import { existsSync } from 'node:fs';
import { join } from 'node:path';
-import { COMMANDS_DIR, itIf } from './helpers.ts';
+import { COMMANDS_DIR, itIf } from '@rivet-dev/agentos-test-harness';
const REQUIRED_ARTIFACTS = [
{
diff --git a/registry/tests/wasmvm/libc-test-conformance.test.ts b/toolchain/conformance/libc-test-conformance.test.ts
similarity index 98%
rename from registry/tests/wasmvm/libc-test-conformance.test.ts
rename to toolchain/conformance/libc-test-conformance.test.ts
index 5211783d91..18748d1e8a 100644
--- a/registry/tests/wasmvm/libc-test-conformance.test.ts
+++ b/toolchain/conformance/libc-test-conformance.test.ts
@@ -13,7 +13,7 @@
*/
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
import {
COMMANDS_DIR,
C_BUILD_DIR,
@@ -21,8 +21,8 @@ import {
createKernel,
describeIf,
hasWasmBinaries,
-} from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+} from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
import {
existsSync,
readdirSync,
diff --git a/registry/tests/wasmvm/libc-test-exclusions.json b/toolchain/conformance/libc-test-exclusions.json
similarity index 100%
rename from registry/tests/wasmvm/libc-test-exclusions.json
rename to toolchain/conformance/libc-test-exclusions.json
diff --git a/registry/tests/wasmvm/os-test-conformance.test.ts b/toolchain/conformance/os-test-conformance.test.ts
similarity index 99%
rename from registry/tests/wasmvm/os-test-conformance.test.ts
rename to toolchain/conformance/os-test-conformance.test.ts
index d85cb14e97..fb30dd7609 100644
--- a/registry/tests/wasmvm/os-test-conformance.test.ts
+++ b/toolchain/conformance/os-test-conformance.test.ts
@@ -9,7 +9,7 @@
*/
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
-import { createWasmVmRuntime } from '../helpers.js';
+import { createWasmVmRuntime } from '@rivet-dev/agentos-test-harness';
import {
COMMANDS_DIR,
C_BUILD_DIR,
@@ -17,8 +17,8 @@ import {
createKernel,
describeIf,
hasWasmBinaries,
-} from '../helpers.js';
-import type { Kernel } from '../helpers.js';
+} from '@rivet-dev/agentos-test-harness';
+import type { Kernel } from '@rivet-dev/agentos-test-harness';
import {
existsSync,
readdirSync,
diff --git a/registry/tests/wasmvm/os-test-exclusions.json b/toolchain/conformance/os-test-exclusions.json
similarity index 100%
rename from registry/tests/wasmvm/os-test-exclusions.json
rename to toolchain/conformance/os-test-exclusions.json
diff --git a/registry/native/crates/commands/_stubs/Cargo.toml b/toolchain/crates/commands/_stubs/Cargo.toml
similarity index 100%
rename from registry/native/crates/commands/_stubs/Cargo.toml
rename to toolchain/crates/commands/_stubs/Cargo.toml
diff --git a/registry/native/crates/commands/_stubs/src/main.rs b/toolchain/crates/commands/_stubs/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/_stubs/src/main.rs
rename to toolchain/crates/commands/_stubs/src/main.rs
diff --git a/registry/native/crates/commands/http-test/Cargo.toml b/toolchain/crates/commands/http-test/Cargo.toml
similarity index 100%
rename from registry/native/crates/commands/http-test/Cargo.toml
rename to toolchain/crates/commands/http-test/Cargo.toml
diff --git a/registry/native/crates/commands/http-test/src/lib.rs b/toolchain/crates/commands/http-test/src/lib.rs
similarity index 100%
rename from registry/native/crates/commands/http-test/src/lib.rs
rename to toolchain/crates/commands/http-test/src/lib.rs
diff --git a/registry/native/crates/commands/http-test/src/main.rs b/toolchain/crates/commands/http-test/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/http-test/src/main.rs
rename to toolchain/crates/commands/http-test/src/main.rs
diff --git a/registry/native/crates/commands/http-test/tests/header_validation.rs b/toolchain/crates/commands/http-test/tests/header_validation.rs
similarity index 100%
rename from registry/native/crates/commands/http-test/tests/header_validation.rs
rename to toolchain/crates/commands/http-test/tests/header_validation.rs
diff --git a/registry/native/crates/commands/spawn-test-host/Cargo.toml b/toolchain/crates/commands/spawn-test-host/Cargo.toml
similarity index 100%
rename from registry/native/crates/commands/spawn-test-host/Cargo.toml
rename to toolchain/crates/commands/spawn-test-host/Cargo.toml
diff --git a/registry/native/crates/commands/spawn-test-host/src/main.rs b/toolchain/crates/commands/spawn-test-host/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/spawn-test-host/src/main.rs
rename to toolchain/crates/commands/spawn-test-host/src/main.rs
diff --git a/registry/native/crates/commands/xu/Cargo.toml b/toolchain/crates/commands/xu/Cargo.toml
similarity index 100%
rename from registry/native/crates/commands/xu/Cargo.toml
rename to toolchain/crates/commands/xu/Cargo.toml
diff --git a/registry/native/crates/commands/xu/src/main.rs b/toolchain/crates/commands/xu/src/main.rs
similarity index 100%
rename from registry/native/crates/commands/xu/src/main.rs
rename to toolchain/crates/commands/xu/src/main.rs
diff --git a/registry/native/crates/libs/builtins/Cargo.toml b/toolchain/crates/libs/builtins/Cargo.toml
similarity index 100%
rename from registry/native/crates/libs/builtins/Cargo.toml
rename to toolchain/crates/libs/builtins/Cargo.toml
diff --git a/registry/native/crates/libs/builtins/src/lib.rs b/toolchain/crates/libs/builtins/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/builtins/src/lib.rs
rename to toolchain/crates/libs/builtins/src/lib.rs
diff --git a/registry/native/crates/libs/grep/Cargo.toml b/toolchain/crates/libs/grep/Cargo.toml
similarity index 100%
rename from registry/native/crates/libs/grep/Cargo.toml
rename to toolchain/crates/libs/grep/Cargo.toml
diff --git a/registry/native/crates/libs/grep/src/lib.rs b/toolchain/crates/libs/grep/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/grep/src/lib.rs
rename to toolchain/crates/libs/grep/src/lib.rs
diff --git a/registry/native/crates/libs/grep/src/rg_cmd.rs b/toolchain/crates/libs/grep/src/rg_cmd.rs
similarity index 100%
rename from registry/native/crates/libs/grep/src/rg_cmd.rs
rename to toolchain/crates/libs/grep/src/rg_cmd.rs
diff --git a/registry/native/crates/libs/shims/Cargo.toml b/toolchain/crates/libs/shims/Cargo.toml
similarity index 100%
rename from registry/native/crates/libs/shims/Cargo.toml
rename to toolchain/crates/libs/shims/Cargo.toml
diff --git a/registry/native/crates/libs/shims/src/env.rs b/toolchain/crates/libs/shims/src/env.rs
similarity index 100%
rename from registry/native/crates/libs/shims/src/env.rs
rename to toolchain/crates/libs/shims/src/env.rs
diff --git a/registry/native/crates/libs/shims/src/lib.rs b/toolchain/crates/libs/shims/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/shims/src/lib.rs
rename to toolchain/crates/libs/shims/src/lib.rs
diff --git a/registry/native/crates/libs/shims/src/nice.rs b/toolchain/crates/libs/shims/src/nice.rs
similarity index 100%
rename from registry/native/crates/libs/shims/src/nice.rs
rename to toolchain/crates/libs/shims/src/nice.rs
diff --git a/registry/native/crates/libs/shims/src/nohup.rs b/toolchain/crates/libs/shims/src/nohup.rs
similarity index 100%
rename from registry/native/crates/libs/shims/src/nohup.rs
rename to toolchain/crates/libs/shims/src/nohup.rs
diff --git a/registry/native/crates/libs/shims/src/stdbuf.rs b/toolchain/crates/libs/shims/src/stdbuf.rs
similarity index 100%
rename from registry/native/crates/libs/shims/src/stdbuf.rs
rename to toolchain/crates/libs/shims/src/stdbuf.rs
diff --git a/registry/native/crates/libs/shims/src/timeout.rs b/toolchain/crates/libs/shims/src/timeout.rs
similarity index 100%
rename from registry/native/crates/libs/shims/src/timeout.rs
rename to toolchain/crates/libs/shims/src/timeout.rs
diff --git a/registry/native/crates/libs/shims/src/which.rs b/toolchain/crates/libs/shims/src/which.rs
similarity index 100%
rename from registry/native/crates/libs/shims/src/which.rs
rename to toolchain/crates/libs/shims/src/which.rs
diff --git a/registry/native/crates/libs/shims/src/xargs.rs b/toolchain/crates/libs/shims/src/xargs.rs
similarity index 100%
rename from registry/native/crates/libs/shims/src/xargs.rs
rename to toolchain/crates/libs/shims/src/xargs.rs
diff --git a/registry/native/crates/libs/stubs/Cargo.toml b/toolchain/crates/libs/stubs/Cargo.toml
similarity index 100%
rename from registry/native/crates/libs/stubs/Cargo.toml
rename to toolchain/crates/libs/stubs/Cargo.toml
diff --git a/registry/native/crates/libs/stubs/src/lib.rs b/toolchain/crates/libs/stubs/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/stubs/src/lib.rs
rename to toolchain/crates/libs/stubs/src/lib.rs
diff --git a/registry/native/crates/libs/wasi-http/Cargo.toml b/toolchain/crates/libs/wasi-http/Cargo.toml
similarity index 100%
rename from registry/native/crates/libs/wasi-http/Cargo.toml
rename to toolchain/crates/libs/wasi-http/Cargo.toml
diff --git a/registry/native/crates/libs/wasi-http/src/lib.rs b/toolchain/crates/libs/wasi-http/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/wasi-http/src/lib.rs
rename to toolchain/crates/libs/wasi-http/src/lib.rs
diff --git a/registry/native/crates/libs/wasi-pty/Cargo.toml b/toolchain/crates/libs/wasi-pty/Cargo.toml
similarity index 100%
rename from registry/native/crates/libs/wasi-pty/Cargo.toml
rename to toolchain/crates/libs/wasi-pty/Cargo.toml
diff --git a/registry/native/crates/libs/wasi-pty/src/lib.rs b/toolchain/crates/libs/wasi-pty/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/wasi-pty/src/lib.rs
rename to toolchain/crates/libs/wasi-pty/src/lib.rs
diff --git a/registry/native/crates/libs/wasi-spawn/Cargo.toml b/toolchain/crates/libs/wasi-spawn/Cargo.toml
similarity index 100%
rename from registry/native/crates/libs/wasi-spawn/Cargo.toml
rename to toolchain/crates/libs/wasi-spawn/Cargo.toml
diff --git a/registry/native/crates/libs/wasi-spawn/src/lib.rs b/toolchain/crates/libs/wasi-spawn/src/lib.rs
similarity index 100%
rename from registry/native/crates/libs/wasi-spawn/src/lib.rs
rename to toolchain/crates/libs/wasi-spawn/src/lib.rs
diff --git a/registry/native/crates/wasi-ext/Cargo.toml b/toolchain/crates/wasi-ext/Cargo.toml
similarity index 100%
rename from registry/native/crates/wasi-ext/Cargo.toml
rename to toolchain/crates/wasi-ext/Cargo.toml
diff --git a/registry/native/crates/wasi-ext/src/lib.rs b/toolchain/crates/wasi-ext/src/lib.rs
similarity index 100%
rename from registry/native/crates/wasi-ext/src/lib.rs
rename to toolchain/crates/wasi-ext/src/lib.rs
diff --git a/registry/native/rust-toolchain.toml b/toolchain/rust-toolchain.toml
similarity index 100%
rename from registry/native/rust-toolchain.toml
rename to toolchain/rust-toolchain.toml
diff --git a/registry/native/scripts/patch-std.sh b/toolchain/scripts/patch-std.sh
similarity index 96%
rename from registry/native/scripts/patch-std.sh
rename to toolchain/scripts/patch-std.sh
index db74b8f2bb..79868592db 100755
--- a/registry/native/scripts/patch-std.sh
+++ b/toolchain/scripts/patch-std.sh
@@ -16,7 +16,7 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
WASMCORE_DIR="$(dirname "$SCRIPT_DIR")"
-PATCHES_DIR="$WASMCORE_DIR/patches"
+PATCHES_DIR="$WASMCORE_DIR/std-patches"
# Get the sysroot for the toolchain specified in rust-toolchain.toml
SYSROOT="$(rustc --print sysroot)"
@@ -68,8 +68,8 @@ if [ "$MODE" = "apply" ] && command -v rustup >/dev/null 2>&1; then
fi
# Find std patch files in order (reversed for --reverse mode).
-# Only top-level patches/*.patch are std-source patches; subdirectories
-# (patches/crates/*, patches/wasi-libc/*) target vendored crates and wasi-libc
+# Only top-level std-patches/*.patch are std-source patches; subdirectories
+# (std-patches/crates/*, std-patches/wasi-libc/*) target vendored crates and wasi-libc
# and must NOT be applied to the Rust std source tree, so use -maxdepth 1.
if [ "$MODE" = "reverse" ]; then
PATCH_FILES=$(find "$PATCHES_DIR" -maxdepth 1 -name '*.patch' -type f 2>/dev/null | sort -r)
@@ -146,7 +146,7 @@ done
# file in the std source from a `/dev/null` hunk reliably across patch versions
# (the hunk is silently skipped, leaving the declared module with no source file
# and a `file not found for module` E0583 build error). Convention mirrors the
-# vendored-crate mechanism in patch-vendor.sh: `patches/copy.manifest` with lines
+# vendored-crate mechanism in patch-vendor.sh: `std-patches/copy.manifest` with lines
# " ". Example:
# `std/os/wasi/process.rs library/std/src/os/wasi/process.rs` installs the public
# wasi child-pipe fd traits that 0007-wasi-childpipe-fd.patch's `pub mod process;`
diff --git a/registry/native/scripts/patch-vendor.sh b/toolchain/scripts/patch-vendor.sh
similarity index 96%
rename from registry/native/scripts/patch-vendor.sh
rename to toolchain/scripts/patch-vendor.sh
index 7a9b4f2aa3..42e2279027 100755
--- a/registry/native/scripts/patch-vendor.sh
+++ b/toolchain/scripts/patch-vendor.sh
@@ -1,7 +1,7 @@
#!/bin/bash
# patch-vendor.sh — Apply crate-level patches to vendored dependencies
#
-# Iterates patches/crates//*.patch, finds the matching
+# Iterates std-patches/crates//*.patch, finds the matching
# vendor/ directory, applies each patch, and nulls out
# .cargo-checksum.json file hashes so Cargo accepts the modified source.
#
@@ -16,7 +16,7 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
WASMCORE_DIR="$(dirname "$SCRIPT_DIR")"
-PATCHES_DIR="$WASMCORE_DIR/patches/crates"
+PATCHES_DIR="$WASMCORE_DIR/std-patches/crates"
VENDOR_DIR="$WASMCORE_DIR/vendor"
# Parse arguments
@@ -38,7 +38,7 @@ for arg in "$@"; do
done
if [ ! -d "$PATCHES_DIR" ]; then
- echo "No patches/crates/ directory found — nothing to patch"
+ echo "No std-patches/crates/ directory found — nothing to patch"
exit 0
fi
@@ -145,7 +145,7 @@ for CRATE_DIR in $CRATE_DIRS; do
# Install companion source files that a patch needs but cannot carry inline
# (a `diff`/`patch` cannot create a brand-new file in vendored sources whose
# parent doesn't exist as a tracked /dev/null hunk reliably across patch
- # versions). Convention: `patches/crates//copy.manifest` with lines
+ # versions). Convention: `std-patches/crates//copy.manifest` with lines
# " ".
# Example (tokio): `wasi-process-imp.rs src/process/wasi.rs` installs the
# cooperative wasm32-wasip1 process impl that the .patch's `#[path]` wiring
diff --git a/registry/native/scripts/patch-wasi-libc.sh b/toolchain/scripts/patch-wasi-libc.sh
similarity index 98%
rename from registry/native/scripts/patch-wasi-libc.sh
rename to toolchain/scripts/patch-wasi-libc.sh
index f31d3031d0..ec3765b3dd 100755
--- a/registry/native/scripts/patch-wasi-libc.sh
+++ b/toolchain/scripts/patch-wasi-libc.sh
@@ -2,7 +2,7 @@
# patch-wasi-libc.sh — Vendor, patch, and build wasi-libc as a custom sysroot
#
# Clones wasi-libc at the commit pinned by wasi-sdk-25, applies patches from
-# patches/wasi-libc/ that route POSIX functions through our host_process and
+# std-patches/wasi-libc/ that route POSIX functions through our host_process and
# host_user WASM imports, and builds the patched sysroot.
#
# Usage:
@@ -16,7 +16,7 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
WASMCORE_DIR="$(dirname "$SCRIPT_DIR")"
-PATCHES_DIR="$WASMCORE_DIR/patches/wasi-libc"
+PATCHES_DIR="$WASMCORE_DIR/std-patches/wasi-libc"
# wasi-libc commit pinned by wasi-sdk-25's git submodule
WASI_LIBC_COMMIT="574b88da481569b65a237cb80daf9a2d5aeaf82d"
@@ -319,7 +319,7 @@ for subdir in include lib; do
done
# === Install sysroot overrides ===
-# Override files in patches/wasi-libc-overrides/ fix broken libc behavior
+# Override files in std-patches/wasi-libc-overrides/ fix broken libc behavior
# (fcntl, sched_getcpu, strfmon, open_wmemstream, swprintf, inet_ntop,
# pthread_attr, pthread_mutex, pthread_key, fmtmsg).
# The patched sysroot also provides host_sigaction.o, which must replace musl's
@@ -327,7 +327,7 @@ done
# through the host_process import instead of the upstream rt_sigaction stub.
# realloc is handled by 0009-realloc-glibc-semantics.patch directly.
# Overrides are compiled and added to libc.a so ALL WASM programs get the fixes.
-OVERRIDES_DIR="$WASMCORE_DIR/patches/wasi-libc-overrides"
+OVERRIDES_DIR="$WASMCORE_DIR/std-patches/wasi-libc-overrides"
OVERRIDE_INCLUDE_DIR="$WASMCORE_DIR/c/include"
OVERRIDE_CFLAGS="--target=wasm32-wasip1 --sysroot=$SYSROOT_DIR -O2 -D_GNU_SOURCE -I$OVERRIDE_INCLUDE_DIR"
diff --git a/registry/native/scripts/test-gnu.sh b/toolchain/scripts/test-gnu.sh
similarity index 100%
rename from registry/native/scripts/test-gnu.sh
rename to toolchain/scripts/test-gnu.sh
diff --git a/registry/native/patches/0001-wasi-process-spawn.patch b/toolchain/std-patches/0001-wasi-process-spawn.patch
similarity index 100%
rename from registry/native/patches/0001-wasi-process-spawn.patch
rename to toolchain/std-patches/0001-wasi-process-spawn.patch
diff --git a/registry/native/patches/0002-wasi-fd-dup.patch b/toolchain/std-patches/0002-wasi-fd-dup.patch
similarity index 100%
rename from registry/native/patches/0002-wasi-fd-dup.patch
rename to toolchain/std-patches/0002-wasi-fd-dup.patch
diff --git a/registry/native/patches/0002a-wasi-pipe-module-routing.patch b/toolchain/std-patches/0002a-wasi-pipe-module-routing.patch
similarity index 100%
rename from registry/native/patches/0002a-wasi-pipe-module-routing.patch
rename to toolchain/std-patches/0002a-wasi-pipe-module-routing.patch
diff --git a/registry/native/patches/0003-wasi-user-group.patch b/toolchain/std-patches/0003-wasi-user-group.patch
similarity index 100%
rename from registry/native/patches/0003-wasi-user-group.patch
rename to toolchain/std-patches/0003-wasi-user-group.patch
diff --git a/registry/native/patches/0004-wasi-isatty.patch b/toolchain/std-patches/0004-wasi-isatty.patch
similarity index 100%
rename from registry/native/patches/0004-wasi-isatty.patch
rename to toolchain/std-patches/0004-wasi-isatty.patch
diff --git a/registry/native/patches/0005-wasi-temp-dir.patch b/toolchain/std-patches/0005-wasi-temp-dir.patch
similarity index 100%
rename from registry/native/patches/0005-wasi-temp-dir.patch
rename to toolchain/std-patches/0005-wasi-temp-dir.patch
diff --git a/registry/native/patches/0006-wasi-file-mode.patch b/toolchain/std-patches/0006-wasi-file-mode.patch
similarity index 100%
rename from registry/native/patches/0006-wasi-file-mode.patch
rename to toolchain/std-patches/0006-wasi-file-mode.patch
diff --git a/registry/native/patches/0007-wasi-childpipe-fd.patch b/toolchain/std-patches/0007-wasi-childpipe-fd.patch
similarity index 100%
rename from registry/native/patches/0007-wasi-childpipe-fd.patch
rename to toolchain/std-patches/0007-wasi-childpipe-fd.patch
diff --git a/registry/native/patches/0008-wasi-exit-status-ext.md b/toolchain/std-patches/0008-wasi-exit-status-ext.md
similarity index 100%
rename from registry/native/patches/0008-wasi-exit-status-ext.md
rename to toolchain/std-patches/0008-wasi-exit-status-ext.md
diff --git a/registry/native/patches/0009-wasi-split-paths.md b/toolchain/std-patches/0009-wasi-split-paths.md
similarity index 100%
rename from registry/native/patches/0009-wasi-split-paths.md
rename to toolchain/std-patches/0009-wasi-split-paths.md
diff --git a/registry/native/patches/0009-wasi-split-paths.patch b/toolchain/std-patches/0009-wasi-split-paths.patch
similarity index 100%
rename from registry/native/patches/0009-wasi-split-paths.patch
rename to toolchain/std-patches/0009-wasi-split-paths.patch
diff --git a/registry/native/patches/codex-source/README.md b/toolchain/std-patches/codex-source/README.md
similarity index 97%
rename from registry/native/patches/codex-source/README.md
rename to toolchain/std-patches/codex-source/README.md
index 8b1aee01d6..e7ba9c70ea 100644
--- a/registry/native/patches/codex-source/README.md
+++ b/toolchain/std-patches/codex-source/README.md
@@ -83,14 +83,14 @@ Then codex-exec → session-turn engine → matrix.
All in-crate wasi-gating done (committed to the rivet codex fork, branch
wasi-port-codex-core, commit 0c3f4eb73, 25 files): network-proxy + otel in-place
gating, core platform fns (tokio::signal/synthetic_exit_status/toml/permissions),
-git symlink, rmcp-client resolver. Plus std ExitStatusExt patch (patches/
+git symlink, rmcp-client resolver. Plus std ExitStatusExt patch (std-patches/
0008-wasi-exit-status-ext.md). `cargo build -p codex-core -p codex-exec
--target wasm32-wasip1 -Z build-std` → Finished, EXIT 0.
REMAINING to e2e: (1) the secure-exec command crate crates/commands/codex-exec
un-stub --session-turn to delegate to the real codex-core/codex-exec engine and emit
the EE newline-JSON protocol (start/text_delta/tool_call_update/permission_request/
-done) — the real functional integration; (2) build via `make -C registry/native wasm`
+done) — the real functional integration; (2) build via `make -C toolchain wasm`
(vendoring the codex fork + these patches); (3) wire the EE codex descriptor into the
agent-os matrix + un-skip the codex session test.
@@ -124,9 +124,9 @@ ENGINE (codex-core API, verified):
4. loop next_event() → match EventMsg → emit per table above; on approval requests,
block reading stdin for permission_response → submit(Op::ExecApproval/PatchApproval).
5. TurnComplete → emit done, exit 0.
-Then: `make -C registry/native wasm` (vendor the codex fork wasi-port-codex-core branch +
+Then: `make -C toolchain wasm` (vendor the codex fork wasi-port-codex-core branch +
all patches) → copies codex/codex-exec into software/codex/wasm → wire EE descriptor into
-the agent-os matrix (registry/agent/codex already exists) → un-skip the codex session test.
+the agent-os matrix (software/codex already exists) → un-skip the codex session test.
### session-turn engine — Config is loadable (tractable)
core/src/config/mod.rs has `Config::load_with_cli_overrides(cli_overrides, harness)`
@@ -145,13 +145,13 @@ agent and emits the EE protocol. `cargo build -p codex-exec --target wasm32-wasi
## Remaining = build pipeline + ACP wiring + test run (integration, not functional)
1. Produce optimized wasm artifacts from the fork (branch wasi-port-codex-core):
`cargo build -p codex-exec -p codex --release --target wasm32-wasip1 -Z build-std`
- (+ wasm-opt) → copy to registry/software/codex/wasm/{codex-exec,codex}. NOTE: the
+ (+ wasm-opt) → copy to software/codex/wasm/{codex-exec,codex}. NOTE: the
secure-exec `make wasm` currently builds the STUB crates/commands/{codex,codex-exec};
to ship the real engine, either build from the fork directly (above) or vendor the
- fork into registry/native and point cmd-codex-exec at the real codex-exec.
+ fork into toolchain and point cmd-codex-exec at the real codex-exec.
2. ACP adapter: the codex ACP bridge (spawns `codex-exec --session-turn`, newline-JSON↔ACP)
lives in EE (@rivet-ee/agent-os-codex-agent, agent-os-ee/packages/codex/src/adapter.ts).
- The open-source registry/agent/codex only re-exports the wasm software package. To test
+ The open-source software/codex only re-exports the wasm software package. To test
codex e2e in the agent-os matrix, either bring that adapter into agent-os or run the
EE codex-session.test.ts (describe.skipIf gated on wasm presence — un-skips once the
wasm artifacts above exist).
@@ -161,7 +161,7 @@ agent and emits the EE protocol. `cargo build -p codex-exec --target wasm32-wasi
## ✅ ARTIFACT BUILT + SPAWNS IN VM; last blocker = 1 host import
Built the real codex-exec from the fork (release, wasm-opt'd to 28MB) and placed it in
-registry/software/codex/wasm/{codex-exec,codex}. Smoke test (vm.exec("... | codex-exec
+software/codex/wasm/{codex-exec,codex}. Smoke test (vm.exec("... | codex-exec
--session-turn")) shows it SPAWNS and attempts WebAssembly instantiation in the VM —
44 imports, of which 43 (wasi_snapshot_preview1×30, host_net×6, host_process×5,
host_fs×2) are provided by the secure-exec runtime. The ONLY unprovided one was
diff --git a/registry/native/patches/codex-source/build-codex-wasip1.sh b/toolchain/std-patches/codex-source/build-codex-wasip1.sh
similarity index 95%
rename from registry/native/patches/codex-source/build-codex-wasip1.sh
rename to toolchain/std-patches/codex-source/build-codex-wasip1.sh
index 35a6e39cdb..3bc9ce0144 100755
--- a/registry/native/patches/codex-source/build-codex-wasip1.sh
+++ b/toolchain/std-patches/codex-source/build-codex-wasip1.sh
@@ -11,8 +11,8 @@
set -uo pipefail
CODEX="${CODEX:-/home/nathan/agent-e2e/codex-rs/codex-rs}"
SECEXEC="${SECEXEC:-/home/nathan/agent-e2e/secure-exec}"
-STUBS="$SECEXEC/registry/native/stubs"
-WSDK="$SECEXEC/registry/native/c/vendor/wasi-sdk"
+STUBS="$SECEXEC/toolchain/stubs"
+WSDK="$SECEXEC/toolchain/c/vendor/wasi-sdk"
TOOLCHAIN="nightly-2026-03-01"
CARGO_CACHE="$(ls -d $HOME/.cargo/registry/src/index.crates.io-*/ | head -1)"
@@ -21,7 +21,7 @@ export CC_wasm32_wasip1="$WSDK/bin/clang"
export AR_wasm32_wasip1="$WSDK/bin/llvm-ar"
export CFLAGS_wasm32_wasip1="--sysroot=$WSDK/share/wasi-sysroot -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_PTHREAD -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_PROCESS_CLOCKS"
-echo "== 2. crate-cache patches (become patches/crates/* artifacts when vendored) =="
+echo "== 2. crate-cache patches (become std-patches/crates/* artifacts when vendored) =="
# path-dedot + path-absolutize: route target_family=wasm to the unix-paths impl.
for c in path-dedot-3.1.1 path-absolutize-3.1.1; do
for f in "$CARGO_CACHE$c/src/"*.rs; do
@@ -54,7 +54,7 @@ echo "== 3. codex workspace patches (Cargo.toml) — build config, not agent log
echo "== 4. codex SOURCE patch (unavoidable compile_error) =="
# - utils/git/src/platform.rs: add #[cfg(target_os="wasi")] create_symlink stub +
-# widen the fallback compile_error cfg. (see patches/codex-source/README.md)
+# widen the fallback compile_error cfg. (see std-patches/codex-source/README.md)
echo "== 5. build =="
cd "$CODEX"
diff --git a/registry/native/patches/copy.manifest b/toolchain/std-patches/copy.manifest
similarity index 100%
rename from registry/native/patches/copy.manifest
rename to toolchain/std-patches/copy.manifest
diff --git a/registry/native/c/programs/.gitkeep b/toolchain/std-patches/crates/.gitkeep
similarity index 100%
rename from registry/native/c/programs/.gitkeep
rename to toolchain/std-patches/crates/.gitkeep
diff --git a/registry/native/patches/crates/brush-core/0001-wasi-command-substitution.patch b/toolchain/std-patches/crates/brush-core/0001-wasi-command-substitution.patch
similarity index 100%
rename from registry/native/patches/crates/brush-core/0001-wasi-command-substitution.patch
rename to toolchain/std-patches/crates/brush-core/0001-wasi-command-substitution.patch
diff --git a/registry/native/patches/crates/brush-core/0003-wasi-path-resolution.patch b/toolchain/std-patches/crates/brush-core/0003-wasi-path-resolution.patch
similarity index 100%
rename from registry/native/patches/crates/brush-core/0003-wasi-path-resolution.patch
rename to toolchain/std-patches/crates/brush-core/0003-wasi-path-resolution.patch
diff --git a/registry/native/patches/crates/brush-interactive/0001-wasi-support.patch b/toolchain/std-patches/crates/brush-interactive/0001-wasi-support.patch
similarity index 100%
rename from registry/native/patches/crates/brush-interactive/0001-wasi-support.patch
rename to toolchain/std-patches/crates/brush-interactive/0001-wasi-support.patch
diff --git a/registry/native/patches/crates/brush-interactive/0002-wasi-tokio-dep.patch b/toolchain/std-patches/crates/brush-interactive/0002-wasi-tokio-dep.patch
similarity index 100%
rename from registry/native/patches/crates/brush-interactive/0002-wasi-tokio-dep.patch
rename to toolchain/std-patches/crates/brush-interactive/0002-wasi-tokio-dep.patch
diff --git a/registry/native/patches/crates/brush-shell/0001-wasi-support.patch b/toolchain/std-patches/crates/brush-shell/0001-wasi-support.patch
similarity index 100%
rename from registry/native/patches/crates/brush-shell/0001-wasi-support.patch
rename to toolchain/std-patches/crates/brush-shell/0001-wasi-support.patch
diff --git a/registry/native/patches/crates/crossterm-0.28.1/0001-wasi-support.patch b/toolchain/std-patches/crates/crossterm-0.28.1/0001-wasi-support.patch
similarity index 100%
rename from registry/native/patches/crates/crossterm-0.28.1/0001-wasi-support.patch
rename to toolchain/std-patches/crates/crossterm-0.28.1/0001-wasi-support.patch
diff --git a/registry/native/patches/crates/crossterm/0001-wasi-support.patch b/toolchain/std-patches/crates/crossterm/0001-wasi-support.patch
similarity index 100%
rename from registry/native/patches/crates/crossterm/0001-wasi-support.patch
rename to toolchain/std-patches/crates/crossterm/0001-wasi-support.patch
diff --git a/registry/native/patches/crates/fd-lock/0001-wasi-support.patch b/toolchain/std-patches/crates/fd-lock/0001-wasi-support.patch
similarity index 100%
rename from registry/native/patches/crates/fd-lock/0001-wasi-support.patch
rename to toolchain/std-patches/crates/fd-lock/0001-wasi-support.patch
diff --git a/registry/native/patches/crates/path-dedot/wasi.md b/toolchain/std-patches/crates/path-dedot/wasi.md
similarity index 100%
rename from registry/native/patches/crates/path-dedot/wasi.md
rename to toolchain/std-patches/crates/path-dedot/wasi.md
diff --git a/registry/native/patches/crates/sed/0001-wasi-compat.patch b/toolchain/std-patches/crates/sed/0001-wasi-compat.patch
similarity index 100%
rename from registry/native/patches/crates/sed/0001-wasi-compat.patch
rename to toolchain/std-patches/crates/sed/0001-wasi-compat.patch
diff --git a/registry/native/patches/crates/socket2/0001-wasip1.patch b/toolchain/std-patches/crates/socket2/0001-wasip1.patch
similarity index 100%
rename from registry/native/patches/crates/socket2/0001-wasip1.patch
rename to toolchain/std-patches/crates/socket2/0001-wasip1.patch
diff --git a/registry/native/patches/crates/tokio/0001-tokio-wasi-process.patch b/toolchain/std-patches/crates/tokio/0001-tokio-wasi-process.patch
similarity index 100%
rename from registry/native/patches/crates/tokio/0001-tokio-wasi-process.patch
rename to toolchain/std-patches/crates/tokio/0001-tokio-wasi-process.patch
diff --git a/registry/native/patches/crates/tokio/0002-wasi-fs-asyncify-inline.md b/toolchain/std-patches/crates/tokio/0002-wasi-fs-asyncify-inline.md
similarity index 100%
rename from registry/native/patches/crates/tokio/0002-wasi-fs-asyncify-inline.md
rename to toolchain/std-patches/crates/tokio/0002-wasi-fs-asyncify-inline.md
diff --git a/registry/native/patches/crates/tokio/0003-wasi-spawn-blocking-inline.md b/toolchain/std-patches/crates/tokio/0003-wasi-spawn-blocking-inline.md
similarity index 100%
rename from registry/native/patches/crates/tokio/0003-wasi-spawn-blocking-inline.md
rename to toolchain/std-patches/crates/tokio/0003-wasi-spawn-blocking-inline.md
diff --git a/registry/native/patches/crates/tokio/VERIFIED-tokio-process-wasi.md b/toolchain/std-patches/crates/tokio/VERIFIED-tokio-process-wasi.md
similarity index 92%
rename from registry/native/patches/crates/tokio/VERIFIED-tokio-process-wasi.md
rename to toolchain/std-patches/crates/tokio/VERIFIED-tokio-process-wasi.md
index aa417a80d0..cdea85d0df 100644
--- a/registry/native/patches/crates/tokio/VERIFIED-tokio-process-wasi.md
+++ b/toolchain/std-patches/crates/tokio/VERIFIED-tokio-process-wasi.md
@@ -6,7 +6,7 @@ This de-risks codex's entire exec path under the pipeline-only approach.
## The exact changes (to capture as secure-exec patches):
-### A. tokio crate patch (patches/crates/tokio/):
+### A. tokio crate patch (std-patches/crates/tokio/):
1. src/macros/cfg.rs — in `macro_rules! cfg_process`, remove `#[cfg(not(target_os = "wasi"))]`.
2. src/process/mod.rs — after the windows imp block, add:
#[path = "wasi.rs"]
@@ -26,7 +26,7 @@ This de-risks codex's entire exec path under the pipeline-only approach.
### C. Makefile: add `--cfg tokio_unstable` to the wasm-target RUSTFLAGS.
## NEXT (remaining pipeline-only): same pattern for tokio::net (host_net sockets) → unblocks
-reqwest/tungstenite/rmcp → vendor codex into registry/native (resolve version conflicts) →
+reqwest/tungstenite/rmcp → vendor codex into toolchain (resolve version conflicts) →
make wasm builds codex-core UNCHANGED → un-stub codex-exec --session-turn → EE adapter + a5 test → matrix.
## UPDATE — VERIFIED 2026-06-23 (compile): full hard stack compiles on wasm32-wasip1
@@ -40,6 +40,6 @@ HTTP needs routing to wasi-http (reqwest connector patch) because wasi preview1
- C-dep crates: `zip` (xz/lzma) → `[patch.crates-io] zip` defeatured (deflate only); `sqlx`/sqlite
(codex-state) → stub or [patch] (no wasi sqlite). These are [patch]/vendoring, not codex edits.
- stub crates codex-network-proxy/codex-otel 0.0.0 already exist.
-Then: vendor codex into registry/native → make wasm builds codex-core unchanged.
+Then: vendor codex into toolchain → make wasm builds codex-core unchanged.
## Remaining for codex to WORK: reqwest→wasi-http connector patch (runtime HTTP) → un-stub
codex-exec --session-turn → EE adapter + a5 test → matrix.
diff --git a/registry/native/patches/crates/tokio/copy.manifest b/toolchain/std-patches/crates/tokio/copy.manifest
similarity index 100%
rename from registry/native/patches/crates/tokio/copy.manifest
rename to toolchain/std-patches/crates/tokio/copy.manifest
diff --git a/registry/native/patches/crates/tokio/std-wasi-childpipe-fd.rs b/toolchain/std-patches/crates/tokio/std-wasi-childpipe-fd.rs
similarity index 97%
rename from registry/native/patches/crates/tokio/std-wasi-childpipe-fd.rs
rename to toolchain/std-patches/crates/tokio/std-wasi-childpipe-fd.rs
index 6a5f3d230e..c778628f54 100644
--- a/registry/native/patches/crates/tokio/std-wasi-childpipe-fd.rs
+++ b/toolchain/std-patches/crates/tokio/std-wasi-childpipe-fd.rs
@@ -5,7 +5,7 @@
//! public `process::{ChildStdin,ChildStdout,ChildStderr}` fd traits — `os/unix/process.rs`
//! has them (AsRawFd/IntoRawFd/AsFd/From<_> for OwnedFd) but there is no `os/wasi`
//! equivalent. Without them, `tokio::process`'s wasi imp (and any fd-extracting code)
-//! cannot get the child pipe fds. Also: `patches/0001-wasi-process-spawn.patch` is
+//! cannot get the child pipe fds. Also: `std-patches/0001-wasi-process-spawn.patch` is
//! STALE vs nightly-2026-03-01 (leaves sys/process/{mod.rs,wasi.rs}.rej) and should be
//! refreshed.
//!
diff --git a/registry/native/patches/crates/tokio/wasi-process-imp.rs b/toolchain/std-patches/crates/tokio/wasi-process-imp.rs
similarity index 98%
rename from registry/native/patches/crates/tokio/wasi-process-imp.rs
rename to toolchain/std-patches/crates/tokio/wasi-process-imp.rs
index 48aeba3d87..e37b401573 100644
--- a/registry/native/patches/crates/tokio/wasi-process-imp.rs
+++ b/toolchain/std-patches/crates/tokio/wasi-process-imp.rs
@@ -1,6 +1,6 @@
//! wasm32-wasip1 process `imp` for tokio (DRAFT — pipeline-only codex port).
//!
-//! Status: starting artifact for `patches/crates/tokio/`. Needs compile-test
+//! Status: starting artifact for `std-patches/crates/tokio/`. Needs compile-test
//! iteration against tokio 1.52.x internals (trait/type exactness) before being
//! captured as the actual .patch. See ~/tmp/agent-e2e-checklist.md.
//!
diff --git a/registry/native/patches/crates/uu_cat/0001-wasi-platform-stub.patch b/toolchain/std-patches/crates/uu_cat/0001-wasi-platform-stub.patch
similarity index 100%
rename from registry/native/patches/crates/uu_cat/0001-wasi-platform-stub.patch
rename to toolchain/std-patches/crates/uu_cat/0001-wasi-platform-stub.patch
diff --git a/registry/native/patches/crates/uu_chmod/0001-wasi-compat.patch b/toolchain/std-patches/crates/uu_chmod/0001-wasi-compat.patch
similarity index 100%
rename from registry/native/patches/crates/uu_chmod/0001-wasi-compat.patch
rename to toolchain/std-patches/crates/uu_chmod/0001-wasi-compat.patch
diff --git a/registry/native/patches/crates/uu_cp/0001-wasi-symlink.patch b/toolchain/std-patches/crates/uu_cp/0001-wasi-symlink.patch
similarity index 100%
rename from registry/native/patches/crates/uu_cp/0001-wasi-symlink.patch
rename to toolchain/std-patches/crates/uu_cp/0001-wasi-symlink.patch
diff --git a/registry/native/patches/crates/uu_dd/0001-wasi-compat.patch b/toolchain/std-patches/crates/uu_dd/0001-wasi-compat.patch
similarity index 100%
rename from registry/native/patches/crates/uu_dd/0001-wasi-compat.patch
rename to toolchain/std-patches/crates/uu_dd/0001-wasi-compat.patch
diff --git a/registry/native/patches/crates/uu_ln/0001-wasi-symlink.patch b/toolchain/std-patches/crates/uu_ln/0001-wasi-symlink.patch
similarity index 100%
rename from registry/native/patches/crates/uu_ln/0001-wasi-symlink.patch
rename to toolchain/std-patches/crates/uu_ln/0001-wasi-symlink.patch
diff --git a/registry/native/patches/crates/uu_logname/0001-wasi-compat.patch b/toolchain/std-patches/crates/uu_logname/0001-wasi-compat.patch
similarity index 100%
rename from registry/native/patches/crates/uu_logname/0001-wasi-compat.patch
rename to toolchain/std-patches/crates/uu_logname/0001-wasi-compat.patch
diff --git a/registry/native/patches/crates/uu_ls/0001-wasi-host-fs-mode-display.patch b/toolchain/std-patches/crates/uu_ls/0001-wasi-host-fs-mode-display.patch
similarity index 100%
rename from registry/native/patches/crates/uu_ls/0001-wasi-host-fs-mode-display.patch
rename to toolchain/std-patches/crates/uu_ls/0001-wasi-host-fs-mode-display.patch
diff --git a/registry/native/patches/crates/uu_mktemp/0001-wasi-compat.patch b/toolchain/std-patches/crates/uu_mktemp/0001-wasi-compat.patch
similarity index 100%
rename from registry/native/patches/crates/uu_mktemp/0001-wasi-compat.patch
rename to toolchain/std-patches/crates/uu_mktemp/0001-wasi-compat.patch
diff --git a/registry/native/patches/crates/uu_pathchk/0001-wasi-compat.patch b/toolchain/std-patches/crates/uu_pathchk/0001-wasi-compat.patch
similarity index 100%
rename from registry/native/patches/crates/uu_pathchk/0001-wasi-compat.patch
rename to toolchain/std-patches/crates/uu_pathchk/0001-wasi-compat.patch
diff --git a/registry/native/patches/crates/uu_sort/0001-wasi-serial-sort.patch b/toolchain/std-patches/crates/uu_sort/0001-wasi-serial-sort.patch
similarity index 100%
rename from registry/native/patches/crates/uu_sort/0001-wasi-serial-sort.patch
rename to toolchain/std-patches/crates/uu_sort/0001-wasi-serial-sort.patch
diff --git a/registry/native/patches/crates/uu_sort/0002-soft-skip-unsupported-signal-registration.patch b/toolchain/std-patches/crates/uu_sort/0002-soft-skip-unsupported-signal-registration.patch
similarity index 100%
rename from registry/native/patches/crates/uu_sort/0002-soft-skip-unsupported-signal-registration.patch
rename to toolchain/std-patches/crates/uu_sort/0002-soft-skip-unsupported-signal-registration.patch
diff --git a/registry/native/patches/crates/uu_split/0001-wasi-compat.patch b/toolchain/std-patches/crates/uu_split/0001-wasi-compat.patch
similarity index 100%
rename from registry/native/patches/crates/uu_split/0001-wasi-compat.patch
rename to toolchain/std-patches/crates/uu_split/0001-wasi-compat.patch
diff --git a/registry/native/patches/crates/uu_stat/0001-wasi-metadata-compat.patch b/toolchain/std-patches/crates/uu_stat/0001-wasi-metadata-compat.patch
similarity index 100%
rename from registry/native/patches/crates/uu_stat/0001-wasi-metadata-compat.patch
rename to toolchain/std-patches/crates/uu_stat/0001-wasi-metadata-compat.patch
diff --git a/registry/native/patches/crates/uu_tac/0001-wasi-compat.patch b/toolchain/std-patches/crates/uu_tac/0001-wasi-compat.patch
similarity index 100%
rename from registry/native/patches/crates/uu_tac/0001-wasi-compat.patch
rename to toolchain/std-patches/crates/uu_tac/0001-wasi-compat.patch
diff --git a/registry/native/patches/crates/uu_tail/0001-wasi-compat.patch b/toolchain/std-patches/crates/uu_tail/0001-wasi-compat.patch
similarity index 100%
rename from registry/native/patches/crates/uu_tail/0001-wasi-compat.patch
rename to toolchain/std-patches/crates/uu_tail/0001-wasi-compat.patch
diff --git a/registry/native/patches/crates/uu_touch/0001-wasi-compat.patch b/toolchain/std-patches/crates/uu_touch/0001-wasi-compat.patch
similarity index 100%
rename from registry/native/patches/crates/uu_touch/0001-wasi-compat.patch
rename to toolchain/std-patches/crates/uu_touch/0001-wasi-compat.patch
diff --git a/registry/native/patches/crates/uu_tsort/0001-wasi-compat.patch b/toolchain/std-patches/crates/uu_tsort/0001-wasi-compat.patch
similarity index 100%
rename from registry/native/patches/crates/uu_tsort/0001-wasi-compat.patch
rename to toolchain/std-patches/crates/uu_tsort/0001-wasi-compat.patch
diff --git a/registry/native/patches/git/README.md b/toolchain/std-patches/git/README.md
similarity index 100%
rename from registry/native/patches/git/README.md
rename to toolchain/std-patches/git/README.md
diff --git a/registry/native/patches/std/os/wasi/process.rs b/toolchain/std-patches/std/os/wasi/process.rs
similarity index 100%
rename from registry/native/patches/std/os/wasi/process.rs
rename to toolchain/std-patches/std/os/wasi/process.rs
diff --git a/registry/native/patches/wasi-libc-overrides/fcntl.c b/toolchain/std-patches/wasi-libc-overrides/fcntl.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/fcntl.c
rename to toolchain/std-patches/wasi-libc-overrides/fcntl.c
diff --git a/registry/native/patches/wasi-libc-overrides/fcntl.o b/toolchain/std-patches/wasi-libc-overrides/fcntl.o
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/fcntl.o
rename to toolchain/std-patches/wasi-libc-overrides/fcntl.o
diff --git a/registry/native/patches/wasi-libc-overrides/fmtmsg.c b/toolchain/std-patches/wasi-libc-overrides/fmtmsg.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/fmtmsg.c
rename to toolchain/std-patches/wasi-libc-overrides/fmtmsg.c
diff --git a/registry/native/patches/wasi-libc-overrides/fmtmsg.o b/toolchain/std-patches/wasi-libc-overrides/fmtmsg.o
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/fmtmsg.o
rename to toolchain/std-patches/wasi-libc-overrides/fmtmsg.o
diff --git a/registry/native/patches/wasi-libc-overrides/ifaddrs.c b/toolchain/std-patches/wasi-libc-overrides/ifaddrs.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/ifaddrs.c
rename to toolchain/std-patches/wasi-libc-overrides/ifaddrs.c
diff --git a/registry/native/patches/wasi-libc-overrides/inet_ntop.c b/toolchain/std-patches/wasi-libc-overrides/inet_ntop.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/inet_ntop.c
rename to toolchain/std-patches/wasi-libc-overrides/inet_ntop.c
diff --git a/registry/native/patches/wasi-libc-overrides/inet_ntop.o b/toolchain/std-patches/wasi-libc-overrides/inet_ntop.o
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/inet_ntop.o
rename to toolchain/std-patches/wasi-libc-overrides/inet_ntop.o
diff --git a/registry/native/patches/wasi-libc-overrides/mlock.c b/toolchain/std-patches/wasi-libc-overrides/mlock.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/mlock.c
rename to toolchain/std-patches/wasi-libc-overrides/mlock.c
diff --git a/registry/native/patches/wasi-libc-overrides/open_wmemstream.c b/toolchain/std-patches/wasi-libc-overrides/open_wmemstream.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/open_wmemstream.c
rename to toolchain/std-patches/wasi-libc-overrides/open_wmemstream.c
diff --git a/registry/native/patches/wasi-libc-overrides/open_wmemstream.o b/toolchain/std-patches/wasi-libc-overrides/open_wmemstream.o
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/open_wmemstream.o
rename to toolchain/std-patches/wasi-libc-overrides/open_wmemstream.o
diff --git a/registry/native/patches/wasi-libc-overrides/pthread_attr.c b/toolchain/std-patches/wasi-libc-overrides/pthread_attr.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/pthread_attr.c
rename to toolchain/std-patches/wasi-libc-overrides/pthread_attr.c
diff --git a/registry/native/patches/wasi-libc-overrides/pthread_attr.o b/toolchain/std-patches/wasi-libc-overrides/pthread_attr.o
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/pthread_attr.o
rename to toolchain/std-patches/wasi-libc-overrides/pthread_attr.o
diff --git a/registry/native/patches/wasi-libc-overrides/pthread_key.c b/toolchain/std-patches/wasi-libc-overrides/pthread_key.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/pthread_key.c
rename to toolchain/std-patches/wasi-libc-overrides/pthread_key.c
diff --git a/registry/native/patches/wasi-libc-overrides/pthread_key.o b/toolchain/std-patches/wasi-libc-overrides/pthread_key.o
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/pthread_key.o
rename to toolchain/std-patches/wasi-libc-overrides/pthread_key.o
diff --git a/registry/native/patches/wasi-libc-overrides/pthread_mutex.c b/toolchain/std-patches/wasi-libc-overrides/pthread_mutex.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/pthread_mutex.c
rename to toolchain/std-patches/wasi-libc-overrides/pthread_mutex.c
diff --git a/registry/native/patches/wasi-libc-overrides/pthread_mutex.o b/toolchain/std-patches/wasi-libc-overrides/pthread_mutex.o
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/pthread_mutex.o
rename to toolchain/std-patches/wasi-libc-overrides/pthread_mutex.o
diff --git a/registry/native/patches/wasi-libc-overrides/sched.c b/toolchain/std-patches/wasi-libc-overrides/sched.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/sched.c
rename to toolchain/std-patches/wasi-libc-overrides/sched.c
diff --git a/registry/native/patches/wasi-libc-overrides/strfmon.c b/toolchain/std-patches/wasi-libc-overrides/strfmon.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/strfmon.c
rename to toolchain/std-patches/wasi-libc-overrides/strfmon.c
diff --git a/registry/native/patches/wasi-libc-overrides/strfmon.o b/toolchain/std-patches/wasi-libc-overrides/strfmon.o
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/strfmon.o
rename to toolchain/std-patches/wasi-libc-overrides/strfmon.o
diff --git a/registry/native/patches/wasi-libc-overrides/swprintf.c b/toolchain/std-patches/wasi-libc-overrides/swprintf.c
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/swprintf.c
rename to toolchain/std-patches/wasi-libc-overrides/swprintf.c
diff --git a/registry/native/patches/wasi-libc-overrides/swprintf.o b/toolchain/std-patches/wasi-libc-overrides/swprintf.o
similarity index 100%
rename from registry/native/patches/wasi-libc-overrides/swprintf.o
rename to toolchain/std-patches/wasi-libc-overrides/swprintf.o
diff --git a/registry/native/patches/crates/.gitkeep b/toolchain/std-patches/wasi-libc/.gitkeep
similarity index 100%
rename from registry/native/patches/crates/.gitkeep
rename to toolchain/std-patches/wasi-libc/.gitkeep
diff --git a/registry/native/patches/wasi-libc/0001-pipe-dup.patch b/toolchain/std-patches/wasi-libc/0001-pipe-dup.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0001-pipe-dup.patch
rename to toolchain/std-patches/wasi-libc/0001-pipe-dup.patch
diff --git a/registry/native/patches/wasi-libc/0002-spawn-wait.patch b/toolchain/std-patches/wasi-libc/0002-spawn-wait.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0002-spawn-wait.patch
rename to toolchain/std-patches/wasi-libc/0002-spawn-wait.patch
diff --git a/registry/native/patches/wasi-libc/0003-kill.patch b/toolchain/std-patches/wasi-libc/0003-kill.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0003-kill.patch
rename to toolchain/std-patches/wasi-libc/0003-kill.patch
diff --git a/registry/native/patches/wasi-libc/0004-getpid.patch b/toolchain/std-patches/wasi-libc/0004-getpid.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0004-getpid.patch
rename to toolchain/std-patches/wasi-libc/0004-getpid.patch
diff --git a/registry/native/patches/wasi-libc/0005-user-identity.patch b/toolchain/std-patches/wasi-libc/0005-user-identity.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0005-user-identity.patch
rename to toolchain/std-patches/wasi-libc/0005-user-identity.patch
diff --git a/registry/native/patches/wasi-libc/0006-isatty.patch b/toolchain/std-patches/wasi-libc/0006-isatty.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0006-isatty.patch
rename to toolchain/std-patches/wasi-libc/0006-isatty.patch
diff --git a/registry/native/patches/wasi-libc/0007-getpwuid.patch b/toolchain/std-patches/wasi-libc/0007-getpwuid.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0007-getpwuid.patch
rename to toolchain/std-patches/wasi-libc/0007-getpwuid.patch
diff --git a/registry/native/patches/wasi-libc/0008-sockets.patch b/toolchain/std-patches/wasi-libc/0008-sockets.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0008-sockets.patch
rename to toolchain/std-patches/wasi-libc/0008-sockets.patch
diff --git a/registry/native/patches/wasi-libc/0009-realloc-glibc-semantics.patch b/toolchain/std-patches/wasi-libc/0009-realloc-glibc-semantics.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0009-realloc-glibc-semantics.patch
rename to toolchain/std-patches/wasi-libc/0009-realloc-glibc-semantics.patch
diff --git a/registry/native/patches/wasi-libc/0010-pthread-condattr-getclock.patch b/toolchain/std-patches/wasi-libc/0010-pthread-condattr-getclock.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0010-pthread-condattr-getclock.patch
rename to toolchain/std-patches/wasi-libc/0010-pthread-condattr-getclock.patch
diff --git a/registry/native/patches/wasi-libc/0011-sigaction.patch b/toolchain/std-patches/wasi-libc/0011-sigaction.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0011-sigaction.patch
rename to toolchain/std-patches/wasi-libc/0011-sigaction.patch
diff --git a/registry/native/patches/wasi-libc/0012-posix-spawn-cwd.patch b/toolchain/std-patches/wasi-libc/0012-posix-spawn-cwd.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0012-posix-spawn-cwd.patch
rename to toolchain/std-patches/wasi-libc/0012-posix-spawn-cwd.patch
diff --git a/registry/native/patches/wasi-libc/0013-posix-socket-header-surface.patch b/toolchain/std-patches/wasi-libc/0013-posix-socket-header-surface.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0013-posix-socket-header-surface.patch
rename to toolchain/std-patches/wasi-libc/0013-posix-socket-header-surface.patch
diff --git a/registry/native/patches/wasi-libc/0014-initialize-cwd-from-pwd.patch b/toolchain/std-patches/wasi-libc/0014-initialize-cwd-from-pwd.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0014-initialize-cwd-from-pwd.patch
rename to toolchain/std-patches/wasi-libc/0014-initialize-cwd-from-pwd.patch
diff --git a/registry/native/patches/wasi-libc/0015-always-link-cwd-relative-path-resolution.patch b/toolchain/std-patches/wasi-libc/0015-always-link-cwd-relative-path-resolution.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0015-always-link-cwd-relative-path-resolution.patch
rename to toolchain/std-patches/wasi-libc/0015-always-link-cwd-relative-path-resolution.patch
diff --git a/registry/native/patches/wasi-libc/0016-host-fs-mode-and-chmod.patch b/toolchain/std-patches/wasi-libc/0016-host-fs-mode-and-chmod.patch
similarity index 100%
rename from registry/native/patches/wasi-libc/0016-host-fs-mode-and-chmod.patch
rename to toolchain/std-patches/wasi-libc/0016-host-fs-mode-and-chmod.patch
diff --git a/registry/native/stubs/codex-network-proxy-wasi/Cargo.toml b/toolchain/stubs/codex-network-proxy-wasi/Cargo.toml
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/Cargo.toml
rename to toolchain/stubs/codex-network-proxy-wasi/Cargo.toml
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/certs.rs b/toolchain/stubs/codex-network-proxy-wasi/src/certs.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/certs.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/certs.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/config.rs b/toolchain/stubs/codex-network-proxy-wasi/src/config.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/config.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/config.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/http_proxy.rs b/toolchain/stubs/codex-network-proxy-wasi/src/http_proxy.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/http_proxy.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/http_proxy.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/lib.rs b/toolchain/stubs/codex-network-proxy-wasi/src/lib.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/lib.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/lib.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/mitm.rs b/toolchain/stubs/codex-network-proxy-wasi/src/mitm.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/mitm.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/mitm.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/network_policy.rs b/toolchain/stubs/codex-network-proxy-wasi/src/network_policy.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/network_policy.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/network_policy.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/policy.rs b/toolchain/stubs/codex-network-proxy-wasi/src/policy.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/policy.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/policy.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/proxy.rs b/toolchain/stubs/codex-network-proxy-wasi/src/proxy.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/proxy.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/proxy.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/reasons.rs b/toolchain/stubs/codex-network-proxy-wasi/src/reasons.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/reasons.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/reasons.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/responses.rs b/toolchain/stubs/codex-network-proxy-wasi/src/responses.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/responses.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/responses.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/runtime.rs b/toolchain/stubs/codex-network-proxy-wasi/src/runtime.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/runtime.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/runtime.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/socks5.rs b/toolchain/stubs/codex-network-proxy-wasi/src/socks5.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/socks5.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/socks5.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/state.rs b/toolchain/stubs/codex-network-proxy-wasi/src/state.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/state.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/state.rs
diff --git a/registry/native/stubs/codex-network-proxy-wasi/src/upstream.rs b/toolchain/stubs/codex-network-proxy-wasi/src/upstream.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy-wasi/src/upstream.rs
rename to toolchain/stubs/codex-network-proxy-wasi/src/upstream.rs
diff --git a/registry/native/stubs/codex-network-proxy/Cargo.toml b/toolchain/stubs/codex-network-proxy/Cargo.toml
similarity index 100%
rename from registry/native/stubs/codex-network-proxy/Cargo.toml
rename to toolchain/stubs/codex-network-proxy/Cargo.toml
diff --git a/registry/native/stubs/codex-network-proxy/src/lib.rs b/toolchain/stubs/codex-network-proxy/src/lib.rs
similarity index 100%
rename from registry/native/stubs/codex-network-proxy/src/lib.rs
rename to toolchain/stubs/codex-network-proxy/src/lib.rs
diff --git a/registry/native/stubs/codex-otel/Cargo.toml b/toolchain/stubs/codex-otel/Cargo.toml
similarity index 100%
rename from registry/native/stubs/codex-otel/Cargo.toml
rename to toolchain/stubs/codex-otel/Cargo.toml
diff --git a/registry/native/stubs/codex-otel/src/config.rs b/toolchain/stubs/codex-otel/src/config.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/src/config.rs
rename to toolchain/stubs/codex-otel/src/config.rs
diff --git a/registry/native/stubs/codex-otel/src/lib.rs b/toolchain/stubs/codex-otel/src/lib.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/src/lib.rs
rename to toolchain/stubs/codex-otel/src/lib.rs
diff --git a/registry/native/stubs/codex-otel/src/metrics/mod.rs b/toolchain/stubs/codex-otel/src/metrics/mod.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/src/metrics/mod.rs
rename to toolchain/stubs/codex-otel/src/metrics/mod.rs
diff --git a/registry/native/stubs/codex-otel/src/metrics/names.rs b/toolchain/stubs/codex-otel/src/metrics/names.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/src/metrics/names.rs
rename to toolchain/stubs/codex-otel/src/metrics/names.rs
diff --git a/registry/native/stubs/codex-otel/src/metrics/runtime_metrics.rs b/toolchain/stubs/codex-otel/src/metrics/runtime_metrics.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/src/metrics/runtime_metrics.rs
rename to toolchain/stubs/codex-otel/src/metrics/runtime_metrics.rs
diff --git a/registry/native/stubs/codex-otel/src/metrics/tags.rs b/toolchain/stubs/codex-otel/src/metrics/tags.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/src/metrics/tags.rs
rename to toolchain/stubs/codex-otel/src/metrics/tags.rs
diff --git a/registry/native/stubs/codex-otel/src/metrics/timer.rs b/toolchain/stubs/codex-otel/src/metrics/timer.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/src/metrics/timer.rs
rename to toolchain/stubs/codex-otel/src/metrics/timer.rs
diff --git a/registry/native/stubs/codex-otel/src/provider.rs b/toolchain/stubs/codex-otel/src/provider.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/src/provider.rs
rename to toolchain/stubs/codex-otel/src/provider.rs
diff --git a/registry/native/stubs/codex-otel/src/trace_context.rs b/toolchain/stubs/codex-otel/src/trace_context.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/src/trace_context.rs
rename to toolchain/stubs/codex-otel/src/trace_context.rs
diff --git a/registry/native/stubs/codex-otel/tests/metric_names.rs b/toolchain/stubs/codex-otel/tests/metric_names.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/tests/metric_names.rs
rename to toolchain/stubs/codex-otel/tests/metric_names.rs
diff --git a/registry/native/stubs/codex-otel/tests/metrics_client.rs b/toolchain/stubs/codex-otel/tests/metrics_client.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/tests/metrics_client.rs
rename to toolchain/stubs/codex-otel/tests/metrics_client.rs
diff --git a/registry/native/stubs/codex-otel/tests/provider.rs b/toolchain/stubs/codex-otel/tests/provider.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/tests/provider.rs
rename to toolchain/stubs/codex-otel/tests/provider.rs
diff --git a/registry/native/stubs/codex-otel/tests/runtime_metrics.rs b/toolchain/stubs/codex-otel/tests/runtime_metrics.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/tests/runtime_metrics.rs
rename to toolchain/stubs/codex-otel/tests/runtime_metrics.rs
diff --git a/registry/native/stubs/codex-otel/tests/session_telemetry.rs b/toolchain/stubs/codex-otel/tests/session_telemetry.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/tests/session_telemetry.rs
rename to toolchain/stubs/codex-otel/tests/session_telemetry.rs
diff --git a/registry/native/stubs/codex-otel/tests/timer.rs b/toolchain/stubs/codex-otel/tests/timer.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/tests/timer.rs
rename to toolchain/stubs/codex-otel/tests/timer.rs
diff --git a/registry/native/stubs/codex-otel/tests/trace_context.rs b/toolchain/stubs/codex-otel/tests/trace_context.rs
similarity index 100%
rename from registry/native/stubs/codex-otel/tests/trace_context.rs
rename to toolchain/stubs/codex-otel/tests/trace_context.rs
diff --git a/registry/native/stubs/ctrlc/Cargo.toml b/toolchain/stubs/ctrlc/Cargo.toml
similarity index 100%
rename from registry/native/stubs/ctrlc/Cargo.toml
rename to toolchain/stubs/ctrlc/Cargo.toml
diff --git a/registry/native/stubs/ctrlc/src/lib.rs b/toolchain/stubs/ctrlc/src/lib.rs
similarity index 100%
rename from registry/native/stubs/ctrlc/src/lib.rs
rename to toolchain/stubs/ctrlc/src/lib.rs
diff --git a/registry/native/stubs/ctrlc/tests/registration.rs b/toolchain/stubs/ctrlc/tests/registration.rs
similarity index 100%
rename from registry/native/stubs/ctrlc/tests/registration.rs
rename to toolchain/stubs/ctrlc/tests/registration.rs
diff --git a/registry/native/stubs/hostname/Cargo.toml b/toolchain/stubs/hostname/Cargo.toml
similarity index 100%
rename from registry/native/stubs/hostname/Cargo.toml
rename to toolchain/stubs/hostname/Cargo.toml
diff --git a/registry/native/stubs/hostname/src/lib.rs b/toolchain/stubs/hostname/src/lib.rs
similarity index 100%
rename from registry/native/stubs/hostname/src/lib.rs
rename to toolchain/stubs/hostname/src/lib.rs
diff --git a/registry/native/stubs/hostname/tests/get.rs b/toolchain/stubs/hostname/tests/get.rs
similarity index 100%
rename from registry/native/stubs/hostname/tests/get.rs
rename to toolchain/stubs/hostname/tests/get.rs
diff --git a/registry/native/stubs/portable-pty-wasi/Cargo.toml b/toolchain/stubs/portable-pty-wasi/Cargo.toml
similarity index 100%
rename from registry/native/stubs/portable-pty-wasi/Cargo.toml
rename to toolchain/stubs/portable-pty-wasi/Cargo.toml
diff --git a/registry/native/stubs/portable-pty-wasi/src/cmdbuilder.rs b/toolchain/stubs/portable-pty-wasi/src/cmdbuilder.rs
similarity index 100%
rename from registry/native/stubs/portable-pty-wasi/src/cmdbuilder.rs
rename to toolchain/stubs/portable-pty-wasi/src/cmdbuilder.rs
diff --git a/registry/native/stubs/portable-pty-wasi/src/lib.rs b/toolchain/stubs/portable-pty-wasi/src/lib.rs
similarity index 100%
rename from registry/native/stubs/portable-pty-wasi/src/lib.rs
rename to toolchain/stubs/portable-pty-wasi/src/lib.rs
diff --git a/registry/native/stubs/portable-pty-wasi/src/serial.rs b/toolchain/stubs/portable-pty-wasi/src/serial.rs
similarity index 100%
rename from registry/native/stubs/portable-pty-wasi/src/serial.rs
rename to toolchain/stubs/portable-pty-wasi/src/serial.rs
diff --git a/registry/native/stubs/portable-pty-wasi/src/unix.rs b/toolchain/stubs/portable-pty-wasi/src/unix.rs
similarity index 100%
rename from registry/native/stubs/portable-pty-wasi/src/unix.rs
rename to toolchain/stubs/portable-pty-wasi/src/unix.rs
diff --git a/registry/native/stubs/portable-pty-wasi/src/wasi.rs b/toolchain/stubs/portable-pty-wasi/src/wasi.rs
similarity index 100%
rename from registry/native/stubs/portable-pty-wasi/src/wasi.rs
rename to toolchain/stubs/portable-pty-wasi/src/wasi.rs
diff --git a/registry/native/stubs/portable-pty-wasi/src/win/conpty.rs b/toolchain/stubs/portable-pty-wasi/src/win/conpty.rs
similarity index 100%
rename from registry/native/stubs/portable-pty-wasi/src/win/conpty.rs
rename to toolchain/stubs/portable-pty-wasi/src/win/conpty.rs
diff --git a/registry/native/stubs/portable-pty-wasi/src/win/mod.rs b/toolchain/stubs/portable-pty-wasi/src/win/mod.rs
similarity index 100%
rename from registry/native/stubs/portable-pty-wasi/src/win/mod.rs
rename to toolchain/stubs/portable-pty-wasi/src/win/mod.rs
diff --git a/registry/native/stubs/portable-pty-wasi/src/win/procthreadattr.rs b/toolchain/stubs/portable-pty-wasi/src/win/procthreadattr.rs
similarity index 100%
rename from registry/native/stubs/portable-pty-wasi/src/win/procthreadattr.rs
rename to toolchain/stubs/portable-pty-wasi/src/win/procthreadattr.rs
diff --git a/registry/native/stubs/portable-pty-wasi/src/win/psuedocon.rs b/toolchain/stubs/portable-pty-wasi/src/win/psuedocon.rs
similarity index 100%
rename from registry/native/stubs/portable-pty-wasi/src/win/psuedocon.rs
rename to toolchain/stubs/portable-pty-wasi/src/win/psuedocon.rs
diff --git a/registry/native/stubs/reqwest-shim/Cargo.toml b/toolchain/stubs/reqwest-shim/Cargo.toml
similarity index 100%
rename from registry/native/stubs/reqwest-shim/Cargo.toml
rename to toolchain/stubs/reqwest-shim/Cargo.toml
diff --git a/registry/native/stubs/reqwest-shim/src/lib.rs b/toolchain/stubs/reqwest-shim/src/lib.rs
similarity index 100%
rename from registry/native/stubs/reqwest-shim/src/lib.rs
rename to toolchain/stubs/reqwest-shim/src/lib.rs
diff --git a/registry/native/stubs/uucore/.cargo-ok b/toolchain/stubs/uucore/.cargo-ok
similarity index 100%
rename from registry/native/stubs/uucore/.cargo-ok
rename to toolchain/stubs/uucore/.cargo-ok
diff --git a/registry/native/stubs/uucore/.cargo_vcs_info.json b/toolchain/stubs/uucore/.cargo_vcs_info.json
similarity index 100%
rename from registry/native/stubs/uucore/.cargo_vcs_info.json
rename to toolchain/stubs/uucore/.cargo_vcs_info.json
diff --git a/registry/native/stubs/uucore/Cargo.lock b/toolchain/stubs/uucore/Cargo.lock
similarity index 100%
rename from registry/native/stubs/uucore/Cargo.lock
rename to toolchain/stubs/uucore/Cargo.lock
diff --git a/registry/native/stubs/uucore/Cargo.toml b/toolchain/stubs/uucore/Cargo.toml
similarity index 100%
rename from registry/native/stubs/uucore/Cargo.toml
rename to toolchain/stubs/uucore/Cargo.toml
diff --git a/registry/native/stubs/uucore/Cargo.toml.orig b/toolchain/stubs/uucore/Cargo.toml.orig
similarity index 100%
rename from registry/native/stubs/uucore/Cargo.toml.orig
rename to toolchain/stubs/uucore/Cargo.toml.orig
diff --git a/registry/native/stubs/uucore/LICENSE b/toolchain/stubs/uucore/LICENSE
similarity index 100%
rename from registry/native/stubs/uucore/LICENSE
rename to toolchain/stubs/uucore/LICENSE
diff --git a/registry/native/stubs/uucore/build.rs b/toolchain/stubs/uucore/build.rs
similarity index 100%
rename from registry/native/stubs/uucore/build.rs
rename to toolchain/stubs/uucore/build.rs
diff --git a/registry/native/stubs/uucore/locales/en-US.ftl b/toolchain/stubs/uucore/locales/en-US.ftl
similarity index 100%
rename from registry/native/stubs/uucore/locales/en-US.ftl
rename to toolchain/stubs/uucore/locales/en-US.ftl
diff --git a/registry/native/stubs/uucore/locales/fr-FR.ftl b/toolchain/stubs/uucore/locales/fr-FR.ftl
similarity index 100%
rename from registry/native/stubs/uucore/locales/fr-FR.ftl
rename to toolchain/stubs/uucore/locales/fr-FR.ftl
diff --git a/registry/native/stubs/uucore/src/lib/features.rs b/toolchain/stubs/uucore/src/lib/features.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features.rs
rename to toolchain/stubs/uucore/src/lib/features.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/backup_control.rs b/toolchain/stubs/uucore/src/lib/features/backup_control.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/backup_control.rs
rename to toolchain/stubs/uucore/src/lib/features/backup_control.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/benchmark.rs b/toolchain/stubs/uucore/src/lib/features/benchmark.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/benchmark.rs
rename to toolchain/stubs/uucore/src/lib/features/benchmark.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/buf_copy.rs b/toolchain/stubs/uucore/src/lib/features/buf_copy.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/buf_copy.rs
rename to toolchain/stubs/uucore/src/lib/features/buf_copy.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/buf_copy/common.rs b/toolchain/stubs/uucore/src/lib/features/buf_copy/common.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/buf_copy/common.rs
rename to toolchain/stubs/uucore/src/lib/features/buf_copy/common.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/buf_copy/linux.rs b/toolchain/stubs/uucore/src/lib/features/buf_copy/linux.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/buf_copy/linux.rs
rename to toolchain/stubs/uucore/src/lib/features/buf_copy/linux.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/buf_copy/other.rs b/toolchain/stubs/uucore/src/lib/features/buf_copy/other.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/buf_copy/other.rs
rename to toolchain/stubs/uucore/src/lib/features/buf_copy/other.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/checksum/compute.rs b/toolchain/stubs/uucore/src/lib/features/checksum/compute.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/checksum/compute.rs
rename to toolchain/stubs/uucore/src/lib/features/checksum/compute.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/checksum/mod.rs b/toolchain/stubs/uucore/src/lib/features/checksum/mod.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/checksum/mod.rs
rename to toolchain/stubs/uucore/src/lib/features/checksum/mod.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/checksum/validate.rs b/toolchain/stubs/uucore/src/lib/features/checksum/validate.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/checksum/validate.rs
rename to toolchain/stubs/uucore/src/lib/features/checksum/validate.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/colors.rs b/toolchain/stubs/uucore/src/lib/features/colors.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/colors.rs
rename to toolchain/stubs/uucore/src/lib/features/colors.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/encoding.rs b/toolchain/stubs/uucore/src/lib/features/encoding.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/encoding.rs
rename to toolchain/stubs/uucore/src/lib/features/encoding.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/entries.rs b/toolchain/stubs/uucore/src/lib/features/entries.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/entries.rs
rename to toolchain/stubs/uucore/src/lib/features/entries.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/extendedbigdecimal.rs b/toolchain/stubs/uucore/src/lib/features/extendedbigdecimal.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/extendedbigdecimal.rs
rename to toolchain/stubs/uucore/src/lib/features/extendedbigdecimal.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/fast_inc.rs b/toolchain/stubs/uucore/src/lib/features/fast_inc.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/fast_inc.rs
rename to toolchain/stubs/uucore/src/lib/features/fast_inc.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/format/argument.rs b/toolchain/stubs/uucore/src/lib/features/format/argument.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/format/argument.rs
rename to toolchain/stubs/uucore/src/lib/features/format/argument.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/format/escape.rs b/toolchain/stubs/uucore/src/lib/features/format/escape.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/format/escape.rs
rename to toolchain/stubs/uucore/src/lib/features/format/escape.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/format/human.rs b/toolchain/stubs/uucore/src/lib/features/format/human.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/format/human.rs
rename to toolchain/stubs/uucore/src/lib/features/format/human.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/format/mod.rs b/toolchain/stubs/uucore/src/lib/features/format/mod.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/format/mod.rs
rename to toolchain/stubs/uucore/src/lib/features/format/mod.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/format/num_format.rs b/toolchain/stubs/uucore/src/lib/features/format/num_format.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/format/num_format.rs
rename to toolchain/stubs/uucore/src/lib/features/format/num_format.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/format/spec.rs b/toolchain/stubs/uucore/src/lib/features/format/spec.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/format/spec.rs
rename to toolchain/stubs/uucore/src/lib/features/format/spec.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/fs.rs b/toolchain/stubs/uucore/src/lib/features/fs.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/fs.rs
rename to toolchain/stubs/uucore/src/lib/features/fs.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/fsext.rs b/toolchain/stubs/uucore/src/lib/features/fsext.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/fsext.rs
rename to toolchain/stubs/uucore/src/lib/features/fsext.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/fsxattr.rs b/toolchain/stubs/uucore/src/lib/features/fsxattr.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/fsxattr.rs
rename to toolchain/stubs/uucore/src/lib/features/fsxattr.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/hardware.rs b/toolchain/stubs/uucore/src/lib/features/hardware.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/hardware.rs
rename to toolchain/stubs/uucore/src/lib/features/hardware.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/i18n/charmap.rs b/toolchain/stubs/uucore/src/lib/features/i18n/charmap.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/i18n/charmap.rs
rename to toolchain/stubs/uucore/src/lib/features/i18n/charmap.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/i18n/collator.rs b/toolchain/stubs/uucore/src/lib/features/i18n/collator.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/i18n/collator.rs
rename to toolchain/stubs/uucore/src/lib/features/i18n/collator.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/i18n/datetime.rs b/toolchain/stubs/uucore/src/lib/features/i18n/datetime.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/i18n/datetime.rs
rename to toolchain/stubs/uucore/src/lib/features/i18n/datetime.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/i18n/decimal.rs b/toolchain/stubs/uucore/src/lib/features/i18n/decimal.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/i18n/decimal.rs
rename to toolchain/stubs/uucore/src/lib/features/i18n/decimal.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/i18n/mod.rs b/toolchain/stubs/uucore/src/lib/features/i18n/mod.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/i18n/mod.rs
rename to toolchain/stubs/uucore/src/lib/features/i18n/mod.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/lines.rs b/toolchain/stubs/uucore/src/lib/features/lines.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/lines.rs
rename to toolchain/stubs/uucore/src/lib/features/lines.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/mode.rs b/toolchain/stubs/uucore/src/lib/features/mode.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/mode.rs
rename to toolchain/stubs/uucore/src/lib/features/mode.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/parser/mod.rs b/toolchain/stubs/uucore/src/lib/features/parser/mod.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/parser/mod.rs
rename to toolchain/stubs/uucore/src/lib/features/parser/mod.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/parser/num_parser.rs b/toolchain/stubs/uucore/src/lib/features/parser/num_parser.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/parser/num_parser.rs
rename to toolchain/stubs/uucore/src/lib/features/parser/num_parser.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/parser/parse_glob.rs b/toolchain/stubs/uucore/src/lib/features/parser/parse_glob.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/parser/parse_glob.rs
rename to toolchain/stubs/uucore/src/lib/features/parser/parse_glob.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/parser/parse_signed_num.rs b/toolchain/stubs/uucore/src/lib/features/parser/parse_signed_num.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/parser/parse_signed_num.rs
rename to toolchain/stubs/uucore/src/lib/features/parser/parse_signed_num.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/parser/parse_size.rs b/toolchain/stubs/uucore/src/lib/features/parser/parse_size.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/parser/parse_size.rs
rename to toolchain/stubs/uucore/src/lib/features/parser/parse_size.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/parser/parse_time.rs b/toolchain/stubs/uucore/src/lib/features/parser/parse_time.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/parser/parse_time.rs
rename to toolchain/stubs/uucore/src/lib/features/parser/parse_time.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/parser/shortcut_value_parser.rs b/toolchain/stubs/uucore/src/lib/features/parser/shortcut_value_parser.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/parser/shortcut_value_parser.rs
rename to toolchain/stubs/uucore/src/lib/features/parser/shortcut_value_parser.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/perms.rs b/toolchain/stubs/uucore/src/lib/features/perms.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/perms.rs
rename to toolchain/stubs/uucore/src/lib/features/perms.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/pipes.rs b/toolchain/stubs/uucore/src/lib/features/pipes.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/pipes.rs
rename to toolchain/stubs/uucore/src/lib/features/pipes.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/proc_info.rs b/toolchain/stubs/uucore/src/lib/features/proc_info.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/proc_info.rs
rename to toolchain/stubs/uucore/src/lib/features/proc_info.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/process.rs b/toolchain/stubs/uucore/src/lib/features/process.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/process.rs
rename to toolchain/stubs/uucore/src/lib/features/process.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/quoting_style/c_quoter.rs b/toolchain/stubs/uucore/src/lib/features/quoting_style/c_quoter.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/quoting_style/c_quoter.rs
rename to toolchain/stubs/uucore/src/lib/features/quoting_style/c_quoter.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/quoting_style/escaped_char.rs b/toolchain/stubs/uucore/src/lib/features/quoting_style/escaped_char.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/quoting_style/escaped_char.rs
rename to toolchain/stubs/uucore/src/lib/features/quoting_style/escaped_char.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/quoting_style/literal_quoter.rs b/toolchain/stubs/uucore/src/lib/features/quoting_style/literal_quoter.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/quoting_style/literal_quoter.rs
rename to toolchain/stubs/uucore/src/lib/features/quoting_style/literal_quoter.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/quoting_style/mod.rs b/toolchain/stubs/uucore/src/lib/features/quoting_style/mod.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/quoting_style/mod.rs
rename to toolchain/stubs/uucore/src/lib/features/quoting_style/mod.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/quoting_style/shell_quoter.rs b/toolchain/stubs/uucore/src/lib/features/quoting_style/shell_quoter.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/quoting_style/shell_quoter.rs
rename to toolchain/stubs/uucore/src/lib/features/quoting_style/shell_quoter.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/ranges.rs b/toolchain/stubs/uucore/src/lib/features/ranges.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/ranges.rs
rename to toolchain/stubs/uucore/src/lib/features/ranges.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/ringbuffer.rs b/toolchain/stubs/uucore/src/lib/features/ringbuffer.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/ringbuffer.rs
rename to toolchain/stubs/uucore/src/lib/features/ringbuffer.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/safe_traversal.rs b/toolchain/stubs/uucore/src/lib/features/safe_traversal.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/safe_traversal.rs
rename to toolchain/stubs/uucore/src/lib/features/safe_traversal.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/selinux.rs b/toolchain/stubs/uucore/src/lib/features/selinux.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/selinux.rs
rename to toolchain/stubs/uucore/src/lib/features/selinux.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/signals.rs b/toolchain/stubs/uucore/src/lib/features/signals.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/signals.rs
rename to toolchain/stubs/uucore/src/lib/features/signals.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/smack.rs b/toolchain/stubs/uucore/src/lib/features/smack.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/smack.rs
rename to toolchain/stubs/uucore/src/lib/features/smack.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/sum.rs b/toolchain/stubs/uucore/src/lib/features/sum.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/sum.rs
rename to toolchain/stubs/uucore/src/lib/features/sum.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/systemd_logind.rs b/toolchain/stubs/uucore/src/lib/features/systemd_logind.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/systemd_logind.rs
rename to toolchain/stubs/uucore/src/lib/features/systemd_logind.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/time.rs b/toolchain/stubs/uucore/src/lib/features/time.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/time.rs
rename to toolchain/stubs/uucore/src/lib/features/time.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/tty.rs b/toolchain/stubs/uucore/src/lib/features/tty.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/tty.rs
rename to toolchain/stubs/uucore/src/lib/features/tty.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/update_control.rs b/toolchain/stubs/uucore/src/lib/features/update_control.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/update_control.rs
rename to toolchain/stubs/uucore/src/lib/features/update_control.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/uptime.rs b/toolchain/stubs/uucore/src/lib/features/uptime.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/uptime.rs
rename to toolchain/stubs/uucore/src/lib/features/uptime.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/utmpx.rs b/toolchain/stubs/uucore/src/lib/features/utmpx.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/utmpx.rs
rename to toolchain/stubs/uucore/src/lib/features/utmpx.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/version_cmp.rs b/toolchain/stubs/uucore/src/lib/features/version_cmp.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/version_cmp.rs
rename to toolchain/stubs/uucore/src/lib/features/version_cmp.rs
diff --git a/registry/native/stubs/uucore/src/lib/features/wide.rs b/toolchain/stubs/uucore/src/lib/features/wide.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/features/wide.rs
rename to toolchain/stubs/uucore/src/lib/features/wide.rs
diff --git a/registry/native/stubs/uucore/src/lib/lib.rs b/toolchain/stubs/uucore/src/lib/lib.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/lib.rs
rename to toolchain/stubs/uucore/src/lib/lib.rs
diff --git a/registry/native/stubs/uucore/src/lib/macros.rs b/toolchain/stubs/uucore/src/lib/macros.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/macros.rs
rename to toolchain/stubs/uucore/src/lib/macros.rs
diff --git a/registry/native/stubs/uucore/src/lib/mods.rs b/toolchain/stubs/uucore/src/lib/mods.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/mods.rs
rename to toolchain/stubs/uucore/src/lib/mods.rs
diff --git a/registry/native/stubs/uucore/src/lib/mods/clap_localization.rs b/toolchain/stubs/uucore/src/lib/mods/clap_localization.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/mods/clap_localization.rs
rename to toolchain/stubs/uucore/src/lib/mods/clap_localization.rs
diff --git a/registry/native/stubs/uucore/src/lib/mods/display.rs b/toolchain/stubs/uucore/src/lib/mods/display.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/mods/display.rs
rename to toolchain/stubs/uucore/src/lib/mods/display.rs
diff --git a/registry/native/stubs/uucore/src/lib/mods/error.rs b/toolchain/stubs/uucore/src/lib/mods/error.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/mods/error.rs
rename to toolchain/stubs/uucore/src/lib/mods/error.rs
diff --git a/registry/native/stubs/uucore/src/lib/mods/io.rs b/toolchain/stubs/uucore/src/lib/mods/io.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/mods/io.rs
rename to toolchain/stubs/uucore/src/lib/mods/io.rs
diff --git a/registry/native/stubs/uucore/src/lib/mods/line_ending.rs b/toolchain/stubs/uucore/src/lib/mods/line_ending.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/mods/line_ending.rs
rename to toolchain/stubs/uucore/src/lib/mods/line_ending.rs
diff --git a/registry/native/stubs/uucore/src/lib/mods/locale.rs b/toolchain/stubs/uucore/src/lib/mods/locale.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/mods/locale.rs
rename to toolchain/stubs/uucore/src/lib/mods/locale.rs
diff --git a/registry/native/stubs/uucore/src/lib/mods/os.rs b/toolchain/stubs/uucore/src/lib/mods/os.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/mods/os.rs
rename to toolchain/stubs/uucore/src/lib/mods/os.rs
diff --git a/registry/native/stubs/uucore/src/lib/mods/panic.rs b/toolchain/stubs/uucore/src/lib/mods/panic.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/mods/panic.rs
rename to toolchain/stubs/uucore/src/lib/mods/panic.rs
diff --git a/registry/native/stubs/uucore/src/lib/mods/posix.rs b/toolchain/stubs/uucore/src/lib/mods/posix.rs
similarity index 100%
rename from registry/native/stubs/uucore/src/lib/mods/posix.rs
rename to toolchain/stubs/uucore/src/lib/mods/posix.rs
diff --git a/registry/native/c/programs/args.c b/toolchain/test-programs/args.c
similarity index 100%
rename from registry/native/c/programs/args.c
rename to toolchain/test-programs/args.c
diff --git a/registry/native/c/programs/c-cp.c b/toolchain/test-programs/c-cp.c
similarity index 100%
rename from registry/native/c/programs/c-cp.c
rename to toolchain/test-programs/c-cp.c
diff --git a/registry/native/c/programs/c-find.c b/toolchain/test-programs/c-find.c
similarity index 100%
rename from registry/native/c/programs/c-find.c
rename to toolchain/test-programs/c-find.c
diff --git a/registry/native/c/programs/c-ls.c b/toolchain/test-programs/c-ls.c
similarity index 100%
rename from registry/native/c/programs/c-ls.c
rename to toolchain/test-programs/c-ls.c
diff --git a/registry/native/c/programs/c-tree.c b/toolchain/test-programs/c-tree.c
similarity index 100%
rename from registry/native/c/programs/c-tree.c
rename to toolchain/test-programs/c-tree.c
diff --git a/registry/native/c/programs/cat.c b/toolchain/test-programs/cat.c
similarity index 100%
rename from registry/native/c/programs/cat.c
rename to toolchain/test-programs/cat.c
diff --git a/registry/native/c/programs/delayed_kill.c b/toolchain/test-programs/delayed_kill.c
similarity index 100%
rename from registry/native/c/programs/delayed_kill.c
rename to toolchain/test-programs/delayed_kill.c
diff --git a/registry/native/c/programs/delayed_tcp_echo.c b/toolchain/test-programs/delayed_tcp_echo.c
similarity index 100%
rename from registry/native/c/programs/delayed_tcp_echo.c
rename to toolchain/test-programs/delayed_tcp_echo.c
diff --git a/registry/native/c/programs/dns_lookup.c b/toolchain/test-programs/dns_lookup.c
similarity index 100%
rename from registry/native/c/programs/dns_lookup.c
rename to toolchain/test-programs/dns_lookup.c
diff --git a/registry/native/c/programs/dup_test.c b/toolchain/test-programs/dup_test.c
similarity index 100%
rename from registry/native/c/programs/dup_test.c
rename to toolchain/test-programs/dup_test.c
diff --git a/registry/native/c/programs/env.c b/toolchain/test-programs/env.c
similarity index 100%
rename from registry/native/c/programs/env.c
rename to toolchain/test-programs/env.c
diff --git a/registry/native/c/programs/exitcode.c b/toolchain/test-programs/exitcode.c
similarity index 100%
rename from registry/native/c/programs/exitcode.c
rename to toolchain/test-programs/exitcode.c
diff --git a/registry/native/c/programs/fread.c b/toolchain/test-programs/fread.c
similarity index 100%
rename from registry/native/c/programs/fread.c
rename to toolchain/test-programs/fread.c
diff --git a/registry/native/c/programs/fs_probe.c b/toolchain/test-programs/fs_probe.c
similarity index 100%
rename from registry/native/c/programs/fs_probe.c
rename to toolchain/test-programs/fs_probe.c
diff --git a/registry/native/c/programs/fwrite.c b/toolchain/test-programs/fwrite.c
similarity index 100%
rename from registry/native/c/programs/fwrite.c
rename to toolchain/test-programs/fwrite.c
diff --git a/registry/native/c/programs/getpid_test.c b/toolchain/test-programs/getpid_test.c
similarity index 100%
rename from registry/native/c/programs/getpid_test.c
rename to toolchain/test-programs/getpid_test.c
diff --git a/registry/native/c/programs/getppid_test.c b/toolchain/test-programs/getppid_test.c
similarity index 100%
rename from registry/native/c/programs/getppid_test.c
rename to toolchain/test-programs/getppid_test.c
diff --git a/registry/native/c/programs/getppid_verify.c b/toolchain/test-programs/getppid_verify.c
similarity index 100%
rename from registry/native/c/programs/getppid_verify.c
rename to toolchain/test-programs/getppid_verify.c
diff --git a/registry/native/c/programs/getpwuid_test.c b/toolchain/test-programs/getpwuid_test.c
similarity index 100%
rename from registry/native/c/programs/getpwuid_test.c
rename to toolchain/test-programs/getpwuid_test.c
diff --git a/registry/native/c/programs/hello.c b/toolchain/test-programs/hello.c
similarity index 100%
rename from registry/native/c/programs/hello.c
rename to toolchain/test-programs/hello.c
diff --git a/registry/native/c/programs/http_get_test.c b/toolchain/test-programs/http_get_test.c
similarity index 100%
rename from registry/native/c/programs/http_get_test.c
rename to toolchain/test-programs/http_get_test.c
diff --git a/registry/native/c/programs/http_server.c b/toolchain/test-programs/http_server.c
similarity index 100%
rename from registry/native/c/programs/http_server.c
rename to toolchain/test-programs/http_server.c
diff --git a/registry/native/c/programs/isatty_test.c b/toolchain/test-programs/isatty_test.c
similarity index 100%
rename from registry/native/c/programs/isatty_test.c
rename to toolchain/test-programs/isatty_test.c
diff --git a/registry/native/c/programs/json_parse.c b/toolchain/test-programs/json_parse.c
similarity index 100%
rename from registry/native/c/programs/json_parse.c
rename to toolchain/test-programs/json_parse.c
diff --git a/registry/native/c/programs/kill_child.c b/toolchain/test-programs/kill_child.c
similarity index 100%
rename from registry/native/c/programs/kill_child.c
rename to toolchain/test-programs/kill_child.c
diff --git a/registry/native/c/programs/pipe_edge.c b/toolchain/test-programs/pipe_edge.c
similarity index 100%
rename from registry/native/c/programs/pipe_edge.c
rename to toolchain/test-programs/pipe_edge.c
diff --git a/registry/native/c/programs/pipe_test.c b/toolchain/test-programs/pipe_test.c
similarity index 100%
rename from registry/native/c/programs/pipe_test.c
rename to toolchain/test-programs/pipe_test.c
diff --git a/registry/native/c/programs/pipeline.c b/toolchain/test-programs/pipeline.c
similarity index 100%
rename from registry/native/c/programs/pipeline.c
rename to toolchain/test-programs/pipeline.c
diff --git a/registry/native/c/programs/pread_pwrite_access.c b/toolchain/test-programs/pread_pwrite_access.c
similarity index 100%
rename from registry/native/c/programs/pread_pwrite_access.c
rename to toolchain/test-programs/pread_pwrite_access.c
diff --git a/registry/native/c/programs/pty_probe.c b/toolchain/test-programs/pty_probe.c
similarity index 100%
rename from registry/native/c/programs/pty_probe.c
rename to toolchain/test-programs/pty_probe.c
diff --git a/registry/native/c/programs/sha256.c b/toolchain/test-programs/sha256.c
similarity index 100%
rename from registry/native/c/programs/sha256.c
rename to toolchain/test-programs/sha256.c
diff --git a/registry/native/c/programs/sigaction_behavior.c b/toolchain/test-programs/sigaction_behavior.c
similarity index 100%
rename from registry/native/c/programs/sigaction_behavior.c
rename to toolchain/test-programs/sigaction_behavior.c
diff --git a/registry/native/c/programs/sigaction_self.c b/toolchain/test-programs/sigaction_self.c
similarity index 100%
rename from registry/native/c/programs/sigaction_self.c
rename to toolchain/test-programs/sigaction_self.c
diff --git a/registry/native/c/programs/signal_handler.c b/toolchain/test-programs/signal_handler.c
similarity index 100%
rename from registry/native/c/programs/signal_handler.c
rename to toolchain/test-programs/signal_handler.c
diff --git a/registry/native/c/programs/signal_tests.c b/toolchain/test-programs/signal_tests.c
similarity index 100%
rename from registry/native/c/programs/signal_tests.c
rename to toolchain/test-programs/signal_tests.c
diff --git a/registry/native/c/programs/sleep_test.c b/toolchain/test-programs/sleep_test.c
similarity index 100%
rename from registry/native/c/programs/sleep_test.c
rename to toolchain/test-programs/sleep_test.c
diff --git a/registry/native/c/programs/sort.c b/toolchain/test-programs/sort.c
similarity index 100%
rename from registry/native/c/programs/sort.c
rename to toolchain/test-programs/sort.c
diff --git a/registry/native/c/programs/spawn_child.c b/toolchain/test-programs/spawn_child.c
similarity index 100%
rename from registry/native/c/programs/spawn_child.c
rename to toolchain/test-programs/spawn_child.c
diff --git a/registry/native/c/programs/spawn_exit_code.c b/toolchain/test-programs/spawn_exit_code.c
similarity index 100%
rename from registry/native/c/programs/spawn_exit_code.c
rename to toolchain/test-programs/spawn_exit_code.c
diff --git a/registry/native/c/programs/sqlite3_mem.c b/toolchain/test-programs/sqlite3_mem.c
similarity index 100%
rename from registry/native/c/programs/sqlite3_mem.c
rename to toolchain/test-programs/sqlite3_mem.c
diff --git a/registry/native/c/programs/syscall_coverage.c b/toolchain/test-programs/syscall_coverage.c
similarity index 100%
rename from registry/native/c/programs/syscall_coverage.c
rename to toolchain/test-programs/syscall_coverage.c
diff --git a/registry/native/c/programs/tcp_accept_spawn.c b/toolchain/test-programs/tcp_accept_spawn.c
similarity index 100%
rename from registry/native/c/programs/tcp_accept_spawn.c
rename to toolchain/test-programs/tcp_accept_spawn.c
diff --git a/registry/native/c/programs/tcp_echo.c b/toolchain/test-programs/tcp_echo.c
similarity index 100%
rename from registry/native/c/programs/tcp_echo.c
rename to toolchain/test-programs/tcp_echo.c
diff --git a/registry/native/c/programs/tcp_server.c b/toolchain/test-programs/tcp_server.c
similarity index 100%
rename from registry/native/c/programs/tcp_server.c
rename to toolchain/test-programs/tcp_server.c
diff --git a/registry/native/c/programs/udp_echo.c b/toolchain/test-programs/udp_echo.c
similarity index 100%
rename from registry/native/c/programs/udp_echo.c
rename to toolchain/test-programs/udp_echo.c
diff --git a/registry/native/c/programs/unix_socket.c b/toolchain/test-programs/unix_socket.c
similarity index 100%
rename from registry/native/c/programs/unix_socket.c
rename to toolchain/test-programs/unix_socket.c
diff --git a/registry/native/c/programs/userinfo.c b/toolchain/test-programs/userinfo.c
similarity index 100%
rename from registry/native/c/programs/userinfo.c
rename to toolchain/test-programs/userinfo.c
diff --git a/registry/native/c/programs/waitpid_edge.c b/toolchain/test-programs/waitpid_edge.c
similarity index 100%
rename from registry/native/c/programs/waitpid_edge.c
rename to toolchain/test-programs/waitpid_edge.c
diff --git a/registry/native/c/programs/waitpid_return.c b/toolchain/test-programs/waitpid_return.c
similarity index 100%
rename from registry/native/c/programs/waitpid_return.c
rename to toolchain/test-programs/waitpid_return.c
diff --git a/registry/native/c/programs/wc.c b/toolchain/test-programs/wc.c
similarity index 100%
rename from registry/native/c/programs/wc.c
rename to toolchain/test-programs/wc.c
diff --git a/turbo.json b/turbo.json
index 754ab26ac4..13289a2fb9 100644
--- a/turbo.json
+++ b/turbo.json
@@ -23,7 +23,14 @@
]
},
"test": {
- "inputs": ["src/**", "tests/**", "package.json"],
+ "inputs": [
+ "src/**",
+ "tests/**",
+ "software/**/test/**",
+ "native/tests/**",
+ "scripts/**",
+ "package.json"
+ ],
"dependsOn": ["^build", "check-types"]
},
"@rivet-dev/agentos-sidecar#build": {
diff --git a/website/package.json b/website/package.json
index 9413f4b322..07e6853f0b 100644
--- a/website/package.json
+++ b/website/package.json
@@ -1,5 +1,5 @@
{
- "name": "@agentos/website",
+ "name": "@rivet-dev/agentos-website",
"private": true,
"version": "0.0.1",
"license": "Apache-2.0",
diff --git a/website/public/docs/docs/agents/custom.md b/website/public/docs/docs/agents/custom.md
index 331472fd45..0001730ce7 100644
--- a/website/public/docs/docs/agents/custom.md
+++ b/website/public/docs/docs/agents/custom.md
@@ -57,7 +57,7 @@ registry.start();
See [Sessions](/docs/sessions) for creating and driving sessions. Package your adapter with `agentos-toolchain pack --agent my-agent-acp` so its dependencies are bundled into the self-contained package directory and the `agent` block (naming the `bin/` ACP entrypoint) is written into the package's `agentos-package.json`, rather than shipping it as a loose file.
-All built-in agents are defined exactly this way. Browse them for reference on [GitHub](https://github.com/rivet-dev/agentos/tree/main/registry/agent).
+All built-in agents are defined exactly this way. Browse them for reference on [GitHub](https://github.com/rivet-dev/agentos/tree/main/software).
## Read more
@@ -66,4 +66,4 @@ All built-in agents are defined exactly this way. Browse them for reference on [
## Debugging
-When a custom agent exits mid-turn or a tool call fails, capture the agent's stderr with the `onAgentStderr` hook on `AgentOs.create()`. The agent uses stdout for ACP, so stderr carries its logs and crash output. See [Debugging](/docs/debugging) for that hook and the runtime (sidecar) logs.
\ No newline at end of file
+When a custom agent exits mid-turn or a tool call fails, capture the agent's stderr with the `onAgentStderr` hook on `AgentOs.create()`. The agent uses stdout for ACP, so stderr carries its logs and crash output. See [Debugging](/docs/debugging) for that hook and the runtime (sidecar) logs.
diff --git a/website/public/docs/docs/custom-software/building-wasm.md b/website/public/docs/docs/custom-software/building-wasm.md
index 6bff61cf32..f8da1d8d60 100644
--- a/website/public/docs/docs/custom-software/building-wasm.md
+++ b/website/public/docs/docs/custom-software/building-wasm.md
@@ -1,70 +1,59 @@
# Building Binaries
-Compile WASM command binaries for agentOS from source in the secure-exec registry.
+Compile WASM command binaries for agentOS from source.
-WASM command packages ship **compiled `.wasm` binaries** in their `bin/` that run inside the VM as guest commands. The binaries are build artifacts and are not checked into git, so to add or change a command you build it from source in the **secure-exec registry**.
+WASM command packages ship **compiled `.wasm` binaries** in their `bin/` that run inside the VM as guest commands. The binaries are build artifacts and are not checked into git, so to add or change a command you build it from source in the AgentOS repo.
You only need this to author new commands. To use existing ones, install the published package (e.g. `@agentos-software/ripgrep`) and pass it to `software`. See [using the registry](#using-the-registry) below.
## Where it lives
-Command source and packages live under `registry/` in [secure-exec](https://github.com/rivet-dev/secure-exec/tree/main/registry):
+Command packages live under top-level `software/`, while shared build infrastructure lives under `toolchain/`:
-- **`registry/native/crates/`**: the Rust source for the WASM commands.
-- **`registry/native/c/`**: the C source for the WASM commands.
-- **`registry/software//`**: the npm package for each command set (`@agentos-software/`). It exports a `{ packageDir }` descriptor pointing at the self-contained package directory (`package.json` + a `bin/` of compiled `.wasm` binaries + a generated `agentos-package.json`).
+- **`software//native/crates/cmd-/`**: the Rust source for each command — a cargo package named `cmd-` that emits a `` binary.
+- **`software//native/c/`**: the C source for C-built package commands.
+- **`software//`**: the npm package for each command set (`@agentos-software/`). It exports a `{ packagePath }` descriptor pointing at the packed `dist/package.aospkg`, and declares which binaries it ships in its `agentos-package.json` (`commands`, plus optional `aliases` and `stubs`).
## Build
-Build everything from `registry/`:
+Everything runs through `just` recipes at the AgentOS repo root:
```bash
-make build # build all WASM binaries + the TypeScript packages
-make copy-wasm # copy binaries into each package's wasm/ directory
-make test
+just toolchain-build # compile ALL native wasm binaries (slow; once per checkout)
+just toolchain-cmd sh # recompile ONE command (cargo package cmd-sh)
+just software-build # stage + assemble every software package
+just software-build ripgrep # ... or just one
```
-`copy-wasm` maps each compiled command into its `registry/software//` package, which the assembled `{ packageDir }` package then exposes on `$PATH`. The two toolchains build independently:
+The native build compiles each command for `wasm32-wasip1` with the pinned **nightly** toolchain from `rust-toolchain.toml` (the build vendors and patches `std` for WASI), optimizes with `wasm-opt`, and drops the binaries in `toolchain/target/wasm32-wasip1/release/commands/`. C-based commands (e.g. `sqlite3`, `unzip`, `wget`, `zip`) compile with a **wasi-sdk** clang toolchain via `make -C toolchain/c`.
-### Rust
-
-Most commands are Rust. The source lives in `registry/native/crates/` and compiles for `wasm32-wasip1` with the pinned **nightly** toolchain from `rust-toolchain.toml` (the build vendors and patches `std` for WASI). Build just the Rust commands:
-
-```bash
-make build-wasm-rust # runs: cd native && make wasm
-```
-
-### C
-
-C-based commands (e.g. `sqlite3`, `unzip`, `wget`, `zip`) live in `registry/native/c/` and compile with a **wasi-sdk** clang toolchain. Build just the C commands:
-
-```bash
-make build-wasm-c # runs: cd native/c && make programs && make install
-```
+Each package's build then runs the **agentos-toolchain** lifecycle: `agentos-toolchain stage` copies the binaries listed in the package's `agentos-package.json` into its `bin/`, and `agentos-toolchain build` assembles the clean `dist/package/` dir with a `bin` map in its `package.json` and packs it into `dist/package.aospkg` (the `{ packagePath }` target).
## Add a new command package
-1. Add the command source under `registry/native/crates/` (Rust) or `registry/native/c/` (C).
-2. Create `registry/software//` as an `@agentos-software/` npm package that exports a `{ packageDir }` descriptor pointing at its package directory.
-3. Add a copy rule to the `copy-wasm` target mapping the built binary into `registry/software//wasm/`.
+1. Add the command source as `software//native/crates/cmd-/` (cargo package `cmd-`; Rust) or under `software//native/c/` (C).
+2. Create `software//` as an `@agentos-software/` npm package that exports a `{ packagePath }` descriptor pointing at `dist/package.aospkg`.
+3. Declare the shipped binaries in its `agentos-package.json`: `{ "commands": [""] }` (plus `aliases`/`stubs` if needed).
4. If it belongs in a meta-package (e.g. `common` or `build-essential`), add it there.
-5. Verify with `make copy-wasm && make build && make test`.
+5. Verify with `just toolchain-cmd && just software-build ` and `pnpm --filter './software/*' test`.
## Let an agent build it
This is a mechanical, well-scoped task, so you can hand it to a coding agent. A prompt like:
```text
-Add a WASM command package for `` to the secure-exec registry:
-- put the Rust source under registry/native/crates/ (or C under registry/native/c/),
-- create registry/software// as an @agentos-software/ npm
- package that exports a { packageDir } descriptor,
-- add a copy-wasm rule mapping the built binary into its wasm/ directory,
-then run `make copy-wasm && make build && make test` and fix any failures.
+Add a WASM command package for `` to AgentOS:
+- put the Rust source at software//native/crates/cmd-/ as a cargo
+ package named cmd-,
+- create software// as an @agentos-software/ npm
+ package that exports a { packagePath } descriptor and declares the command in
+ its agentos-package.json,
+then run `just toolchain-cmd && just software-build `
+and `pnpm --filter './software/*' test`, and fix any failures.
```
## Using the registry
-Install a published package and pass it to `software`. Registry WASM packages are `{ packageDir }` descriptors — import and pass them directly:
+Install a published package and pass it to `software`. Registry WASM packages are `{ packagePath }` descriptors — import and pass them directly:
-Meta-packages bundle a full set, e.g. `@agentos-software/common` (coreutils, sed, grep, gawk, findutils, diffutils, tar, gzip). Run the commands from the client; see [Processes & Shell](/docs/processes). Browse the full catalog on the [Registry](/registry), and see the package descriptor in [Software Definition](/docs/custom-software/definition).
\ No newline at end of file
+Meta-packages bundle a full set, e.g. `@agentos-software/common` (coreutils, sed, grep, gawk, findutils, diffutils, tar, gzip). Run the commands from the client; see [Processes & Shell](/docs/processes). Browse the full catalog on the [Registry](/registry), and see the package descriptor in [Software Definition](/docs/custom-software/definition).
diff --git a/website/scripts/gen-registry.mjs b/website/scripts/gen-registry.mjs
index 35d1ee261e..cc852dcd85 100644
--- a/website/scripts/gen-registry.mjs
+++ b/website/scripts/gen-registry.mjs
@@ -1,14 +1,14 @@
-// Generates src/generated/registry.json from the monorepo's registry/ tree.
+// Generates src/generated/registry.json from the monorepo's software/ catalog.
//
// A package is listed iff its agentos-package.json has a `registry` block with
// both `title` and `description` — no fallbacks. Everything else is derived:
// slug from the directory name (overridable via `registry.slug`), type from
-// the parent dir (agent/software), npm package name from package.json, and
+// manifest `kind` (agent/software), npm package name from package.json, and
// for agents the agent id from the manifest `name` plus docs status when
// `registry.docsHref` is set. `featured` is deliberately not part of the
// block — the website hardcodes featured slugs in src/data/registry.ts.
//
-// The output is committed. When registry/ is not present (e.g. the website
+// The output is committed. When software/ is not present (e.g. the website
// Docker build, whose context is website/ only), the committed file is used
// as-is.
import { existsSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
@@ -16,61 +16,59 @@ import { dirname, join } from "node:path";
import { fileURLToPath } from "node:url";
const websiteDir = dirname(dirname(fileURLToPath(import.meta.url)));
-const registryRoot = join(websiteDir, "..", "registry");
+const softwareRoot = join(websiteDir, "..", "software");
const outPath = join(websiteDir, "src", "generated", "registry.json");
-if (!existsSync(registryRoot)) {
+if (!existsSync(softwareRoot)) {
if (existsSync(outPath)) {
- console.log("gen-registry: registry/ not found, using committed registry.json");
+ console.log("gen-registry: software/ not found, using committed registry.json");
process.exit(0);
}
- console.error("gen-registry: registry/ not found and no committed registry.json");
+ console.error("gen-registry: software/ not found and no committed registry.json");
process.exit(1);
}
const readJson = (path) => JSON.parse(readFileSync(path, "utf8"));
const entries = [];
-for (const type of ["agent", "software"]) {
- const typeDir = join(registryRoot, type);
- for (const dir of readdirSync(typeDir, { withFileTypes: true })) {
- if (!dir.isDirectory()) continue;
- const pkgDir = join(typeDir, dir.name);
- const manifestPath = join(pkgDir, "agentos-package.json");
- if (!existsSync(manifestPath)) continue;
- const manifest = readJson(manifestPath);
- const meta = manifest.registry;
- if (!meta?.title || !meta?.description) continue;
+for (const dir of readdirSync(softwareRoot, { withFileTypes: true })) {
+ if (!dir.isDirectory()) continue;
+ const pkgDir = join(softwareRoot, dir.name);
+ const manifestPath = join(pkgDir, "agentos-package.json");
+ if (!existsSync(manifestPath)) continue;
+ const manifest = readJson(manifestPath);
+ const meta = manifest.registry;
+ if (!meta?.title || !meta?.description) continue;
- const pkg = readJson(join(pkgDir, "package.json"));
- const entry = {
- slug: meta.slug ?? dir.name,
- title: meta.title,
- description: meta.description,
- // A package's section defaults to its registry/ parent dir; `types`
- // overrides it (e.g. browserbase is a software package listed under
- // Browsers).
- types: meta.types ?? [type],
- priority: meta.priority ?? 0,
- package: pkg.name,
- status: meta.docsHref ? "docs" : "available",
- };
- if (meta.beta) entry.beta = true;
- if (meta.icon) entry.icon = meta.icon;
- if (meta.image) entry.image = meta.image;
- if (type === "agent") {
- // Every agent has a docs page; link it even for plain "available"
- // entries (which keep their npm install rendering). Agents whose
- // manifest carries no runtime `name` (e.g. codex, which only has a
- // registry block) fall back to the directory name as agent id.
- const agentId = manifest.name ?? dir.name;
- entry.docsHref = meta.docsHref ?? `/docs/agents/${agentId}`;
- entry.agentId = agentId;
- } else if (meta.docsHref) {
- entry.docsHref = meta.docsHref;
- }
- entries.push(entry);
+ const type = manifest.kind === "agent" ? "agent" : "software";
+ const pkg = readJson(join(pkgDir, "package.json"));
+ const entry = {
+ slug: meta.slug ?? dir.name,
+ title: meta.title,
+ description: meta.description,
+ // A package's section defaults to manifest kind; `types` overrides it
+ // (e.g. browserbase is a software package listed under Browsers).
+ types: meta.types ?? [type],
+ category: meta.category,
+ priority: meta.priority ?? 0,
+ package: pkg.name,
+ status: meta.docsHref ? "docs" : "available",
+ };
+ if (meta.beta) entry.beta = true;
+ if (meta.icon) entry.icon = meta.icon;
+ if (meta.image) entry.image = meta.image;
+ if (type === "agent") {
+ // Every agent has a docs page; link it even for plain "available"
+ // entries (which keep their npm install rendering). Agents whose
+ // manifest carries no runtime `name` (e.g. codex, which only has a
+ // registry block) fall back to the directory name as agent id.
+ const agentId = manifest.name ?? dir.name;
+ entry.docsHref = meta.docsHref ?? `/docs/agents/${agentId}`;
+ entry.agentId = agentId;
+ } else if (meta.docsHref) {
+ entry.docsHref = meta.docsHref;
}
+ entries.push(entry);
}
const seen = new Set();
diff --git a/website/src/components/marketing/registry/RegistryPageClient.tsx b/website/src/components/marketing/registry/RegistryPageClient.tsx
index a658a4396e..a68576b81a 100644
--- a/website/src/components/marketing/registry/RegistryPageClient.tsx
+++ b/website/src/components/marketing/registry/RegistryPageClient.tsx
@@ -468,7 +468,7 @@ export default function RegistryPageClient({
You only need this to author new commands. To use existing ones, install the published package (e.g. `@agentos-software/ripgrep`) and pass it to `software`. See [using the registry](#using-the-registry) below.
@@ -11,49 +11,48 @@ You only need this to author new commands. To use existing ones, install the pub
## Where it lives
-Command source and packages live under `registry/` in [secure-exec](https://github.com/rivet-dev/secure-exec/tree/main/registry):
+Command packages live under top-level `software/`, while shared build infrastructure lives under `toolchain/`:
-- **`registry/native/crates/commands//`**: the Rust source for each command — a cargo package named `cmd-` that emits a `` binary.
-- **`registry/native/c/`**: the C source for the C-built commands.
-- **`registry/software//`**: the npm package for each command set (`@agentos-software/`). It exports a `{ packagePath }` descriptor pointing at the packed `dist/package.aospkg`, and declares which binaries it ships in its `agentos-package.json` (`commands`, plus optional `aliases` and `stubs`).
+- **`software//native/crates/cmd-/`**: the Rust source for each command — a cargo package named `cmd-` that emits a `` binary.
+- **`software//native/c/`**: the C source for C-built package commands.
+- **`software//`**: the npm package for each command set (`@agentos-software/`). It exports a `{ packagePath }` descriptor pointing at the packed `dist/package.aospkg`, and declares which binaries it ships in its `agentos-package.json` (`commands`, plus optional `aliases` and `stubs`).
## Build
-Everything runs through `just` recipes at the secure-exec repo root:
+Everything runs through `just` recipes at the AgentOS repo root:
```bash
-just registry-native # compile ALL native wasm binaries (slow; once per checkout)
-just registry-native-cmd sh # recompile ONE command (cargo package cmd-sh)
-just registry-build # stage + assemble every registry package
-just registry-build ripgrep # ... or just one
-just registry-status # per-package state; --remote adds npm dist-tags
+just toolchain-build # compile ALL native wasm binaries (slow; once per checkout)
+just toolchain-cmd sh # recompile ONE command (cargo package cmd-sh)
+just software-build # stage + assemble every software package
+just software-build ripgrep # ... or just one
```
-The native build compiles each command for `wasm32-wasip1` with the pinned **nightly** toolchain from `rust-toolchain.toml` (the build vendors and patches `std` for WASI), optimizes with `wasm-opt`, and drops the binaries in `registry/native/target/wasm32-wasip1/release/commands/`. C-based commands (e.g. `sqlite3`, `unzip`, `wget`, `zip`) compile with a **wasi-sdk** clang toolchain via `make -C registry/native/c`.
+The native build compiles each command for `wasm32-wasip1` with the pinned **nightly** toolchain from `rust-toolchain.toml` (the build vendors and patches `std` for WASI), optimizes with `wasm-opt`, and drops the binaries in `toolchain/target/wasm32-wasip1/release/commands/`. C-based commands (e.g. `sqlite3`, `unzip`, `wget`, `zip`) compile with a **wasi-sdk** clang toolchain via `make -C toolchain/c`.
Each package's build then runs the **agentos-toolchain** lifecycle: `agentos-toolchain stage` copies the binaries listed in the package's `agentos-package.json` into its `bin/`, and `agentos-toolchain build` assembles the clean `dist/package/` dir with a `bin` map in its `package.json` and packs it into `dist/package.aospkg` (the `{ packagePath }` target).
## Add a new command package
-1. Add the command source as `registry/native/crates/commands//` (cargo package `cmd-`; Rust) or under `registry/native/c/` (C).
-2. Create `registry/software//` as an `@agentos-software/` npm package that exports a `{ packagePath }` descriptor pointing at `dist/package.aospkg`.
+1. Add the command source as `software//native/crates/cmd-/` (cargo package `cmd-`; Rust) or under `software//native/c/` (C).
+2. Create `software//` as an `@agentos-software/` npm package that exports a `{ packagePath }` descriptor pointing at `dist/package.aospkg`.
3. Declare the shipped binaries in its `agentos-package.json`: `{ "commands": [""] }` (plus `aliases`/`stubs` if needed).
4. If it belongs in a meta-package (e.g. `common` or `build-essential`), add it there.
-5. Verify with `just registry-native-cmd && just registry-build ` and `just registry-test`.
+5. Verify with `just toolchain-cmd && just software-build ` and `pnpm --filter './software/*' test`.
## Let an agent build it
This is a mechanical, well-scoped task, so you can hand it to a coding agent. A prompt like:
```text
-Add a WASM command package for `` to the secure-exec registry:
-- put the Rust source at registry/native/crates/commands// as a cargo
+Add a WASM command package for `` to AgentOS:
+- put the Rust source at software//native/crates/cmd-/ as a cargo
package named cmd-,
-- create registry/software// as an @agentos-software/ npm
+- create software// as an @agentos-software/ npm
package that exports a { packagePath } descriptor and declares the command in
its agentos-package.json,
-then run `just registry-native-cmd && just registry-build `
-and `just registry-test`, and fix any failures.
+then run `just toolchain-cmd && just software-build `
+and `pnpm --filter './software/*' test`, and fix any failures.
```
## Using the registry
diff --git a/website/src/content/docs/docs/custom-software/publishing.mdx b/website/src/content/docs/docs/custom-software/publishing.mdx
index fab07e5e62..297eb8f69d 100644
--- a/website/src/content/docs/docs/custom-software/publishing.mdx
+++ b/website/src/content/docs/docs/custom-software/publishing.mdx
@@ -21,10 +21,9 @@ Every package is an npm package whose default export points at a self-contained
In the AgentOS registry, the `just` recipes drive the toolchain (see [Building Binaries](/docs/custom-software/building-wasm)):
```bash
-just registry-native # compile the native wasm binaries (once per checkout)
-just registry-build # stage + assemble every registry package
-just registry-build coreutils # ... or one package
-just registry-status # inspect: version, staged bin/, assembled dist
+just toolchain-build # compile the native wasm binaries (once per checkout)
+just software-build # stage + assemble every software package
+just software-build coreutils # ... or one package
```
## Publishing
@@ -53,9 +52,9 @@ just agentos-pkgs-update dev # ... or from another tag
## Local development
-AgentOS consumes local registry builds by default because the registry packages
-are pnpm workspace members. Build the native commands with `just registry-native`
-and assemble packages with `just registry-build`; no sibling checkout or
+AgentOS consumes local registry builds by default because the software packages
+are pnpm workspace members. Build the native commands with `just toolchain-build`
+and assemble packages with `just software-build`; no sibling checkout or
published package is required while iterating.
Published-version pins exist only in release validation and downstream
@@ -78,4 +77,4 @@ For a JS agent, `pack` replaces `stage`/`build`:
npx @rivet-dev/agentos-toolchain pack . --out dist/package --agent my-acp-entrypoint
```
-The published package is a plain npm dependency — consumers import its descriptor and pass it to `software` exactly like the registry packages. See [Software Definition](/docs/custom-software/definition) for the descriptor shape.
+The published package is a plain npm dependency — consumers import its descriptor and pass it to `software` exactly like the software packages. See [Software Definition](/docs/custom-software/definition) for the descriptor shape.
diff --git a/website/src/data/registry.ts b/website/src/data/registry.ts
index 113af9de05..8b0ba53494 100644
--- a/website/src/data/registry.ts
+++ b/website/src/data/registry.ts
@@ -4,6 +4,7 @@ export interface RegistryEntryBase {
slug: string;
title: string;
description: string;
+ category?: string;
types: (
| "file-system"
| "tool"
@@ -80,7 +81,7 @@ export type RegistryEntry =
| RegistryEntryConfig
| RegistryEntryExternal;
-// Agent and software entries are generated from the monorepo's registry/ tree
+// Agent and software entries are generated from the monorepo's software/ catalog
// by scripts/gen-registry.mjs — a package is listed iff its
// agentos-package.json has a `registry` block with title + description. Run
// `pnpm dev`/`pnpm build` (or the script directly) to refresh after editing a
diff --git a/website/src/generated/registry.json b/website/src/generated/registry.json
index 1aa77a7b36..d65f37e211 100644
--- a/website/src/generated/registry.json
+++ b/website/src/generated/registry.json
@@ -7,6 +7,7 @@
"types": [
"agent"
],
+ "category": "agents",
"priority": 100,
"package": "@agentos-software/pi",
"status": "available",
@@ -21,6 +22,7 @@
"types": [
"agent"
],
+ "category": "agents",
"priority": 90,
"package": "@agentos-software/claude-code",
"status": "docs",
@@ -36,6 +38,7 @@
"types": [
"agent"
],
+ "category": "agents",
"priority": 80,
"package": "@agentos-software/codex",
"status": "docs",
@@ -51,6 +54,7 @@
"types": [
"agent"
],
+ "category": "agents",
"priority": 70,
"package": "@agentos-software/opencode",
"status": "docs",
@@ -65,6 +69,7 @@
"types": [
"browser"
],
+ "category": "browser",
"priority": 0,
"package": "@agentos-software/browserbase",
"status": "available",
@@ -78,6 +83,7 @@
"types": [
"software"
],
+ "category": "meta",
"priority": 100,
"package": "@agentos-software/build-essential",
"status": "available"
@@ -89,6 +95,7 @@
"types": [
"software"
],
+ "category": "meta",
"priority": 95,
"package": "@agentos-software/common",
"status": "available"
@@ -100,6 +107,7 @@
"types": [
"software"
],
+ "category": "developer-tools",
"priority": 90,
"package": "@agentos-software/git",
"status": "available",
@@ -112,6 +120,7 @@
"types": [
"software"
],
+ "category": "developer-tools",
"priority": 85,
"package": "@agentos-software/ripgrep",
"status": "available"
@@ -123,6 +132,7 @@
"types": [
"software"
],
+ "category": "data",
"priority": 80,
"package": "@agentos-software/jq",
"status": "available",
@@ -135,6 +145,7 @@
"types": [
"software"
],
+ "category": "data",
"priority": 75,
"package": "@agentos-software/sqlite3",
"status": "available",
@@ -147,6 +158,7 @@
"types": [
"software"
],
+ "category": "data",
"priority": 70,
"package": "@agentos-software/duckdb",
"status": "available",
@@ -159,6 +171,7 @@
"types": [
"software"
],
+ "category": "editors",
"priority": 65,
"package": "@agentos-software/vim",
"status": "available",
@@ -171,6 +184,7 @@
"types": [
"software"
],
+ "category": "core",
"priority": 60,
"package": "@agentos-software/tar",
"status": "available",
@@ -183,6 +197,7 @@
"types": [
"software"
],
+ "category": "networking",
"priority": 55,
"package": "@agentos-software/wget",
"status": "available",
@@ -195,6 +210,7 @@
"types": [
"software"
],
+ "category": "networking",
"priority": 50,
"package": "@agentos-software/curl",
"status": "available",
@@ -207,6 +223,7 @@
"types": [
"software"
],
+ "category": "core",
"priority": 45,
"package": "@agentos-software/coreutils",
"status": "available",
@@ -219,6 +236,7 @@
"types": [
"software"
],
+ "category": "core",
"priority": 40,
"package": "@agentos-software/grep",
"status": "available",
@@ -231,6 +249,7 @@
"types": [
"software"
],
+ "category": "core",
"priority": 35,
"package": "@agentos-software/sed",
"status": "available",
@@ -243,6 +262,7 @@
"types": [
"software"
],
+ "category": "developer-tools",
"priority": 30,
"package": "@agentos-software/fd",
"status": "available"
@@ -254,6 +274,7 @@
"types": [
"software"
],
+ "category": "core",
"priority": 25,
"package": "@agentos-software/tree",
"status": "available"
@@ -265,6 +286,7 @@
"types": [
"software"
],
+ "category": "core",
"priority": 20,
"package": "@agentos-software/gawk",
"status": "available",
@@ -277,6 +299,7 @@
"types": [
"software"
],
+ "category": "core",
"priority": 15,
"package": "@agentos-software/findutils",
"status": "available",
@@ -289,10 +312,23 @@
"types": [
"software"
],
+ "category": "core",
"priority": 12,
"package": "@agentos-software/zip",
"status": "available"
},
+ {
+ "slug": "envsubst",
+ "title": "envsubst",
+ "description": "Substitute environment variables in text streams.",
+ "types": [
+ "software"
+ ],
+ "category": "core",
+ "priority": 10,
+ "package": "@agentos-software/envsubst",
+ "status": "available"
+ },
{
"slug": "unzip",
"title": "unzip",
@@ -300,6 +336,7 @@
"types": [
"software"
],
+ "category": "core",
"priority": 10,
"package": "@agentos-software/unzip",
"status": "available"
@@ -311,6 +348,7 @@
"types": [
"software"
],
+ "category": "core",
"priority": 8,
"package": "@agentos-software/gzip",
"status": "available",
@@ -323,6 +361,7 @@
"types": [
"software"
],
+ "category": "core",
"priority": 6,
"package": "@agentos-software/diffutils",
"status": "available",
@@ -335,6 +374,7 @@
"types": [
"software"
],
+ "category": "data",
"priority": 4,
"package": "@agentos-software/yq",
"status": "available"
@@ -346,6 +386,7 @@
"types": [
"software"
],
+ "category": "core",
"priority": 2,
"package": "@agentos-software/file",
"status": "available"
@@ -357,6 +398,7 @@
"types": [
"software"
],
+ "category": "agents",
"priority": 0,
"package": "@agentos-software/codex-cli",
"status": "available",
@@ -369,20 +411,10 @@
"types": [
"software"
],
+ "category": "networking",
"priority": 0,
"package": "@agentos-software/http-get",
"status": "available"
- },
- {
- "slug": "vix",
- "title": "vix",
- "description": "Lightweight vi-style text editor.",
- "types": [
- "software"
- ],
- "priority": 0,
- "package": "@agentos-software/vix",
- "status": "available"
}
]
}
diff --git a/website/src/pages/registry/index.astro b/website/src/pages/registry/index.astro
index f9e0dce8b5..0791e750b8 100644
--- a/website/src/pages/registry/index.astro
+++ b/website/src/pages/registry/index.astro
@@ -23,7 +23,7 @@ import { HERO_H1_CLASS } from "../../components/marketing/typography";