@usesigil/kit 0.1.0
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/LICENSE +191 -0
- package/README.md +190 -0
- package/dist/advanced-analytics.d.ts +118 -0
- package/dist/advanced-analytics.d.ts.map +1 -0
- package/dist/advanced-analytics.js +341 -0
- package/dist/advanced-analytics.js.map +1 -0
- package/dist/agent-analytics.d.ts +76 -0
- package/dist/agent-analytics.d.ts.map +1 -0
- package/dist/agent-analytics.js +179 -0
- package/dist/agent-analytics.js.map +1 -0
- package/dist/agent-errors.d.ts +151 -0
- package/dist/agent-errors.d.ts.map +1 -0
- package/dist/agent-errors.js +2001 -0
- package/dist/agent-errors.js.map +1 -0
- package/dist/alt-config.d.ts +43 -0
- package/dist/alt-config.d.ts.map +1 -0
- package/dist/alt-config.js +78 -0
- package/dist/alt-config.js.map +1 -0
- package/dist/alt-loader.d.ts +47 -0
- package/dist/alt-loader.d.ts.map +1 -0
- package/dist/alt-loader.js +143 -0
- package/dist/alt-loader.js.map +1 -0
- package/dist/balance-tracker.d.ts +87 -0
- package/dist/balance-tracker.d.ts.map +1 -0
- package/dist/balance-tracker.js +181 -0
- package/dist/balance-tracker.js.map +1 -0
- package/dist/composer.d.ts +56 -0
- package/dist/composer.d.ts.map +1 -0
- package/dist/composer.js +77 -0
- package/dist/composer.js.map +1 -0
- package/dist/core/engine.d.ts +17 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +177 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/errors.d.ts +24 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +16 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +10 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/policies.d.ts +75 -0
- package/dist/core/policies.d.ts.map +1 -0
- package/dist/core/policies.js +126 -0
- package/dist/core/policies.js.map +1 -0
- package/dist/core/registry.d.ts +29 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +125 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/state.d.ts +71 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +169 -0
- package/dist/core/state.js.map +1 -0
- package/dist/create-vault.d.ts +58 -0
- package/dist/create-vault.d.ts.map +1 -0
- package/dist/create-vault.js +90 -0
- package/dist/create-vault.js.map +1 -0
- package/dist/custody-adapter.d.ts +54 -0
- package/dist/custody-adapter.d.ts.map +1 -0
- package/dist/custody-adapter.js +45 -0
- package/dist/custody-adapter.js.map +1 -0
- package/dist/event-analytics.d.ts +45 -0
- package/dist/event-analytics.d.ts.map +1 -0
- package/dist/event-analytics.js +277 -0
- package/dist/event-analytics.js.map +1 -0
- package/dist/events.d.ts +56 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +151 -0
- package/dist/events.js.map +1 -0
- package/dist/formatting.d.ts +103 -0
- package/dist/formatting.d.ts.map +1 -0
- package/dist/formatting.js +244 -0
- package/dist/formatting.js.map +1 -0
- package/dist/generated/accounts/agentSpendOverlay.d.ts +54 -0
- package/dist/generated/accounts/agentSpendOverlay.d.ts.map +1 -0
- package/dist/generated/accounts/agentSpendOverlay.js +74 -0
- package/dist/generated/accounts/agentSpendOverlay.js.map +1 -0
- package/dist/generated/accounts/agentVault.d.ts +95 -0
- package/dist/generated/accounts/agentVault.d.ts.map +1 -0
- package/dist/generated/accounts/agentVault.js +83 -0
- package/dist/generated/accounts/agentVault.js.map +1 -0
- package/dist/generated/accounts/escrowDeposit.d.ts +50 -0
- package/dist/generated/accounts/escrowDeposit.d.ts.map +1 -0
- package/dist/generated/accounts/escrowDeposit.js +76 -0
- package/dist/generated/accounts/escrowDeposit.js.map +1 -0
- package/dist/generated/accounts/index.d.ts +17 -0
- package/dist/generated/accounts/index.d.ts.map +1 -0
- package/dist/generated/accounts/index.js +17 -0
- package/dist/generated/accounts/index.js.map +1 -0
- package/dist/generated/accounts/instructionConstraints.d.ts +37 -0
- package/dist/generated/accounts/instructionConstraints.d.ts.map +1 -0
- package/dist/generated/accounts/instructionConstraints.js +64 -0
- package/dist/generated/accounts/instructionConstraints.js.map +1 -0
- package/dist/generated/accounts/pendingConstraintsUpdate.d.ts +53 -0
- package/dist/generated/accounts/pendingConstraintsUpdate.d.ts.map +1 -0
- package/dist/generated/accounts/pendingConstraintsUpdate.js +68 -0
- package/dist/generated/accounts/pendingConstraintsUpdate.js.map +1 -0
- package/dist/generated/accounts/pendingPolicyUpdate.d.ts +72 -0
- package/dist/generated/accounts/pendingPolicyUpdate.d.ts.map +1 -0
- package/dist/generated/accounts/pendingPolicyUpdate.js +97 -0
- package/dist/generated/accounts/pendingPolicyUpdate.js.map +1 -0
- package/dist/generated/accounts/policyConfig.d.ts +180 -0
- package/dist/generated/accounts/policyConfig.d.ts.map +1 -0
- package/dist/generated/accounts/policyConfig.js +88 -0
- package/dist/generated/accounts/policyConfig.js.map +1 -0
- package/dist/generated/accounts/sessionAuthority.d.ts +104 -0
- package/dist/generated/accounts/sessionAuthority.d.ts.map +1 -0
- package/dist/generated/accounts/sessionAuthority.js +86 -0
- package/dist/generated/accounts/sessionAuthority.js.map +1 -0
- package/dist/generated/accounts/spendTracker.d.ts +60 -0
- package/dist/generated/accounts/spendTracker.d.ts.map +1 -0
- package/dist/generated/accounts/spendTracker.js +74 -0
- package/dist/generated/accounts/spendTracker.js.map +1 -0
- package/dist/generated/errors/index.d.ts +9 -0
- package/dist/generated/errors/index.d.ts.map +1 -0
- package/dist/generated/errors/index.js +9 -0
- package/dist/generated/errors/index.js.map +1 -0
- package/dist/generated/errors/sigil.d.ts +162 -0
- package/dist/generated/errors/sigil.d.ts.map +1 -0
- package/dist/generated/errors/sigil.js +237 -0
- package/dist/generated/errors/sigil.js.map +1 -0
- package/dist/generated/event-discriminators.d.ts +2 -0
- package/dist/generated/event-discriminators.d.ts.map +1 -0
- package/dist/generated/event-discriminators.js +39 -0
- package/dist/generated/event-discriminators.js.map +1 -0
- package/dist/generated/index.d.ts +13 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +13 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/instructions/agentTransfer.d.ts +109 -0
- package/dist/generated/instructions/agentTransfer.d.ts.map +1 -0
- package/dist/generated/instructions/agentTransfer.js +211 -0
- package/dist/generated/instructions/agentTransfer.js.map +1 -0
- package/dist/generated/instructions/applyConstraintsUpdate.d.ts +55 -0
- package/dist/generated/instructions/applyConstraintsUpdate.d.ts.map +1 -0
- package/dist/generated/instructions/applyConstraintsUpdate.js +129 -0
- package/dist/generated/instructions/applyConstraintsUpdate.js.map +1 -0
- package/dist/generated/instructions/applyPendingPolicy.d.ts +55 -0
- package/dist/generated/instructions/applyPendingPolicy.d.ts.map +1 -0
- package/dist/generated/instructions/applyPendingPolicy.js +122 -0
- package/dist/generated/instructions/applyPendingPolicy.js.map +1 -0
- package/dist/generated/instructions/cancelConstraintsUpdate.d.ts +51 -0
- package/dist/generated/instructions/cancelConstraintsUpdate.d.ts.map +1 -0
- package/dist/generated/instructions/cancelConstraintsUpdate.js +115 -0
- package/dist/generated/instructions/cancelConstraintsUpdate.js.map +1 -0
- package/dist/generated/instructions/cancelPendingPolicy.d.ts +55 -0
- package/dist/generated/instructions/cancelPendingPolicy.d.ts.map +1 -0
- package/dist/generated/instructions/cancelPendingPolicy.js +122 -0
- package/dist/generated/instructions/cancelPendingPolicy.js.map +1 -0
- package/dist/generated/instructions/closeInstructionConstraints.d.ts +55 -0
- package/dist/generated/instructions/closeInstructionConstraints.d.ts.map +1 -0
- package/dist/generated/instructions/closeInstructionConstraints.js +120 -0
- package/dist/generated/instructions/closeInstructionConstraints.js.map +1 -0
- package/dist/generated/instructions/closeSettledEscrow.d.ts +72 -0
- package/dist/generated/instructions/closeSettledEscrow.d.ts.map +1 -0
- package/dist/generated/instructions/closeSettledEscrow.js +127 -0
- package/dist/generated/instructions/closeSettledEscrow.js.map +1 -0
- package/dist/generated/instructions/closeVault.d.ts +69 -0
- package/dist/generated/instructions/closeVault.d.ts.map +1 -0
- package/dist/generated/instructions/closeVault.js +142 -0
- package/dist/generated/instructions/closeVault.js.map +1 -0
- package/dist/generated/instructions/createEscrow.d.ts +131 -0
- package/dist/generated/instructions/createEscrow.d.ts.map +1 -0
- package/dist/generated/instructions/createEscrow.js +272 -0
- package/dist/generated/instructions/createEscrow.js.map +1 -0
- package/dist/generated/instructions/createInstructionConstraints.d.ts +69 -0
- package/dist/generated/instructions/createInstructionConstraints.d.ts.map +1 -0
- package/dist/generated/instructions/createInstructionConstraints.js +145 -0
- package/dist/generated/instructions/createInstructionConstraints.js.map +1 -0
- package/dist/generated/instructions/depositFunds.d.ts +82 -0
- package/dist/generated/instructions/depositFunds.d.ts.map +1 -0
- package/dist/generated/instructions/depositFunds.js +198 -0
- package/dist/generated/instructions/depositFunds.js.map +1 -0
- package/dist/generated/instructions/finalizeSession.d.ts +126 -0
- package/dist/generated/instructions/finalizeSession.d.ts.map +1 -0
- package/dist/generated/instructions/finalizeSession.js +218 -0
- package/dist/generated/instructions/finalizeSession.js.map +1 -0
- package/dist/generated/instructions/freezeVault.d.ts +40 -0
- package/dist/generated/instructions/freezeVault.d.ts.map +1 -0
- package/dist/generated/instructions/freezeVault.js +66 -0
- package/dist/generated/instructions/freezeVault.js.map +1 -0
- package/dist/generated/instructions/index.d.ts +37 -0
- package/dist/generated/instructions/index.d.ts.map +1 -0
- package/dist/generated/instructions/index.js +37 -0
- package/dist/generated/instructions/index.js.map +1 -0
- package/dist/generated/instructions/initializeVault.d.ts +122 -0
- package/dist/generated/instructions/initializeVault.d.ts.map +1 -0
- package/dist/generated/instructions/initializeVault.js +187 -0
- package/dist/generated/instructions/initializeVault.js.map +1 -0
- package/dist/generated/instructions/pauseAgent.d.ts +44 -0
- package/dist/generated/instructions/pauseAgent.d.ts.map +1 -0
- package/dist/generated/instructions/pauseAgent.js +72 -0
- package/dist/generated/instructions/pauseAgent.js.map +1 -0
- package/dist/generated/instructions/queueConstraintsUpdate.d.ts +73 -0
- package/dist/generated/instructions/queueConstraintsUpdate.d.ts.map +1 -0
- package/dist/generated/instructions/queueConstraintsUpdate.js +168 -0
- package/dist/generated/instructions/queueConstraintsUpdate.js.map +1 -0
- package/dist/generated/instructions/queuePolicyUpdate.d.ts +116 -0
- package/dist/generated/instructions/queuePolicyUpdate.d.ts.map +1 -0
- package/dist/generated/instructions/queuePolicyUpdate.js +173 -0
- package/dist/generated/instructions/queuePolicyUpdate.js.map +1 -0
- package/dist/generated/instructions/reactivateVault.d.ts +47 -0
- package/dist/generated/instructions/reactivateVault.d.ts.map +1 -0
- package/dist/generated/instructions/reactivateVault.js +74 -0
- package/dist/generated/instructions/reactivateVault.js.map +1 -0
- package/dist/generated/instructions/refundEscrow.d.ts +74 -0
- package/dist/generated/instructions/refundEscrow.d.ts.map +1 -0
- package/dist/generated/instructions/refundEscrow.js +142 -0
- package/dist/generated/instructions/refundEscrow.js.map +1 -0
- package/dist/generated/instructions/registerAgent.d.ts +55 -0
- package/dist/generated/instructions/registerAgent.d.ts.map +1 -0
- package/dist/generated/instructions/registerAgent.js +85 -0
- package/dist/generated/instructions/registerAgent.js.map +1 -0
- package/dist/generated/instructions/revokeAgent.d.ts +49 -0
- package/dist/generated/instructions/revokeAgent.d.ts.map +1 -0
- package/dist/generated/instructions/revokeAgent.js +81 -0
- package/dist/generated/instructions/revokeAgent.js.map +1 -0
- package/dist/generated/instructions/settleEscrow.d.ts +80 -0
- package/dist/generated/instructions/settleEscrow.d.ts.map +1 -0
- package/dist/generated/instructions/settleEscrow.js +173 -0
- package/dist/generated/instructions/settleEscrow.js.map +1 -0
- package/dist/generated/instructions/syncPositions.d.ts +44 -0
- package/dist/generated/instructions/syncPositions.d.ts.map +1 -0
- package/dist/generated/instructions/syncPositions.js +72 -0
- package/dist/generated/instructions/syncPositions.js.map +1 -0
- package/dist/generated/instructions/unpauseAgent.d.ts +44 -0
- package/dist/generated/instructions/unpauseAgent.d.ts.map +1 -0
- package/dist/generated/instructions/unpauseAgent.js +72 -0
- package/dist/generated/instructions/unpauseAgent.js.map +1 -0
- package/dist/generated/instructions/updateAgentPermissions.d.ts +68 -0
- package/dist/generated/instructions/updateAgentPermissions.d.ts.map +1 -0
- package/dist/generated/instructions/updateAgentPermissions.js +139 -0
- package/dist/generated/instructions/updateAgentPermissions.js.map +1 -0
- package/dist/generated/instructions/updateInstructionConstraints.d.ts +65 -0
- package/dist/generated/instructions/updateInstructionConstraints.d.ts.map +1 -0
- package/dist/generated/instructions/updateInstructionConstraints.js +131 -0
- package/dist/generated/instructions/updateInstructionConstraints.js.map +1 -0
- package/dist/generated/instructions/updatePolicy.d.ts +108 -0
- package/dist/generated/instructions/updatePolicy.d.ts.map +1 -0
- package/dist/generated/instructions/updatePolicy.js +143 -0
- package/dist/generated/instructions/updatePolicy.js.map +1 -0
- package/dist/generated/instructions/validateAndAuthorize.d.ts +171 -0
- package/dist/generated/instructions/validateAndAuthorize.d.ts.map +1 -0
- package/dist/generated/instructions/validateAndAuthorize.js +271 -0
- package/dist/generated/instructions/validateAndAuthorize.js.map +1 -0
- package/dist/generated/instructions/withdrawFunds.d.ts +74 -0
- package/dist/generated/instructions/withdrawFunds.d.ts.map +1 -0
- package/dist/generated/instructions/withdrawFunds.js +166 -0
- package/dist/generated/instructions/withdrawFunds.js.map +1 -0
- package/dist/generated/programs/index.d.ts +9 -0
- package/dist/generated/programs/index.d.ts.map +1 -0
- package/dist/generated/programs/index.js +9 -0
- package/dist/generated/programs/index.js.map +1 -0
- package/dist/generated/programs/sigil.d.ts +173 -0
- package/dist/generated/programs/sigil.d.ts.map +1 -0
- package/dist/generated/programs/sigil.js +443 -0
- package/dist/generated/programs/sigil.js.map +1 -0
- package/dist/generated/types/accountConstraint.d.ts +18 -0
- package/dist/generated/types/accountConstraint.d.ts.map +1 -0
- package/dist/generated/types/accountConstraint.js +24 -0
- package/dist/generated/types/accountConstraint.js.map +1 -0
- package/dist/generated/types/actionAuthorized.d.ts +39 -0
- package/dist/generated/types/actionAuthorized.d.ts.map +1 -0
- package/dist/generated/types/actionAuthorized.js +43 -0
- package/dist/generated/types/actionAuthorized.js.map +1 -0
- package/dist/generated/types/actionType.d.ts +37 -0
- package/dist/generated/types/actionType.d.ts.map +1 -0
- package/dist/generated/types/actionType.js +43 -0
- package/dist/generated/types/actionType.js.map +1 -0
- package/dist/generated/types/agentContributionEntry.d.ts +49 -0
- package/dist/generated/types/agentContributionEntry.d.ts.map +1 -0
- package/dist/generated/types/agentContributionEntry.js +26 -0
- package/dist/generated/types/agentContributionEntry.js.map +1 -0
- package/dist/generated/types/agentEntry.d.ts +24 -0
- package/dist/generated/types/agentEntry.d.ts.map +1 -0
- package/dist/generated/types/agentEntry.js +28 -0
- package/dist/generated/types/agentEntry.js.map +1 -0
- package/dist/generated/types/agentPausedEvent.d.ts +22 -0
- package/dist/generated/types/agentPausedEvent.d.ts.map +1 -0
- package/dist/generated/types/agentPausedEvent.js +26 -0
- package/dist/generated/types/agentPausedEvent.js.map +1 -0
- package/dist/generated/types/agentPermissionsUpdated.d.ts +24 -0
- package/dist/generated/types/agentPermissionsUpdated.d.ts.map +1 -0
- package/dist/generated/types/agentPermissionsUpdated.js +28 -0
- package/dist/generated/types/agentPermissionsUpdated.js.map +1 -0
- package/dist/generated/types/agentRegistered.d.ts +26 -0
- package/dist/generated/types/agentRegistered.d.ts.map +1 -0
- package/dist/generated/types/agentRegistered.js +30 -0
- package/dist/generated/types/agentRegistered.js.map +1 -0
- package/dist/generated/types/agentRevoked.d.ts +24 -0
- package/dist/generated/types/agentRevoked.d.ts.map +1 -0
- package/dist/generated/types/agentRevoked.js +28 -0
- package/dist/generated/types/agentRevoked.js.map +1 -0
- package/dist/generated/types/agentSpendLimitChecked.d.ts +28 -0
- package/dist/generated/types/agentSpendLimitChecked.d.ts.map +1 -0
- package/dist/generated/types/agentSpendLimitChecked.js +32 -0
- package/dist/generated/types/agentSpendLimitChecked.js.map +1 -0
- package/dist/generated/types/agentTransferExecuted.d.ts +24 -0
- package/dist/generated/types/agentTransferExecuted.d.ts.map +1 -0
- package/dist/generated/types/agentTransferExecuted.js +28 -0
- package/dist/generated/types/agentTransferExecuted.js.map +1 -0
- package/dist/generated/types/agentUnpausedEvent.d.ts +22 -0
- package/dist/generated/types/agentUnpausedEvent.d.ts.map +1 -0
- package/dist/generated/types/agentUnpausedEvent.js +26 -0
- package/dist/generated/types/agentUnpausedEvent.js.map +1 -0
- package/dist/generated/types/constraintEntry.d.ts +23 -0
- package/dist/generated/types/constraintEntry.d.ts.map +1 -0
- package/dist/generated/types/constraintEntry.js +27 -0
- package/dist/generated/types/constraintEntry.js.map +1 -0
- package/dist/generated/types/constraintOperator.d.ts +22 -0
- package/dist/generated/types/constraintOperator.d.ts.map +1 -0
- package/dist/generated/types/constraintOperator.js +28 -0
- package/dist/generated/types/constraintOperator.js.map +1 -0
- package/dist/generated/types/constraintsChangeApplied.d.ts +20 -0
- package/dist/generated/types/constraintsChangeApplied.d.ts.map +1 -0
- package/dist/generated/types/constraintsChangeApplied.js +24 -0
- package/dist/generated/types/constraintsChangeApplied.js.map +1 -0
- package/dist/generated/types/constraintsChangeCancelled.d.ts +16 -0
- package/dist/generated/types/constraintsChangeCancelled.d.ts.map +1 -0
- package/dist/generated/types/constraintsChangeCancelled.js +18 -0
- package/dist/generated/types/constraintsChangeCancelled.js.map +1 -0
- package/dist/generated/types/constraintsChangeQueued.d.ts +20 -0
- package/dist/generated/types/constraintsChangeQueued.d.ts.map +1 -0
- package/dist/generated/types/constraintsChangeQueued.js +24 -0
- package/dist/generated/types/constraintsChangeQueued.js.map +1 -0
- package/dist/generated/types/dataConstraint.d.ts +23 -0
- package/dist/generated/types/dataConstraint.d.ts.map +1 -0
- package/dist/generated/types/dataConstraint.js +27 -0
- package/dist/generated/types/dataConstraint.js.map +1 -0
- package/dist/generated/types/delegationRevoked.d.ts +22 -0
- package/dist/generated/types/delegationRevoked.d.ts.map +1 -0
- package/dist/generated/types/delegationRevoked.js +26 -0
- package/dist/generated/types/delegationRevoked.js.map +1 -0
- package/dist/generated/types/epochBucket.d.ts +28 -0
- package/dist/generated/types/epochBucket.d.ts.map +1 -0
- package/dist/generated/types/epochBucket.js +24 -0
- package/dist/generated/types/epochBucket.js.map +1 -0
- package/dist/generated/types/escrowCreated.d.ts +30 -0
- package/dist/generated/types/escrowCreated.d.ts.map +1 -0
- package/dist/generated/types/escrowCreated.js +34 -0
- package/dist/generated/types/escrowCreated.js.map +1 -0
- package/dist/generated/types/escrowRefunded.d.ts +26 -0
- package/dist/generated/types/escrowRefunded.d.ts.map +1 -0
- package/dist/generated/types/escrowRefunded.js +30 -0
- package/dist/generated/types/escrowRefunded.js.map +1 -0
- package/dist/generated/types/escrowSettled.d.ts +26 -0
- package/dist/generated/types/escrowSettled.d.ts.map +1 -0
- package/dist/generated/types/escrowSettled.js +30 -0
- package/dist/generated/types/escrowSettled.js.map +1 -0
- package/dist/generated/types/escrowStatus.d.ts +18 -0
- package/dist/generated/types/escrowStatus.d.ts.map +1 -0
- package/dist/generated/types/escrowStatus.js +24 -0
- package/dist/generated/types/escrowStatus.js.map +1 -0
- package/dist/generated/types/feesCollected.d.ts +38 -0
- package/dist/generated/types/feesCollected.d.ts.map +1 -0
- package/dist/generated/types/feesCollected.js +42 -0
- package/dist/generated/types/feesCollected.js.map +1 -0
- package/dist/generated/types/fundsDeposited.d.ts +24 -0
- package/dist/generated/types/fundsDeposited.d.ts.map +1 -0
- package/dist/generated/types/fundsDeposited.js +28 -0
- package/dist/generated/types/fundsDeposited.js.map +1 -0
- package/dist/generated/types/fundsWithdrawn.d.ts +26 -0
- package/dist/generated/types/fundsWithdrawn.d.ts.map +1 -0
- package/dist/generated/types/fundsWithdrawn.js +30 -0
- package/dist/generated/types/fundsWithdrawn.js.map +1 -0
- package/dist/generated/types/index.d.ts +50 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/index.js +50 -0
- package/dist/generated/types/index.js.map +1 -0
- package/dist/generated/types/instructionConstraintsClosed.d.ts +20 -0
- package/dist/generated/types/instructionConstraintsClosed.d.ts.map +1 -0
- package/dist/generated/types/instructionConstraintsClosed.js +24 -0
- package/dist/generated/types/instructionConstraintsClosed.js.map +1 -0
- package/dist/generated/types/instructionConstraintsCreated.d.ts +24 -0
- package/dist/generated/types/instructionConstraintsCreated.d.ts.map +1 -0
- package/dist/generated/types/instructionConstraintsCreated.js +28 -0
- package/dist/generated/types/instructionConstraintsCreated.js.map +1 -0
- package/dist/generated/types/instructionConstraintsUpdated.d.ts +24 -0
- package/dist/generated/types/instructionConstraintsUpdated.d.ts.map +1 -0
- package/dist/generated/types/instructionConstraintsUpdated.js +28 -0
- package/dist/generated/types/instructionConstraintsUpdated.js.map +1 -0
- package/dist/generated/types/policyChangeApplied.d.ts +20 -0
- package/dist/generated/types/policyChangeApplied.d.ts.map +1 -0
- package/dist/generated/types/policyChangeApplied.js +24 -0
- package/dist/generated/types/policyChangeApplied.js.map +1 -0
- package/dist/generated/types/policyChangeCancelled.d.ts +16 -0
- package/dist/generated/types/policyChangeCancelled.d.ts.map +1 -0
- package/dist/generated/types/policyChangeCancelled.js +18 -0
- package/dist/generated/types/policyChangeCancelled.js.map +1 -0
- package/dist/generated/types/policyChangeQueued.d.ts +20 -0
- package/dist/generated/types/policyChangeQueued.d.ts.map +1 -0
- package/dist/generated/types/policyChangeQueued.js +24 -0
- package/dist/generated/types/policyChangeQueued.js.map +1 -0
- package/dist/generated/types/policyUpdated.d.ts +34 -0
- package/dist/generated/types/policyUpdated.d.ts.map +1 -0
- package/dist/generated/types/policyUpdated.js +38 -0
- package/dist/generated/types/policyUpdated.js.map +1 -0
- package/dist/generated/types/positionsSynced.d.ts +24 -0
- package/dist/generated/types/positionsSynced.d.ts.map +1 -0
- package/dist/generated/types/positionsSynced.js +28 -0
- package/dist/generated/types/positionsSynced.js.map +1 -0
- package/dist/generated/types/protocolSpendCounter.d.ts +33 -0
- package/dist/generated/types/protocolSpendCounter.d.ts.map +1 -0
- package/dist/generated/types/protocolSpendCounter.js +26 -0
- package/dist/generated/types/protocolSpendCounter.js.map +1 -0
- package/dist/generated/types/sessionFinalized.d.ts +32 -0
- package/dist/generated/types/sessionFinalized.d.ts.map +1 -0
- package/dist/generated/types/sessionFinalized.js +36 -0
- package/dist/generated/types/sessionFinalized.js.map +1 -0
- package/dist/generated/types/vaultClosed.d.ts +22 -0
- package/dist/generated/types/vaultClosed.d.ts.map +1 -0
- package/dist/generated/types/vaultClosed.js +26 -0
- package/dist/generated/types/vaultClosed.js.map +1 -0
- package/dist/generated/types/vaultCreated.d.ts +24 -0
- package/dist/generated/types/vaultCreated.d.ts.map +1 -0
- package/dist/generated/types/vaultCreated.js +28 -0
- package/dist/generated/types/vaultCreated.js.map +1 -0
- package/dist/generated/types/vaultFrozen.d.ts +24 -0
- package/dist/generated/types/vaultFrozen.d.ts.map +1 -0
- package/dist/generated/types/vaultFrozen.js +28 -0
- package/dist/generated/types/vaultFrozen.js.map +1 -0
- package/dist/generated/types/vaultReactivated.d.ts +24 -0
- package/dist/generated/types/vaultReactivated.d.ts.map +1 -0
- package/dist/generated/types/vaultReactivated.js +28 -0
- package/dist/generated/types/vaultReactivated.js.map +1 -0
- package/dist/generated/types/vaultStatus.d.ts +19 -0
- package/dist/generated/types/vaultStatus.d.ts.map +1 -0
- package/dist/generated/types/vaultStatus.js +25 -0
- package/dist/generated/types/vaultStatus.js.map +1 -0
- package/dist/index.d.ts +74 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +113 -0
- package/dist/index.js.map +1 -0
- package/dist/inscribe.d.ts +134 -0
- package/dist/inscribe.d.ts.map +1 -0
- package/dist/inscribe.js +149 -0
- package/dist/inscribe.js.map +1 -0
- package/dist/inspector.d.ts +85 -0
- package/dist/inspector.d.ts.map +1 -0
- package/dist/inspector.js +188 -0
- package/dist/inspector.js.map +1 -0
- package/dist/math-utils.d.ts +15 -0
- package/dist/math-utils.d.ts.map +1 -0
- package/dist/math-utils.js +29 -0
- package/dist/math-utils.js.map +1 -0
- package/dist/owner-transaction.d.ts +42 -0
- package/dist/owner-transaction.d.ts.map +1 -0
- package/dist/owner-transaction.js +71 -0
- package/dist/owner-transaction.js.map +1 -0
- package/dist/policies.d.ts +70 -0
- package/dist/policies.d.ts.map +1 -0
- package/dist/policies.js +87 -0
- package/dist/policies.js.map +1 -0
- package/dist/portfolio-analytics.d.ts +82 -0
- package/dist/portfolio-analytics.d.ts.map +1 -0
- package/dist/portfolio-analytics.js +232 -0
- package/dist/portfolio-analytics.js.map +1 -0
- package/dist/presets.d.ts +108 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +110 -0
- package/dist/presets.js.map +1 -0
- package/dist/priority-fees.d.ts +49 -0
- package/dist/priority-fees.d.ts.map +1 -0
- package/dist/priority-fees.js +175 -0
- package/dist/priority-fees.js.map +1 -0
- package/dist/protocol-analytics.d.ts +35 -0
- package/dist/protocol-analytics.d.ts.map +1 -0
- package/dist/protocol-analytics.js +64 -0
- package/dist/protocol-analytics.js.map +1 -0
- package/dist/protocol-names.d.ts +9 -0
- package/dist/protocol-names.d.ts.map +1 -0
- package/dist/protocol-names.js +18 -0
- package/dist/protocol-names.js.map +1 -0
- package/dist/protocol-resolver.d.ts +54 -0
- package/dist/protocol-resolver.d.ts.map +1 -0
- package/dist/protocol-resolver.js +123 -0
- package/dist/protocol-resolver.js.map +1 -0
- package/dist/resolve-accounts.d.ts +38 -0
- package/dist/resolve-accounts.d.ts.map +1 -0
- package/dist/resolve-accounts.js +120 -0
- package/dist/resolve-accounts.js.map +1 -0
- package/dist/rpc-helpers.d.ts +50 -0
- package/dist/rpc-helpers.d.ts.map +1 -0
- package/dist/rpc-helpers.js +119 -0
- package/dist/rpc-helpers.js.map +1 -0
- package/dist/seal.d.ts +211 -0
- package/dist/seal.d.ts.map +1 -0
- package/dist/seal.js +569 -0
- package/dist/seal.js.map +1 -0
- package/dist/security-analytics.d.ts +85 -0
- package/dist/security-analytics.d.ts.map +1 -0
- package/dist/security-analytics.js +510 -0
- package/dist/security-analytics.js.map +1 -0
- package/dist/shield.d.ts +235 -0
- package/dist/shield.d.ts.map +1 -0
- package/dist/shield.js +701 -0
- package/dist/shield.js.map +1 -0
- package/dist/simulation.d.ts +111 -0
- package/dist/simulation.d.ts.map +1 -0
- package/dist/simulation.js +514 -0
- package/dist/simulation.js.map +1 -0
- package/dist/spending-analytics.d.ts +91 -0
- package/dist/spending-analytics.d.ts.map +1 -0
- package/dist/spending-analytics.js +217 -0
- package/dist/spending-analytics.js.map +1 -0
- package/dist/state-resolver.d.ts +173 -0
- package/dist/state-resolver.d.ts.map +1 -0
- package/dist/state-resolver.js +660 -0
- package/dist/state-resolver.js.map +1 -0
- package/dist/tee/cache.d.ts +28 -0
- package/dist/tee/cache.d.ts.map +1 -0
- package/dist/tee/cache.js +75 -0
- package/dist/tee/cache.js.map +1 -0
- package/dist/tee/index.d.ts +9 -0
- package/dist/tee/index.d.ts.map +1 -0
- package/dist/tee/index.js +9 -0
- package/dist/tee/index.js.map +1 -0
- package/dist/tee/nitro-root.d.ts +11 -0
- package/dist/tee/nitro-root.d.ts.map +1 -0
- package/dist/tee/nitro-root.js +24 -0
- package/dist/tee/nitro-root.js.map +1 -0
- package/dist/tee/providers/crossmint.d.ts +12 -0
- package/dist/tee/providers/crossmint.d.ts.map +1 -0
- package/dist/tee/providers/crossmint.js +73 -0
- package/dist/tee/providers/crossmint.js.map +1 -0
- package/dist/tee/providers/privy.d.ts +12 -0
- package/dist/tee/providers/privy.d.ts.map +1 -0
- package/dist/tee/providers/privy.js +73 -0
- package/dist/tee/providers/privy.js.map +1 -0
- package/dist/tee/providers/turnkey.d.ts +34 -0
- package/dist/tee/providers/turnkey.d.ts.map +1 -0
- package/dist/tee/providers/turnkey.js +401 -0
- package/dist/tee/providers/turnkey.js.map +1 -0
- package/dist/tee/types.d.ts +124 -0
- package/dist/tee/types.d.ts.map +1 -0
- package/dist/tee/types.js +51 -0
- package/dist/tee/types.js.map +1 -0
- package/dist/tee/verify.d.ts +34 -0
- package/dist/tee/verify.d.ts.map +1 -0
- package/dist/tee/verify.js +177 -0
- package/dist/tee/verify.js.map +1 -0
- package/dist/tee/wallet-types.d.ts +61 -0
- package/dist/tee/wallet-types.d.ts.map +1 -0
- package/dist/tee/wallet-types.js +42 -0
- package/dist/tee/wallet-types.js.map +1 -0
- package/dist/testing/devnet.d.ts +64 -0
- package/dist/testing/devnet.d.ts.map +1 -0
- package/dist/testing/devnet.js +222 -0
- package/dist/testing/devnet.js.map +1 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +9 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-rpc.d.ts +31 -0
- package/dist/testing/mock-rpc.d.ts.map +1 -0
- package/dist/testing/mock-rpc.js +50 -0
- package/dist/testing/mock-rpc.js.map +1 -0
- package/dist/testing/mock-state.d.ts +35 -0
- package/dist/testing/mock-state.d.ts.map +1 -0
- package/dist/testing/mock-state.js +86 -0
- package/dist/testing/mock-state.js.map +1 -0
- package/dist/tokens.d.ts +35 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +157 -0
- package/dist/tokens.js.map +1 -0
- package/dist/transaction-executor.d.ts +116 -0
- package/dist/transaction-executor.d.ts.map +1 -0
- package/dist/transaction-executor.js +165 -0
- package/dist/transaction-executor.js.map +1 -0
- package/dist/types.d.ts +102 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +216 -0
- package/dist/types.js.map +1 -0
- package/dist/vault-analytics.d.ts +83 -0
- package/dist/vault-analytics.d.ts.map +1 -0
- package/dist/vault-analytics.js +175 -0
- package/dist/vault-analytics.js.map +1 -0
- package/dist/velocity-tracker.d.ts +79 -0
- package/dist/velocity-tracker.d.ts.map +1 -0
- package/dist/velocity-tracker.js +183 -0
- package/dist/velocity-tracker.js.map +1 -0
- package/dist/x402/amount-guard.d.ts +26 -0
- package/dist/x402/amount-guard.d.ts.map +1 -0
- package/dist/x402/amount-guard.js +80 -0
- package/dist/x402/amount-guard.js.map +1 -0
- package/dist/x402/audit-trail.d.ts +26 -0
- package/dist/x402/audit-trail.d.ts.map +1 -0
- package/dist/x402/audit-trail.js +32 -0
- package/dist/x402/audit-trail.js.map +1 -0
- package/dist/x402/codec.d.ts +26 -0
- package/dist/x402/codec.d.ts.map +1 -0
- package/dist/x402/codec.js +95 -0
- package/dist/x402/codec.js.map +1 -0
- package/dist/x402/errors.d.ts +34 -0
- package/dist/x402/errors.d.ts.map +1 -0
- package/dist/x402/errors.js +53 -0
- package/dist/x402/errors.js.map +1 -0
- package/dist/x402/facilitator-verify.d.ts +24 -0
- package/dist/x402/facilitator-verify.d.ts.map +1 -0
- package/dist/x402/facilitator-verify.js +74 -0
- package/dist/x402/facilitator-verify.js.map +1 -0
- package/dist/x402/index.d.ts +14 -0
- package/dist/x402/index.d.ts.map +1 -0
- package/dist/x402/index.js +23 -0
- package/dist/x402/index.js.map +1 -0
- package/dist/x402/nonce-tracker.d.ts +65 -0
- package/dist/x402/nonce-tracker.d.ts.map +1 -0
- package/dist/x402/nonce-tracker.js +123 -0
- package/dist/x402/nonce-tracker.js.map +1 -0
- package/dist/x402/payment-selector.d.ts +20 -0
- package/dist/x402/payment-selector.d.ts.map +1 -0
- package/dist/x402/payment-selector.js +49 -0
- package/dist/x402/payment-selector.js.map +1 -0
- package/dist/x402/policy-bridge.d.ts +23 -0
- package/dist/x402/policy-bridge.d.ts.map +1 -0
- package/dist/x402/policy-bridge.js +67 -0
- package/dist/x402/policy-bridge.js.map +1 -0
- package/dist/x402/shielded-fetch.d.ts +46 -0
- package/dist/x402/shielded-fetch.d.ts.map +1 -0
- package/dist/x402/shielded-fetch.js +342 -0
- package/dist/x402/shielded-fetch.js.map +1 -0
- package/dist/x402/transfer-builder.d.ts +43 -0
- package/dist/x402/transfer-builder.d.ts.map +1 -0
- package/dist/x402/transfer-builder.js +126 -0
- package/dist/x402/transfer-builder.js.map +1 -0
- package/dist/x402/types.d.ts +109 -0
- package/dist/x402/types.d.ts.map +1 -0
- package/dist/x402/types.js +8 -0
- package/dist/x402/types.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced analytics — institutional-grade metrics for compliance and risk.
|
|
3
|
+
*
|
|
4
|
+
* All functions operate on decoded event arrays (pure, no RPC).
|
|
5
|
+
* The dashboard fetches events via Helius or parsed TX logs.
|
|
6
|
+
*
|
|
7
|
+
* Functions:
|
|
8
|
+
* - getSlippageEfficiency() — authorized vs actual spend comparison
|
|
9
|
+
* - getCapVelocity() — risk-classified cap approach rate
|
|
10
|
+
* - getSessionDeviationRate() — compliance deviation tracking
|
|
11
|
+
* - getIdleCapitalDuration() — dormancy detection
|
|
12
|
+
* - getPermissionEscalationLatency() — suspicious grant-to-use timing
|
|
13
|
+
* - getInstructionCoverageRatio() — session sandwich completeness
|
|
14
|
+
*/
|
|
15
|
+
import { EPOCH_DURATION } from "./types.js";
|
|
16
|
+
// ─── getSlippageEfficiency ───────────────────────────────────────────────────
|
|
17
|
+
/**
|
|
18
|
+
* Measure execution quality by comparing authorized amount to actual spend.
|
|
19
|
+
* Pairs ActionAuthorized → SessionFinalized events by agent.
|
|
20
|
+
*/
|
|
21
|
+
export function getSlippageEfficiency(events) {
|
|
22
|
+
const agentTrades = new Map();
|
|
23
|
+
for (let i = 0; i < events.length - 1; i++) {
|
|
24
|
+
if (events[i].name !== "ActionAuthorized" || !events[i].fields)
|
|
25
|
+
continue;
|
|
26
|
+
const auth = events[i].fields;
|
|
27
|
+
for (let j = i + 1; j < Math.min(i + 5, events.length); j++) {
|
|
28
|
+
if (events[j].name !== "SessionFinalized" || !events[j].fields)
|
|
29
|
+
continue;
|
|
30
|
+
const fin = events[j].fields;
|
|
31
|
+
if (auth.agent === fin.agent) {
|
|
32
|
+
const agent = auth.agent;
|
|
33
|
+
const authorized = auth.usdAmount;
|
|
34
|
+
const rawActual = fin.actualSpendUsd;
|
|
35
|
+
const actual = typeof rawActual === "bigint" ? rawActual : 0n;
|
|
36
|
+
if (!agentTrades.has(agent))
|
|
37
|
+
agentTrades.set(agent, []);
|
|
38
|
+
agentTrades.get(agent).push({ authorized, actual });
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const byAgent = [];
|
|
44
|
+
let totalSlippageBps = 0;
|
|
45
|
+
let totalTrades = 0;
|
|
46
|
+
for (const [agent, trades] of agentTrades) {
|
|
47
|
+
let worstBps = 0;
|
|
48
|
+
let totalBps = 0;
|
|
49
|
+
let totalWaste = 0n;
|
|
50
|
+
for (const trade of trades) {
|
|
51
|
+
if (trade.authorized === 0n)
|
|
52
|
+
continue;
|
|
53
|
+
const diff = trade.actual > trade.authorized
|
|
54
|
+
? trade.actual - trade.authorized
|
|
55
|
+
: 0n;
|
|
56
|
+
const bps = Number((diff * 10000n) / trade.authorized);
|
|
57
|
+
totalBps += bps;
|
|
58
|
+
totalWaste += diff;
|
|
59
|
+
if (bps > worstBps)
|
|
60
|
+
worstBps = bps;
|
|
61
|
+
}
|
|
62
|
+
byAgent.push({
|
|
63
|
+
agent: agent,
|
|
64
|
+
avgSlippageBps: trades.length > 0 ? totalBps / trades.length : 0,
|
|
65
|
+
worstSlippageBps: worstBps,
|
|
66
|
+
tradeCount: trades.length,
|
|
67
|
+
estimatedWasteUsd: totalWaste,
|
|
68
|
+
});
|
|
69
|
+
totalSlippageBps += totalBps;
|
|
70
|
+
totalTrades += trades.length;
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
byAgent,
|
|
74
|
+
vaultAvgSlippageBps: totalTrades > 0 ? totalSlippageBps / totalTrades : 0,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// ─── getCapVelocity ──────────────────────────────────────────────────────────
|
|
78
|
+
/**
|
|
79
|
+
* Cap velocity with risk classification (low/moderate/high/critical).
|
|
80
|
+
*/
|
|
81
|
+
export function getCapVelocity(tracker, nowUnix, globalBudget) {
|
|
82
|
+
const epochDuration = BigInt(EPOCH_DURATION);
|
|
83
|
+
const currentEpoch = nowUnix / epochDuration;
|
|
84
|
+
let recentSum = 0n;
|
|
85
|
+
let recentCount = 0;
|
|
86
|
+
if (tracker) {
|
|
87
|
+
for (const bucket of tracker.buckets) {
|
|
88
|
+
if (bucket.epochId >= currentEpoch - 3n &&
|
|
89
|
+
bucket.epochId <= currentEpoch &&
|
|
90
|
+
bucket.usdAmount > 0n) {
|
|
91
|
+
recentSum += bucket.usdAmount;
|
|
92
|
+
recentCount++;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const currentRate = recentCount > 0 ? (recentSum * 6n) / BigInt(recentCount) : 0n;
|
|
97
|
+
const avgRate = globalBudget.spent24h / 24n;
|
|
98
|
+
const acceleration = avgRate > 0n ? Number(currentRate) / Number(avgRate) : 0;
|
|
99
|
+
let projectedCapHitTime = null;
|
|
100
|
+
if (currentRate > 0n && globalBudget.remaining > 0n) {
|
|
101
|
+
const hoursRemaining = Number(globalBudget.remaining) / Number(currentRate);
|
|
102
|
+
projectedCapHitTime = Number(nowUnix) + hoursRemaining * 3600;
|
|
103
|
+
}
|
|
104
|
+
const util = globalBudget.cap > 0n
|
|
105
|
+
? Number((globalBudget.spent24h * 100n) / globalBudget.cap)
|
|
106
|
+
: 0;
|
|
107
|
+
let riskLevel;
|
|
108
|
+
if (util >= 95 ||
|
|
109
|
+
(projectedCapHitTime !== null &&
|
|
110
|
+
projectedCapHitTime - Number(nowUnix) < 3600)) {
|
|
111
|
+
riskLevel = "critical";
|
|
112
|
+
}
|
|
113
|
+
else if (util >= 80 && acceleration > 1.5) {
|
|
114
|
+
riskLevel = "high";
|
|
115
|
+
}
|
|
116
|
+
else if (util >= 50 || acceleration > 1.5) {
|
|
117
|
+
riskLevel = "moderate";
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
riskLevel = "low";
|
|
121
|
+
}
|
|
122
|
+
return { currentRate, avgRate, acceleration, projectedCapHitTime, riskLevel };
|
|
123
|
+
}
|
|
124
|
+
// ─── getSessionDeviationRate ─────────────────────────────────────────────────
|
|
125
|
+
/**
|
|
126
|
+
* Measure how often actual spend deviates >2% from authorized amount.
|
|
127
|
+
* SOC 2 auditors require this metric.
|
|
128
|
+
*/
|
|
129
|
+
export function getSessionDeviationRate(events) {
|
|
130
|
+
const pairs = [];
|
|
131
|
+
for (let i = 0; i < events.length - 1; i++) {
|
|
132
|
+
if (events[i].name !== "ActionAuthorized" || !events[i].fields)
|
|
133
|
+
continue;
|
|
134
|
+
const auth = events[i].fields;
|
|
135
|
+
for (let j = i + 1; j < Math.min(i + 5, events.length); j++) {
|
|
136
|
+
if (events[j].name !== "SessionFinalized" || !events[j].fields)
|
|
137
|
+
continue;
|
|
138
|
+
const fin = events[j].fields;
|
|
139
|
+
const finActual = typeof fin.actualSpendUsd === "bigint" ? fin.actualSpendUsd : 0n;
|
|
140
|
+
const authAmount = typeof auth.usdAmount === "bigint" ? auth.usdAmount : 0n;
|
|
141
|
+
if (auth.agent === fin.agent && finActual > 0n) {
|
|
142
|
+
pairs.push({
|
|
143
|
+
agent: auth.agent,
|
|
144
|
+
authorized: authAmount,
|
|
145
|
+
actual: finActual,
|
|
146
|
+
});
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const deviations = [];
|
|
152
|
+
let maxBps = 0;
|
|
153
|
+
for (const pair of pairs) {
|
|
154
|
+
if (pair.authorized === 0n)
|
|
155
|
+
continue;
|
|
156
|
+
if (pair.actual > pair.authorized) {
|
|
157
|
+
const bps = Number(((pair.actual - pair.authorized) * 10000n) / pair.authorized);
|
|
158
|
+
if (bps > 200) {
|
|
159
|
+
deviations.push({
|
|
160
|
+
agent: pair.agent,
|
|
161
|
+
authorizedAmount: pair.authorized,
|
|
162
|
+
actualSpend: pair.actual,
|
|
163
|
+
deviationBps: bps,
|
|
164
|
+
});
|
|
165
|
+
if (bps > maxBps)
|
|
166
|
+
maxBps = bps;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
totalSessions: pairs.length,
|
|
172
|
+
deviatedSessions: deviations.length,
|
|
173
|
+
deviationRate: pairs.length > 0 ? (deviations.length / pairs.length) * 100 : 0,
|
|
174
|
+
maxDeviationBps: maxBps,
|
|
175
|
+
deviations,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
// ─── getIdleCapitalDuration ──────────────────────────────────────────────────
|
|
179
|
+
/**
|
|
180
|
+
* Measure how long vault funds sit idle between agent actions.
|
|
181
|
+
*/
|
|
182
|
+
export function getIdleCapitalDuration(events, nowUnix) {
|
|
183
|
+
const tradeTimestamps = [];
|
|
184
|
+
for (const e of events) {
|
|
185
|
+
if ((e.name === "SessionFinalized" || e.name === "ActionAuthorized") &&
|
|
186
|
+
e.fields?.timestamp != null) {
|
|
187
|
+
tradeTimestamps.push(Number(e.fields.timestamp));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (tradeTimestamps.length === 0) {
|
|
191
|
+
return {
|
|
192
|
+
avgIdleHours: 0,
|
|
193
|
+
maxIdleHours: 0,
|
|
194
|
+
lastActivityTimestamp: 0,
|
|
195
|
+
idleSinceHours: 0,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
tradeTimestamps.sort((a, b) => a - b);
|
|
199
|
+
const gaps = [];
|
|
200
|
+
for (let i = 1; i < tradeTimestamps.length; i++) {
|
|
201
|
+
gaps.push(tradeTimestamps[i] - tradeTimestamps[i - 1]);
|
|
202
|
+
}
|
|
203
|
+
const avgGapSeconds = gaps.length > 0 ? gaps.reduce((a, b) => a + b, 0) / gaps.length : 0;
|
|
204
|
+
const maxGapSeconds = gaps.length > 0 ? Math.max(...gaps) : 0;
|
|
205
|
+
const lastTimestamp = tradeTimestamps[tradeTimestamps.length - 1];
|
|
206
|
+
return {
|
|
207
|
+
avgIdleHours: Math.round((avgGapSeconds / 3600) * 10) / 10,
|
|
208
|
+
maxIdleHours: Math.round((maxGapSeconds / 3600) * 10) / 10,
|
|
209
|
+
lastActivityTimestamp: lastTimestamp,
|
|
210
|
+
idleSinceHours: Math.round(((nowUnix - lastTimestamp) / 3600) * 10) / 10,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
// ─── getPermissionEscalationLatency ──────────────────────────────────────────
|
|
214
|
+
/**
|
|
215
|
+
* Time between permission grants and first use. <60s = suspicious.
|
|
216
|
+
*/
|
|
217
|
+
export function getPermissionEscalationLatency(events) {
|
|
218
|
+
const escalations = [];
|
|
219
|
+
for (let i = 0; i < events.length; i++) {
|
|
220
|
+
if (events[i].name !== "AgentPermissionsUpdated" || !events[i].fields)
|
|
221
|
+
continue;
|
|
222
|
+
const permEvent = events[i].fields;
|
|
223
|
+
const agent = permEvent.agent;
|
|
224
|
+
const grantTimestamp = Number(permEvent.timestamp ?? 0);
|
|
225
|
+
let firstUseTimestamp = null;
|
|
226
|
+
for (let j = i + 1; j < events.length; j++) {
|
|
227
|
+
if (events[j].name === "ActionAuthorized" &&
|
|
228
|
+
events[j].fields?.agent === agent) {
|
|
229
|
+
firstUseTimestamp = Number(events[j].fields.timestamp);
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
const latencySeconds = firstUseTimestamp !== null ? firstUseTimestamp - grantTimestamp : null;
|
|
234
|
+
escalations.push({
|
|
235
|
+
agent: agent,
|
|
236
|
+
grantTimestamp,
|
|
237
|
+
firstUseTimestamp,
|
|
238
|
+
latencySeconds,
|
|
239
|
+
suspicious: latencySeconds !== null && latencySeconds < 60,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
return { escalations };
|
|
243
|
+
}
|
|
244
|
+
// ─── getInstructionCoverageRatio ─────────────────────────────────────────────
|
|
245
|
+
/**
|
|
246
|
+
* Measure instruction sandwich coverage — what % of authorized sessions
|
|
247
|
+
* were properly finalized. Non-zero orphan rate = potential attack surface.
|
|
248
|
+
*/
|
|
249
|
+
export function getInstructionCoverageRatio(events) {
|
|
250
|
+
const authorized = new Map();
|
|
251
|
+
const finalized = new Map();
|
|
252
|
+
for (const e of events) {
|
|
253
|
+
if (e.name === "ActionAuthorized" && e.fields?.agent) {
|
|
254
|
+
const agent = e.fields.agent;
|
|
255
|
+
authorized.set(agent, (authorized.get(agent) ?? 0) + 1);
|
|
256
|
+
}
|
|
257
|
+
if (e.name === "SessionFinalized" && e.fields?.agent) {
|
|
258
|
+
const agent = e.fields.agent;
|
|
259
|
+
finalized.set(agent, (finalized.get(agent) ?? 0) + 1);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
let totalComposed = 0;
|
|
263
|
+
let orphanedValidates = 0;
|
|
264
|
+
for (const [agent, authCount] of authorized) {
|
|
265
|
+
const finCount = finalized.get(agent) ?? 0;
|
|
266
|
+
const paired = Math.min(authCount, finCount);
|
|
267
|
+
totalComposed += paired;
|
|
268
|
+
orphanedValidates += authCount - paired;
|
|
269
|
+
}
|
|
270
|
+
const total = totalComposed + orphanedValidates;
|
|
271
|
+
const coverageRate = total > 0 ? (totalComposed / total) * 100 : 100;
|
|
272
|
+
return { totalComposed, orphanedValidates, coverageRate };
|
|
273
|
+
}
|
|
274
|
+
const ACTION_NAMES = [
|
|
275
|
+
"Swap", "OpenPosition", "ClosePosition", "IncreasePosition", "DecreasePosition",
|
|
276
|
+
"Deposit", "Withdraw", "Transfer", "AddCollateral", "RemoveCollateral",
|
|
277
|
+
"PlaceTriggerOrder", "EditTriggerOrder", "CancelTriggerOrder",
|
|
278
|
+
"PlaceLimitOrder", "EditLimitOrder", "CancelLimitOrder",
|
|
279
|
+
"SwapAndOpenPosition", "CloseAndSwapPosition",
|
|
280
|
+
"CreateEscrow", "SettleEscrow", "RefundEscrow",
|
|
281
|
+
];
|
|
282
|
+
/**
|
|
283
|
+
* Ratio of granted permission bits actually exercised by each agent.
|
|
284
|
+
* Shows which ActionTypes agents use vs what they're granted — security surface analysis.
|
|
285
|
+
*/
|
|
286
|
+
export function getPermissionUtilizationRate(state, events) {
|
|
287
|
+
// Count which ActionTypes each agent has used
|
|
288
|
+
const agentActionUsage = new Map();
|
|
289
|
+
for (const e of events) {
|
|
290
|
+
if (e.name === "ActionAuthorized" && e.fields?.agent && e.fields?.actionType) {
|
|
291
|
+
const agent = e.fields.agent;
|
|
292
|
+
const actionObj = e.fields.actionType;
|
|
293
|
+
const actionName = typeof actionObj === "object" && "__kind" in actionObj
|
|
294
|
+
? actionObj.__kind
|
|
295
|
+
: ACTION_NAMES[Number(actionObj)] ?? "Unknown";
|
|
296
|
+
if (!agentActionUsage.has(agent))
|
|
297
|
+
agentActionUsage.set(agent, new Set());
|
|
298
|
+
agentActionUsage.get(agent).add(actionName);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
const globalActionCounts = new Map();
|
|
302
|
+
const byAgent = [];
|
|
303
|
+
for (const agentEntry of state.vault.agents) {
|
|
304
|
+
const agent = agentEntry.pubkey;
|
|
305
|
+
const granted = [];
|
|
306
|
+
for (let bit = 0; bit < 21; bit++) {
|
|
307
|
+
if ((agentEntry.permissions & (1n << BigInt(bit))) !== 0n) {
|
|
308
|
+
granted.push(ACTION_NAMES[bit]);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
const exercised = agentActionUsage.get(agent) ?? new Set();
|
|
312
|
+
const exercisedArr = [...exercised].filter((a) => granted.includes(a));
|
|
313
|
+
const unused = granted.filter((a) => !exercised.has(a));
|
|
314
|
+
for (const a of exercisedArr) {
|
|
315
|
+
globalActionCounts.set(a, (globalActionCounts.get(a) ?? 0) + 1);
|
|
316
|
+
}
|
|
317
|
+
byAgent.push({
|
|
318
|
+
agent,
|
|
319
|
+
grantedPermissions: granted,
|
|
320
|
+
exercisedPermissions: exercisedArr,
|
|
321
|
+
utilizationRate: granted.length > 0 ? (exercisedArr.length / granted.length) * 100 : 0,
|
|
322
|
+
unusedPermissions: unused,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
let mostUsed = null;
|
|
326
|
+
let leastUsed = null;
|
|
327
|
+
let maxCount = 0;
|
|
328
|
+
let minCount = Infinity;
|
|
329
|
+
for (const [action, count] of globalActionCounts) {
|
|
330
|
+
if (count > maxCount) {
|
|
331
|
+
maxCount = count;
|
|
332
|
+
mostUsed = action;
|
|
333
|
+
}
|
|
334
|
+
if (count < minCount) {
|
|
335
|
+
minCount = count;
|
|
336
|
+
leastUsed = action;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return { byAgent, mostUsedActionType: mostUsed, leastUsedActionType: leastUsed };
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=advanced-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced-analytics.js","sourceRoot":"","sources":["../src/advanced-analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent analytics — profiles, leaderboards, and concentration metrics.
|
|
3
|
+
*
|
|
4
|
+
* All functions are pure (no RPC) — they derive metrics from already-resolved
|
|
5
|
+
* vault state. The dashboard Agents tab and Agent Detail page use these.
|
|
6
|
+
*/
|
|
7
|
+
import type { Address } from "@solana/kit";
|
|
8
|
+
import type { DecodedSigilEvent } from "./events.js";
|
|
9
|
+
import type { ResolvedVaultState, EffectiveBudget } from "./state-resolver.js";
|
|
10
|
+
export interface AgentProfile {
|
|
11
|
+
address: Address;
|
|
12
|
+
permissions: bigint;
|
|
13
|
+
permissionStrings: string[];
|
|
14
|
+
permissionCount: number;
|
|
15
|
+
spendingLimitUsd: bigint;
|
|
16
|
+
paused: boolean;
|
|
17
|
+
budget: EffectiveBudget;
|
|
18
|
+
lifetimeSpend: bigint;
|
|
19
|
+
/** Lifetime transaction count from overlay (0 if no overlay or slot not found) */
|
|
20
|
+
lifetimeTxCount: bigint;
|
|
21
|
+
/** Average transaction size: lifetimeSpend / lifetimeTxCount (0n if no transactions) */
|
|
22
|
+
avgTransactionSize: bigint;
|
|
23
|
+
/** 0-100 percentage of per-agent cap used */
|
|
24
|
+
capUtilization: number;
|
|
25
|
+
/** Whether agent is over 80% of its cap */
|
|
26
|
+
isApproachingCap: boolean;
|
|
27
|
+
/** Whether agent has FULL_PERMISSIONS (all 21 bits) */
|
|
28
|
+
hasFullPermissions: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface AgentRanking {
|
|
31
|
+
address: Address;
|
|
32
|
+
/** 1-based rank (1 = highest spender) */
|
|
33
|
+
rank: number;
|
|
34
|
+
spend24h: bigint;
|
|
35
|
+
lifetimeSpend: bigint;
|
|
36
|
+
capUtilization: number;
|
|
37
|
+
paused: boolean;
|
|
38
|
+
permissionCount: number;
|
|
39
|
+
}
|
|
40
|
+
export interface AgentComparisonData {
|
|
41
|
+
agents: AgentRanking[];
|
|
42
|
+
totalAgentSpend24h: bigint;
|
|
43
|
+
/** Herfindahl-Hirschman Index (0-1). 1.0 = single agent dominates. */
|
|
44
|
+
spendConcentration: number;
|
|
45
|
+
mostActiveAgent: Address | null;
|
|
46
|
+
leastActiveAgent: Address | null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Build a complete profile for a single agent within a vault.
|
|
50
|
+
* Returns null if the agent is not registered.
|
|
51
|
+
*/
|
|
52
|
+
export declare function getAgentProfile(state: ResolvedVaultState, agentAddress: Address): AgentProfile | null;
|
|
53
|
+
/**
|
|
54
|
+
* Rank all agents in a vault by 24h spending (descending).
|
|
55
|
+
* Returns agents with 1-based rank numbers.
|
|
56
|
+
*/
|
|
57
|
+
export declare function getAgentLeaderboard(state: ResolvedVaultState): AgentRanking[];
|
|
58
|
+
/**
|
|
59
|
+
* Cross-agent comparison with Herfindahl concentration analysis.
|
|
60
|
+
*/
|
|
61
|
+
export declare function getAgentComparison(state: ResolvedVaultState): AgentComparisonData;
|
|
62
|
+
export interface AgentErrorBreakdown {
|
|
63
|
+
agent: Address;
|
|
64
|
+
totalSessions: number;
|
|
65
|
+
failedSessions: number;
|
|
66
|
+
expiredSessions: number;
|
|
67
|
+
successfulSessions: number;
|
|
68
|
+
/** 0-100 percentage */
|
|
69
|
+
successRate: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Categorize an agent's sessions by outcome (success/fail/expired).
|
|
73
|
+
* Used for the Agent Detail page success rate metric.
|
|
74
|
+
*/
|
|
75
|
+
export declare function getAgentErrorBreakdown(events: DecodedSigilEvent[], agentAddress: Address): AgentErrorBreakdown;
|
|
76
|
+
//# sourceMappingURL=agent-analytics.d.ts.map
|
|
@@ -0,0 +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,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAO/E,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,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,kBAAkB,EAAE,OAAO,CAAC;CAC7B;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,eAAe,EAAE,MAAM,CAAC;CACzB;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,CAoDrB;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,GACxB,YAAY,EAAE,CAmDhB;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,kBAAkB,GACxB,mBAAmB,CAqBrB;AAgBD,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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent analytics — profiles, leaderboards, and concentration metrics.
|
|
3
|
+
*
|
|
4
|
+
* All functions are pure (no RPC) — they derive metrics from already-resolved
|
|
5
|
+
* vault state. The dashboard Agents tab and Agent Detail page use these.
|
|
6
|
+
*/
|
|
7
|
+
import { bytesToAddress } from "./state-resolver.js";
|
|
8
|
+
import { permissionsToStrings, FULL_PERMISSIONS } from "./types.js";
|
|
9
|
+
import { computeHerfindahl } from "./math-utils.js";
|
|
10
|
+
// ─── getAgentProfile ─────────────────────────────────────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* Build a complete profile for a single agent within a vault.
|
|
13
|
+
* Returns null if the agent is not registered.
|
|
14
|
+
*/
|
|
15
|
+
export function getAgentProfile(state, agentAddress) {
|
|
16
|
+
const { vault, overlay, allAgentBudgets } = state;
|
|
17
|
+
const agentEntry = vault.agents.find((a) => a.pubkey === agentAddress);
|
|
18
|
+
if (!agentEntry)
|
|
19
|
+
return null;
|
|
20
|
+
const budget = allAgentBudgets.get(agentAddress) ?? {
|
|
21
|
+
spent24h: 0n,
|
|
22
|
+
cap: 0n,
|
|
23
|
+
remaining: 0n,
|
|
24
|
+
};
|
|
25
|
+
let lifetimeSpend = 0n;
|
|
26
|
+
let lifetimeTxCount = 0n;
|
|
27
|
+
if (overlay) {
|
|
28
|
+
const slotIdx = overlay.entries.findIndex((e) => {
|
|
29
|
+
try {
|
|
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
|
|
44
|
+
? Number((budget.spent24h * 10000n) / budget.cap) / 100
|
|
45
|
+
: 0;
|
|
46
|
+
const permStrings = permissionsToStrings(agentEntry.permissions);
|
|
47
|
+
return {
|
|
48
|
+
address: agentAddress,
|
|
49
|
+
permissions: agentEntry.permissions,
|
|
50
|
+
permissionStrings: permStrings,
|
|
51
|
+
permissionCount: permStrings.length,
|
|
52
|
+
spendingLimitUsd: agentEntry.spendingLimitUsd,
|
|
53
|
+
paused: agentEntry.paused,
|
|
54
|
+
budget,
|
|
55
|
+
lifetimeSpend,
|
|
56
|
+
lifetimeTxCount,
|
|
57
|
+
avgTransactionSize: lifetimeTxCount > 0n ? lifetimeSpend / lifetimeTxCount : 0n,
|
|
58
|
+
capUtilization,
|
|
59
|
+
isApproachingCap: capUtilization > 80,
|
|
60
|
+
hasFullPermissions: agentEntry.permissions === FULL_PERMISSIONS,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// ─── getAgentLeaderboard ─────────────────────────────────────────────────────
|
|
64
|
+
/**
|
|
65
|
+
* Rank all agents in a vault by 24h spending (descending).
|
|
66
|
+
* Returns agents with 1-based rank numbers.
|
|
67
|
+
*/
|
|
68
|
+
export function getAgentLeaderboard(state) {
|
|
69
|
+
const { vault, overlay, allAgentBudgets } = state;
|
|
70
|
+
const rankings = vault.agents.map((agentEntry) => {
|
|
71
|
+
const budget = allAgentBudgets.get(agentEntry.pubkey) ?? {
|
|
72
|
+
spent24h: 0n,
|
|
73
|
+
cap: 0n,
|
|
74
|
+
remaining: 0n,
|
|
75
|
+
};
|
|
76
|
+
let lifetimeSpend = 0n;
|
|
77
|
+
if (overlay) {
|
|
78
|
+
const slotIdx = overlay.entries.findIndex((e) => {
|
|
79
|
+
try {
|
|
80
|
+
return bytesToAddress(e.agent) === agentEntry.pubkey;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
if (slotIdx >= 0 && slotIdx < overlay.lifetimeSpend.length) {
|
|
87
|
+
lifetimeSpend = overlay.lifetimeSpend[slotIdx];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const capUtilization = budget.cap > 0n
|
|
91
|
+
? Number((budget.spent24h * 10000n) / budget.cap) / 100
|
|
92
|
+
: 0;
|
|
93
|
+
return {
|
|
94
|
+
address: agentEntry.pubkey,
|
|
95
|
+
rank: 0,
|
|
96
|
+
spend24h: budget.spent24h,
|
|
97
|
+
lifetimeSpend,
|
|
98
|
+
capUtilization,
|
|
99
|
+
paused: agentEntry.paused,
|
|
100
|
+
permissionCount: countPermissionBits(agentEntry.permissions),
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
rankings.sort((a, b) => {
|
|
104
|
+
if (b.spend24h > a.spend24h)
|
|
105
|
+
return 1;
|
|
106
|
+
if (b.spend24h < a.spend24h)
|
|
107
|
+
return -1;
|
|
108
|
+
return 0;
|
|
109
|
+
});
|
|
110
|
+
rankings.forEach((r, i) => {
|
|
111
|
+
r.rank = i + 1;
|
|
112
|
+
});
|
|
113
|
+
return rankings;
|
|
114
|
+
}
|
|
115
|
+
// ─── getAgentComparison ──────────────────────────────────────────────────────
|
|
116
|
+
/**
|
|
117
|
+
* Cross-agent comparison with Herfindahl concentration analysis.
|
|
118
|
+
*/
|
|
119
|
+
export function getAgentComparison(state) {
|
|
120
|
+
const rankings = getAgentLeaderboard(state);
|
|
121
|
+
const totalSpend = rankings.reduce((sum, r) => sum + r.spend24h, 0n);
|
|
122
|
+
const hhi = computeHerfindahl(rankings.map((r) => r.spend24h));
|
|
123
|
+
const activeAgents = rankings.filter((r) => r.spend24h > 0n);
|
|
124
|
+
const mostActive = activeAgents.length > 0 ? activeAgents[0].address : null;
|
|
125
|
+
const leastActive = activeAgents.length > 0
|
|
126
|
+
? activeAgents[activeAgents.length - 1].address
|
|
127
|
+
: null;
|
|
128
|
+
return {
|
|
129
|
+
agents: rankings,
|
|
130
|
+
totalAgentSpend24h: totalSpend,
|
|
131
|
+
spendConcentration: hhi,
|
|
132
|
+
mostActiveAgent: mostActive,
|
|
133
|
+
leastActiveAgent: leastActive,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// ─── Internal ────────────────────────────────────────────────────────────────
|
|
137
|
+
function countPermissionBits(perms) {
|
|
138
|
+
let count = 0;
|
|
139
|
+
let v = perms;
|
|
140
|
+
while (v > 0n) {
|
|
141
|
+
count += Number(v & 1n);
|
|
142
|
+
v >>= 1n;
|
|
143
|
+
}
|
|
144
|
+
return count;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Categorize an agent's sessions by outcome (success/fail/expired).
|
|
148
|
+
* Used for the Agent Detail page success rate metric.
|
|
149
|
+
*/
|
|
150
|
+
export function getAgentErrorBreakdown(events, agentAddress) {
|
|
151
|
+
let total = 0;
|
|
152
|
+
let failed = 0;
|
|
153
|
+
let expired = 0;
|
|
154
|
+
let successful = 0;
|
|
155
|
+
for (const e of events) {
|
|
156
|
+
if (e.name !== "SessionFinalized" || !e.fields)
|
|
157
|
+
continue;
|
|
158
|
+
if (e.fields.agent !== agentAddress)
|
|
159
|
+
continue;
|
|
160
|
+
total++;
|
|
161
|
+
const success = e.fields.success;
|
|
162
|
+
const isExpired = e.fields.isExpired;
|
|
163
|
+
if (isExpired)
|
|
164
|
+
expired++;
|
|
165
|
+
else if (!success)
|
|
166
|
+
failed++;
|
|
167
|
+
else
|
|
168
|
+
successful++;
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
agent: agentAddress,
|
|
172
|
+
totalSessions: total,
|
|
173
|
+
failedSessions: failed,
|
|
174
|
+
expiredSessions: expired,
|
|
175
|
+
successfulSessions: successful,
|
|
176
|
+
successRate: total > 0 ? Math.round((successful / total) * 100) : 100,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=agent-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-analytics.js","sourceRoot":"","sources":["../src/agent-analytics.ts"],"names":[],"mappings":"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"}
|