Canonical spec registry for AppPACK.
This repo is intentionally a data/spec repository:
- no runtime service
- no build system
- no npm toolchain
- no generated dependency artifacts
It stores the protocol metadata and JSON specs consumed by the other repos in this workspace.
registry.json: canonical top-level registryschemas/: shared JSON schemasruntime/: Solana agent runtime specs for reads, writes, and reusable transformscodama/: codama/IDL source filesindexing/ingest/: canonical ingest specsindexing/entities/: canonical entity projection specs forprotocol-indexingaction-runners/: action-runner registry for higher-level linear flowsaction-policy-templates/: canonical policy templates for action runners
registry.json carries three top-level catalogs:
protocols[]- canonical protocol metadata
- runtime pack location via
agentRuntimePath - codama location via
codamaIdlPath
indexings[]- canonical source-ingest definitions
- source list via
sources[]
indexes[]- canonical API datasets
- one entry per
index_id - source dependencies via
sourceIndexingIds - entity projection spec location via
entitySchemaPath
For indexing, the canonical path is now:
indexings[].sources[].ingestSpecPathindexes[].entitySchemaPath
indexings[] does not own API datasets. It only defines how source data enters
the canonical raw/state layer.
indexes[] owns API datasets. indexes[].entitySchemaPath points directly to
one flat entity spec file:
indexing/entities/<index_id>.json
Do not group entity specs by protocol directory. A protocol can have many API
datasets, and each dataset is administered by its own index_id.
Each entity spec must declare:
indexId: exactly the same id asindexes[].idsourceIndexingIds: source dependenciesretention: projection retention windowlimits: operational limits for lag, backlog, table bytes, and API P95source,transform, andemit
The active entity schema is:
indexing/entities/entity_definition_schema.v1.json
The active canonical indexings today are:
orca-whirlpool-mainnetpump-amm-mainnetpump-core-mainnet
Their specs live under:
indexing/ingest/indexing/entities/
The active API indexes today are:
orca-whirlpool-pool-mainnetorca-whirlpool-pool-volume-1m-mainnetorca-whirlpool-position-mainnetorca-whirlpool-swap-mainnetpump-amm-pool-mainnetpump-amm-trade-mainnetpump-amm-trade-volume-1m-mainnetpump-core-bonding-curve-account-mainnet
Entity authoring layout is flat:
indexing/entities/<index_id>.json
Action runners are global protocol capabilities. Action policy templates describe the policy controls and safety checks that can be attached to those runners by an app, agent, session, or user.
This repo stores only templates. Concrete user policies and control values should live in the consuming app, MCP server, wallet layer, or database.
Template layout:
action-policy-templates/action_policy_templates.jsonaction-policy-templates/<actionId>.template.json
This repo is consumed by:
protocol-runtimefor runtime packs and schema-driven executionprotocol-indexingfor ingest specs and entity projection specsprotocol-uifor synced public protocol artifactsprotocol-conformancefor parity and registry-backed conformance tests
Validation and execution happen in those consuming repos, not here.
Typical flow:
- Add or update the codama file under
codama/. - Add or update the runtime pack under
runtime/. - If the protocol is indexed, add or update:
- ingest spec under
indexing/ingest/ - entity spec under
indexing/entities/<index_id>.json
- ingest spec under
- Register source ingest in
registry.json#indexings[]. - Register each API dataset in
registry.json#indexes[]. - If the action is exposed through a runner, add or update the runner under
action-runners/. - If the action needs agent safety controls, add or update its template under
action-policy-templates/. - Prove the change in
protocol-indexingandprotocol-conformancewhen relevant.
- This repo should stay boring and lightweight.
- Do not commit
node_modules, generated artifacts, or local tooling state here. - If spec validation tooling is needed, it should live in a consumer repo or CI, not by turning this repo back into a pseudo-application.