Dependency graph
Workspace packages by ring (deeper = more abstract; an edge points at what a package depends on). The
layering rules that keep it this shape are in scripts/quality/layers.ts and docs/quality.md.
flowchart BT
subgraph ring_kernel["ring 0 · kernel"]
kernel["@sms/kernel"]
end
subgraph ring_contracts["ring 1 · contracts"]
contracts["@sms/contracts"]
end
subgraph ring_plugin_sdk["ring 1 · plugin-sdk"]
plugin_sdk["@sms/plugin-sdk"]
end
subgraph ring_driver["ring 2 · drivers"]
executor_node["@sms/executor-node"]
executor_quickjs["@sms/executor-quickjs"]
host_cloudflare["@sms/host-cloudflare"]
host_fastify["@sms/host-fastify"]
host_node["@sms/host-node"]
model_claude["@sms/model-claude"]
model_claude_api["@sms/model-claude-api"]
model_gpt["@sms/model-gpt"]
model_gpt_api["@sms/model-gpt-api"]
model_gpt_oauth["@sms/model-gpt-oauth"]
model_openrouter["@sms/model-openrouter"]
objects_r2["@sms/objects-r2"]
objects_s3["@sms/objects-s3"]
store_d1["@sms/store-d1"]
store_do["@sms/store-do"]
store_postgres["@sms/store-postgres"]
store_sql["@sms/store-sql"]
store_sqlite["@sms/store-sqlite"]
end
subgraph ring_plugin["ring 2 · plugins"]
plugin_admin_api["@sms/plugin-admin-api"]
plugin_agent_loop["@sms/plugin-agent-loop"]
plugin_audit["@sms/plugin-audit"]
plugin_auth["@sms/plugin-auth"]
plugin_automation["@sms/plugin-automation"]
plugin_collections["@sms/plugin-collections"]
plugin_http["@sms/plugin-http"]
plugin_judge["@sms/plugin-judge"]
plugin_meta["@sms/plugin-meta"]
plugin_orm["@sms/plugin-orm"]
plugin_rbac["@sms/plugin-rbac"]
plugin_rpc["@sms/plugin-rpc"]
plugin_scheduler["@sms/plugin-scheduler"]
end
subgraph ring_baseline["ring 3 · baseline"]
baseline["@sms/baseline"]
end
subgraph ring_app["ring 4 · apps"]
example_cloudflare_worker["@sms/example-cloudflare-worker"]
example_erp_fastify_postgres["@sms/example-erp-fastify-postgres"]
example_reference_node_sqlite["@sms/example-reference-node-sqlite"]
end
contracts --> kernel
executor_node --> kernel
executor_node --> plugin_sdk
executor_quickjs --> kernel
host_cloudflare --> contracts
host_cloudflare --> store_do
host_fastify --> contracts
host_fastify --> host_node
host_node --> contracts
model_claude --> contracts
model_claude --> kernel
model_claude_api --> contracts
model_claude_api --> kernel
model_gpt --> contracts
model_gpt --> kernel
model_gpt_api --> contracts
model_gpt_api --> kernel
model_gpt_oauth --> contracts
model_gpt_oauth --> kernel
model_openrouter --> contracts
model_openrouter --> kernel
objects_r2 --> contracts
objects_s3 --> contracts
store_d1 --> contracts
store_d1 --> store_sql
store_do --> contracts
store_do --> store_sql
store_postgres --> contracts
store_postgres --> store_sql
store_sql --> contracts
store_sql --> kernel
store_sqlite --> contracts
store_sqlite --> store_sql
plugin_admin_api --> kernel
plugin_admin_api --> plugin_agent_loop
plugin_admin_api --> plugin_auth
plugin_admin_api --> plugin_collections
plugin_admin_api --> plugin_http
plugin_admin_api --> plugin_judge
plugin_admin_api --> plugin_scheduler
plugin_agent_loop --> contracts
plugin_agent_loop --> kernel
plugin_agent_loop --> plugin_judge
plugin_audit --> kernel
plugin_audit --> plugin_http
plugin_audit --> plugin_orm
plugin_auth --> contracts
plugin_auth --> kernel
plugin_auth --> plugin_http
plugin_automation --> contracts
plugin_automation --> kernel
plugin_automation --> plugin_audit
plugin_automation --> plugin_orm
plugin_collections --> contracts
plugin_collections --> kernel
plugin_collections --> plugin_http
plugin_http --> kernel
plugin_judge --> kernel
plugin_meta --> kernel
plugin_meta --> plugin_orm
plugin_orm --> contracts
plugin_orm --> kernel
plugin_orm --> plugin_http
plugin_rbac --> contracts
plugin_rbac --> kernel
plugin_rbac --> plugin_auth
plugin_rbac --> plugin_http
plugin_rpc --> kernel
plugin_rpc --> plugin_auth
plugin_rpc --> plugin_http
plugin_rpc --> plugin_meta
plugin_rpc --> plugin_orm
plugin_rpc --> plugin_rbac
plugin_scheduler --> contracts
plugin_scheduler --> kernel
baseline --> contracts
baseline --> executor_node
baseline --> kernel
baseline --> plugin_admin_api
baseline --> plugin_agent_loop
baseline --> plugin_auth
baseline --> plugin_collections
baseline --> plugin_http
baseline --> plugin_judge
baseline --> plugin_meta
baseline --> plugin_orm
baseline --> plugin_rbac
baseline --> plugin_rpc
baseline --> plugin_scheduler
baseline --> plugin_sdk
baseline --> store_sql
baseline --> store_sqlite
example_cloudflare_worker --> baseline
example_cloudflare_worker --> executor_quickjs
example_cloudflare_worker --> host_cloudflare
example_cloudflare_worker --> model_claude_api
example_cloudflare_worker --> model_gpt_api
example_cloudflare_worker --> model_gpt_oauth
example_cloudflare_worker --> model_openrouter
example_cloudflare_worker --> objects_r2
example_cloudflare_worker --> store_d1
example_cloudflare_worker --> store_do
example_erp_fastify_postgres --> baseline
example_erp_fastify_postgres --> executor_quickjs
example_erp_fastify_postgres --> host_fastify
example_erp_fastify_postgres --> model_claude
example_erp_fastify_postgres --> store_postgres
example_reference_node_sqlite --> baseline
example_reference_node_sqlite --> executor_node
example_reference_node_sqlite --> host_node
example_reference_node_sqlite --> model_claude
example_reference_node_sqlite --> model_claude_api
example_reference_node_sqlite --> model_gpt
example_reference_node_sqlite --> model_gpt_api
example_reference_node_sqlite --> model_gpt_oauth
example_reference_node_sqlite --> model_openrouter
example_reference_node_sqlite --> store_sqlite
| Package | Ring | Depends on |
|---|---|---|
@sms/kernel | ring 0 · kernel | — |
@sms/contracts | ring 1 · contracts | @sms/kernel |
@sms/plugin-sdk | ring 1 · plugin-sdk | — |
@sms/executor-node | ring 2 · drivers | @sms/kernel, @sms/plugin-sdk |
@sms/executor-quickjs | ring 2 · drivers | @sms/kernel |
@sms/host-cloudflare | ring 2 · drivers | @sms/contracts, @sms/store-do |
@sms/host-fastify | ring 2 · drivers | @sms/contracts, @sms/host-node |
@sms/host-node | ring 2 · drivers | @sms/contracts |
@sms/model-claude | ring 2 · drivers | @sms/contracts, @sms/kernel |
@sms/model-claude-api | ring 2 · drivers | @sms/contracts, @sms/kernel |
@sms/model-gpt | ring 2 · drivers | @sms/contracts, @sms/kernel |
@sms/model-gpt-api | ring 2 · drivers | @sms/contracts, @sms/kernel |
@sms/model-gpt-oauth | ring 2 · drivers | @sms/contracts, @sms/kernel |
@sms/model-openrouter | ring 2 · drivers | @sms/contracts, @sms/kernel |
@sms/objects-r2 | ring 2 · drivers | @sms/contracts |
@sms/objects-s3 | ring 2 · drivers | @sms/contracts |
@sms/store-d1 | ring 2 · drivers | @sms/contracts, @sms/store-sql |
@sms/store-do | ring 2 · drivers | @sms/contracts, @sms/store-sql |
@sms/store-postgres | ring 2 · drivers | @sms/contracts, @sms/store-sql |
@sms/store-sql | ring 2 · drivers | @sms/contracts, @sms/kernel |
@sms/store-sqlite | ring 2 · drivers | @sms/contracts, @sms/store-sql |
@sms/plugin-admin-api | ring 2 · plugins | @sms/kernel, @sms/plugin-agent-loop, @sms/plugin-auth, @sms/plugin-collections, @sms/plugin-http, @sms/plugin-judge, @sms/plugin-scheduler |
@sms/plugin-agent-loop | ring 2 · plugins | @sms/contracts, @sms/kernel, @sms/plugin-judge |
@sms/plugin-audit | ring 2 · plugins | @sms/kernel, @sms/plugin-http, @sms/plugin-orm |
@sms/plugin-auth | ring 2 · plugins | @sms/contracts, @sms/kernel, @sms/plugin-http |
@sms/plugin-automation | ring 2 · plugins | @sms/contracts, @sms/kernel, @sms/plugin-audit, @sms/plugin-orm |
@sms/plugin-collections | ring 2 · plugins | @sms/contracts, @sms/kernel, @sms/plugin-http |
@sms/plugin-http | ring 2 · plugins | @sms/kernel |
@sms/plugin-judge | ring 2 · plugins | @sms/kernel |
@sms/plugin-meta | ring 2 · plugins | @sms/kernel, @sms/plugin-orm |
@sms/plugin-orm | ring 2 · plugins | @sms/contracts, @sms/kernel, @sms/plugin-http |
@sms/plugin-rbac | ring 2 · plugins | @sms/contracts, @sms/kernel, @sms/plugin-auth, @sms/plugin-http |
@sms/plugin-rpc | ring 2 · plugins | @sms/kernel, @sms/plugin-auth, @sms/plugin-http, @sms/plugin-meta, @sms/plugin-orm, @sms/plugin-rbac |
@sms/plugin-scheduler | ring 2 · plugins | @sms/contracts, @sms/kernel |
@sms/baseline | ring 3 · baseline | @sms/contracts, @sms/executor-node, @sms/kernel, @sms/plugin-admin-api, @sms/plugin-agent-loop, @sms/plugin-auth, @sms/plugin-collections, @sms/plugin-http, @sms/plugin-judge, @sms/plugin-meta, @sms/plugin-orm, @sms/plugin-rbac, @sms/plugin-rpc, @sms/plugin-scheduler, @sms/plugin-sdk, @sms/store-sql, @sms/store-sqlite |
@sms/example-cloudflare-worker | ring 4 · apps | @sms/baseline, @sms/executor-quickjs, @sms/host-cloudflare, @sms/model-claude-api, @sms/model-gpt-api, @sms/model-gpt-oauth, @sms/model-openrouter, @sms/objects-r2, @sms/store-d1, @sms/store-do |
@sms/example-erp-fastify-postgres | ring 4 · apps | @sms/baseline, @sms/executor-quickjs, @sms/host-fastify, @sms/model-claude, @sms/store-postgres |
@sms/example-reference-node-sqlite | ring 4 · apps | @sms/baseline, @sms/executor-node, @sms/host-node, @sms/model-claude, @sms/model-claude-api, @sms/model-gpt, @sms/model-gpt-api, @sms/model-gpt-oauth, @sms/model-openrouter, @sms/store-sqlite |