Skip to content

feat: extract exo utilities into @metamask/kernel-exo package#866

Open
grypez wants to merge 2 commits intomainfrom
grypez/exo-genesis
Open

feat: extract exo utilities into @metamask/kernel-exo package#866
grypez wants to merge 2 commits intomainfrom
grypez/exo-genesis

Conversation

@grypez
Copy link
Contributor

@grypez grypez commented Mar 4, 2026

The exo utilities already had their own subpaths, it was inevitable they would end up here.

Future site of ocap sheaves.


Note

Medium Risk
Broad dependency/import refactor across multiple packages plus TS project reference updates; primary risk is build/test breakage or subtle behavioral drift in shared exo helpers, not security-sensitive logic.

Overview
Introduces a new standalone package, @metamask/kernel-exo, exporting makeDefaultExo, makeDefaultInterface, makeDiscoverableExo, and the JsonSchema/MethodSchema/DiscoverableExo types (with its own build/test config and licensing files).

Updates the monorepo to depend on and reference kernel-exo (package deps + TS project references) and switches all call sites from @metamask/kernel-utils (and its former ./exo/./discoverable subpath exports) to @metamask/kernel-exo, while removing those exo-related exports and dependencies from kernel-utils.

Written by Cursor Bugbot for commit a273069. This will update automatically on new commits. Configure here.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@grypez grypez force-pushed the grypez/exo-genesis branch from 141160e to 1fb6bc9 Compare March 4, 2026 14:19
Remove private flag, add LICENSE files, README, changelog:update
script, and constraint-required fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@grypez grypez force-pushed the grypez/exo-genesis branch from 1fb6bc9 to a273069 Compare March 4, 2026 14:29
@github-actions
Copy link
Contributor

github-actions bot commented Mar 4, 2026

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 76.11%
🟰 ±0%
6638 / 8721
🔵 Statements 76%
🟰 ±0%
6744 / 8873
🔵 Functions 73.94%
⬇️ -0.01%
1652 / 2234
🔵 Branches 75.38%
🟰 ±0%
2471 / 3278
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
packages/kernel-agents/src/capabilities/discover.ts 10%
🟰 ±0%
100%
🟰 ±0%
0%
🟰 ±0%
11.11%
🟰 ±0%
17-48
packages/kernel-agents/src/types/capability.ts 100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
packages/kernel-exo/src/index.ts 100% 100% 100% 100%
packages/kernel-test/src/vats/async-generator-iterator-vat.ts 0%
🟰 ±0%
100%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
22-49
packages/kernel-test/src/vats/discoverable-capability-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
18-81
packages/kernel-test/src/vats/endowment-fetch.ts 0%
🟰 ±0%
100%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
15-36
packages/kernel-test/src/vats/error-bootstrap-throw.ts 0%
🟰 ±0%
100%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
4-19
packages/kernel-test/src/vats/error-bootstrap-uncaught-rejection.ts 0%
🟰 ±0%
100%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
5-21
packages/kernel-test/src/vats/error-build-uncaught-rejection.ts 0%
🟰 ±0%
100%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
5-23
packages/kernel-test/src/vats/error-global-uncaught-rejection.ts 0%
🟰 ±0%
100%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
5-19
packages/kernel-test/src/vats/exo-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
26-325
packages/kernel-test/src/vats/exporter-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
22-74
packages/kernel-test/src/vats/importer-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
23-123
packages/kernel-test/src/vats/io-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
20-41
packages/kernel-test/src/vats/lms-queue-vat.ts 0%
🟰 ±0%
100%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
23-59
packages/kernel-test/src/vats/lms-user-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
22-48
packages/kernel-test/src/vats/logger-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
21-31
packages/kernel-test/src/vats/message-to-promise-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
25-91
packages/kernel-test/src/vats/monotonous-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
24-69
packages/kernel-test/src/vats/pass-result-promise-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
25-95
packages/kernel-test/src/vats/pass-result-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
24-89
packages/kernel-test/src/vats/persistence-coordinator-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
25-75
packages/kernel-test/src/vats/persistence-counter-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
23-51
packages/kernel-test/src/vats/persistence-worker-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
24-54
packages/kernel-test/src/vats/powers-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
19-21
packages/kernel-test/src/vats/promise-arg-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
24-104
packages/kernel-test/src/vats/promise-chain-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
26-110
packages/kernel-test/src/vats/promise-crosswise-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
25-89
packages/kernel-test/src/vats/promise-cycle-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
25-113
packages/kernel-test/src/vats/promise-indirect-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
25-80
packages/kernel-test/src/vats/rejection-bootstrap.ts 0%
🟰 ±0%
100%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
16-23
packages/kernel-test/src/vats/rejection-rejector.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
15-23
packages/kernel-test/src/vats/remote-receiver-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
22-47
packages/kernel-test/src/vats/remote-sender-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
22-67
packages/kernel-test/src/vats/resolve-pipelined-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
24-90
packages/kernel-test/src/vats/resume-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
25-121
packages/kernel-test/src/vats/service-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
21-56
packages/kernel-test/src/vats/stepper-upper-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
20-73
packages/kernel-test/src/vats/subcluster-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
19-38
packages/kernel-test/src/vats/vatstore-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
24-62
packages/kernel-utils/src/index.ts 100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
packages/ocap-kernel/src/kernel-facet.ts 100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
packages/ocap-kernel/src/io/io-service.ts 100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
packages/ocap-kernel/src/liveslots/kernel-marshal.ts 100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
packages/omnium-gatherum/src/controllers/caplet/caplet-controller.ts 100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
100%
🟰 ±0%
packages/omnium-gatherum/src/vats/controller-vat.ts 0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
0%
🟰 ±0%
58-196
Generated in workflow #3881 for commit a273069 by the Vitest Coverage Report Action

@grypez grypez marked this pull request as ready for review March 4, 2026 15:20
@grypez grypez requested a review from a team as a code owner March 4, 2026 15:20
@rekmarks
Copy link
Member

rekmarks commented Mar 4, 2026

@grypez I'm a little concerned about the proliferation of packages in the monorepo. Since we were using export paths, forking exos out of kernel-utils doesn't really benefit us or our consumers in and of itself, and the new package depends on kernel-utils anyway. We talked about there being some kind of build / bundle issue, but I can't remember it. Do you know what that was or do you have some other specific problem in mind?

@grypez
Copy link
Contributor Author

grypez commented Mar 4, 2026

The bundling issue is already resolved by the export paths. It's just a question of ergonomics.

EDIT: Actually, since our move to vite for vat bundling, we shouldn't even need the export paths anymore as we can tree shake vat bundles.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants