Skip to content
Merged
Show file tree
Hide file tree
Changes from 42 commits
Commits
Show all changes
182 commits
Select commit Hold shift + click to select a range
3a463df
fix: load proto descriptor in bundled broker
outerlook Apr 27, 2026
e2f320c
Pass loader options to proto descriptors
outerlook Apr 27, 2026
03340a6
Harden enum resolution
outerlook Apr 27, 2026
bf74098
Merge pull request #40 from usherlabs/fix-bundling
outerlook Apr 27, 2026
dc04b7e
bump version
outerlook Apr 27, 2026
c7eb241
feat: capture CEX order execution telemetry
csmithington May 14, 2026
dfcd5fd
Merge pull request #41 from usherlabs/feat/TASK-49
rsoury May 14, 2026
f962464
fix: address CI and telemetry review feedback
csmithington May 14, 2026
cc5f232
chore: trigger Gitea Actions CI
May 14, 2026
f820a0c
Merge pull request 'fix: enable develop CI and address telemetry revi…
May 14, 2026
8748443
Implement orderbook depth sourcing refinements
csmithington Jun 3, 2026
c38f229
Merge pull request 'Implement orderbook depth sourcing refinements' (…
Jun 3, 2026
62f98dc
ignore emdash local
csmithington Jun 4, 2026
fba0f40
improvements to cex broker for treasury venue management
csmithington Jun 5, 2026
a1f428a
Merge pull request #45 from usherlabs/local/improved-backtest-harness
rsoury Jun 5, 2026
7963da4
ignore .codex
csmithington Jun 5, 2026
aa6be38
Merge remote-tracking branch 'github/feat/fiet-838' into gitea/order-…
csmithington Jun 5, 2026
8df80f0
cex-broker-server-modularization spec impl
csmithington Jun 5, 2026
924a966
spec cex-broker-server-modularization archived
csmithington Jun 5, 2026
b44ad2c
ensure support for wallet-based exchanges like Hyperliquid
csmithington Jun 6, 2026
8c230cf
Integrate support for perps
csmithington Jun 6, 2026
f5f4742
Format residuals
csmithington Jun 6, 2026
82012b8
Replace Binance account subscriptions with user-data streams
outerlook Jun 6, 2026
fe03b5f
Build broker image from current source package
outerlook Jun 6, 2026
cb27d8e
Merge feat/fiet-838 into Binance user stream fix
outerlook Jun 8, 2026
63aa907
Align treasury call capability gating
outerlook Jun 8, 2026
496967b
Fix deposit status fallback and mismatch reporting
outerlook Jun 8, 2026
87900e5
Close subscribe streams after terminal errors
outerlook Jun 8, 2026
c3c2a4f
Clean execute-action callbacks and validation messages
outerlook Jun 8, 2026
5bf35b0
Extract server helper imports from handler barrel
outerlook Jun 8, 2026
1f3fa25
Replace test helper barrel imports with broker module imports
outerlook Jun 8, 2026
331d7a9
Store secondary broker accounts densely
outerlook Jun 8, 2026
f8197b8
Parse gRPC peer hosts before request authentication
outerlook Jun 8, 2026
56c2f73
Merge pull request #44 from usherlabs/feat/fiet-838
outerlook Jun 8, 2026
f308022
Merge origin/develop into PR 46 resolution
outerlook Jun 8, 2026
7346ca1
Merge pull request #46 from usherlabs/binance-user-streams-fail-throu…
outerlook Jun 8, 2026
db6f1b4
bump version to 0.2.13
outerlook Jun 8, 2026
a3d9d0d
Use ws for Binance user-data streams
outerlook Jun 10, 2026
0698a40
Improve Binance user-data WebSocket diagnostics
outerlook Jun 10, 2026
6197889
Merge pull request #47 from usherlabs/binance-user-data-websocket-fai…
outerlook Jun 10, 2026
f752b03
Enforce Subscribe stream backpressure
outerlook Jun 15, 2026
6ec566b
Merge pull request #48 from usherlabs/cex-broker-subscribe-streams-ig…
outerlook Jun 15, 2026
a4d6aec
Add ClickHouse archive forwarder and market data research pipeline
xlassix Jun 25, 2026
a86287a
Add ClickHouse archive forwarder and market data research pipeline
xlassix Jun 25, 2026
39370de
fmt
xlassix Jun 25, 2026
79916e3
bump version to 0.2.14
outerlook Jun 26, 2026
0420613
Merge orderbook into snapshots, fix live candle viewer, and document …
xlassix Jun 27, 2026
e3e824f
Merge orderbook into snapshots, fix live candle viewer, and document …
xlassix Jun 27, 2026
616ea53
Merge orderbook into snapshots, fix live candle viewer, and document …
xlassix Jun 27, 2026
c9b26c6
Merge orderbook into snapshots, fix live candle viewer, and document …
xlassix Jun 27, 2026
2a95e03
Merge orderbook into snapshots, fix live candle viewer, and document …
xlassix Jun 27, 2026
601b674
Merge orderbook into snapshots, fix live candle viewer, and document …
xlassix Jun 27, 2026
c587ce3
Merge orderbook into snapshots, fix live candle viewer, and document …
xlassix Jun 27, 2026
49a6888
Merge orderbook into snapshots, fix live candle viewer, and document …
xlassix Jun 27, 2026
470fa70
feat(withdraw): support Binance travel-rule (localentity) withdrawals
outerlook Jul 1, 2026
54be075
fix(travel-rule): restrict to Binance and forward withdraw params
outerlook Jul 1, 2026
5b8091a
Merge pull request #51 from usherlabs/feat/binance-travel-rule-withdraw
outerlook Jul 1, 2026
d6c1fa0
fix(travel-rule): sign localentity withdraw with rawencode (fixes -1022)
outerlook Jul 1, 2026
5279fc7
Merge pull request #52 from usherlabs/fix/binance-localentity-rawenco…
outerlook Jul 1, 2026
188f235
feat(deposit): auto-clear Binance travel-rule frozen deposits
outerlook Jul 1, 2026
0d66a06
fix(deposit): address PR #53 review — tranId-only, RPC timeout, rate-…
outerlook Jul 2, 2026
c1fc3cb
Merge pull request #53 from usherlabs/feat/binance-travel-rule-deposit
outerlook Jul 2, 2026
b3a330d
fix(deposit): use node:https for on-chain sender proof (enclave-safe)…
outerlook Jul 2, 2026
3964608
Merge pull request #54 from usherlabs/fix/travel-rule-deposit-enclave…
outerlook Jul 2, 2026
08a99e0
Merge origin/develop into PR #50 (FIET-909/903/899/868/901)
outerlook Jul 2, 2026
ed85783
Merge pull request #50 from usherlabs/feat-FIET-909/FIET-903/FIET-899…
outerlook Jul 2, 2026
2e98325
feat(archive): add broker_execution and strategy_data ClickHouse schemas
outerlook Jul 2, 2026
7340abb
feat(archive): route broker_execution + strategy_data through the for…
outerlook Jul 2, 2026
d76a8bd
feat(archive): add forwarder Dockerfile, refresh docs, bump 0.2.19
outerlook Jul 2, 2026
2c87dfd
fix(archive): nullable execution join keys and bound the requeue
outerlook Jul 2, 2026
ad189e7
Merge pull request #55 from usherlabs/feat/fiet-924-archive-forwarder…
outerlook Jul 2, 2026
61a6497
fix(build): satisfy strict dts tsc pass for archive helpers
outerlook Jul 2, 2026
eb3351e
Merge pull request #56 from usherlabs/fix/strict-tsc-publish-build
outerlook Jul 2, 2026
02bc1fe
chore(ci): gate PRs on the publish build + pin the archive wire contract
outerlook Jul 2, 2026
248ad4a
Merge pull request #57 from usherlabs/chore/ci-build-gate-and-contrac…
outerlook Jul 2, 2026
b1f4f6b
ci(archive): publish the archive-forwarder image on tags and manual d…
outerlook Jul 2, 2026
eab3df2
Merge pull request #58 from usherlabs/chore/publish-archive-forwarder…
outerlook Jul 2, 2026
7b0fd61
fix(archive): enclave-safe forwarder transport via node http
outerlook Jul 2, 2026
377908b
chore(release): bump cex-broker to 0.2.20
outerlook Jul 2, 2026
f6b5ed7
Merge pull request #59 from usherlabs/fix/archive-forwarder-enclave-http
outerlook Jul 2, 2026
84b591e
feat(archive): durable fill and transfer execution facts
outerlook Jul 7, 2026
abca49c
Merge pull request #61 from usherlabs/archive-fills-transfers
outerlook Jul 7, 2026
b49a91f
chore(release): bump cex-broker to 0.2.21
outerlook Jul 7, 2026
efdd12c
Remove expiry from venue cash-flow audit tables
outerlook Jul 8, 2026
ef9ea38
fix(broker): surface sanitized underlying error detail in typed Execu…
outerlook Jul 8, 2026
e8c88f2
Merge pull request #62 from usherlabs/fix/typed-error-detail
outerlook Jul 8, 2026
1765f1a
Merge pull request #63 from usherlabs/chore/audit-facts-no-ttl
outerlook Jul 8, 2026
445f7b5
chore(release): bump cex-broker to 0.2.22
outerlook Jul 8, 2026
b7ef527
feat(archive): accept control-plane snapshot tables and policy source…
outerlook Jul 10, 2026
e7de48b
test(archive): satisfy biome for archive forwarder coverage
outerlook Jul 10, 2026
8884e94
Merge pull request #64 from usherlabs/feat/archive-control-plane-pr678
outerlook Jul 10, 2026
75fde6c
chore(release): bump cex-broker to 0.2.23
outerlook Jul 10, 2026
08b2853
ci(publish): stop chasing npm@latest and allow dispatch republish
outerlook Jul 10, 2026
6853c74
ci(publish): pin Node 24 + npm 12 for npm trusted publishing
outerlook Jul 10, 2026
df9f7c7
Archive withdrawal history observations
outerlook Jul 13, 2026
eb316be
fix(archive): retain withdrawal tracker bounds
outerlook Jul 13, 2026
586c3a6
Merge pull request #65 from usherlabs/feat/withdrawal-observation-arc…
outerlook Jul 13, 2026
8c0fe54
chore(release): bump cex-broker to 0.2.24
outerlook Jul 14, 2026
6217550
Merge pull request #66 from usherlabs/release/cex-broker-0.2.24
outerlook Jul 14, 2026
aa503de
feat: archive periodic spot account balances
outerlook Jul 14, 2026
fe7bc3d
fix: keep balance snapshots out of OTel logs
outerlook Jul 14, 2026
6115003
Merge pull request #67 from usherlabs/feat/archive-account-balance-sn…
outerlook Jul 14, 2026
be690b4
Fix Binance user-data request IDs
outerlook Jul 14, 2026
df7a2cb
Document Binance user-data request id constraint
outerlook Jul 14, 2026
104dce3
Merge pull request #68 from usherlabs/fix/binance-user-data-ws-reques…
outerlook Jul 15, 2026
77fab00
chore(release): bump cex-broker to 0.2.25
outerlook Jul 15, 2026
615a450
Merge pull request #69 from usherlabs/release/cex-broker-0.2.25
outerlook Jul 15, 2026
4095ac1
Add supervised multi-pair OHLCV collector
outerlook Jul 16, 2026
083bcc9
Package keyless OHLCV collector service
outerlook Jul 16, 2026
618d82c
Test OHLCV stream supervision over gRPC
outerlook Jul 16, 2026
4ec4703
Isolate OHLCV pair supervisors
outerlook Jul 16, 2026
5711641
Close OHLCV collector resources on shutdown
outerlook Jul 16, 2026
8b4f8d3
Keep market subscriptions alive until cancellation
outerlook Jul 16, 2026
92c72cf
Harden Subscribe broker shutdown and collector image
outerlook Jul 16, 2026
a73e2e6
Merge pull request #70 from usherlabs/feat/ohlcv-collector-service
outerlook Jul 16, 2026
3cd60db
ci: publish OHLCV collector image on release tags
outerlook Jul 16, 2026
af39eb8
chore(release): bump cex-broker to 0.2.26
outerlook Jul 16, 2026
a5f3368
Merge pull request #71 from usherlabs/ci/publish-ohlcv-collector
outerlook Jul 16, 2026
e5048b2
Merge pull request #72 from usherlabs/release/cex-broker-0.2.26
outerlook Jul 16, 2026
9bd0e6c
Stream OHLCV updates and guard archived bars
outerlook Jul 16, 2026
b98981d
Warn when the archive queue sheds rows
outerlook Jul 16, 2026
fe67239
Merge pull request #73 from usherlabs/fix/ohlcv-subscribe-watch-stream
outerlook Jul 16, 2026
e02f13c
chore(release): bump cex-broker to 0.2.27
outerlook Jul 16, 2026
6ab3096
Merge pull request #74 from usherlabs/release/cex-broker-0.2.27
outerlook Jul 16, 2026
8ba3235
Own broker archive delivery and loss handling
outerlook Jul 20, 2026
4711f87
Harden archive durability failure handling
outerlook Jul 20, 2026
b5bfdf5
Merge pull request #75 from usherlabs/fix/archive-delivery-ownership
outerlook Jul 21, 2026
8f31a49
chore(release): bump cex-broker to 0.2.28
outerlook Jul 21, 2026
988673c
Merge pull request #76 from usherlabs/release/cex-broker-0.2.28
outerlook Jul 21, 2026
e2abba1
Fix Node-compatible package output
outerlook Jul 21, 2026
a936cff
Merge pull request #77 from usherlabs/fix/node-runtime-package
outerlook Jul 21, 2026
724e0ce
chore(release): bump cex-broker to 0.2.29
outerlook Jul 21, 2026
7dcecf5
Merge pull request #78 from usherlabs/release/cex-broker-0.2.29
outerlook Jul 21, 2026
4bff513
Forward typed create order client ID
outerlook Jul 21, 2026
064c2ab
Merge pull request #79 from usherlabs/fix/create-order-client-order-i…
outerlook Jul 21, 2026
34db3df
chore(release): bump cex-broker to 0.2.30
outerlook Jul 21, 2026
b40221c
Merge pull request #80 from usherlabs/release/cex-broker-0.2.30
outerlook Jul 21, 2026
ccbcef6
Emit archive telemetry for passthrough create orders
outerlook Jul 22, 2026
1686316
Link failed passthrough create orders to their market snapshot
outerlook Jul 22, 2026
7c7100d
Merge pull request #81 from usherlabs/fix/passthrough-create-order-ar…
outerlook Jul 22, 2026
9256ddd
Link failed typed create orders to their market snapshot
outerlook Jul 22, 2026
1963e65
Merge pull request #82 from usherlabs/fix/typed-create-order-failure-…
outerlook Jul 22, 2026
9921e89
chore(release): bump cex-broker to 0.2.31
outerlook Jul 22, 2026
e1c18d0
Merge pull request #83 from usherlabs/release/cex-broker-0.2.31
outerlook Jul 22, 2026
cc7128f
Archive client withdrawal ids
outerlook Jul 28, 2026
81a4b56
Migrate existing transfer_events tables for the new column
outerlook Jul 28, 2026
0b0ae84
Merge pull request #84 from usherlabs/feat/transfer-archive-client-wi…
outerlook Jul 29, 2026
2f491c3
chore(release): bump cex-broker to 0.2.32
outerlook Jul 29, 2026
0d0b70b
Merge pull request #85 from usherlabs/release/cex-broker-0.2.32
outerlook Jul 29, 2026
1bc7df1
Honor passive intent on typed order placement
outerlook Jul 29, 2026
6ad5240
fix(orders): classify passive failures only for the venue submission …
outerlook Jul 29, 2026
7b8e0be
Merge pull request #86 from usherlabs/feat/passive-order-intent
outerlook Jul 29, 2026
79dcca6
Add order author to execution archive
outerlook Jul 29, 2026
8790a1a
Merge pull request #87 from usherlabs/feat/order-archive-authorship
outerlook Jul 29, 2026
1cd39ca
chore(release): bump cex-broker to 0.2.33
outerlook Jul 29, 2026
e5cab5b
Merge pull request #88 from usherlabs/release/cex-broker-0.2.33
outerlook Jul 29, 2026
fa42488
feat(archive): add per-run seq column to strategy_data tables
outerlook Jul 29, 2026
8e25112
Merge pull request #89 from usherlabs/feat/archive-sequence-column
outerlook Jul 29, 2026
f9751e5
chore(release): bump cex-broker to 0.2.34
outerlook Jul 29, 2026
2698f48
Merge pull request #90 from usherlabs/release/cex-broker-0.2.34
outerlook Jul 29, 2026
41001c4
fix(orders): preserve venue error codes for passive submissions
outerlook Jul 30, 2026
eb07c5a
docs(orders): record why balance and credential faults are not passiv…
outerlook Jul 30, 2026
921a21d
feat: archive venue deposits in the background
outerlook Jul 30, 2026
f5bf7a9
test: verify background deposit archiving
outerlook Jul 30, 2026
170b7e9
refactor: keep deposit polling code concise
outerlook Jul 30, 2026
74c4bab
fix: preserve deposit status transitions in archive
outerlook Jul 30, 2026
31e9136
Merge pull request #91 from usherlabs/fix/passive-error-taxonomy
outerlook Jul 30, 2026
98a3c05
fix: preserve venue deposit statuses in the archive
outerlook Jul 30, 2026
e0a2fb7
Merge pull request #92 from usherlabs/feat/deposit-archive-poller
outerlook Jul 30, 2026
e401b23
chore(release): bump cex-broker to 0.2.35
outerlook Jul 30, 2026
2f27d5a
Merge pull request #93 from usherlabs/release/cex-broker-0.2.35
outerlook Jul 30, 2026
e5b304a
Preserve locked deposit status transitions
outerlook Jul 31, 2026
fae02f4
Merge pull request #94 from usherlabs/fix/deposit-status-transitions
outerlook Jul 31, 2026
cb150b0
feat(archive): add forwarder OpenTelemetry metrics
outerlook Jul 31, 2026
92964d1
fix(archive): bound rejected-table metric labels and gate the flush h…
outerlook Jul 31, 2026
a2adedb
Merge pull request #95 from usherlabs/feat/archive-forwarder-otel
outerlook Jul 31, 2026
f92c1ef
release: cex-broker 0.2.36
outerlook Jul 31, 2026
cd416a4
Merge pull request #96 from usherlabs/release/cex-broker-0.2.36
outerlook Jul 31, 2026
704abc8
fix(archive): correlate withdrawal observations with their submission
outerlook Jul 31, 2026
d80e8e4
Merge pull request #97 from usherlabs/fix/withdrawal-observation-corr…
outerlook Jul 31, 2026
0c258d0
fix(archive): index Binance internal transfer ids
outerlook Jul 31, 2026
d20daf8
Merge pull request #98 from usherlabs/fix/internal-transfer-venue-id-…
outerlook Jul 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ name: CI

on:
push:
branches: [master]
branches: [master, develop]
pull_request:
branches: [master]
branches: [master, develop]

jobs:
test:
Expand All @@ -31,4 +31,4 @@ jobs:
run: bunx @biomejs/biome lint .

- name: Run tests
run: bun test
run: bun test
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,10 @@ build
/proto/**
src/proto/*.ts
src/proto/**/*.ts
!src/proto/node.descriptor.ts

src/assets/proto/**
src/assets/proto/**

# Worktrees, Agents
.codex
.emdash
18 changes: 18 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## Agent Orchestrator (ao) Session

You are running inside an Agent Orchestrator managed workspace.

## Source layout (cex-broker)

- `src/server.ts` — gRPC registration and handler wiring only; do not add domain logic here.
- `src/handlers/` — RPC dispatch (`execute-action/`, `subscribe/`).
- `src/helpers/` — domain and shared utilities (`shared/`, `grpc/`, `order-book.ts`, etc.).
- Dependency direction: `server` → `handlers` → `helpers`. Helpers must not import from `server` or `handlers`.
- Import concrete helper modules (e.g. `helpers/deposit`); avoid growing `helpers/index.ts` with server utilities.
Session metadata is updated automatically via shell wrappers.

If automatic updates fail, you can manually update metadata:
```bash
~/.ao/bin/ao-metadata-helper.sh # sourced automatically
# Then call: update_ao_metadata <key> <value>
```
11 changes: 9 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ RUN apt-get update -y \
&& apt-get install -y --no-install-recommends ca-certificates curl \
&& rm -rf /var/lib/apt/lists/*

RUN bun install --global @usherlabs/cex-broker@0.2.6
COPY package.json bun.lock ./
COPY patches ./patches
RUN bun install --frozen-lockfile

CMD ["cex-broker"]
COPY build.ts proto-gen.sh tsconfig.json ./
COPY scripts ./scripts
COPY src ./src
RUN bun run build

CMD ["bun", "./dist/commands/cli.js"]
52 changes: 51 additions & 1 deletion POLICY.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,17 @@ Accepted values:
- **A network/chain identifier** — e.g. `"ARBITRUM"`, `"BEP20"`, `"ETH"`, `"SOL"`. The value must match what the exchange uses for that chain.
- **`"*"`** — wildcard; matches any network.

Even if the policy allows a network, the selected exchange must also support that network for the currency or the request will still fail at execution time.
The broker normalizes common operator aliases before matching policy:

| Operator alias | Broker network id |
|----------------|-------------------|
| `ARB`, `ARBITRUM` | `ARBITRUM` |
| `ETH`, `ERC20`, `ETHEREUM` | `ETHEREUM` |
| `BNB`, `BSC`, `BEP20` | `BNB` |

Even if the policy allows a normalized network, the selected exchange must also
support that network for the currency or the request will still fail at
execution time.

---

Expand Down Expand Up @@ -191,6 +201,46 @@ Common rejection reasons:
- address not whitelisted
- token not in `coins` for the matched rule

### Narrow Binance/MEXC USDC BEP20 corridor example

Use a dedicated policy for treasury corridors instead of relying on broad
exchange/network rules. The example
`policy/policy.binance-mexc-usdc-bep20.example.json` permits only USDC over the
normalized `BNB` network family (`BNB`, `BSC`, or `BEP20`) between Binance and
MEXC:

```json
{
"withdraw": {
"rule": [
{
"exchange": "BINANCE",
"network": "BEP20",
"coins": ["USDC"],
"whitelist": ["0x1111111111111111111111111111111111111111"]
},
{
"exchange": "MEXC",
"network": "BEP20",
"coins": ["USDC"],
"whitelist": ["0x2222222222222222222222222222222222222222"]
}
]
},
"deposit": {
"rule": [
{ "exchange": "MEXC", "network": "BEP20", "coins": ["USDC"] },
{ "exchange": "BINANCE", "network": "BEP20", "coins": ["USDC"] }
]
}
}
```

This policy does not authorize volatile inventory transfer. If a treasury
ceremony chooses remote volatile acquisition, that acquired-asset transfer must
be explicitly requested, live-discovered, policy-approved, cost-gated, and
attested by the caller.

---

## Order policy (`order.rule`)
Expand Down
Loading
Loading