@usesigil/kit 0.7.1 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -47
- package/dist/agent-analytics.d.ts.map +1 -1
- package/dist/agent-analytics.js +8 -23
- package/dist/agent-analytics.js.map +1 -1
- package/dist/balance-tracker.d.ts +7 -0
- package/dist/balance-tracker.d.ts.map +1 -1
- package/dist/balance-tracker.js +26 -9
- package/dist/balance-tracker.js.map +1 -1
- package/dist/dashboard/from-json.d.ts +49 -0
- package/dist/dashboard/from-json.d.ts.map +1 -0
- package/dist/dashboard/from-json.js +221 -0
- package/dist/dashboard/from-json.js.map +1 -0
- package/dist/dashboard/index.d.ts +34 -3
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +45 -3
- package/dist/dashboard/index.js.map +1 -1
- package/dist/dashboard/reads.d.ts.map +1 -1
- package/dist/dashboard/reads.js +6 -3
- package/dist/dashboard/reads.js.map +1 -1
- package/dist/errors/walk.d.ts +8 -0
- package/dist/errors/walk.d.ts.map +1 -1
- package/dist/errors/walk.js +10 -0
- package/dist/errors/walk.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/inspector.d.ts.map +1 -1
- package/dist/inspector.js +1 -2
- package/dist/inspector.js.map +1 -1
- package/dist/integrations/compose-errors.d.ts.map +1 -1
- package/dist/integrations/compose-errors.js +15 -1
- package/dist/integrations/compose-errors.js.map +1 -1
- package/dist/math-utils.d.ts +20 -0
- package/dist/math-utils.d.ts.map +1 -1
- package/dist/math-utils.js +24 -0
- package/dist/math-utils.js.map +1 -1
- package/dist/portfolio-analytics.d.ts.map +1 -1
- package/dist/portfolio-analytics.js +5 -8
- package/dist/portfolio-analytics.js.map +1 -1
- package/dist/priority-fees.d.ts +3 -0
- package/dist/priority-fees.d.ts.map +1 -1
- package/dist/priority-fees.js +12 -19
- package/dist/priority-fees.js.map +1 -1
- package/dist/protocol-analytics.d.ts.map +1 -1
- package/dist/protocol-analytics.js +3 -2
- package/dist/protocol-analytics.js.map +1 -1
- package/dist/protocol-names.d.ts.map +1 -1
- package/dist/protocol-names.js +5 -7
- package/dist/protocol-names.js.map +1 -1
- package/dist/seal.d.ts +66 -13
- package/dist/seal.d.ts.map +1 -1
- package/dist/seal.js +136 -19
- package/dist/seal.js.map +1 -1
- package/dist/shield.d.ts.map +1 -1
- package/dist/shield.js +7 -5
- package/dist/shield.js.map +1 -1
- package/dist/spending-analytics.d.ts.map +1 -1
- package/dist/spending-analytics.js +4 -7
- package/dist/spending-analytics.js.map +1 -1
- package/dist/state-resolver.d.ts +14 -0
- package/dist/state-resolver.d.ts.map +1 -1
- package/dist/state-resolver.js +31 -1
- package/dist/state-resolver.js.map +1 -1
- package/dist/tee/providers/crossmint.d.ts +5 -8
- package/dist/tee/providers/crossmint.d.ts.map +1 -1
- package/dist/tee/providers/crossmint.js +10 -76
- package/dist/tee/providers/crossmint.js.map +1 -1
- package/dist/tee/providers/managed-verifier.d.ts +31 -0
- package/dist/tee/providers/managed-verifier.d.ts.map +1 -0
- package/dist/tee/providers/managed-verifier.js +81 -0
- package/dist/tee/providers/managed-verifier.js.map +1 -0
- package/dist/tee/providers/privy.d.ts +5 -8
- package/dist/tee/providers/privy.d.ts.map +1 -1
- package/dist/tee/providers/privy.js +10 -74
- package/dist/tee/providers/privy.js.map +1 -1
- package/dist/tee/verify.d.ts +0 -1
- package/dist/tee/verify.d.ts.map +1 -1
- package/dist/tee/verify.js +10 -11
- package/dist/tee/verify.js.map +1 -1
- package/dist/tokens.d.ts +1 -0
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +23 -1
- package/dist/tokens.js.map +1 -1
- package/dist/types.d.ts +24 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +55 -9
- package/dist/types.js.map +1 -1
- package/dist/vault-analytics.d.ts.map +1 -1
- package/dist/vault-analytics.js +2 -3
- package/dist/vault-analytics.js.map +1 -1
- package/dist/x402/transfer-builder.d.ts +2 -5
- package/dist/x402/transfer-builder.d.ts.map +1 -1
- package/dist/x402/transfer-builder.js +12 -36
- package/dist/x402/transfer-builder.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -71,58 +71,58 @@ Sigil wraps arbitrary DeFi instructions from any source (Jupiter API, Solana Age
|
|
|
71
71
|
|
|
72
72
|
### Core — Create vaults, wrap instructions, execute
|
|
73
73
|
|
|
74
|
-
| Export
|
|
75
|
-
|
|
76
|
-
| `SigilClient`
|
|
77
|
-
| `wrap()`
|
|
78
|
-
| `createVault()`
|
|
79
|
-
| `createAndSendVault()`
|
|
80
|
-
| `buildOwnerTransaction()` | Compose owner-only transactions (policy updates, agent management).
|
|
81
|
-
| `withVault()`
|
|
74
|
+
| Export | Description |
|
|
75
|
+
| ------------------------- | ---------------------------------------------------------------------------------------- |
|
|
76
|
+
| `SigilClient` | Stateful client — holds vault/agent/network, manages caches. Recommended for production. |
|
|
77
|
+
| `wrap()` | Stateless wrapping function — takes DeFi instructions, returns a composed transaction. |
|
|
78
|
+
| `createVault()` | Build vault creation instructions (caller signs and sends). |
|
|
79
|
+
| `createAndSendVault()` | One-call vault creation — build, sign, send, confirm. |
|
|
80
|
+
| `buildOwnerTransaction()` | Compose owner-only transactions (policy updates, agent management). |
|
|
81
|
+
| `withVault()` | Policy-guided vault creation — policies in, wrapped client out. |
|
|
82
82
|
|
|
83
83
|
### State — Query vaults, budgets, spending
|
|
84
84
|
|
|
85
|
-
| Export
|
|
86
|
-
|
|
87
|
-
| `resolveVaultState()`
|
|
88
|
-
| `resolveVaultBudget()`
|
|
89
|
-
| `getSpendingHistory()`
|
|
90
|
-
| `findVaultsByOwner()`
|
|
91
|
-
| `resolveVaultStateForOwner()` | Vault state with pending policy/constraint updates for dashboards.
|
|
85
|
+
| Export | Description |
|
|
86
|
+
| ----------------------------- | ----------------------------------------------------------------------------- |
|
|
87
|
+
| `resolveVaultState()` | Fetch complete vault state (accounts, policy, tracker, overlay, constraints). |
|
|
88
|
+
| `resolveVaultBudget()` | Per-agent budget: rolling 24h spend, cap, remaining headroom. |
|
|
89
|
+
| `getSpendingHistory()` | 144-epoch circular buffer to chart-ready time series. |
|
|
90
|
+
| `findVaultsByOwner()` | Enumerate all vaults owned by an address. |
|
|
91
|
+
| `resolveVaultStateForOwner()` | Vault state with pending policy/constraint updates for dashboards. |
|
|
92
92
|
|
|
93
93
|
### Analytics — Security checks, agent metrics, portfolio
|
|
94
94
|
|
|
95
|
-
| Export
|
|
96
|
-
|
|
97
|
-
| `getSecurityPosture()`
|
|
98
|
-
| `getVaultHealth()`
|
|
99
|
-
| `getAgentProfile()`
|
|
100
|
-
| `getAgentLeaderboard()`
|
|
101
|
-
| `getPortfolioOverview()` | Cross-vault summary for multi-vault operators.
|
|
102
|
-
| `getAuditTrail()`
|
|
103
|
-
| `getSpendingVelocity()`
|
|
95
|
+
| Export | Description |
|
|
96
|
+
| ------------------------ | ------------------------------------------------------------------- |
|
|
97
|
+
| `getSecurityPosture()` | 13-point security assessment with pass/fail, severity, remediation. |
|
|
98
|
+
| `getVaultHealth()` | Risk score, liquidity, utilization. |
|
|
99
|
+
| `getAgentProfile()` | Single agent stats — spend, tx count, errors. |
|
|
100
|
+
| `getAgentLeaderboard()` | Top agents by spend or profit. |
|
|
101
|
+
| `getPortfolioOverview()` | Cross-vault summary for multi-vault operators. |
|
|
102
|
+
| `getAuditTrail()` | Chronological audit log filtered by category, actor, or time range. |
|
|
103
|
+
| `getSpendingVelocity()` | Rate of spend over configurable time windows. |
|
|
104
104
|
|
|
105
105
|
7 analytics modules with 42 functions total — see source for the full list.
|
|
106
106
|
|
|
107
107
|
### Safety — Pre-flight checks, error handling
|
|
108
108
|
|
|
109
|
-
| Export
|
|
110
|
-
|
|
111
|
-
| `shield()`
|
|
112
|
-
| `simulateBeforeSend()` | RPC simulation with error extraction.
|
|
113
|
-
| `detectDrainAttempt()` | Heuristic drain detection from balance deltas.
|
|
114
|
-
| `toAgentError()`
|
|
109
|
+
| Export | Description |
|
|
110
|
+
| ---------------------- | ------------------------------------------------------------------------------------------------- |
|
|
111
|
+
| `shield()` | Client-side policy gate — evaluate instructions before signing. |
|
|
112
|
+
| `simulateBeforeSend()` | RPC simulation with error extraction. |
|
|
113
|
+
| `detectDrainAttempt()` | Heuristic drain detection from balance deltas. |
|
|
114
|
+
| `toAgentError()` | Convert any error to structured `AgentError` with category, retryable flag, and recovery actions. |
|
|
115
115
|
|
|
116
116
|
### Formatting — Display helpers (11 functions)
|
|
117
117
|
|
|
118
|
-
| Export
|
|
119
|
-
|
|
120
|
-
| `formatUsd()`
|
|
121
|
-
| `formatUsdCompact()`
|
|
122
|
-
| `formatPercent()`
|
|
123
|
-
| `formatDuration()`
|
|
124
|
-
| `formatAddress()`
|
|
125
|
-
| `formatTokenAmount()` | `1,000.000000 USDC`
|
|
118
|
+
| Export | Description |
|
|
119
|
+
| --------------------- | ------------------------------- |
|
|
120
|
+
| `formatUsd()` | `$1,234.56` with full precision |
|
|
121
|
+
| `formatUsdCompact()` | `$1.2M`, `$500K` |
|
|
122
|
+
| `formatPercent()` | `12.34%` |
|
|
123
|
+
| `formatDuration()` | `1d 2h 3m` |
|
|
124
|
+
| `formatAddress()` | `4ZeV...wrHL` |
|
|
125
|
+
| `formatTokenAmount()` | `1,000.000000 USDC` |
|
|
126
126
|
|
|
127
127
|
Plus: `formatUsdSigned`, `formatPercentSigned`, `formatRelativeTime`, `formatTimeUntil`, `formatTokenAmountCompact`.
|
|
128
128
|
|
|
@@ -130,12 +130,12 @@ Plus: `formatUsdSigned`, `formatPercentSigned`, `formatRelativeTime`, `formatTim
|
|
|
130
130
|
|
|
131
131
|
4 pre-configured vault templates for common use cases:
|
|
132
132
|
|
|
133
|
-
| Preset
|
|
134
|
-
|
|
135
|
-
| `jupiter-swap-bot`
|
|
136
|
-
| `perps-trader`
|
|
137
|
-
| `lending-optimizer` | Deposit/Withdraw | $2,000
|
|
138
|
-
| `full-access`
|
|
133
|
+
| Preset | Permissions | Daily Cap | Slippage |
|
|
134
|
+
| ------------------- | ---------------- | --------- | -------- |
|
|
135
|
+
| `jupiter-swap-bot` | Swap only | $500 | 2% |
|
|
136
|
+
| `perps-trader` | Perps + Swap | $5,000 | 5% |
|
|
137
|
+
| `lending-optimizer` | Deposit/Withdraw | $2,000 | 1% |
|
|
138
|
+
| `full-access` | All 21 actions | $10,000 | 5% |
|
|
139
139
|
|
|
140
140
|
```typescript
|
|
141
141
|
import { getPreset, presetToCreateVaultFields } from "@usesigil/kit";
|
|
@@ -144,6 +144,70 @@ const preset = getPreset("jupiter-swap-bot");
|
|
|
144
144
|
const fields = presetToCreateVaultFields(preset);
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
+
### HTTP 402 Payments (x402)
|
|
148
|
+
|
|
149
|
+
Sigil supports the [x402 standard](https://www.x402.org/) for automatic HTTP 402 payment negotiation on Solana. Use `shieldedFetch()` to handle payment-required responses transparently — spending limits and vault policies are enforced on every payment.
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
import { shieldedFetch, createShieldedFetch } from "@usesigil/kit/x402";
|
|
153
|
+
|
|
154
|
+
// One-shot: fetch a paywalled URL, auto-negotiate payment
|
|
155
|
+
const response = await shieldedFetch(url, {
|
|
156
|
+
vault,
|
|
157
|
+
agent,
|
|
158
|
+
rpc,
|
|
159
|
+
network: "devnet",
|
|
160
|
+
maxPaymentUsd: 1_000_000n, // $1 max per request
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
if (response.x402?.paid) {
|
|
164
|
+
console.log(`Paid ${response.x402.amount} to ${response.x402.payTo}`);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Reusable: create a pre-configured fetch function
|
|
168
|
+
const fetch402 = createShieldedFetch({ vault, agent, rpc, network: "devnet" });
|
|
169
|
+
const res = await fetch402("https://api.example.com/premium-data");
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
The x402 subpath exports codec functions (header parsing), payment selectors, nonce tracking, amount validation, and 5 typed error classes (`X402ParseError`, `X402PaymentError`, `X402UnsupportedError`, `X402DestinationBlockedError`, `X402ReplayError`). See [INSTRUCTIONS.md](../docs/INSTRUCTIONS.md) for the full 12-step `shieldedFetch()` flow.
|
|
173
|
+
|
|
174
|
+
## Branded Types
|
|
175
|
+
|
|
176
|
+
All USD amounts, capability tiers, and slot numbers are branded bigint types that prevent accidental misuse at compile time:
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
import {
|
|
180
|
+
usd,
|
|
181
|
+
capability,
|
|
182
|
+
slot,
|
|
183
|
+
type UsdBaseUnits,
|
|
184
|
+
type CapabilityTier,
|
|
185
|
+
} from "@usesigil/kit";
|
|
186
|
+
|
|
187
|
+
const cap: UsdBaseUnits = usd(500_000_000n); // $500
|
|
188
|
+
const tier: CapabilityTier = capability(2n); // Operator
|
|
189
|
+
|
|
190
|
+
// TypeScript ERROR — these types are not interchangeable:
|
|
191
|
+
// addAgent(agent, cap, tier); // cap and tier swapped → compile error
|
|
192
|
+
addAgent(agent, tier, cap); // correct order → compiles
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Zero runtime cost — the brand is a phantom type that TypeScript erases at compile time.
|
|
196
|
+
|
|
197
|
+
## MCP Round-Trip (fromJSON)
|
|
198
|
+
|
|
199
|
+
When AI agents consume Sigil via MCP, they receive JSON from tool responses and pass data back to subsequent calls. The `fromJSON` functions rehydrate bigints, typed addresses, and `toJSON()` methods:
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
import { overviewDataFromJSON } from "@usesigil/kit/dashboard";
|
|
203
|
+
|
|
204
|
+
// MCP tool response → JSON → rehydrated live types
|
|
205
|
+
const overview = overviewDataFromJSON(toolResponse.data);
|
|
206
|
+
console.log(overview.spending.global.today); // bigint, not string
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
10 fromJSON functions cover all dashboard types. Available from `@usesigil/kit/dashboard`.
|
|
210
|
+
|
|
147
211
|
## Error Handling
|
|
148
212
|
|
|
149
213
|
All errors from `wrap()` and `executeAndConfirm()` convert to structured `AgentError`:
|
|
@@ -155,9 +219,9 @@ try {
|
|
|
155
219
|
await client.executeAndConfirm(instructions, opts);
|
|
156
220
|
} catch (err) {
|
|
157
221
|
const e = toAgentError(err);
|
|
158
|
-
console.log(e.category);
|
|
159
|
-
console.log(e.retryable);
|
|
160
|
-
console.log(e.recovery_actions);
|
|
222
|
+
console.log(e.category); // "PERMISSION" | "SPENDING_CAP" | "INPUT_VALIDATION" | ...
|
|
223
|
+
console.log(e.retryable); // boolean
|
|
224
|
+
console.log(e.recovery_actions); // [{ action, description, tool? }]
|
|
161
225
|
}
|
|
162
226
|
```
|
|
163
227
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-analytics.d.ts","sourceRoot":"","sources":["../src/agent-analytics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-analytics.d.ts","sourceRoot":"","sources":["../src/agent-analytics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAQ/E,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,eAAe,EAAE,MAAM,CAAC;IACxB,wFAAwF;IACxF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uDAAuD;IACvD,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sEAAsE;IACtE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;CAClC;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,kBAAkB,EACzB,YAAY,EAAE,OAAO,GACpB,YAAY,GAAG,IAAI,CAkCrB;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,EAAE,CAmD7E;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,kBAAkB,GACxB,mBAAmB,CAqBrB;AAoBD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EAAE,EAC3B,YAAY,EAAE,OAAO,GACpB,mBAAmB,CA2BrB"}
|
package/dist/agent-analytics.js
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
* All functions are pure (no RPC) — they derive metrics from already-resolved
|
|
5
5
|
* vault state. The dashboard Agents tab and Agent Detail page use these.
|
|
6
6
|
*/
|
|
7
|
-
import { bytesToAddress } from "./state-resolver.js";
|
|
7
|
+
import { bytesToAddress, findAgentOverlaySlot } from "./state-resolver.js";
|
|
8
8
|
import { FULL_CAPABILITY } from "./types.js";
|
|
9
9
|
import { computeHerfindahl } from "./math-utils.js";
|
|
10
|
+
import { computeUtilizationPercent } from "./math-utils.js";
|
|
10
11
|
// ─── getAgentProfile ─────────────────────────────────────────────────────────
|
|
11
12
|
/**
|
|
12
13
|
* Build a complete profile for a single agent within a vault.
|
|
@@ -22,25 +23,11 @@ export function getAgentProfile(state, agentAddress) {
|
|
|
22
23
|
cap: 0n,
|
|
23
24
|
remaining: 0n,
|
|
24
25
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return bytesToAddress(e.agent) === agentAddress;
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
if (slotIdx >= 0 && slotIdx < overlay.lifetimeSpend.length) {
|
|
37
|
-
lifetimeSpend = overlay.lifetimeSpend[slotIdx];
|
|
38
|
-
}
|
|
39
|
-
if (slotIdx >= 0 && slotIdx < (overlay.lifetimeTxCount?.length ?? 0)) {
|
|
40
|
-
lifetimeTxCount = overlay.lifetimeTxCount[slotIdx];
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const capUtilization = budget.cap > 0n ? Number((budget.spent24h * 10000n) / budget.cap) / 100 : 0;
|
|
26
|
+
// PR 3.B F038: use extracted helper instead of inline overlay lookup
|
|
27
|
+
const overlaySlot = findAgentOverlaySlot(overlay, agentAddress);
|
|
28
|
+
const lifetimeSpend = overlaySlot?.lifetimeSpend ?? 0n;
|
|
29
|
+
const lifetimeTxCount = overlaySlot?.lifetimeTxCount ?? 0n;
|
|
30
|
+
const capUtilization = computeUtilizationPercent(budget.spent24h, budget.cap);
|
|
44
31
|
return {
|
|
45
32
|
address: agentAddress,
|
|
46
33
|
capability: agentEntry.capability,
|
|
@@ -83,9 +70,7 @@ export function getAgentLeaderboard(state) {
|
|
|
83
70
|
lifetimeSpend = overlay.lifetimeSpend[slotIdx];
|
|
84
71
|
}
|
|
85
72
|
}
|
|
86
|
-
const capUtilization = budget.cap
|
|
87
|
-
? Number((budget.spent24h * 10000n) / budget.cap) / 100
|
|
88
|
-
: 0;
|
|
73
|
+
const capUtilization = computeUtilizationPercent(budget.spent24h, budget.cap);
|
|
89
74
|
return {
|
|
90
75
|
address: agentEntry.pubkey,
|
|
91
76
|
rank: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-analytics.js","sourceRoot":"","sources":["../src/agent-analytics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-analytics.js","sourceRoot":"","sources":["../src/agent-analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -96,6 +96,13 @@ export declare class BalanceSnapshotStore {
|
|
|
96
96
|
get size(): number;
|
|
97
97
|
clear(): void;
|
|
98
98
|
toJSON(): string;
|
|
99
|
+
/**
|
|
100
|
+
* Reconstruct a BalanceSnapshotStore from its JSON serialization.
|
|
101
|
+
*
|
|
102
|
+
* F12 fix (type-design-analyzer): wraps BigInt() calls in try/catch so
|
|
103
|
+
* corrupted JSON surfaces a domain-relevant error instead of raw
|
|
104
|
+
* SyntaxError from BigInt("not-a-number").
|
|
105
|
+
*/
|
|
99
106
|
static fromJSON(json: string): BalanceSnapshotStore;
|
|
100
107
|
}
|
|
101
108
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance-tracker.d.ts","sourceRoot":"","sources":["../src/balance-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAoB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"balance-tracker.d.ts","sourceRoot":"","sources":["../src/balance-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAoB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAO5D,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAID;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,KAAK,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,kBAAkB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD,GAAG,QAAQ,CAiBX;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACtB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,OAAwB,GAChC,OAAO,CAAC,QAAQ,CAAC,CAGnB;AAgBD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,EACtB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,OAAwB,GAChC,OAAO,CAAC,YAAY,EAAE,CAAC,CA2BzB;AAID;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IACpE,OAAO,CAAC,iBAAiB,CAAgB;gBAE7B,UAAU,SAAM;IAI5B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI;IAkB3D,WAAW,IAAI,eAAe,GAAG,IAAI;IAIrC,QAAQ,IAAI,eAAe,GAAG,IAAI;IAMlC,SAAS,IAAI,eAAe,GAAG,IAAI;IAMnC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,IAAI;IAMb,MAAM,IAAI,MAAM;IAmBhB;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB;CAsCpD;AAID;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,oBAAoB,EAC3B,OAAO,GAAE,OAAwB,GAChC,UAAU,CAwBZ"}
|
package/dist/balance-tracker.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* - `BalanceSnapshotStore` + `getBalancePnL()`: Session-scoped P&L from balance snapshots (for charts)
|
|
7
7
|
*/
|
|
8
8
|
import { isStablecoinMint } from "./types.js";
|
|
9
|
+
import { computePnlPercent } from "./math-utils.js";
|
|
9
10
|
import { resolveVaultStateForOwner } from "./state-resolver.js";
|
|
10
11
|
import { resolveToken } from "./tokens.js";
|
|
11
12
|
// ─── On-chain P&L (lifetime) ────────────────────────────────────────────────
|
|
@@ -22,7 +23,7 @@ export function getVaultPnLFromState(state) {
|
|
|
22
23
|
const currentBalance = state.stablecoinBalances.usdc + state.stablecoinBalances.usdt;
|
|
23
24
|
const netInvestment = totalDeposited - totalWithdrawn;
|
|
24
25
|
const pnl = currentBalance - netInvestment;
|
|
25
|
-
const pnlPercent =
|
|
26
|
+
const pnlPercent = computePnlPercent(pnl, netInvestment);
|
|
26
27
|
return {
|
|
27
28
|
totalDeposited,
|
|
28
29
|
totalWithdrawn,
|
|
@@ -46,7 +47,7 @@ export async function getVaultPnL(rpc, vault, network = "mainnet-beta") {
|
|
|
46
47
|
return getVaultPnLFromState(state);
|
|
47
48
|
}
|
|
48
49
|
// ─── Token balance query ────────────────────────────────────────────────────
|
|
49
|
-
|
|
50
|
+
import { TOKEN_PROGRAM_ADDRESS } from "./types.js";
|
|
50
51
|
/**
|
|
51
52
|
* Fetch all SPL token balances for a vault PDA.
|
|
52
53
|
* Uses getTokenAccountsByOwner with jsonParsed encoding.
|
|
@@ -145,26 +146,42 @@ export class BalanceSnapshotStore {
|
|
|
145
146
|
maxEntries: this.maxEntries,
|
|
146
147
|
});
|
|
147
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Reconstruct a BalanceSnapshotStore from its JSON serialization.
|
|
151
|
+
*
|
|
152
|
+
* F12 fix (type-design-analyzer): wraps BigInt() calls in try/catch so
|
|
153
|
+
* corrupted JSON surfaces a domain-relevant error instead of raw
|
|
154
|
+
* SyntaxError from BigInt("not-a-number").
|
|
155
|
+
*/
|
|
148
156
|
static fromJSON(json) {
|
|
149
157
|
const data = JSON.parse(json);
|
|
150
158
|
const maxEntries = Number.isInteger(data.maxEntries)
|
|
151
159
|
? data.maxEntries
|
|
152
160
|
: 144;
|
|
153
161
|
const store = new BalanceSnapshotStore(maxEntries);
|
|
162
|
+
const safeBigInt = (val, field) => {
|
|
163
|
+
try {
|
|
164
|
+
return BigInt(val);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
console.warn(`[@usesigil/kit/BalanceSnapshotStore.fromJSON] Failed to parse bigint for "${field}": ${String(val).slice(0, 50)} — using 0n`);
|
|
168
|
+
return 0n;
|
|
169
|
+
}
|
|
170
|
+
};
|
|
154
171
|
if (data.baseline) {
|
|
155
172
|
store.baseline = {
|
|
156
|
-
timestamp:
|
|
173
|
+
timestamp: safeBigInt(data.baseline.timestamp, "baseline.timestamp"),
|
|
157
174
|
balances: data.baseline.balances.map((b) => ({
|
|
158
175
|
...b,
|
|
159
|
-
balance:
|
|
176
|
+
balance: safeBigInt(b.balance, "baseline.balance"),
|
|
160
177
|
})),
|
|
161
178
|
};
|
|
162
179
|
}
|
|
163
|
-
for (const snap of data.snapshots) {
|
|
164
|
-
const ts =
|
|
165
|
-
const bals = snap.balances.map((b) => ({
|
|
180
|
+
for (const snap of data.snapshots ?? []) {
|
|
181
|
+
const ts = safeBigInt(snap.timestamp, "snapshot.timestamp");
|
|
182
|
+
const bals = (snap.balances ?? []).map((b) => ({
|
|
166
183
|
...b,
|
|
167
|
-
balance:
|
|
184
|
+
balance: safeBigInt(b.balance, "snapshot.balance"),
|
|
168
185
|
}));
|
|
169
186
|
store.snapshots.set(ts, bals);
|
|
170
187
|
store.orderedTimestamps.push(ts);
|
|
@@ -193,7 +210,7 @@ export function getBalancePnL(store, network = "mainnet-beta") {
|
|
|
193
210
|
const startBalance = sumStablecoins(baseline.balances);
|
|
194
211
|
const currentBalance = sumStablecoins(latest.balances);
|
|
195
212
|
const delta = currentBalance - startBalance;
|
|
196
|
-
const percentChange =
|
|
213
|
+
const percentChange = computePnlPercent(delta, startBalance);
|
|
197
214
|
return { startBalance, currentBalance, delta, percentChange };
|
|
198
215
|
}
|
|
199
216
|
//# sourceMappingURL=balance-tracker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance-tracker.js","sourceRoot":"","sources":["../src/balance-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,gBAAgB,EAAgB,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA8C3C,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAGpC;IACC,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACrD,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACrD,MAAM,cAAc,GAClB,KAAK,CAAC,kBAAkB,CAAC,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC;IAChE,MAAM,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IACtD,MAAM,GAAG,GAAG,cAAc,GAAG,aAAa,CAAC;IAC3C,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"balance-tracker.js","sourceRoot":"","sources":["../src/balance-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fromJSON — MCP round-trip deserialization for dashboard types.
|
|
3
|
+
*
|
|
4
|
+
* PR 3.A: Every toJSON() in dashboard/types.ts now has a corresponding
|
|
5
|
+
* fromJSON() here. AI agents consuming Sigil via MCP receive JSON from tool
|
|
6
|
+
* responses and pass data back to subsequent tool calls. Without fromJSON,
|
|
7
|
+
* agents cannot reconstruct bigints from strings — breaking the round-trip.
|
|
8
|
+
*
|
|
9
|
+
* Pattern: standalone functions (not static methods) for tree-shaking.
|
|
10
|
+
* Each function accepts a Serialized* object and returns the live type
|
|
11
|
+
* with bigints, typed addresses, and full toJSON() methods restored.
|
|
12
|
+
*/
|
|
13
|
+
import type { Address } from "@solana/kit";
|
|
14
|
+
import type { VaultState, AgentData, SpendingData, ActivityRow, ActivityData, HealthData, PolicyData, OverviewData, TxResult, SerializedVaultState, SerializedAgentData, SerializedSpendingData, SerializedActivityRow, SerializedActivityData, SerializedHealthData, SerializedPolicyData, SerializedOverviewData, SerializedDiscoveredVault } from "./types.js";
|
|
15
|
+
/** Rehydrate a TxResult from its JSON representation. */
|
|
16
|
+
export declare function txResultFromJSON(data: {
|
|
17
|
+
signature: string;
|
|
18
|
+
}): TxResult;
|
|
19
|
+
/** Rehydrate a VaultState from its serialized JSON representation. */
|
|
20
|
+
export declare function vaultStateFromJSON(data: SerializedVaultState): VaultState;
|
|
21
|
+
/** Rehydrate an AgentData from its serialized JSON representation. */
|
|
22
|
+
export declare function agentDataFromJSON(data: SerializedAgentData): AgentData;
|
|
23
|
+
/** Rehydrate a SpendingData from its serialized JSON representation. */
|
|
24
|
+
export declare function spendingDataFromJSON(data: SerializedSpendingData): SpendingData;
|
|
25
|
+
/** Rehydrate an ActivityRow from its serialized JSON representation. */
|
|
26
|
+
export declare function activityRowFromJSON(data: SerializedActivityRow): ActivityRow;
|
|
27
|
+
/** Rehydrate an ActivityData from its serialized JSON representation. */
|
|
28
|
+
export declare function activityDataFromJSON(data: SerializedActivityData): ActivityData;
|
|
29
|
+
/** Rehydrate a HealthData from its serialized JSON representation. */
|
|
30
|
+
export declare function healthDataFromJSON(data: SerializedHealthData): HealthData;
|
|
31
|
+
/** Rehydrate a PolicyData from its serialized JSON representation. */
|
|
32
|
+
export declare function policyDataFromJSON(data: SerializedPolicyData): PolicyData;
|
|
33
|
+
/** Rehydrate a DiscoveredVault from its serialized JSON representation. */
|
|
34
|
+
export declare function discoveredVaultFromJSON(data: SerializedDiscoveredVault): {
|
|
35
|
+
address: Address;
|
|
36
|
+
vaultId: bigint;
|
|
37
|
+
status: "active" | "frozen";
|
|
38
|
+
agentCount: number;
|
|
39
|
+
toJSON: () => SerializedDiscoveredVault;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Rehydrate the full OverviewData from its serialized JSON representation.
|
|
43
|
+
*
|
|
44
|
+
* This is the primary MCP round-trip entry point — AI agents receive
|
|
45
|
+
* overview JSON from the `sigil_get_overview` tool and pass it back to
|
|
46
|
+
* subsequent tool calls.
|
|
47
|
+
*/
|
|
48
|
+
export declare function overviewDataFromJSON(data: SerializedOverviewData): OverviewData;
|
|
49
|
+
//# sourceMappingURL=from-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-json.d.ts","sourceRoot":"","sources":["../../src/dashboard/from-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EAE1B,MAAM,YAAY,CAAC;AAoCpB,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAKtE;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,UAAU,CA+BzE;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,SAAS,CAiBtE;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,sBAAsB,GAC3B,YAAY,CAkBd;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,qBAAqB,GAAG,WAAW,CAc5E;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,sBAAsB,GAC3B,YAAY,CAWd;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,UAAU,CAezE;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,UAAU,CAuBzE;AAED,2EAA2E;AAC3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,yBAAyB;;;YAI5C,QAAQ,GAAG,QAAQ;;;EAI7C;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,sBAAsB,GAC3B,YAAY,CAUd"}
|