@cascade-fyi/sati-agent0-sdk 0.2.0 → 0.3.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/CHANGELOG.md +23 -0
- package/README.md +3 -3
- package/dist/index.cjs +8 -9
- package/dist/index.d.cts +3 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +9 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,27 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.3.1] - 2026-02-12
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- SIWS counterparty message schema name corrected from `FeedbackPublic` to `FeedbackPublicV1` in `giveFeedback()` and `prepareFeedback()` - mismatched name caused signature verification failures on-chain
|
|
13
|
+
|
|
14
|
+
## [0.3.0] - 2026-02-12
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- `photonRpcUrl` option in `SatiSDKConfig` for overriding the default Photon RPC endpoint
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- `registerIPFS()` and `updateIPFS()` now fall back to hosted SATI uploader when `pinataJwt` is not configured (zero-config experience - no Pinata JWT needed)
|
|
23
|
+
- `pinataJwt` is now optional for all IPFS operations (was required, threw `PINATA_JWT_REQUIRED`)
|
|
24
|
+
|
|
25
|
+
### Dependencies
|
|
26
|
+
|
|
27
|
+
- Requires `@cascade-fyi/sati-sdk` >= 0.6.0 (hosted uploader + Photon proxy defaults)
|
|
28
|
+
|
|
8
29
|
## [0.2.0] - 2026-02-12
|
|
9
30
|
|
|
10
31
|
### Breaking Changes
|
|
@@ -84,6 +105,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
84
105
|
- Transaction sender support for browser wallet integration
|
|
85
106
|
- Re-exports of agent0-sdk types and SATI constants for consumer convenience
|
|
86
107
|
|
|
108
|
+
[0.3.1]: https://github.com/cascade-protocol/sati/compare/@cascade-fyi/sati-agent0-sdk@0.3.0...@cascade-fyi/sati-agent0-sdk@0.3.1
|
|
109
|
+
[0.3.0]: https://github.com/cascade-protocol/sati/compare/@cascade-fyi/sati-agent0-sdk@0.2.0...@cascade-fyi/sati-agent0-sdk@0.3.0
|
|
87
110
|
[0.2.0]: https://github.com/cascade-protocol/sati/compare/@cascade-fyi/sati-agent0-sdk@0.1.1...@cascade-fyi/sati-agent0-sdk@0.2.0
|
|
88
111
|
[0.1.1]: https://github.com/cascade-protocol/sati/compare/@cascade-fyi/sati-agent0-sdk@0.1.0...@cascade-fyi/sati-agent0-sdk@0.1.1
|
|
89
112
|
[0.1.0]: https://github.com/cascade-protocol/sati/releases/tag/@cascade-fyi/sati-agent0-sdk@0.1.0
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# @cascade-fyi/sati-agent0-sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) agent identity and reputation on Solana. Register agents, collect feedback, query reputation, search by capabilities - all on-chain, zero config.
|
|
4
4
|
|
|
5
|
-
API-compatible
|
|
5
|
+
API-compatible with [agent0-sdk](https://github.com/agent0-ai/agent0-sdk) - same method names and types, but routes through [SATI](https://github.com/cascade-protocol/sati)'s Solana infrastructure instead of EVM chains. Write operations return `SolanaTransactionHandle<T>` (compatible with agent0-sdk's `TransactionHandle` via `.hash`, `.waitMined()`, `.waitConfirmed()`).
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -85,7 +85,7 @@ agent.setActive(true);
|
|
|
85
85
|
agent.setX402Support(true);
|
|
86
86
|
agent.setTrust(true, false, false); // reputation only
|
|
87
87
|
|
|
88
|
-
// Register on-chain via IPFS (
|
|
88
|
+
// Register on-chain via IPFS (zero config - no API keys needed)
|
|
89
89
|
const handle = await agent.registerIPFS();
|
|
90
90
|
console.log(agent.agentId, handle.hash);
|
|
91
91
|
```
|
package/dist/index.cjs
CHANGED
|
@@ -655,10 +655,9 @@ var SatiAgent = class SatiAgent {
|
|
|
655
655
|
async registerIPFS() {
|
|
656
656
|
if (this._identity) throw new SatiError("ALREADY_REGISTERED", "Agent is already registered on-chain. Use updateIPFS() instead.");
|
|
657
657
|
if (!this._registrationFile.image) throw new SatiError("IMAGE_REQUIRED", "Image URL is required for registration. Set it via updateInfo() or createAgent().");
|
|
658
|
-
const pinataJwt = this._sdk.config.pinataJwt;
|
|
659
|
-
if (!pinataJwt) throw new SatiError("PINATA_JWT_REQUIRED", "pinataJwt is required for IPFS uploads. Set it in SatiSDKConfig.");
|
|
660
658
|
const satiParams = fromAgent0RegistrationFile(this._registrationFile);
|
|
661
|
-
const
|
|
659
|
+
const pinataJwt = this._sdk.config.pinataJwt;
|
|
660
|
+
const uploader = pinataJwt ? (0, _cascade_fyi_sati_sdk.createPinataUploader)(pinataJwt) : (0, _cascade_fyi_sati_sdk.createSatiUploader)();
|
|
662
661
|
const uri = await this._sdk.sati.uploadRegistrationFile(satiParams, uploader);
|
|
663
662
|
return this._registerOnChain(uri);
|
|
664
663
|
}
|
|
@@ -686,10 +685,9 @@ var SatiAgent = class SatiAgent {
|
|
|
686
685
|
*/
|
|
687
686
|
async updateIPFS() {
|
|
688
687
|
if (!this._identity) throw new AgentNotFoundError("Agent not registered on-chain. Call registerIPFS() first.");
|
|
689
|
-
const pinataJwt = this._sdk.config.pinataJwt;
|
|
690
|
-
if (!pinataJwt) throw new SatiError("PINATA_JWT_REQUIRED", "pinataJwt is required for IPFS uploads. Set it in SatiSDKConfig.");
|
|
691
688
|
const satiParams = fromAgent0RegistrationFile(this._registrationFile);
|
|
692
|
-
const
|
|
689
|
+
const pinataJwt = this._sdk.config.pinataJwt;
|
|
690
|
+
const uploader = pinataJwt ? (0, _cascade_fyi_sati_sdk.createPinataUploader)(pinataJwt) : (0, _cascade_fyi_sati_sdk.createSatiUploader)();
|
|
693
691
|
const newUri = await this._sdk.sati.uploadRegistrationFile(satiParams, uploader);
|
|
694
692
|
return this.setAgentURI(newUri);
|
|
695
693
|
}
|
|
@@ -951,7 +949,8 @@ var SatiSDK = class {
|
|
|
951
949
|
this._config = config;
|
|
952
950
|
this._sati = new _cascade_fyi_sati_sdk.Sati({
|
|
953
951
|
network: config.network,
|
|
954
|
-
rpcUrl: config.rpcUrl
|
|
952
|
+
rpcUrl: config.rpcUrl,
|
|
953
|
+
photonRpcUrl: config.photonRpcUrl
|
|
955
954
|
});
|
|
956
955
|
this._sasConfig = (0, _cascade_fyi_sati_sdk.loadDeployedConfig)(config.network);
|
|
957
956
|
this._chain = SOLANA_CAIP2_CHAINS[config.network] ?? `solana:${config.network}`;
|
|
@@ -1275,7 +1274,7 @@ var SatiSDK = class {
|
|
|
1275
1274
|
if (access.type === "keypair") {
|
|
1276
1275
|
const signer = access.signer;
|
|
1277
1276
|
const { messageBytes } = (0, _cascade_fyi_sati_sdk.buildCounterpartyMessage)({
|
|
1278
|
-
schemaName: "
|
|
1277
|
+
schemaName: "FeedbackPublicV1",
|
|
1279
1278
|
data: (0, _cascade_fyi_sati_sdk.serializeFeedback)({
|
|
1280
1279
|
taskRef,
|
|
1281
1280
|
agentMint: identity.mint,
|
|
@@ -1354,7 +1353,7 @@ var SatiSDK = class {
|
|
|
1354
1353
|
const taskRef = opts?.taskRef ?? globalThis.crypto.getRandomValues(new Uint8Array(32));
|
|
1355
1354
|
const outcome = opts?.outcome ?? _cascade_fyi_sati_sdk.Outcome.Neutral;
|
|
1356
1355
|
const { messageBytes } = (0, _cascade_fyi_sati_sdk.buildCounterpartyMessage)({
|
|
1357
|
-
schemaName: "
|
|
1356
|
+
schemaName: "FeedbackPublicV1",
|
|
1358
1357
|
data: (0, _cascade_fyi_sati_sdk.serializeFeedback)({
|
|
1359
1358
|
taskRef,
|
|
1360
1359
|
agentMint: identity.mint,
|
package/dist/index.d.cts
CHANGED
|
@@ -70,7 +70,9 @@ interface SatiSDKConfig {
|
|
|
70
70
|
transactionSender?: SatiTransactionSender;
|
|
71
71
|
/** Custom RPC URL (overrides network default) */
|
|
72
72
|
rpcUrl?: string;
|
|
73
|
-
/**
|
|
73
|
+
/** Custom Photon RPC URL for Light Protocol queries (overrides hosted default) */
|
|
74
|
+
photonRpcUrl?: string;
|
|
75
|
+
/** Pinata JWT for IPFS uploads (falls back to hosted uploader if not set) */
|
|
74
76
|
pinataJwt?: string;
|
|
75
77
|
/** Optional callback for non-fatal warnings (RPC failures, transient errors). */
|
|
76
78
|
onWarning?: (warning: SatiWarning) => void;
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/transaction-handle.ts","../src/agent.ts","../src/sdk.ts","../src/errors.ts","../src/adapters.ts"],"sourcesContent":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/transaction-handle.ts","../src/agent.ts","../src/sdk.ts","../src/errors.ts","../src/adapters.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -70,7 +70,9 @@ interface SatiSDKConfig {
|
|
|
70
70
|
transactionSender?: SatiTransactionSender;
|
|
71
71
|
/** Custom RPC URL (overrides network default) */
|
|
72
72
|
rpcUrl?: string;
|
|
73
|
-
/**
|
|
73
|
+
/** Custom Photon RPC URL for Light Protocol queries (overrides hosted default) */
|
|
74
|
+
photonRpcUrl?: string;
|
|
75
|
+
/** Pinata JWT for IPFS uploads (falls back to hosted uploader if not set) */
|
|
74
76
|
pinataJwt?: string;
|
|
75
77
|
/** Optional callback for non-fatal warnings (RPC failures, transient errors). */
|
|
76
78
|
onWarning?: (warning: SatiWarning) => void;
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/transaction-handle.ts","../src/agent.ts","../src/sdk.ts","../src/errors.ts","../src/adapters.ts"],"sourcesContent":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/transaction-handle.ts","../src/agent.ts","../src/sdk.ts","../src/errors.ts","../src/adapters.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AAuDA;AAWA;;;;;AAoBA;AAgBA;AAcA;;;;;;;;;;;AAoB0B,UAtGT,qBAAA,CAsGS;EAkBT;EAUA,SAAA,OAAA,EAAA,MAAgB;;;;ACxJjC;AAQA;AAwBA;EAM8B,WAAA,CAAA,YAAA,EDPF,WCOE,EAAA,EAAA,iBAAA,CAAA,EDPiC,aCOjC,EAAA,CAAA,EDPmD,OCOnD,CAAA,MAAA,CAAA;EAMuB;;;;;EAK5B,WAAA,EAAA,OAAA,EDZD,UCYC,CAAA,EDZY,OCYZ,CDZoB,UCYpB,CAAA;;;;;ACtBZ,KFgBD,WAAA,GEhBU;EAOH,IAAA,EAAA,SAAA;EAA2B,MAAA,EFUf,aEVe;CAOjC,GAAA;EAQQ,IAAA,EAAA,QAAA;EAAoD,MAAA,EFJ3C,qBEI2C;CAAM;;;;;;;;AA6DxD,UFxDN,aAAA,CEwDM;EAKL;EAiD0D,OAAA,EAAA,SAAA,GAAA,QAAA,GAAA,UAAA;EA6BL;EAyCtC,MAAA,CAAA,EFhLtB,aEgLsB;EA4BlB;EAQG,iBAAA,CAAA,EFlNI,qBEkNJ;EAqGA;EAMD,MAAA,CAAA,EAAA,MAAA;EAeyC;EAWjC,YAAA,CAAA,EAAA,MAAA;EAiB+B;EAAxB,SAAA,CAAA,EAAA,MAAA;EAAR;EA4BO,SAAA,CAAA,EAAA,CAAA,OAAA,EF5XP,WE4XO,EAAA,GAAA,IAAA;;;;;AAiBD,UFvYb,iBAAA,SAA0B,eEuYb,CAAA;EAAR;;;;;EA+BQ,oBAAA,CAAA,EAAA,OAAA;EAAsC;EAAxB,KAAA,CAAA,EAAA,MAAA;EAAR;EAwCtB,MAAA,CAAA,EAAA,MAAA;;;;;UF9bG,yBAAA,SAAkC;;;AGfnD;;EAmBiB,aAAA,CAAA,EAAA,OAAA;;;;;;;;AAmES,UHzDT,gBAAA,CGyDS;EAAkB;EAAR,YAAA,EHvDpB,UGuDoB;EA2BL;EAAyB,SAAA,EHhF3C,SGgF2C;EAA4B;EAAR,YAAA,EH9E5D,SG8E4D;EAqN/D;EACC,OAAA,EHlSH,UGkSG;EAC4E;EAA7E,QAAA,EHjSD,UGiSC;EAAR;EAmDyB,OAAA,EHlVnB,SGkVmB;EAAe;EAAU,WAAA,EHhVxC,aGgVwC;EAQxB;EAAkB,OAAA,EHtVtC,UGsVsC;EAAR;EAYZ,SAAA,EHhWhB,SGgWgB;EAA2B;EAA0B,WAAA,CAAA,EH9VlE,SG8VkE;EAerE;EAKM,YAAA,EAAA;IACkB,KAAA,CAAA,EAAA,MAAA;IAAxB,IAAA,CAAA,EAAA,MAAA;IAAR,IAAA,CAAA,EAAA,MAAA;IA4GQ,QAAA,CAAA,EAAA,MAAA;IAQG,IAAA,CAAA,EAAA,MAAA;EACA,CAAA;;;;;;;;;AAqIiD,UH3lBhD,WAAA,CG2lBgD;EAAoC,IAAA,EAAA,aAAA,GAAA,WAAA,GAAA,yBAAA;EAAR,OAAA,EAAA,MAAA;EAmK/E,OAAA,CAAA,EAAA,MAAA;EACM,KAAA,CAAA,EAAA,OAAA;;;;;AA6DS,UHlzBZ,gBAAA,CGkzBY;EAAwB;EAAyC,OAAA,EAAA,MAAA;EAAR;EAkB7B,SAAA,EAAA,MAAA;EAiB9B;EAA2C,YAAA,EAAA,MAAA;EAAxB;;;;;;EAkGsB,SAAA,EAAA,MAAA;EAAR;EA+BzB,iBAAA,EAAA,MAAA;;;;;;;;;AHxlCnC;;;;;;AAeqC,UCrCpB,aAAA,CDqCoB;EAAO;EAMhC,SAAA,EAAA,MAAW;AAWvB;;;;AAcmC,UC5DlB,uBD4DkB,CAAA,CAAA,CAAA,CAAA;EAMlB,OAAA,ECjEN,aDiEwB;EAgBlB,MAAA,EChFP,CDgFO;AAcjB;;;;;;;;;;;;AAsCA;AAUA;;;;ACxJA;AAQA;AAwBA;AAM8B,cANjB,uBAMiB,CAAA,CAAA,CAAA,CAAA;EAMuB,iBAAA,OAAA;EAAxB;EAAR,SAAA,IAAA,EAAA,MAAA;EAKoC,WAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAX3B,CAW2B;EAAxB;EAAR,SAAA,CAAA,CAAA,EALJ,OAKI,CALI,uBAKJ,CAL4B,CAK5B,CAAA,CAAA;EAAO;mBAAP,QAAQ,wBAAwB;;;;;;ADNzD;AAWA;;;AAcwB,cEzCX,SAAA,CFyCW;EAAW,QAAA,iBAAA;EAMlB,QAAA,gBAAkB;EAgBlB,QAAA,SAAA;EAcA,iBAAA,IAAgB;EAEjB,WAAA,CAAA,GAAA,EExEG,OFwEH,EAAA,gBAAA,EExE8B,kBFwE9B;EAEH;EAEG,IAAA,GAAA,CAAA,CAAA,EErEH,OFqEG;EAEL;;;;EAQA,OAAA,MAAA,CAAA,GAAA,EEvEU,OFuEV,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EEvE8D,KFuE9D,CAAA,EEvEoE,SFuEpE;EAEE;;;AAoBb;EAUiB,OAAA,YAAgB,CAAA,GAAA,EElFN,OFkFM,EAAA,QAAA,EElFa,aFkFb,EAAA,gBAAA,EElF8C,kBFkF9C,CAAA,EElFiE,SFkFjE;iBEtEhB;kBAIC;;EDtFD,IAAA,WAAA,CAAA,CAAa,EAAA,MAAA;EAQb,IAAA,KAAA,CAAA,CAAA,EC0FF,KD1FE,GAAA,SAAuB;EAwB3B,IAAA,WAAA,CAAA,CAAA,EAAA,MAAA,GAAuB,SAAA;EAMN,IAAA,WAAA,CAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAMuB,IAAA,aAAA,CAAA,CAAA,ECkE9B,SDlE8B,GAAA,SAAA;EAAxB;EAAR,IAAA,QAAA,CAAA,CAAA,ECuEH,aDvEG,GAAA,SAAA;EAKoC,IAAA,WAAA,CAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAAxB,IAAA,WAAA,CAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAAR,IAAA,QAAA,CAAA,CAAA,EAAA,MAAA,EAAA;EAAO,IAAA,UAAA,CAAA,CAAA,EAAA,MAAA,EAAA;;;;ECtBnB,IAAA,WAAS,CAAA,CAAA,EAAA,MAAA,EAAA;EAOH;;;EAeE,MAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,CAAA,EAmHuD,OAnHvD,CAAA,IAAA,CAAA;EAAoD;;;EAqB3B,MAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,CAAA,EA2HyB,OA3HzB,CAAA,IAAA,CAAA;EAAiC;;;EAgB7D,MAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAYH;;;EAkE6D,cAAA,CAAA,IAkG7D,CAlG6D,EAAA;IA6BL,IAAA,CAAA,EAyCtC,cAzCsC;IAyCtC,KAAA,CAAA,EAAA,MAAA;EA4BlB,CAAA,CAAA,EAAA,IAAA;EAQG;;;EA0HwC,eAAA,CAAA,CAAA,EAAA,IAAA;EAWjC;;;EAiBD,SAAA,CAAA,CAAA,EA9JT,SA8JS,GAAA,SAAA;EA4BO;;;;EAiBuB,SAAA,CAAA,IAAA,EAnMpC,SAmMoC,CAAA,EAAA,IAAA;EAAxB;;;EAkBqC,WAAA,CAAA,CAAA,EAAA,IAAA;EAAxB,QAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAR,WAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAaL,SAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAsC,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAxB,SAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAAR,cAAA,CAAA,WAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAwCtB,QAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,cAAA,CAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAC4E,WAAA,CAAA,EAAA,EAtKxE,MAsKwE,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,EAAA,IAAA;EAA7E,WAAA,CAAA,CAAA,EAhKI,MAgKJ,CAAA,MAAA,EAAA,OAAA,CAAA;EAAR,WAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAO;;;0DAjJ8C;EC7T7C;;;EA6CC,mBAAA,CAAA,CAAA,ED2RW,kBC3RX;EAKK;;;;;;;;;EA+DY,YAAA,CAAA,CAAA,EDwOP,OCxOO,CDwOC,uBCxOD,CDwOyB,kBCxOzB,CAAA,CAAA;EAAyB;;;;;;;;EA0Q1B,YAAA,CAAA,QAAA,EDNC,KCMD,CAAA,EDNO,OCMP,CDNe,uBCMf,CDNuC,kBCMvC,CAAA,CAAA;EAAe;;;;;;;;;;EAyCR,UAAA,CAAA,CAAA,ED9Bf,OC8Be,CD9BP,uBC8BO,CD9BiB,kBC8BjB,CAAA,CAAA;EAAxB;;;;;;EAuHR,UAAA,CAAA,QAAA,EDnIwB,KCmIxB,CAAA,EDnI8B,OCmI9B,CDnIsC,uBCmItC,CDnI8D,kBCmI9D,CAAA,CAAA;EAmFS;;;;;;EAgDmD,WAAA,CAAA,QAAA,EDzPnC,KCyPmC,CAAA,EDzP7B,OCyP6B,CDzPrB,uBCyPqB,CDzPG,kBCyPH,CAAA,CAAA;EAAoC;;;;;;EAkLxF,QAAA,CAAA,QAAA,EDnYC,SCmYD,CAAA,EDlYR,OCkYQ,CDlYA,uBCkYA,CAAA;IAGR,MAAA,EAAA,MAAA;IA4CwB,IAAA,EAAA,MAAA;IAAwB,EAAA,EAAA,MAAA;IAAyC,OAAA,EDjbJ,SCibI,GAAA,SAAA;EAAR,CAAA,CAAA,CAAA;EAkB7B,QAAA,mBAAA;EAiB9B;;;;EAED,QAAA,gBAAA;EAAiE,QAAA,cAAA;EAAxB,QAAA,wBAAA;;;;;;AHp8BnE;AAWA;;;;;AAoBA;AAgBA;AAcA;;;;;;;;;;;AAoB0B,cGjDb,OAAA,CHiDa;EAkBT,iBAAW,OAAA;EAUX,iBAAA,KAAgB;;;;ECxJhB,WAAA,CAAA,MAAa,EEkFR,aFlFQ;EAQb;EAwBJ,IAAA,OAAA,CAAA,CAAA,EE8DI,aF9DmB,CAAA,SAAA,CAAA;EAMN;;;;EAW2B,IAAA,OAAA,CAAA,CAAA,EAAA,MAAA;EAAxB;EAAR,IAAA,KAAA,CAAA,CAAA,EAAA,MAAA;EAAO;;;;ACtBhC;;EAO8C,IAAA,IAAA,CAAA,CAAA,ECsFhC,MDtFgC;EAOjC;EAQQ,IAAA,SAAA,CAAA,CAAA,EC4EF,aD5EE,GAAA,IAAA;EAAoD;;;;EAqBM,WAAA,CAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,KAAA,CAAA,ECmEtB,KDnEsB,CAAA,ECmEhB,SDnEgB;EAAmB;;;EA4BnF,SAAA,CAAA,OAAA,EC8CY,SD9CZ,CAAA,EC8CsB,OD9CtB,CC8C8B,SD9C9B,CAAA;EAYQ;;;EAmFgD,QAAA,CAAA,OAAA,EChC7C,SDgC6C,CAAA,EChCnC,ODgCmC,CChC3B,cDgC2B,GAAA,IAAA,CAAA;EAyCtC;;;;;;;;;;;;;;;;EAuOX,YAAA,CAAA,OAAA,CAAA,ECrRS,eDqRT,EAAA,OAAA,CAAA,ECrRkC,iBDqRlC,CAAA,ECrRsD,ODqRtD,CCrR8D,cDqR9D,EAAA,CAAA;EAkBO;;;EAAM,aAAA,CAAA,OAAA,EClFtB,SDkFsB,EAAA,QAAA,ECjFrB,SDiFqB,CAAA,EChF9B,ODgF8B,CChFtB,uBDgFsB,CAAA;IAaL,MAAA,EAAA,MAAA;IAAsC,IAAA,EAAA,MAAA;IAAxB,EAAA,EAAA,MAAA;IAAR,OAAA,EC7FsD,SD6FtD;EAwCtB,CAAA,CAAA,CAAA;EAC4E;;;EAA9E,YAAA,CAAA,OAAA,ECnFkB,SDmFlB,EAAA,IAAA,ECnFiC,SDmFjC,CAAA,ECnF2C,ODmF3C,CAAA,OAAA,CAAA;;;;EC9cC,aAAO,CAAA,OAAA,EAmYW,SAnYX,CAAA,EAmYqB,OAnYrB,CAmY6B,SAnY7B,CAAA;EAOE;;;EA2CH,mBAAA,CAAA,KAAA,EA6VU,mBA7VV,EAAA,KAAA,CAAA,EA6VqC,MA7VrC,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,EA6V+D,mBA7V/D;EAYsC;;;;;;;;;;EAmD2B,YAAA,CAAA,OAAA,EA6SvE,SA7SuE,EAAA,KAAA,EAAA,MAAA,GAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAkTjE,mBAlTiE,CAAA,EAmT/E,OAnT+E,CAmTvE,uBAnTuE,CAmT/C,UAnT+C,CAAA,CAAA;EAAR;;;;;;;;;;;;EA8R/C,eAAA,CAAA,OAAA,EAiIhB,SAjIgB,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,EAAA,IAqBhB,CArBgB,EAAA;IAA2B,QAAA,CAAA,EAAA,MAAA;IAA0B,IAAA,CAAA,EAAA,MAAA;IAerE,YAAA,CAAA,EAAA,MAAA;IAKM,OAAA,CAAA,EAqHH,SArHG;IACkB,OAAA,CAAA,EAqHrB,UArHqB;EAAxB,CAAA,CAAA,EAuHR,OAvHQ,CAuHA,gBAvHA,CAAA;EAAR;;;;;;;;EA4MgC,sBAAA,CAAA,QAAA,EAFvB,gBAEuB,EAAA,qBAAA,EADV,UACU,CAAA,EAAhC,OAAgC,CAAxB,uBAAwB,CAAA,UAAA,CAAA,CAAA;EAAxB;;;;;;;;;;;EAmOR,cAAA,CAAA,OAAA,EArL2B,uBAqL3B,EAAA,OAAA,CAAA,EArL4D,yBAqL5D,CAAA,EArLwF,OAqLxF,CArLgG,UAqLhG,EAAA,CAAA;EA4CwB;;;;;EAmCF,cAAA,CAAA,QAAA,EAjGb,SAiGa,EAAA,cAAA,EAhGP,SAgGO,EAAA,cAAA,EAAA,MAAA,EAAA,SAAA,EAAA;IAA2C,GAAA,EA9FhD,KA8FgD;IAAxB,IAAA,EAAA,MAAA;EAAR,CAAA,CAAA,EA7FjC,OA6FiC,CAAA,KAAA,CAAA;EAEZ;;;;;;EA+HS,oBAAA,CAAA,OAAA,EAnNtB,SAmNsB,EAAA,IAAA,CAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,CAAA,EAhN9B,OAgN8B,CAAA;IAAkB,KAAA,EAAA,MAAA;IAAR,YAAA,EAAA,MAAA;EA8D7B,CAAA,CAAA;EAAa;;;;AC9qC7B;EAca,WAAA,CAAA,OAAA,ED87BgB,SC97BG,EAAA,aAAiB,ED87BI,SC97BJ,EAAA,aAAA,EAAA,MAAA,CAAA,ED87BqC,OC97BrC,CD87B6C,UC97B7C,CAAA;EAUpC;AAab;AAaA;AAaA;AAUA;;;;AChEA;EAWgB,oBAAiB,CAAA,iBAAA,EAAA,MAAA,CAAA,EF08BwB,OE18BxB,CAAA,MAAA,GAAA,IAAA,CAAA;EAUjB;EAiCA,cAAA,CAAA,QAAiB,EFg7BN,UEh7BsB,CAAA,EFg7BX,OEh7B4B,CFg7BpB,uBEh7BkC,CFg7BV,UEh7BU,CAAA,CAAA;EAqBhE;EA6BA,cAAA,CAAA,OAAc,EFg4BJ,SEh4BI,EAAA,aAAA,EAAA,MAAA,CAAA,EFg4B6B,OEh4B7B,CFg4BqC,uBEh4BrC,CFg4B6D,UEh4B7D,CAAA,CAAA;EAClB;;;;AAiEZ;;;;EAIyB,uBAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,EF05BmC,OE15BnC,CF05B2C,uBE15B3C,CAAA;IA6BT,SAAA,EAAA,MAAA;EAAuC,CAAA,CAAA,CAAA;EACrD;;;AAyCF;;;;;;;;6BFk3BmC,YAAU,QAAQ;;;;;;;;;;gBA8DrC;;;;;;;;;;;;;;;;;;AHtpChB;;;;AAewB,cIvCX,SAAA,SAAkB,KAAA,CJuCP;EAAqB,SAAA,IAAA,EAAA,MAAA;EAAR,WAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EInCvB,YJmCuB;;AAMrC;AAWA;;AAMsB,cIhDT,kBAAA,SAA2B,SAAA,CJgDlB;EAQE,WAAA,CAAA,OAAA,EAAA,MAAA;;AAMxB;AAgBA;AAcA;AAEgB,cIpFH,aAAA,SAAsB,SAAA,CJoFnB;EAEH,WAAA,CAAA,SAAA,CAAA,EAAA,MAAA;;;;;AAUE,cInFF,mBAAA,SAA4B,SAAA,CJmF1B;EAEJ,WAAA,CAAA,SAAA,CAAA,EAAA,MAAA;;;;AAsBX;AAUiB,cIxGJ,sBAAA,SAA+B,SAAA,CJwGX;;;;ACxJjC;AAQA;AAwBa,cG6BA,mBAAA,SAA4B,SAAA,CH7BL;EAMN,WAAA,CAAA,OAAA,EAAA,MAAA;;;;;AAWG,cGsBpB,yBAAA,SAAkC,SAAA,CHtBd;EAAR,WAAA,CAAA,SAAA,EAAA,MAAA;;;;;ADZoB,cK9BhC,mBL8BgC,EK9BX,ML8BW,CAAA,MAAA,EAAA,MAAA,CAAA;;;AAM7C;AAWA;;AAMsB,iBK1CN,iBAAA,CL0CM,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;;AActB;AAgBA;AAcA;;AAIa,iBKhFG,gBAAA,CLgFH,OAAA,EAAA,MAAA,CAAA,EAAA,MAAA,GAAA,IAAA;;;;AAQF,iBKvDK,iBAAA,CLuDL,aAAA,EKvDsC,ULuDtC,EAAA,CAAA,EKvDuD,ULuDvD,EAAA;;;;AAQK,iBK1CA,mBAAA,CL0CA,eAAA,EK1CqC,UL0CrC,EAAA,CAAA,EK1CwD,UL0CxD,EAAA;;AAkBhB;AAUA;;;;ACxJA;AAQA;AAwBa,iBI+EG,cAAA,CJ/EoB,QAAA,EIgFxB,aJhFwB,EAAA,KAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EIkFxB,kBJlFwB,GAAA,IAAA,EAAA,aAYP,CAZO,EAAA;EAMN,KAAA,EAAA,MAAA;EAMuB,YAAA,EAAA,MAAA;CAAxB,GAAA,IAAA,CAAA,EIwE1B,cJxE0B;;;;;;;;iBIqIb,wBAAA,WACJ,+BACC,gCAEV;AH1JH;;;AAca,iBGyKG,0BAAA,CHzKH,UAAA,EGyK0C,kBHzK1C,CAAA,EGyKmE,IHzKnE,CG0KX,kBH1KW,EAAA,MAAA,GAAA,YAAA,CAAA,GAAA;EAQQ,IAAA,EAAA,MAAA;EAAoD,WAAA,EAAA,MAAA;EAAM,KAAA,EAAA,MAAA;CAqBpD;;;;;;;;;;AA2H4C,iBG2DvD,UAAA,CH3DuD,IAAA,EAAA;EAyCtC,SAAA,EAAA,MAAA;EA4BlB,KAAA,EAAA,MAAA;EAQG,QAAA,EAAA,MAAA;EAqGA,aAAA,EAAA,MAAA;EAMD,OAAA,EAAA;IAeyC,KAAA,CAAA,EAAA,MAAA;IAWjC,IAAA,CAAA,EAAA,MAAA;IAiB+B,IAAA,CAAA,EAAA,MAAA;IAAxB,QAAA,CAAA,EAAA,MAAA;IAAR,IAAA,CAAA,EAAA,MAAA;IA4BO,OAAA,CAAA,EGzLjB,MHyLiB,CAAA,MAAA,EAAA,OAAA,CAAA;EAAsC,CAAA;EAAxB,WAAA,CAAA,EAAA,MAAA;EAAR,SAAA,CAAA,EAAA,MAAA;EAiBiB;EAAxB,OAAA,CAAA,EAAA,MAAA;CAAR,CAAA,EGpMlB,UHoMkB"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ContentType, ContentType as ContentType$1, MAX_SINGLE_SIGNATURE_CONTENT_SIZE, Outcome, Outcome as Outcome$1, SATI_PROGRAM_ADDRESS, Sati, TOKEN_2022_PROGRAM_ADDRESS, buildCounterpartyMessage, buildRegistrationFile, buildRegistrationFile as buildRegistrationFile$1, createPinataUploader, fetchRegistrationFile, fetchRegistryConfig, findAgentIndexPda, findAssociatedTokenAddress, findRegistryConfigPda, getImageUrl, getRegisterAgentInstructionAsync, handleTransactionError, loadDeployedConfig, parseFeedbackContent, serializeFeedback, stringifyRegistrationFile, zeroDataHash } from "@cascade-fyi/sati-sdk";
|
|
1
|
+
import { ContentType, ContentType as ContentType$1, MAX_SINGLE_SIGNATURE_CONTENT_SIZE, Outcome, Outcome as Outcome$1, SATI_PROGRAM_ADDRESS, Sati, TOKEN_2022_PROGRAM_ADDRESS, buildCounterpartyMessage, buildRegistrationFile, buildRegistrationFile as buildRegistrationFile$1, createPinataUploader, createSatiUploader, fetchRegistrationFile, fetchRegistryConfig, findAgentIndexPda, findAssociatedTokenAddress, findRegistryConfigPda, getImageUrl, getRegisterAgentInstructionAsync, handleTransactionError, loadDeployedConfig, parseFeedbackContent, serializeFeedback, stringifyRegistrationFile, zeroDataHash } from "@cascade-fyi/sati-sdk";
|
|
2
2
|
import { address, generateKeyPairSigner, getAddressDecoder, signBytes } from "@solana/kit";
|
|
3
3
|
import { getCreateAssociatedTokenIdempotentInstruction, getTransferInstruction, getUpdateTokenMetadataFieldInstruction, tokenMetadataField } from "@solana-program/token-2022";
|
|
4
4
|
import { EndpointCrawler, EndpointCrawler as EndpointCrawler$1, EndpointType, EndpointType as EndpointType$1, TrustModel, TrustModel as TrustModel$1 } from "agent0-sdk";
|
|
@@ -655,10 +655,9 @@ var SatiAgent = class SatiAgent {
|
|
|
655
655
|
async registerIPFS() {
|
|
656
656
|
if (this._identity) throw new SatiError("ALREADY_REGISTERED", "Agent is already registered on-chain. Use updateIPFS() instead.");
|
|
657
657
|
if (!this._registrationFile.image) throw new SatiError("IMAGE_REQUIRED", "Image URL is required for registration. Set it via updateInfo() or createAgent().");
|
|
658
|
-
const pinataJwt = this._sdk.config.pinataJwt;
|
|
659
|
-
if (!pinataJwt) throw new SatiError("PINATA_JWT_REQUIRED", "pinataJwt is required for IPFS uploads. Set it in SatiSDKConfig.");
|
|
660
658
|
const satiParams = fromAgent0RegistrationFile(this._registrationFile);
|
|
661
|
-
const
|
|
659
|
+
const pinataJwt = this._sdk.config.pinataJwt;
|
|
660
|
+
const uploader = pinataJwt ? createPinataUploader(pinataJwt) : createSatiUploader();
|
|
662
661
|
const uri = await this._sdk.sati.uploadRegistrationFile(satiParams, uploader);
|
|
663
662
|
return this._registerOnChain(uri);
|
|
664
663
|
}
|
|
@@ -686,10 +685,9 @@ var SatiAgent = class SatiAgent {
|
|
|
686
685
|
*/
|
|
687
686
|
async updateIPFS() {
|
|
688
687
|
if (!this._identity) throw new AgentNotFoundError("Agent not registered on-chain. Call registerIPFS() first.");
|
|
689
|
-
const pinataJwt = this._sdk.config.pinataJwt;
|
|
690
|
-
if (!pinataJwt) throw new SatiError("PINATA_JWT_REQUIRED", "pinataJwt is required for IPFS uploads. Set it in SatiSDKConfig.");
|
|
691
688
|
const satiParams = fromAgent0RegistrationFile(this._registrationFile);
|
|
692
|
-
const
|
|
689
|
+
const pinataJwt = this._sdk.config.pinataJwt;
|
|
690
|
+
const uploader = pinataJwt ? createPinataUploader(pinataJwt) : createSatiUploader();
|
|
693
691
|
const newUri = await this._sdk.sati.uploadRegistrationFile(satiParams, uploader);
|
|
694
692
|
return this.setAgentURI(newUri);
|
|
695
693
|
}
|
|
@@ -951,7 +949,8 @@ var SatiSDK = class {
|
|
|
951
949
|
this._config = config;
|
|
952
950
|
this._sati = new Sati({
|
|
953
951
|
network: config.network,
|
|
954
|
-
rpcUrl: config.rpcUrl
|
|
952
|
+
rpcUrl: config.rpcUrl,
|
|
953
|
+
photonRpcUrl: config.photonRpcUrl
|
|
955
954
|
});
|
|
956
955
|
this._sasConfig = loadDeployedConfig(config.network);
|
|
957
956
|
this._chain = SOLANA_CAIP2_CHAINS[config.network] ?? `solana:${config.network}`;
|
|
@@ -1275,7 +1274,7 @@ var SatiSDK = class {
|
|
|
1275
1274
|
if (access.type === "keypair") {
|
|
1276
1275
|
const signer = access.signer;
|
|
1277
1276
|
const { messageBytes } = buildCounterpartyMessage({
|
|
1278
|
-
schemaName: "
|
|
1277
|
+
schemaName: "FeedbackPublicV1",
|
|
1279
1278
|
data: serializeFeedback({
|
|
1280
1279
|
taskRef,
|
|
1281
1280
|
agentMint: identity.mint,
|
|
@@ -1354,7 +1353,7 @@ var SatiSDK = class {
|
|
|
1354
1353
|
const taskRef = opts?.taskRef ?? globalThis.crypto.getRandomValues(new Uint8Array(32));
|
|
1355
1354
|
const outcome = opts?.outcome ?? Outcome$1.Neutral;
|
|
1356
1355
|
const { messageBytes } = buildCounterpartyMessage({
|
|
1357
|
-
schemaName: "
|
|
1356
|
+
schemaName: "FeedbackPublicV1",
|
|
1358
1357
|
data: serializeFeedback({
|
|
1359
1358
|
taskRef,
|
|
1360
1359
|
agentMint: identity.mint,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["SOLANA_CAIP2_CHAINS: Record<string, string>","SATI_TO_AGENT0_TYPE: Record<string, EndpointType>","EndpointType","AGENT0_TO_SATI_NAME: Record<string, string>","meta: Record<string, unknown>","result: SatiEndpoint","trustModels: (TrustModel | string)[]","TrustModel","tags: string[]","id: FeedbackIdTuple","context: Record<string, unknown>","_result: T","code: string","EndpointCrawler","TrustModel","EndpointType","meta: Record<string, unknown>","trustModels: (TrustModel | string)[]","solAddress","lastError: unknown","oasfEndpoint: Endpoint","fetchSatiRegistrationFile","buildSatiRegistrationFile","solAddress","agents: AgentIdentity[]","regFiles: (SatiRegistrationFile | null)[]","cheapFiltered: { identity: AgentIdentity; regFile: SatiRegistrationFile | null }[]","feedbackStatsMap: Map<string, { count: number; averageValue: number }> | null","results: AgentSummary[]","contentObj: Record<string, unknown>","ContentType","Outcome","satiFilter: Record<string, unknown>","knownIdentity: AgentIdentity | null","feedbacks: Feedback[]","schema"],"sources":["../src/adapters.ts","../src/transaction-handle.ts","../src/errors.ts","../src/agent.ts","../src/feedback-cache.ts","../src/sdk.ts"],"sourcesContent":["/**\n * Data format converters between SATI SDK types and agent0-sdk types.\n *\n * These functions bridge the gap between SATI's Solana-native data model\n * and agent0-sdk's EVM-centric interfaces.\n */\n\nimport type {\n AgentSummary,\n Feedback,\n FeedbackIdTuple,\n RegistrationFile as Agent0RegistrationFile,\n Endpoint as Agent0Endpoint,\n} from \"agent0-sdk\";\nimport { EndpointType, TrustModel } from \"agent0-sdk\";\nimport type { AgentIdentity } from \"@cascade-fyi/sati-sdk\";\nimport type { RegistrationFile as SatiRegistrationFile, Endpoint as SatiEndpoint } from \"@cascade-fyi/sati-sdk\";\n\n/** CAIP-2 chain references for Solana networks */\nexport const SOLANA_CAIP2_CHAINS: Record<string, string> = {\n mainnet: \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n devnet: \"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1\",\n localnet: \"solana:localnet\",\n};\n\n/**\n * Format a SATI agent as a CAIP-2 compatible AgentId string.\n *\n * Format: `solana:<chainRef>:<mintAddress>`\n */\nexport function formatSatiAgentId(mint: string, chain: string): string {\n return `${chain}:${mint}`;\n}\n\n/**\n * Parse a SATI CAIP-2 AgentId back to a mint address.\n * Returns null if the agentId is not a Solana agent.\n *\n * Expected format: `solana:<chainRef>:<mintAddress>`\n */\nexport function parseSatiAgentId(agentId: string): string | null {\n if (!agentId.startsWith(\"solana:\")) return null;\n const parts = agentId.split(\":\");\n if (parts.length !== 3) return null;\n return parts[2];\n}\n\n// ============================================================================\n// Endpoint converters\n// ============================================================================\n\nconst SATI_TO_AGENT0_TYPE: Record<string, EndpointType> = {\n MCP: EndpointType.MCP,\n A2A: EndpointType.A2A,\n ENS: EndpointType.ENS,\n DID: EndpointType.DID,\n AGENTWALLET: EndpointType.WALLET,\n WALLET: EndpointType.WALLET,\n OASF: EndpointType.OASF,\n};\n\nconst AGENT0_TO_SATI_NAME: Record<string, string> = {\n [EndpointType.MCP]: \"MCP\",\n [EndpointType.A2A]: \"A2A\",\n [EndpointType.ENS]: \"ENS\",\n [EndpointType.DID]: \"DID\",\n [EndpointType.WALLET]: \"agentWallet\",\n [EndpointType.OASF]: \"OASF\",\n};\n\n/**\n * Convert SATI endpoints (ERC-8004 format) to agent0 endpoint format.\n */\nexport function toAgent0Endpoints(satiEndpoints: SatiEndpoint[]): Agent0Endpoint[] {\n return satiEndpoints.map((ep) => {\n const meta: Record<string, unknown> = {};\n if (ep.version) meta.version = ep.version;\n if (ep.mcpTools?.length) meta.mcpTools = ep.mcpTools;\n if (ep.mcpPrompts?.length) meta.mcpPrompts = ep.mcpPrompts;\n if (ep.mcpResources?.length) meta.mcpResources = ep.mcpResources;\n if (ep.a2aSkills?.length) meta.a2aSkills = ep.a2aSkills;\n if (ep.skills?.length) meta.skills = ep.skills;\n if (ep.domains?.length) meta.domains = ep.domains;\n return {\n type: SATI_TO_AGENT0_TYPE[ep.name.toUpperCase()] ?? (ep.name as EndpointType),\n value: ep.endpoint,\n meta: Object.keys(meta).length > 0 ? meta : undefined,\n };\n });\n}\n\n/**\n * Convert agent0 endpoints to SATI registration file endpoint format.\n */\nexport function fromAgent0Endpoints(agent0Endpoints: Agent0Endpoint[]): SatiEndpoint[] {\n return agent0Endpoints.map((ep) => {\n const result: SatiEndpoint = {\n name: AGENT0_TO_SATI_NAME[ep.type] ?? ep.type,\n endpoint: ep.value,\n version: ep.meta?.version as string | undefined,\n };\n if (ep.meta?.mcpTools) result.mcpTools = ep.meta.mcpTools as string[];\n if (ep.meta?.mcpPrompts) result.mcpPrompts = ep.meta.mcpPrompts as string[];\n if (ep.meta?.mcpResources) result.mcpResources = ep.meta.mcpResources as string[];\n if (ep.meta?.a2aSkills) result.a2aSkills = ep.meta.a2aSkills as string[];\n if (ep.meta?.skills) result.skills = ep.meta.skills as string[];\n if (ep.meta?.domains) result.domains = ep.meta.domains as string[];\n return result;\n });\n}\n\n// ============================================================================\n// AgentSummary converter\n// ============================================================================\n\n/**\n * Convert a SATI AgentIdentity + optional registration file to agent0 AgentSummary.\n *\n * @param identity - On-chain agent identity\n * @param chain - CAIP-2 chain reference (e.g. \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\")\n * @param regFile - Off-chain registration file (optional)\n * @param feedbackStats - Pre-computed feedback stats (optional, from includeFeedbackStats)\n */\nexport function toAgentSummary(\n identity: AgentIdentity,\n chain: string,\n regFile?: SatiRegistrationFile | null,\n feedbackStats?: { count: number; averageValue: number } | null,\n): AgentSummary {\n const endpoints = regFile?.endpoints ?? [];\n\n const mcpEp = endpoints.find((e) => e.name.toUpperCase() === \"MCP\");\n const a2aEp = endpoints.find((e) => e.name.toUpperCase() === \"A2A\");\n const oasfEp = endpoints.find((e) => e.name.toUpperCase() === \"OASF\");\n const ensEp = endpoints.find((e) => e.name.toUpperCase() === \"ENS\");\n const didEp = endpoints.find((e) => e.name.toUpperCase() === \"DID\");\n const walletEp = endpoints.find((e) => e.name.toUpperCase() === \"AGENTWALLET\" || e.name.toUpperCase() === \"WALLET\");\n const webEp = endpoints.find((e) => e.name.toUpperCase() === \"WEB\");\n\n return {\n chainId: 0,\n agentId: formatSatiAgentId(identity.mint, chain),\n name: identity.name,\n image: regFile?.image,\n description: regFile?.description ?? \"\",\n owners: [identity.owner],\n operators: [],\n mcp: mcpEp?.endpoint,\n a2a: a2aEp?.endpoint,\n web: webEp?.endpoint,\n ens: ensEp?.endpoint,\n did: didEp?.endpoint,\n walletAddress: walletEp?.endpoint,\n supportedTrusts: regFile?.supportedTrust ?? [],\n mcpTools: mcpEp?.mcpTools ?? [],\n mcpPrompts: mcpEp?.mcpPrompts ?? [],\n mcpResources: mcpEp?.mcpResources ?? [],\n a2aSkills: a2aEp?.a2aSkills ?? [],\n oasfSkills: oasfEp?.skills ?? [],\n oasfDomains: oasfEp?.domains ?? [],\n active: regFile?.active ?? true,\n x402support: regFile?.x402support ?? false,\n agentURI: identity.uri,\n agentURIType: identity.uri ? detectURIType(identity.uri) : undefined,\n feedbackCount: feedbackStats?.count,\n averageValue: feedbackStats?.averageValue,\n extras: {},\n };\n}\n\n/** Detect URI type from prefix. */\nfunction detectURIType(uri: string): string {\n if (uri.startsWith(\"ipfs://\") || uri.includes(\"/ipfs/\")) return \"ipfs\";\n if (uri.startsWith(\"ar://\") || uri.includes(\"arweave.net\")) return \"arweave\";\n if (uri.startsWith(\"https://\") || uri.startsWith(\"http://\")) return \"https\";\n return \"unknown\";\n}\n\n// ============================================================================\n// RegistrationFile converters\n// ============================================================================\n\n/**\n * Convert a SATI registration file to agent0 RegistrationFile format.\n *\n * @param satiFile - SATI registration file\n * @param identity - On-chain agent identity (optional)\n * @param chain - CAIP-2 chain reference (required when identity is provided)\n */\nexport function toAgent0RegistrationFile(\n satiFile: SatiRegistrationFile,\n identity?: AgentIdentity,\n chain?: string,\n): Agent0RegistrationFile {\n const endpoints = toAgent0Endpoints(satiFile.endpoints ?? []);\n const trustModels: (TrustModel | string)[] = (satiFile.supportedTrust ?? []).map((t) => {\n if (t === \"reputation\") return TrustModel.REPUTATION;\n if (t === \"crypto-economic\") return TrustModel.CRYPTO_ECONOMIC;\n if (t === \"tee-attestation\") return TrustModel.TEE_ATTESTATION;\n return t;\n });\n\n return {\n agentId: identity && chain ? formatSatiAgentId(identity.mint, chain) : undefined,\n agentURI: identity?.uri,\n name: satiFile.name,\n description: satiFile.description,\n image: satiFile.image,\n endpoints,\n trustModels,\n owners: identity ? [identity.owner] : [],\n operators: [],\n active: satiFile.active ?? true,\n x402support: satiFile.x402support ?? false,\n metadata: {},\n updatedAt: Math.floor(Date.now() / 1000),\n };\n}\n\n/**\n * Convert agent0 RegistrationFile back to SATI registration file params.\n */\nexport function fromAgent0RegistrationFile(agent0File: Agent0RegistrationFile): Omit<\n SatiRegistrationFile,\n \"type\" | \"properties\"\n> & {\n name: string;\n description: string;\n image: string;\n} {\n const endpoints = fromAgent0Endpoints(agent0File.endpoints);\n const supportedTrust = agent0File.trustModels\n .map((t) => {\n if (t === TrustModel.REPUTATION) return \"reputation\" as const;\n if (t === TrustModel.CRYPTO_ECONOMIC) return \"crypto-economic\" as const;\n if (t === TrustModel.TEE_ATTESTATION) return \"tee-attestation\" as const;\n return null;\n })\n .filter((t): t is NonNullable<typeof t> => t !== null);\n\n return {\n name: agent0File.name,\n description: agent0File.description,\n image: agent0File.image ?? \"\",\n endpoints,\n supportedTrust,\n active: agent0File.active,\n x402support: agent0File.x402support,\n };\n}\n\n// ============================================================================\n// Feedback converter\n// ============================================================================\n\n/**\n * Convert SATI feedback attestation data to agent0 Feedback format.\n *\n * SATI stores feedback as compressed attestations with:\n * - outcome (always Neutral for FeedbackPublicV1)\n * - content JSON with value, tag1, tag2, endpoint\n *\n * agent0-sdk expects the Feedback interface with value, tags, endpoint, etc.\n */\nexport function toFeedback(opts: {\n agentMint: string;\n chain: string;\n reviewer: string;\n feedbackIndex: number;\n content: {\n value?: number;\n tag1?: string;\n tag2?: string;\n endpoint?: string;\n text?: string;\n context?: Record<string, unknown>;\n };\n txSignature?: string;\n createdAt?: number;\n /** SATI on-chain outcome (0=Negative, 1=Neutral, 2=Positive) */\n outcome?: number;\n}): Feedback {\n const agentId = formatSatiAgentId(opts.agentMint, opts.chain);\n const tags: string[] = [];\n if (opts.content.tag1) tags.push(opts.content.tag1);\n if (opts.content.tag2) tags.push(opts.content.tag2);\n\n const id: FeedbackIdTuple = [agentId, opts.reviewer, opts.feedbackIndex];\n\n const context: Record<string, unknown> = { ...opts.content.context };\n if (opts.outcome !== undefined) {\n context.outcome = opts.outcome;\n }\n\n return {\n id,\n agentId,\n reviewer: opts.reviewer,\n txHash: opts.txSignature,\n value: opts.content.value,\n tags,\n endpoint: opts.content.endpoint,\n text: opts.content.text,\n context: Object.keys(context).length > 0 ? context : opts.content.context,\n createdAt: opts.createdAt ?? Math.floor(Date.now() / 1000),\n answers: [],\n isRevoked: false,\n };\n}\n","/**\n * Solana transaction handle - pattern-compatible with agent0-sdk's TransactionHandle.\n *\n * Key differences from agent0-sdk's TransactionHandle:\n * - `hash` is a base58 Solana signature (not EVM hex)\n * - `waitMined()`/`waitConfirmed()` resolve immediately since Solana's\n * `sendAndConfirmTransaction` already waits for confirmation\n */\n\n/**\n * Solana transaction receipt.\n */\nexport interface SolanaReceipt {\n /** Transaction signature (base58) */\n signature: string;\n}\n\n/**\n * Result from awaiting a Solana transaction.\n */\nexport interface SolanaTransactionResult<T> {\n receipt: SolanaReceipt;\n result: T;\n}\n\n/**\n * Solana-compatible transaction handle.\n *\n * Mirrors agent0-sdk's `TransactionHandle<T>` API shape:\n * - `.hash` - transaction identifier\n * - `.waitMined()` - await confirmation and get result\n * - `.waitConfirmed()` - alias for waitMined\n *\n * On Solana, transactions are already confirmed when the SDK returns,\n * so both methods resolve immediately with the pre-computed result.\n *\n * @example\n * ```typescript\n * const handle = await sdk.giveFeedback(agentId, 85, \"quality\");\n * const { result } = await handle.waitMined();\n * console.log(result.value); // 85\n * console.log(handle.hash); // base58 signature\n * ```\n */\nexport class SolanaTransactionHandle<T> {\n /** Transaction signature (base58). Named `hash` for agent0-sdk compatibility. */\n readonly hash: string;\n\n constructor(\n signature: string,\n private readonly _result: T,\n ) {\n this.hash = signature;\n }\n\n /** Resolves immediately - Solana txs are confirmed before the SDK returns. */\n async waitMined(): Promise<SolanaTransactionResult<T>> {\n return { receipt: { signature: this.hash }, result: this._result };\n }\n\n /** Alias for waitMined. */\n async waitConfirmed(): Promise<SolanaTransactionResult<T>> {\n return this.waitMined();\n }\n}\n","/**\n * Typed error classes for the SATI Agent0 SDK.\n *\n * All errors extend `SatiError` which carries a `code` string for\n * programmatic matching. Use `instanceof` for typed catch handling.\n */\n\n/**\n * Base error for all SATI SDK errors.\n */\nexport class SatiError extends Error {\n constructor(\n readonly code: string,\n message: string,\n options?: ErrorOptions,\n ) {\n super(message, options);\n this.name = \"SatiError\";\n }\n}\n\n/**\n * Agent not found on-chain.\n */\nexport class AgentNotFoundError extends SatiError {\n constructor(agentId: string) {\n super(\"AGENT_NOT_FOUND\", `Agent not found: ${agentId}`);\n this.name = \"AgentNotFoundError\";\n }\n}\n\n/**\n * SDK is in read-only mode (no signer or transactionSender configured).\n */\nexport class ReadOnlyError extends SatiError {\n constructor(operation?: string) {\n const msg = operation\n ? `${operation} requires a signer or transactionSender. Initialize SatiSDK with one for write operations.`\n : \"This operation requires a signer or transactionSender. Initialize SatiSDK with one for write operations.\";\n super(\"READ_ONLY\", msg);\n this.name = \"ReadOnlyError\";\n }\n}\n\n/**\n * Operation requires a KeyPairSigner specifically (not just any write access).\n */\nexport class SignerRequiredError extends SatiError {\n constructor(operation?: string) {\n const msg = operation\n ? `${operation} requires a KeyPairSigner. Initialize SatiSDK with a signer for server-side write operations.`\n : \"This operation requires a KeyPairSigner. Initialize SatiSDK with a signer for server-side write operations.\";\n super(\"SIGNER_REQUIRED\", msg);\n this.name = \"SignerRequiredError\";\n }\n}\n\n/**\n * Required SAS schema is not deployed on the configured network.\n */\nexport class SchemaNotDeployedError extends SatiError {\n constructor(schema: string, network?: string) {\n const msg = network\n ? `${schema} schema not deployed on ${network}. Deploy schemas first.`\n : `${schema} schema not deployed on this network. Deploy schemas first.`;\n super(\"SCHEMA_NOT_DEPLOYED\", msg);\n this.name = \"SchemaNotDeployedError\";\n }\n}\n\n/**\n * Invalid SATI agent ID format. Expected `solana:<chainRef>:<mintAddress>`.\n */\nexport class InvalidAgentIdError extends SatiError {\n constructor(agentId: string) {\n super(\"INVALID_AGENT_ID\", `Invalid SATI agent ID: ${agentId}. Expected format: solana:<chainRef>:<mintAddress>`);\n this.name = \"InvalidAgentIdError\";\n }\n}\n\n/**\n * Operation is not supported on SATI.\n */\nexport class UnsupportedOperationError extends SatiError {\n constructor(operation: string) {\n super(\"UNSUPPORTED_OPERATION\", `${operation} is not supported on SATI`);\n this.name = \"UnsupportedOperationError\";\n }\n}\n","/**\n * Agent0-compatible agent wrapper backed by SATI infrastructure.\n *\n * Mirrors agent0-sdk's `Agent` class: fluent builders for endpoints,\n * metadata, trust models, and registration file management.\n */\n\nimport type { RegistrationFile, Endpoint, AgentId, URI, Address } from \"agent0-sdk\";\nimport { EndpointType, TrustModel, EndpointCrawler } from \"agent0-sdk\";\nimport {\n createPinataUploader,\n getRegisterAgentInstructionAsync,\n findRegistryConfigPda,\n fetchRegistryConfig,\n findAssociatedTokenAddress,\n findAgentIndexPda,\n type AgentIdentity,\n} from \"@cascade-fyi/sati-sdk\";\nimport { address as solAddress, generateKeyPairSigner, type TransactionSigner } from \"@solana/kit\";\nimport {\n getUpdateTokenMetadataFieldInstruction,\n tokenMetadataField,\n getTransferInstruction,\n} from \"@solana-program/token-2022\";\nimport { getCreateAssociatedTokenIdempotentInstruction } from \"@solana-program/token-2022\";\nimport type { SatiSDK } from \"./sdk.js\";\nimport type { WriteAccess } from \"./types.js\";\nimport { formatSatiAgentId, fromAgent0RegistrationFile } from \"./adapters.js\";\nimport { TOKEN_2022_PROGRAM_ADDRESS } from \"@cascade-fyi/sati-sdk\";\nimport { SolanaTransactionHandle } from \"./transaction-handle.js\";\nimport { SatiError, AgentNotFoundError, ReadOnlyError } from \"./errors.js\";\n\n/**\n * Agent0-compatible agent class backed by SATI's Solana infrastructure.\n *\n * Manages an in-memory registration file that can be flushed to chain\n * via `registerIPFS()`.\n */\nexport class SatiAgent {\n private _registrationFile: RegistrationFile;\n private _endpointCrawler: EndpointCrawler;\n private _identity: AgentIdentity | undefined;\n\n private readonly _sdk: SatiSDK;\n\n constructor(sdk: SatiSDK, registrationFile: RegistrationFile) {\n this._sdk = sdk;\n this._registrationFile = registrationFile;\n this._endpointCrawler = new EndpointCrawler(5000);\n }\n\n /** @internal Access the underlying SatiSDK instance. */\n get sdk(): SatiSDK {\n return this._sdk;\n }\n\n /**\n * Create a new agent in memory (not yet registered on-chain).\n * @internal Called by SatiSDK.createAgent()\n */\n static create(sdk: SatiSDK, name: string, description: string, image?: URI): SatiAgent {\n const registrationFile: RegistrationFile = {\n name,\n description,\n image,\n endpoints: [],\n trustModels: [TrustModel.REPUTATION],\n owners: [],\n operators: [],\n active: false,\n x402support: false,\n metadata: {},\n updatedAt: Math.floor(Date.now() / 1000),\n };\n return new SatiAgent(sdk, registrationFile);\n }\n\n /**\n * Reconstruct an agent from on-chain identity and registration file.\n * @internal Called by SatiSDK.loadAgent()\n */\n static fromIdentity(sdk: SatiSDK, identity: AgentIdentity, registrationFile: RegistrationFile): SatiAgent {\n const agent = new SatiAgent(sdk, registrationFile);\n agent._identity = identity;\n agent._registrationFile.agentId = formatSatiAgentId(identity.mint, sdk.chain);\n agent._registrationFile.agentURI = identity.uri;\n return agent;\n }\n\n // =========================================================================\n // Read-only properties (mirrors agent0-sdk Agent)\n // =========================================================================\n\n get agentId(): AgentId | undefined {\n return this._registrationFile.agentId;\n }\n\n get agentURI(): URI | undefined {\n return this._registrationFile.agentURI;\n }\n\n get name(): string {\n return this._registrationFile.name;\n }\n\n get description(): string {\n return this._registrationFile.description;\n }\n\n get image(): URI | undefined {\n return this._registrationFile.image;\n }\n\n get mcpEndpoint(): string | undefined {\n return this._registrationFile.endpoints.find((e) => e.type === EndpointType.MCP)?.value;\n }\n\n get a2aEndpoint(): string | undefined {\n return this._registrationFile.endpoints.find((e) => e.type === EndpointType.A2A)?.value;\n }\n\n get walletAddress(): Address | undefined {\n return this._registrationFile.walletAddress;\n }\n\n /** SATI-specific: the on-chain agent identity (available after registration). */\n get identity(): AgentIdentity | undefined {\n return this._identity;\n }\n\n get ensEndpoint(): string | undefined {\n return this._registrationFile.endpoints.find((e) => e.type === EndpointType.ENS)?.value;\n }\n\n get didEndpoint(): string | undefined {\n return this._registrationFile.endpoints.find((e) => e.type === EndpointType.DID)?.value;\n }\n\n get mcpTools(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.MCP);\n return (ep?.meta?.mcpTools as string[]) ?? [];\n }\n\n get mcpPrompts(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.MCP);\n return (ep?.meta?.mcpPrompts as string[]) ?? [];\n }\n\n get mcpResources(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.MCP);\n return (ep?.meta?.mcpResources as string[]) ?? [];\n }\n\n get a2aSkills(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.A2A);\n return (ep?.meta?.a2aSkills as string[]) ?? [];\n }\n\n get oasfSkills(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.OASF);\n return (ep?.meta?.skills as string[]) ?? [];\n }\n\n get oasfDomains(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.OASF);\n return (ep?.meta?.domains as string[]) ?? [];\n }\n\n // =========================================================================\n // Endpoint management (mirrors agent0-sdk Agent)\n // =========================================================================\n\n /**\n * Set MCP endpoint. Auto-fetches capabilities by default.\n */\n async setMCP(endpoint: string, version = \"2025-06-18\", autoFetch = true): Promise<this> {\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => ep.type !== EndpointType.MCP);\n\n const meta: Record<string, unknown> = { version };\n if (autoFetch) {\n try {\n const capabilities = await this._endpointCrawler.fetchMcpCapabilities(endpoint);\n if (capabilities) {\n if (capabilities.mcpTools) meta.mcpTools = capabilities.mcpTools;\n if (capabilities.mcpPrompts) meta.mcpPrompts = capabilities.mcpPrompts;\n if (capabilities.mcpResources) meta.mcpResources = capabilities.mcpResources;\n }\n } catch {\n // Soft fail - continue without capabilities\n }\n }\n\n this._registrationFile.endpoints.push({\n type: EndpointType.MCP,\n value: endpoint,\n meta,\n });\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Set A2A endpoint. Auto-fetches capabilities by default.\n */\n async setA2A(agentcard: string, version = \"0.30\", autoFetch = true): Promise<this> {\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => ep.type !== EndpointType.A2A);\n\n const meta: Record<string, unknown> = { version };\n if (autoFetch) {\n try {\n const capabilities = await this._endpointCrawler.fetchA2aCapabilities(agentcard);\n if (capabilities?.a2aSkills) {\n meta.a2aSkills = capabilities.a2aSkills;\n }\n } catch {\n // Soft fail - continue without capabilities\n }\n }\n\n this._registrationFile.endpoints.push({\n type: EndpointType.A2A,\n value: agentcard,\n meta,\n });\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Set ENS endpoint.\n */\n setENS(name: string, version = \"1.0\"): this {\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => ep.type !== EndpointType.ENS);\n this._registrationFile.endpoints.push({\n type: EndpointType.ENS,\n value: name,\n meta: { version },\n });\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Remove endpoint(s).\n */\n removeEndpoint(opts?: { type?: EndpointType; value?: string }): this {\n if (!opts || (opts.type === undefined && opts.value === undefined)) {\n this._registrationFile.endpoints = [];\n } else {\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => {\n const typeMatches = opts.type === undefined || ep.type === opts.type;\n const valueMatches = opts.value === undefined || ep.value === opts.value;\n return !(typeMatches && valueMatches);\n });\n }\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Remove all endpoints (alias for removeEndpoint() with no args).\n */\n removeEndpoints(): this {\n return this.removeEndpoint();\n }\n\n // =========================================================================\n // Wallet management (mirrors agent0-sdk Agent)\n // =========================================================================\n\n /**\n * Get wallet address from the registration file.\n */\n getWallet(): Address | undefined {\n return this._registrationFile.walletAddress;\n }\n\n /**\n * Set wallet address and add a WALLET endpoint.\n * In-memory only - call registerIPFS() or registerHTTP() to persist on-chain.\n */\n setWallet(addr: Address): this {\n this._registrationFile.walletAddress = addr;\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => ep.type !== EndpointType.WALLET);\n this._registrationFile.endpoints.push({\n type: EndpointType.WALLET,\n value: addr,\n });\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Remove wallet address and wallet endpoint.\n */\n unsetWallet(): this {\n this._registrationFile.walletAddress = undefined;\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => ep.type !== EndpointType.WALLET);\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n // =========================================================================\n // OASF skills and domains (mirrors agent0-sdk Agent)\n // =========================================================================\n\n addSkill(slug: string): this {\n const oasfEp = this._getOrCreateOasfEndpoint();\n if (!oasfEp.meta) oasfEp.meta = {};\n if (!Array.isArray(oasfEp.meta.skills)) oasfEp.meta.skills = [];\n const skills = oasfEp.meta.skills as string[];\n if (!skills.includes(slug)) skills.push(slug);\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n removeSkill(slug: string): this {\n const oasfEp = this._registrationFile.endpoints.find((ep) => ep.type === EndpointType.OASF);\n if (oasfEp?.meta) {\n const skills = oasfEp.meta.skills;\n if (Array.isArray(skills)) {\n const idx = skills.indexOf(slug);\n if (idx !== -1) skills.splice(idx, 1);\n }\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n }\n return this;\n }\n\n addDomain(slug: string): this {\n const oasfEp = this._getOrCreateOasfEndpoint();\n if (!oasfEp.meta) oasfEp.meta = {};\n if (!Array.isArray(oasfEp.meta.domains)) oasfEp.meta.domains = [];\n const domains = oasfEp.meta.domains as string[];\n if (!domains.includes(slug)) domains.push(slug);\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n removeDomain(slug: string): this {\n const oasfEp = this._registrationFile.endpoints.find((ep) => ep.type === EndpointType.OASF);\n if (oasfEp?.meta) {\n const domains = oasfEp.meta.domains;\n if (Array.isArray(domains)) {\n const idx = domains.indexOf(slug);\n if (idx !== -1) domains.splice(idx, 1);\n }\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n }\n return this;\n }\n\n // =========================================================================\n // Status and trust (mirrors agent0-sdk Agent)\n // =========================================================================\n\n setActive(active: boolean): this {\n this._registrationFile.active = active;\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n setX402Support(x402Support: boolean): this {\n this._registrationFile.x402support = x402Support;\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n setTrust(reputation = false, cryptoEconomic = false, teeAttestation = false): this {\n const trustModels: (TrustModel | string)[] = [];\n if (reputation) trustModels.push(TrustModel.REPUTATION);\n if (cryptoEconomic) trustModels.push(TrustModel.CRYPTO_ECONOMIC);\n if (teeAttestation) trustModels.push(TrustModel.TEE_ATTESTATION);\n this._registrationFile.trustModels = trustModels;\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n // =========================================================================\n // Metadata (mirrors agent0-sdk Agent)\n // =========================================================================\n\n setMetadata(kv: Record<string, unknown>): this {\n Object.assign(this._registrationFile.metadata, kv);\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n getMetadata(): Record<string, unknown> {\n return { ...this._registrationFile.metadata };\n }\n\n delMetadata(key: string): this {\n if (key in this._registrationFile.metadata) {\n delete this._registrationFile.metadata[key];\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n }\n return this;\n }\n\n /**\n * Update basic agent information.\n */\n updateInfo(name?: string, description?: string, image?: URI): this {\n if (name !== undefined) this._registrationFile.name = name;\n if (description !== undefined) this._registrationFile.description = description;\n if (image !== undefined) this._registrationFile.image = image;\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Get the current in-memory registration file.\n */\n getRegistrationFile(): RegistrationFile {\n return this._registrationFile;\n }\n\n // =========================================================================\n // On-chain operations (SATI-backed)\n // =========================================================================\n\n /**\n * Register agent on-chain with IPFS.\n *\n * Converts the in-memory agent0 registration file to SATI format,\n * uploads to IPFS via Pinata, then mints the agent NFT on Solana.\n *\n * @throws SatiError if image URL is not set or pinataJwt is not configured\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async registerIPFS(): Promise<SolanaTransactionHandle<RegistrationFile>> {\n if (this._identity) {\n throw new SatiError(\"ALREADY_REGISTERED\", \"Agent is already registered on-chain. Use updateIPFS() instead.\");\n }\n if (!this._registrationFile.image) {\n throw new SatiError(\n \"IMAGE_REQUIRED\",\n \"Image URL is required for registration. Set it via updateInfo() or createAgent().\",\n );\n }\n\n const pinataJwt = this._sdk.config.pinataJwt;\n if (!pinataJwt) {\n throw new SatiError(\"PINATA_JWT_REQUIRED\", \"pinataJwt is required for IPFS uploads. Set it in SatiSDKConfig.\");\n }\n\n // Convert agent0 registration file to SATI format and upload to IPFS\n const satiParams = fromAgent0RegistrationFile(this._registrationFile);\n const uploader = createPinataUploader(pinataJwt);\n const uri = await this._sdk.sati.uploadRegistrationFile(satiParams, uploader);\n\n return this._registerOnChain(uri);\n }\n\n /**\n * Register agent on-chain with an HTTP URI.\n *\n * Same as registerIPFS but takes a URI directly instead of uploading to IPFS.\n * Use this when you already have a hosted registration file.\n *\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async registerHTTP(agentUri: URI): Promise<SolanaTransactionHandle<RegistrationFile>> {\n if (this._identity) {\n throw new SatiError(\"ALREADY_REGISTERED\", \"Agent is already registered on-chain. Use updateHTTP() instead.\");\n }\n return this._registerOnChain(agentUri);\n }\n\n /**\n * Re-upload the current in-memory registration file to IPFS and update the on-chain URI.\n *\n * Use after modifying the agent via fluent builders (setMCP, addSkill, setMetadata, etc.)\n * to persist changes on-chain.\n *\n * @throws AgentNotFoundError if agent is not registered on-chain\n * @throws SatiError if pinataJwt is not configured\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async updateIPFS(): Promise<SolanaTransactionHandle<RegistrationFile>> {\n if (!this._identity) {\n throw new AgentNotFoundError(\"Agent not registered on-chain. Call registerIPFS() first.\");\n }\n\n const pinataJwt = this._sdk.config.pinataJwt;\n if (!pinataJwt) {\n throw new SatiError(\"PINATA_JWT_REQUIRED\", \"pinataJwt is required for IPFS uploads. Set it in SatiSDKConfig.\");\n }\n\n const satiParams = fromAgent0RegistrationFile(this._registrationFile);\n const uploader = createPinataUploader(pinataJwt);\n const newUri = await this._sdk.sati.uploadRegistrationFile(satiParams, uploader);\n return this.setAgentURI(newUri);\n }\n\n /**\n * Update the on-chain URI to point to a new HTTP-hosted registration file.\n *\n * @throws AgentNotFoundError if agent is not registered on-chain\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async updateHTTP(agentUri: URI): Promise<SolanaTransactionHandle<RegistrationFile>> {\n if (!this._identity) {\n throw new AgentNotFoundError(\"Agent not registered on-chain. Call registerHTTP() first.\");\n }\n return this.setAgentURI(agentUri);\n }\n\n /**\n * Update the agent's on-chain URI (metadata pointer).\n *\n * @throws AgentNotFoundError if agent is not registered on-chain\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async setAgentURI(agentURI: URI): Promise<SolanaTransactionHandle<RegistrationFile>> {\n if (!this._identity) {\n throw new AgentNotFoundError(\"Agent not registered on-chain. Call registerIPFS() or registerHTTP() first.\");\n }\n\n const access = this._requireWriteAccess(\"setAgentURI\");\n\n if (access.type === \"keypair\") {\n const result = await this._sdk.sati.updateAgentMetadata({\n payer: access.signer,\n owner: access.signer,\n mint: solAddress(this._identity.mint),\n updates: { uri: agentURI },\n });\n this._identity.uri = agentURI;\n this._registrationFile.agentURI = agentURI;\n return new SolanaTransactionHandle(result.signature, this._registrationFile);\n }\n\n // Sender path: build instruction and send via wallet\n const updateIx = getUpdateTokenMetadataFieldInstruction({\n metadata: this._identity.mint,\n updateAuthority: { address: solAddress(access.sender.address) } as TransactionSigner,\n field: tokenMetadataField(\"Uri\"),\n value: agentURI,\n });\n\n const signature = await access.sender.signAndSend([updateIx]);\n this._identity.uri = agentURI;\n this._registrationFile.agentURI = agentURI;\n return new SolanaTransactionHandle(signature, this._registrationFile);\n }\n\n /**\n * Transfer agent ownership to a new Solana address.\n *\n * @throws AgentNotFoundError if agent is not registered on-chain\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async transfer(\n newOwner: Address,\n ): Promise<SolanaTransactionHandle<{ txHash: string; from: string; to: string; agentId: AgentId | undefined }>> {\n if (!this._identity) {\n throw new AgentNotFoundError(\"Agent not registered on-chain. Call registerIPFS() or registerHTTP() first.\");\n }\n\n const access = this._requireWriteAccess(\"transfer\");\n\n if (access.type === \"keypair\") {\n const result = await this._sdk.sati.transferAgent({\n payer: access.signer,\n owner: access.signer,\n mint: this._identity.mint,\n newOwner: solAddress(newOwner),\n });\n return new SolanaTransactionHandle(result.signature, {\n txHash: result.signature,\n from: access.signer.address,\n to: newOwner,\n agentId: this.agentId,\n });\n }\n\n // Sender path: build ATA creation + transfer instructions\n const ownerAddr = solAddress(access.sender.address);\n const [sourceAta] = await findAssociatedTokenAddress(this._identity.mint, ownerAddr);\n const [destAta] = await findAssociatedTokenAddress(this._identity.mint, solAddress(newOwner));\n\n const createAtaIx = getCreateAssociatedTokenIdempotentInstruction({\n payer: { address: ownerAddr } as TransactionSigner,\n owner: solAddress(newOwner),\n mint: this._identity.mint,\n ata: destAta,\n tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,\n });\n\n const transferIx = getTransferInstruction({\n source: sourceAta,\n destination: destAta,\n authority: ownerAddr,\n amount: 1n,\n });\n\n const signature = await access.sender.signAndSend([createAtaIx, transferIx]);\n return new SolanaTransactionHandle(signature, {\n txHash: signature,\n from: access.sender.address,\n to: newOwner,\n agentId: this.agentId,\n });\n }\n\n // =========================================================================\n // Private helpers\n // =========================================================================\n\n private _requireWriteAccess(operation?: string): WriteAccess {\n if (this._sdk.config.signer) return { type: \"keypair\", signer: this._sdk.config.signer };\n if (this._sdk.config.transactionSender) return { type: \"sender\", sender: this._sdk.config.transactionSender };\n throw new ReadOnlyError(operation);\n }\n\n /**\n * Shared registration logic for registerIPFS/registerHTTP.\n * Supports both keypair and sender paths.\n */\n private async _registerOnChain(uri: string): Promise<SolanaTransactionHandle<RegistrationFile>> {\n const access = this._requireWriteAccess(\"registerAgent\");\n\n if (access.type === \"keypair\") {\n const result = await this._sdk.sati.registerAgent({\n payer: access.signer,\n name: this._registrationFile.name,\n uri,\n });\n this._storeIdentity(result.mint, access.signer.address, uri, result.memberNumber);\n return new SolanaTransactionHandle(result.signature, this._registrationFile);\n }\n\n // Sender path: build register instruction manually.\n // Retry on collision - concurrent registrations can race on memberNumber PDA.\n const agentMint = await generateKeyPairSigner();\n const rpc = this._sdk.sati.getRpc();\n const [registryConfigAddress] = await findRegistryConfigPda();\n const ownerAddress = solAddress(access.sender.address);\n const [agentTokenAccount] = await findAssociatedTokenAddress(agentMint.address, ownerAddress);\n\n const MAX_RETRIES = 3;\n const RETRY_DELAY_MS = 1500;\n let lastError: unknown;\n\n for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {\n try {\n const registryConfig = await fetchRegistryConfig(rpc, registryConfigAddress);\n const groupMint = registryConfig.data.groupMint;\n const memberNumber = registryConfig.data.totalAgents + 1n;\n const [agentIndex] = await findAgentIndexPda(memberNumber);\n\n const registerIx = await getRegisterAgentInstructionAsync({\n payer: { address: ownerAddress } as TransactionSigner,\n owner: ownerAddress,\n groupMint,\n agentMint,\n agentTokenAccount,\n agentIndex,\n name: this._registrationFile.name,\n symbol: \"\",\n uri,\n additionalMetadata: null,\n nonTransferable: false,\n });\n\n const signature = await access.sender.signAndSend([registerIx], [agentMint]);\n this._storeIdentity(agentMint.address, ownerAddress, uri, memberNumber);\n return new SolanaTransactionHandle(signature, this._registrationFile);\n } catch (error) {\n lastError = error;\n if (!isRegistrationCollisionError(error)) throw error;\n if (attempt < MAX_RETRIES - 1) {\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\n }\n }\n }\n\n throw new SatiError(\"REGISTRATION_FAILED\", `Registration failed after ${MAX_RETRIES} attempts`, {\n cause: lastError,\n });\n }\n\n private _storeIdentity(\n mint: import(\"@solana/kit\").Address,\n owner: import(\"@solana/kit\").Address,\n uri: string,\n memberNumber: bigint,\n ): void {\n this._identity = {\n mint,\n owner,\n name: this._registrationFile.name,\n uri,\n memberNumber,\n additionalMetadata: {},\n nonTransferable: false,\n };\n this._registrationFile.agentId = formatSatiAgentId(mint, this._sdk.chain);\n this._registrationFile.agentURI = uri;\n }\n\n private _getOrCreateOasfEndpoint(): Endpoint {\n const existing = this._registrationFile.endpoints.find((ep) => ep.type === EndpointType.OASF);\n if (existing) return existing;\n\n const oasfEndpoint: Endpoint = {\n type: EndpointType.OASF,\n value: \"https://github.com/agntcy/oasf/\",\n meta: { version: \"v0.8.0\", skills: [], domains: [] },\n };\n this._registrationFile.endpoints.push(oasfEndpoint);\n return oasfEndpoint;\n }\n}\n\n/** Detect PDA collision errors from concurrent registrations. */\nfunction isRegistrationCollisionError(error: unknown): boolean {\n const msg = error instanceof Error ? error.message : String(error);\n return msg.includes(\"already in use\") || msg.includes(\"already been initialized\") || msg.includes(\"0x0\");\n}\n","/**\n * Simple TTL cache for feedback query results.\n *\n * Reduces redundant RPC calls when the same feedback data is queried\n * multiple times in quick succession (e.g. listing then revoking,\n * or dashboard re-renders).\n *\n * Automatically invalidated after write operations (giveFeedback,\n * revokeFeedback, submitPreparedFeedback).\n */\n\ninterface CacheEntry<T> {\n data: T;\n expires: number;\n}\n\nexport class FeedbackCache {\n private cache = new Map<string, CacheEntry<unknown>>();\n\n constructor(private readonly ttlMs = 30_000) {}\n\n /** Get cached data or null if expired/missing. */\n get<T>(key: string): T | null {\n const entry = this.cache.get(key);\n if (!entry || Date.now() > entry.expires) {\n if (entry) this.cache.delete(key);\n return null;\n }\n return entry.data as T;\n }\n\n /** Store data with TTL. */\n set<T>(key: string, data: T): void {\n this.cache.set(key, { data, expires: Date.now() + this.ttlMs });\n }\n\n /** Invalidate a specific key, or all entries if no key given. */\n invalidate(key?: string): void {\n if (key) {\n this.cache.delete(key);\n } else {\n this.cache.clear();\n }\n }\n\n /** Build a cache key from schema and optional agent mint. */\n static cacheKey(sasSchema: string, agentMint?: string): string {\n return `${sasSchema}:${agentMint ?? \"*\"}`;\n }\n}\n","/**\n * Main SDK class for the SATI Agent0 adapter.\n *\n * Provides agent0-sdk compatible method signatures backed by SATI's\n * Solana infrastructure for agent identity, reputation, and attestation.\n */\n\nimport {\n Sati,\n loadDeployedConfig,\n fetchRegistrationFile as fetchSatiRegistrationFile,\n buildRegistrationFile as buildSatiRegistrationFile,\n Outcome,\n ContentType,\n serializeFeedback,\n zeroDataHash,\n buildCounterpartyMessage,\n findAssociatedTokenAddress,\n TOKEN_2022_PROGRAM_ADDRESS,\n type AgentIdentity,\n type SATISASConfig,\n type FeedbackData,\n type RegistrationFile as SatiRegistrationFile,\n} from \"@cascade-fyi/sati-sdk\";\nimport { signBytes, address as solAddress, getAddressDecoder } from \"@solana/kit\";\nimport { getCreateAssociatedTokenIdempotentInstruction, getTransferInstruction } from \"@solana-program/token-2022\";\nimport type {\n AgentSummary,\n Feedback,\n FeedbackFileInput,\n FeedbackSearchFilters,\n SearchFilters,\n AgentId,\n URI,\n Address,\n} from \"agent0-sdk\";\nimport type {\n SatiSDKConfig,\n SatiSearchOptions,\n SatiFeedbackSearchOptions,\n WriteAccess,\n PreparedFeedback,\n ValidationResult,\n SatiWarning,\n} from \"./types.js\";\nimport type { KeyPairSigner, TransactionSigner } from \"@solana/kit\";\nimport { SatiAgent } from \"./agent.js\";\nimport {\n SOLANA_CAIP2_CHAINS,\n parseSatiAgentId,\n toAgentSummary,\n toAgent0RegistrationFile,\n toFeedback,\n} from \"./adapters.js\";\nimport { SolanaTransactionHandle } from \"./transaction-handle.js\";\nimport { FeedbackCache } from \"./feedback-cache.js\";\nimport {\n SatiError,\n AgentNotFoundError,\n InvalidAgentIdError,\n ReadOnlyError,\n SignerRequiredError,\n SchemaNotDeployedError,\n UnsupportedOperationError,\n} from \"./errors.js\";\n\n/**\n * SATI Agent0 SDK - agent0-sdk compatible interface backed by Solana.\n *\n * Method signatures follow agent0-sdk's `SDK` class pattern. Write operations\n * return `SolanaTransactionHandle<T>` (compatible with agent0-sdk's\n * `TransactionHandle<T>` via `.hash`, `.waitMined()`, `.waitConfirmed()`).\n *\n * @example\n * ```typescript\n * import { SatiSDK } from \"@cascade-fyi/sati-agent0-sdk\";\n * import { generateKeyPairSigner } from \"@solana/kit\";\n *\n * const signer = await generateKeyPairSigner();\n * const sdk = new SatiSDK({\n * network: \"devnet\",\n * signer,\n * });\n *\n * const agent = sdk.createAgent(\"MyAgent\", \"An AI assistant\");\n * ```\n */\nexport class SatiSDK {\n private readonly _config: SatiSDKConfig;\n private readonly _sati: Sati;\n private readonly _sasConfig: SATISASConfig | null;\n private readonly _chain: string;\n private readonly _feedbackCache = new FeedbackCache();\n\n constructor(config: SatiSDKConfig) {\n this._config = config;\n this._sati = new Sati({\n network: config.network,\n rpcUrl: config.rpcUrl,\n });\n this._sasConfig = loadDeployedConfig(config.network);\n this._chain = SOLANA_CAIP2_CHAINS[config.network] ?? `solana:${config.network}`;\n }\n\n /** Get the SATI network. */\n get network(): SatiSDKConfig[\"network\"] {\n return this._config.network;\n }\n\n /**\n * Chain ID (0 for Solana - not an EVM chain).\n * Use `chain` property for the CAIP-2 identifier.\n */\n get chainId(): number {\n return 0;\n }\n\n /** Get the CAIP-2 chain reference. */\n get chain(): string {\n return this._chain;\n }\n\n /** True if SDK has no signer or transaction sender configured (read-only mode). */\n get isReadOnly(): boolean {\n return !this._config.signer && !this._config.transactionSender;\n }\n\n /**\n * Access the underlying SATI client for SATI-specific operations\n * not covered by the agent0-sdk interface (e.g. validations, compression).\n */\n get sati(): Sati {\n return this._sati;\n }\n\n /** @internal Access the SAS schema config. */\n get sasConfig(): SATISASConfig | null {\n return this._sasConfig;\n }\n\n // =========================================================================\n // Agent lifecycle (mirrors agent0-sdk SDK methods)\n // =========================================================================\n\n /**\n * Create a new agent (off-chain object in memory).\n * Call `agent.registerIPFS()` to register on-chain.\n */\n createAgent(name: string, description: string, image?: URI): SatiAgent {\n return SatiAgent.create(this, name, description, image);\n }\n\n /**\n * Load an existing agent by agent0-compatible AgentId.\n */\n async loadAgent(agentId: AgentId): Promise<SatiAgent> {\n const identity = await this._resolveIdentity(agentId);\n const regFile = await fetchSatiRegistrationFile(identity.uri);\n const fallback: SatiRegistrationFile =\n regFile ??\n buildSatiRegistrationFile({\n name: identity.name,\n description: \"\",\n image: \"https://placehold.co/256\",\n });\n const agent0RegFile = toAgent0RegistrationFile(fallback, identity, this._chain);\n return SatiAgent.fromIdentity(this, identity, agent0RegFile);\n }\n\n /**\n * Get agent summary (read-only).\n */\n async getAgent(agentId: AgentId): Promise<AgentSummary | null> {\n const mint = parseSatiAgentId(agentId);\n if (mint === null) return null;\n\n const identity = await this._sati.loadAgent(solAddress(mint));\n if (!identity) return null;\n\n const regFile = await fetchSatiRegistrationFile(identity.uri);\n return toAgentSummary(identity, this._chain, regFile);\n }\n\n /**\n * Search agents with filters.\n *\n * Fetches agents from on-chain registry and applies client-side filtering\n * against on-chain data and registration files.\n *\n * Supports most agent0-sdk SearchFilters. Unsupported filters (require indexer):\n * `keyword`, `registeredAtFrom/To`, `updatedAtFrom/To`, `hasMetadataKey`,\n * `metadataValue`, `operators`.\n *\n * Pass `includeFeedbackStats: true` in options to populate `feedbackCount` and\n * `averageValue` on results (slower - extra RPC calls per agent).\n * Automatically enabled when `filters.feedback` is set.\n *\n * Use `options.limit` and `options.offset` for pagination.\n */\n async searchAgents(filters?: SearchFilters, options?: SatiSearchOptions): Promise<AgentSummary[]> {\n const limit = options?.limit ?? 100;\n const offset = options?.offset;\n\n // Step 1: Fetch agents - use listAgentsByOwner when filtering by owners\n let agents: AgentIdentity[];\n if (filters?.owners?.length) {\n const ownerResults = await Promise.all(filters.owners.map((o) => this._sati.listAgentsByOwner(solAddress(o))));\n agents = ownerResults.flat();\n } else {\n agents = await this._sati.listAllAgents({ limit, offset });\n }\n\n // Step 2: Apply on-chain filters (cheap, no reg file needed)\n if (filters?.agentIds?.length) {\n const mintSet = new Set(\n filters.agentIds.map((id) => parseSatiAgentId(id)).filter((m): m is string => m !== null),\n );\n agents = agents.filter((a) => mintSet.has(a.mint));\n }\n if (filters?.name) {\n const lower = filters.name.toLowerCase();\n agents = agents.filter((a) => a.name.toLowerCase().includes(lower));\n }\n\n // Step 3: Determine if we need registration files\n const needsRegFile = !!(\n filters?.description ||\n filters?.active !== undefined ||\n filters?.hasMCP ||\n filters?.hasA2A ||\n filters?.hasOASF ||\n filters?.hasWeb ||\n filters?.hasEndpoints !== undefined ||\n filters?.hasRegistrationFile !== undefined ||\n filters?.x402support !== undefined ||\n filters?.supportedTrust?.length ||\n filters?.mcpTools?.length ||\n filters?.mcpPrompts?.length ||\n filters?.mcpResources?.length ||\n filters?.a2aSkills?.length ||\n filters?.oasfSkills?.length ||\n filters?.oasfDomains?.length ||\n filters?.walletAddress ||\n filters?.webContains ||\n filters?.mcpContains ||\n filters?.a2aContains ||\n filters?.ensContains ||\n filters?.didContains\n );\n\n const regFiles: (SatiRegistrationFile | null)[] = needsRegFile\n ? await Promise.all(agents.map((a) => fetchSatiRegistrationFile(a.uri)))\n : agents.map(() => null);\n\n // Step 4: Apply cheap filters FIRST (before feedback stats)\n const cheapFiltered: { identity: AgentIdentity; regFile: SatiRegistrationFile | null }[] = [];\n for (let i = 0; i < agents.length; i++) {\n const identity = agents[i];\n const regFile = regFiles[i];\n const endpoints = regFile?.endpoints ?? [];\n\n if (filters?.hasRegistrationFile === true && !regFile) continue;\n if (filters?.hasRegistrationFile === false && regFile) continue;\n if (filters?.description) {\n if (!regFile?.description?.toLowerCase().includes(filters.description.toLowerCase())) continue;\n }\n if (filters?.active !== undefined && (regFile?.active ?? true) !== filters.active) continue;\n if (filters?.x402support !== undefined && (regFile?.x402support ?? false) !== filters.x402support) continue;\n if (filters?.hasMCP && !endpoints.some((e) => e.name.toUpperCase() === \"MCP\")) continue;\n if (filters?.hasA2A && !endpoints.some((e) => e.name.toUpperCase() === \"A2A\")) continue;\n if (filters?.hasOASF && !endpoints.some((e) => e.name.toUpperCase() === \"OASF\")) continue;\n if (filters?.hasWeb && !endpoints.some((e) => e.name.toUpperCase() === \"WEB\")) continue;\n if (filters?.hasEndpoints === true && endpoints.length === 0) continue;\n if (filters?.mcpContains) {\n const ep = endpoints.find((e) => e.name.toUpperCase() === \"MCP\");\n if (!ep?.endpoint.includes(filters.mcpContains)) continue;\n }\n if (filters?.a2aContains) {\n const ep = endpoints.find((e) => e.name.toUpperCase() === \"A2A\");\n if (!ep?.endpoint.includes(filters.a2aContains)) continue;\n }\n if (filters?.ensContains) {\n const ep = endpoints.find((e) => e.name.toUpperCase() === \"ENS\");\n if (!ep?.endpoint.includes(filters.ensContains)) continue;\n }\n if (filters?.didContains) {\n const ep = endpoints.find((e) => e.name.toUpperCase() === \"DID\");\n if (!ep?.endpoint.includes(filters.didContains)) continue;\n }\n if (filters?.webContains) {\n const ep = endpoints.find((e) => e.name.toUpperCase() === \"WEB\");\n if (!ep?.endpoint.includes(filters.webContains)) continue;\n }\n if (filters?.walletAddress) {\n const walletEp = endpoints.find(\n (e) => e.name.toUpperCase() === \"AGENTWALLET\" || e.name.toUpperCase() === \"WALLET\",\n );\n if (!walletEp?.endpoint.includes(filters.walletAddress)) continue;\n }\n if (filters?.supportedTrust?.length) {\n const trusts = regFile?.supportedTrust ?? [];\n if (\n !filters.supportedTrust.every((t) =>\n trusts.includes(t as \"reputation\" | \"crypto-economic\" | \"tee-attestation\"),\n )\n )\n continue;\n }\n if (filters?.mcpTools?.length) {\n const tools = endpoints.find((e) => e.name.toUpperCase() === \"MCP\")?.mcpTools ?? [];\n if (!filters.mcpTools.some((t) => tools.includes(t))) continue;\n }\n if (filters?.mcpPrompts?.length) {\n const prompts = endpoints.find((e) => e.name.toUpperCase() === \"MCP\")?.mcpPrompts ?? [];\n if (!filters.mcpPrompts.some((t) => prompts.includes(t))) continue;\n }\n if (filters?.mcpResources?.length) {\n const resources = endpoints.find((e) => e.name.toUpperCase() === \"MCP\")?.mcpResources ?? [];\n if (!filters.mcpResources.some((t) => resources.includes(t))) continue;\n }\n if (filters?.a2aSkills?.length) {\n const skills = endpoints.find((e) => e.name.toUpperCase() === \"A2A\")?.a2aSkills ?? [];\n if (!filters.a2aSkills.some((t) => skills.includes(t))) continue;\n }\n if (filters?.oasfSkills?.length) {\n const skills = endpoints.find((e) => e.name.toUpperCase() === \"OASF\")?.skills ?? [];\n if (!filters.oasfSkills.some((t) => skills.includes(t))) continue;\n }\n if (filters?.oasfDomains?.length) {\n const domains = endpoints.find((e) => e.name.toUpperCase() === \"OASF\")?.domains ?? [];\n if (!filters.oasfDomains.some((t) => domains.includes(t))) continue;\n }\n\n cheapFiltered.push({ identity, regFile });\n }\n\n // Step 5: Fetch feedback stats ONLY for agents that passed cheap filters (lazy)\n const wantFeedbackStats = !!(options?.includeFeedbackStats || filters?.feedback);\n let feedbackStatsMap: Map<string, { count: number; averageValue: number }> | null = null;\n\n if (wantFeedbackStats && this._sasConfig && cheapFiltered.length > 0) {\n feedbackStatsMap = new Map();\n const schema = this._sasConfig.schemas.feedbackPublic ?? this._sasConfig.schemas.feedback;\n await Promise.all(\n cheapFiltered.map(async ({ identity }) => {\n try {\n const cacheKey = FeedbackCache.cacheKey(schema, identity.mint);\n const cached = this._feedbackCache.get<{ items: { data: FeedbackData }[] }>(cacheKey);\n const result = cached ?? (await this._sati.listFeedbacks({ sasSchema: schema, agentMint: identity.mint }));\n if (!cached) this._feedbackCache.set(cacheKey, result);\n\n const scores = result.items\n .map((item) => {\n const raw = this._parseContentJson(item.data.content, item.data.contentType);\n return raw?.score as number | undefined;\n })\n .filter((s): s is number => s !== undefined);\n const count = scores.length;\n const averageValue = count > 0 ? scores.reduce((a, b) => a + b, 0) / count : 0;\n feedbackStatsMap?.set(identity.mint, { count, averageValue });\n } catch (error) {\n this._warn({\n code: \"RPC_ERROR\",\n message: \"Failed to fetch feedback stats\",\n context: identity.mint,\n cause: error,\n });\n }\n }),\n );\n }\n\n // Step 6: Apply feedback filters and build results\n const results: AgentSummary[] = [];\n for (const { identity, regFile } of cheapFiltered) {\n if (filters?.feedback) {\n const fbStats = feedbackStatsMap?.get(identity.mint);\n const fb = filters.feedback;\n if (fb.hasFeedback === true && (!fbStats || fbStats.count === 0)) continue;\n if (fb.hasNoFeedback === true && fbStats && fbStats.count > 0) continue;\n if (fb.minValue !== undefined && (!fbStats || fbStats.averageValue < fb.minValue)) continue;\n if (fb.maxValue !== undefined && (!fbStats || fbStats.averageValue > fb.maxValue)) continue;\n if (fb.minCount !== undefined && (!fbStats || fbStats.count < fb.minCount)) continue;\n if (fb.maxCount !== undefined && (!fbStats || fbStats.count > fb.maxCount)) continue;\n }\n\n const stats = feedbackStatsMap?.get(identity.mint) ?? null;\n results.push(toAgentSummary(identity, this._chain, regFile, stats));\n }\n\n // Step 7: Sort\n const sortFields = options?.sort;\n if (sortFields?.length) {\n results.sort((a, b) => {\n for (const sortStr of sortFields) {\n const [field, dir] = sortStr.split(\":\");\n const mul = dir === \"asc\" ? 1 : -1;\n const aVal = (a as unknown as Record<string, unknown>)[field] ?? 0;\n const bVal = (b as unknown as Record<string, unknown>)[field] ?? 0;\n if (aVal !== bVal) return (aVal > bVal ? 1 : -1) * mul;\n }\n return 0;\n });\n }\n\n return results;\n }\n\n /**\n * Transfer agent ownership to a new Solana address.\n */\n async transferAgent(\n agentId: AgentId,\n newOwner: Address,\n ): Promise<SolanaTransactionHandle<{ txHash: string; from: string; to: string; agentId: AgentId }>> {\n const identity = await this._resolveIdentity(agentId);\n const access = this._requireWriteAccess(\"transferAgent\");\n\n if (access.type === \"keypair\") {\n const result = await this._sati.transferAgent({\n payer: access.signer,\n owner: access.signer,\n mint: identity.mint,\n newOwner: solAddress(newOwner),\n });\n return new SolanaTransactionHandle(result.signature, {\n txHash: result.signature,\n from: access.signer.address,\n to: newOwner,\n agentId,\n });\n }\n\n // Sender path: build ATA creation + transfer instructions\n const ownerAddr = solAddress(access.sender.address);\n const [sourceAta] = await findAssociatedTokenAddress(identity.mint, ownerAddr);\n const [destAta] = await findAssociatedTokenAddress(identity.mint, solAddress(newOwner));\n\n const createAtaIx = getCreateAssociatedTokenIdempotentInstruction({\n payer: { address: ownerAddr } as TransactionSigner,\n owner: solAddress(newOwner),\n mint: identity.mint,\n ata: destAta,\n tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,\n });\n\n const transferIx = getTransferInstruction({\n source: sourceAta,\n destination: destAta,\n authority: ownerAddr,\n amount: 1n,\n });\n\n const signature = await access.sender.signAndSend([createAtaIx, transferIx]);\n return new SolanaTransactionHandle(signature, {\n txHash: signature,\n from: access.sender.address,\n to: newOwner,\n agentId,\n });\n }\n\n /**\n * Check if address owns the agent.\n */\n async isAgentOwner(agentId: AgentId, addr: Address): Promise<boolean> {\n const owner = await this.getAgentOwner(agentId);\n return owner === addr;\n }\n\n /**\n * Get agent owner address.\n */\n async getAgentOwner(agentId: AgentId): Promise<Address> {\n const identity = await this._resolveIdentity(agentId);\n return (await this._sati.getAgentOwner(identity.mint)) as Address;\n }\n\n // =========================================================================\n // Feedback (mirrors agent0-sdk SDK methods)\n // =========================================================================\n\n /**\n * Prepare an off-chain feedback file.\n */\n prepareFeedbackFile(input: FeedbackFileInput, extra?: Record<string, unknown>): FeedbackFileInput {\n return { ...input, ...extra };\n }\n\n /**\n * Give feedback to an agent.\n *\n * Uses FeedbackPublicV1 schema (CounterpartySigned mode).\n * Value/tags stored in content JSON.\n *\n * SATI-specific fields (`outcome`, `taskRef`) can be passed via `feedbackFile`:\n * - `feedbackFile.outcome` - Attestation outcome (default: Neutral)\n * - `feedbackFile.taskRef` - Deterministic 32-byte task reference (default: random)\n */\n async giveFeedback(\n agentId: AgentId,\n value: number | string,\n tag1?: string,\n tag2?: string,\n endpoint?: string,\n feedbackFile?: FeedbackFileInput,\n ): Promise<SolanaTransactionHandle<Feedback>> {\n const sasConfig = this._requireSASConfig();\n const feedbackPublicSchema = sasConfig.schemas.feedbackPublic;\n if (!feedbackPublicSchema) {\n throw new SchemaNotDeployedError(\"FeedbackPublic\", this._config.network);\n }\n\n const identity = await this._resolveIdentity(agentId);\n const access = this._requireWriteAccess(\"giveFeedback\");\n\n // Validate and parse score\n const numericValue = typeof value === \"string\" ? Number.parseFloat(value) : value;\n if (!Number.isFinite(numericValue)) {\n throw new SatiError(\"INVALID_VALUE\", `Feedback value must be a finite number, got: ${value}`);\n }\n\n // Build content JSON\n const contentObj: Record<string, unknown> = {};\n if (value !== undefined) contentObj.score = numericValue;\n if (tag1) contentObj.tags = tag2 ? [tag1, tag2] : [tag1];\n if (endpoint) contentObj.endpoint = endpoint;\n if (feedbackFile?.text) contentObj.m = feedbackFile.text;\n\n const content =\n Object.keys(contentObj).length > 0 ? new TextEncoder().encode(JSON.stringify(contentObj)) : new Uint8Array(0);\n const contentType = content.length > 0 ? ContentType.JSON : ContentType.None;\n\n // Extract SATI-specific fields from feedbackFile\n const taskRef =\n (feedbackFile?.taskRef as Uint8Array | undefined) ?? globalThis.crypto.getRandomValues(new Uint8Array(32));\n const outcome = (feedbackFile?.outcome as Outcome | undefined) ?? Outcome.Neutral;\n\n if (access.type === \"keypair\") {\n const signer = access.signer;\n // Serialize feedback data to build SIWS message\n const feedbackData: FeedbackData = {\n taskRef,\n agentMint: identity.mint,\n counterparty: signer.address,\n dataHash: zeroDataHash(),\n outcome,\n contentType,\n content,\n };\n const serializedData = serializeFeedback(feedbackData);\n\n // Build SIWS message and sign with counterparty (signer)\n const { messageBytes } = buildCounterpartyMessage({\n schemaName: \"FeedbackPublic\",\n data: serializedData,\n });\n const sig = await signBytes(signer.keyPair.privateKey, messageBytes);\n\n // Create feedback via SATI (CounterpartySigned mode)\n const result = await this._sati.createFeedback({\n payer: signer,\n sasSchema: feedbackPublicSchema,\n taskRef,\n agentMint: identity.mint,\n counterparty: signer.address,\n dataHash: zeroDataHash(),\n outcome,\n contentType,\n content,\n agentSignature: {\n pubkey: signer.address,\n signature: new Uint8Array(sig),\n },\n counterpartyMessage: messageBytes,\n lookupTableAddress: sasConfig.lookupTable,\n });\n\n const feedback = toFeedback({\n agentMint: identity.mint,\n chain: this._chain,\n reviewer: signer.address,\n feedbackIndex: 0,\n content: { value: numericValue, tag1, tag2, endpoint, text: feedbackFile?.text },\n txSignature: result.signature,\n outcome,\n });\n\n this._feedbackCache.invalidate();\n return new SolanaTransactionHandle(result.signature, feedback);\n }\n\n // Sender path: Feedback requires Light Protocol compressed accounts,\n // which can't be expressed as simple instructions for signAndSend().\n // Use prepareFeedback() + submitPreparedFeedback() instead.\n throw new UnsupportedOperationError(\n \"giveFeedback via transactionSender (browser wallet). \" +\n \"Use prepareFeedback() + submitPreparedFeedback() instead\",\n );\n }\n\n /**\n * Prepare a feedback submission for browser wallet signing.\n *\n * Returns SIWS message bytes that the counterparty wallet must sign.\n * Pass the result + signature to `submitPreparedFeedback()`.\n *\n * @param agentId - Agent to give feedback to\n * @param value - Numeric feedback value\n * @param tag1 - Optional first tag\n * @param tag2 - Optional second tag\n * @param opts - Optional: endpoint, text, counterparty address, outcome, taskRef\n */\n async prepareFeedback(\n agentId: AgentId,\n value: number,\n tag1?: string,\n tag2?: string,\n opts?: {\n endpoint?: string;\n text?: string;\n counterparty?: string;\n outcome?: Outcome;\n taskRef?: Uint8Array;\n },\n ): Promise<PreparedFeedback> {\n const sasConfig = this._requireSASConfig();\n const feedbackPublicSchema = sasConfig.schemas.feedbackPublic;\n if (!feedbackPublicSchema) {\n throw new SchemaNotDeployedError(\"FeedbackPublic\", this._config.network);\n }\n\n const identity = await this._resolveIdentity(agentId);\n\n // Determine counterparty address\n const counterpartyAddr = opts?.counterparty ?? this._config.transactionSender?.address;\n if (!counterpartyAddr) {\n throw new ReadOnlyError(\n \"prepareFeedback (counterparty address required - provide via opts.counterparty or configure transactionSender)\",\n );\n }\n\n if (!Number.isFinite(value)) {\n throw new SatiError(\"INVALID_VALUE\", `Feedback value must be a finite number, got: ${value}`);\n }\n\n // Build content JSON\n const contentObj: Record<string, unknown> = {};\n if (value !== undefined) contentObj.score = value;\n if (tag1) contentObj.tags = tag2 ? [tag1, tag2] : [tag1];\n if (opts?.endpoint) contentObj.endpoint = opts.endpoint;\n if (opts?.text) contentObj.m = opts.text;\n\n const content =\n Object.keys(contentObj).length > 0 ? new TextEncoder().encode(JSON.stringify(contentObj)) : new Uint8Array(0);\n const contentType = content.length > 0 ? ContentType.JSON : ContentType.None;\n\n const taskRef = opts?.taskRef ?? globalThis.crypto.getRandomValues(new Uint8Array(32));\n const outcome = opts?.outcome ?? Outcome.Neutral;\n\n // Serialize feedback data to build SIWS message\n const feedbackData: FeedbackData = {\n taskRef,\n agentMint: identity.mint,\n counterparty: solAddress(counterpartyAddr),\n dataHash: zeroDataHash(),\n outcome,\n contentType,\n content,\n };\n const serializedData = serializeFeedback(feedbackData);\n\n // Build SIWS message\n const { messageBytes } = buildCounterpartyMessage({\n schemaName: \"FeedbackPublic\",\n data: serializedData,\n });\n\n return {\n messageBytes,\n agentMint: identity.mint,\n counterparty: solAddress(counterpartyAddr),\n taskRef,\n dataHash: zeroDataHash(),\n outcome,\n contentType,\n content,\n sasSchema: feedbackPublicSchema,\n lookupTable: sasConfig.lookupTable,\n feedbackMeta: {\n value,\n tag1,\n tag2,\n endpoint: opts?.endpoint,\n text: opts?.text,\n },\n };\n }\n\n /**\n * Submit a prepared feedback using a server-side KeyPairSigner.\n *\n * The signer pays gas. The counterparty's SIWS signature proves consent.\n *\n * @param prepared - Result from `prepareFeedback()`\n * @param counterpartySignature - Counterparty wallet's signature of `prepared.messageBytes`\n */\n async submitPreparedFeedback(\n prepared: PreparedFeedback,\n counterpartySignature: Uint8Array,\n ): Promise<SolanaTransactionHandle<Feedback>> {\n const signer = this._requireSigner(\"submitPreparedFeedback\");\n\n const result = await this._sati.createFeedback({\n payer: signer,\n sasSchema: prepared.sasSchema,\n taskRef: prepared.taskRef,\n agentMint: prepared.agentMint,\n counterparty: prepared.counterparty,\n dataHash: prepared.dataHash,\n outcome: prepared.outcome,\n contentType: prepared.contentType,\n content: prepared.content,\n agentSignature: {\n pubkey: prepared.counterparty,\n signature: new Uint8Array(counterpartySignature),\n },\n counterpartyMessage: prepared.messageBytes,\n lookupTableAddress: prepared.lookupTable,\n });\n\n const feedback = toFeedback({\n agentMint: prepared.agentMint,\n chain: this._chain,\n reviewer: prepared.counterparty,\n feedbackIndex: 0,\n content: prepared.feedbackMeta,\n txSignature: result.signature,\n outcome: prepared.outcome,\n });\n\n this._feedbackCache.invalidate();\n return new SolanaTransactionHandle(result.signature, feedback);\n }\n\n /**\n * Search feedback with filters.\n *\n * Supports most agent0-sdk FeedbackSearchFilters. The `includeRevoked`\n * filter is a no-op on SATI (closed attestations are permanently deleted).\n *\n * Note: `createdAt` timestamps are approximate - derived from Solana slot\n * numbers using ~400ms/slot estimate. May drift by minutes for recent or\n * hours for older attestations. For exact timestamps, use\n * `getCreationSignature()` + Solana's `getBlockTime()`.\n */\n async searchFeedback(filters: FeedbackSearchFilters, options?: SatiFeedbackSearchOptions): Promise<Feedback[]> {\n const sasConfig = this._requireSASConfig();\n\n // Build SATI attestation filter\n const satiFilter: Record<string, unknown> = {\n sasSchema: sasConfig.schemas.feedbackPublic ?? sasConfig.schemas.feedback,\n };\n\n // Resolve agentId to agentMint (use agentId or first of agents[])\n let knownIdentity: AgentIdentity | null = null;\n const targetAgentId = filters.agentId ?? filters.agents?.[0];\n if (targetAgentId) {\n knownIdentity = await this._resolveIdentity(targetAgentId);\n satiFilter.agentMint = knownIdentity.mint;\n }\n\n // Pass first reviewer to RPC filter (even though underlying queryAttestations\n // doesn't apply it, future versions may). We apply client-side filtering below.\n if (filters.reviewers?.length) {\n satiFilter.counterparty = solAddress(filters.reviewers[0]);\n }\n\n // Build sets for client-side filtering (underlying RPC only filters by sasSchema + agentMint)\n const reviewerSet = filters.reviewers?.length ? new Set(filters.reviewers) : null;\n const agentMintSet =\n filters.agents?.length && filters.agents.length > 1\n ? new Set(\n await Promise.all(\n filters.agents.map(async (id) => {\n const identity = await this._resolveIdentity(id);\n return identity.mint as string;\n }),\n ),\n )\n : null;\n\n // Check cache\n const schema = satiFilter.sasSchema as string;\n const agentMint = satiFilter.agentMint as string | undefined;\n const cacheKey = FeedbackCache.cacheKey(schema, agentMint);\n const cached = this._feedbackCache.get<{\n items: {\n data: FeedbackData;\n attestation: { sasSchema: string };\n raw: { slotCreated: bigint };\n address: Uint8Array;\n }[];\n }>(cacheKey);\n const result = cached ?? (await this._sati.listFeedbacks(satiFilter));\n if (!cached) this._feedbackCache.set(cacheKey, result);\n\n // Fetch current slot for timestamp conversion (slotCreated -> Unix seconds)\n const currentSlot = await this._sati.getRpc().getSlot({ commitment: \"confirmed\" }).send();\n const nowSec = Math.floor(Date.now() / 1000);\n\n const feedbacks: Feedback[] = [];\n for (let i = 0; i < result.items.length; i++) {\n const item = result.items[i];\n\n // Client-side counterparty/agent filtering\n if (reviewerSet && !reviewerSet.has(item.data.counterparty)) continue;\n if (agentMintSet && !agentMintSet.has(item.data.agentMint)) continue;\n\n // Parse content JSON (safe - malformed content returns null)\n const rawContent = this._parseContentJson(item.data.content, item.data.contentType);\n\n const score = rawContent?.score as number | undefined;\n const tags = (rawContent?.tags as string[]) ?? [];\n const text = rawContent?.m as string | undefined;\n const endpointVal = rawContent?.endpoint as string | undefined;\n const capability = rawContent?.cap as string | undefined;\n const name = rawContent?.n as string | undefined;\n const skill = rawContent?.sk as string | undefined;\n const task = rawContent?.tsk as string | undefined;\n const proofOfPayment = rawContent?.pop as Record<string, unknown> | undefined;\n const fileURI = rawContent?.fileURI as string | undefined;\n\n // Client-side tag filtering\n if (filters.tags?.length) {\n const hasAll = filters.tags.every((t) => tags.includes(t));\n if (!hasAll) continue;\n }\n\n // Client-side value filtering\n if (options?.minValue !== undefined && (score === undefined || score < options.minValue)) continue;\n if (options?.maxValue !== undefined && (score === undefined || score > options.maxValue)) continue;\n\n // Client-side capability/skill/task/name filtering\n if (filters.capabilities?.length && (!capability || !filters.capabilities.includes(capability))) continue;\n if (filters.skills?.length && (!skill || !filters.skills.includes(skill))) continue;\n if (filters.tasks?.length && (!task || !filters.tasks.includes(task))) continue;\n if (filters.names?.length && (!name || !filters.names.includes(name))) continue;\n\n // Compute createdAt from slotCreated (~400ms per slot)\n const slotDiff = Number(BigInt(currentSlot) - item.raw.slotCreated);\n const createdAt = nowSec - Math.floor(slotDiff * 0.4);\n\n // Decode compressed account address for on-demand tx lookups\n const [compressedAddress] = getAddressDecoder().read(item.address, 0);\n\n const feedback = toFeedback({\n agentMint: item.data.agentMint,\n chain: this._chain,\n reviewer: item.data.counterparty,\n feedbackIndex: i,\n content: {\n value: score,\n tag1: tags[0],\n tag2: tags[1],\n endpoint: endpointVal,\n text,\n context: {\n satiCompressedAddress: compressedAddress,\n counterparty: item.data.counterparty,\n agentMint: item.data.agentMint,\n },\n },\n createdAt,\n outcome: item.data.outcome,\n });\n\n // Populate additional fields\n if (capability) feedback.capability = capability;\n if (name) feedback.name = name;\n if (skill) feedback.skill = skill;\n if (task) feedback.task = task;\n if (proofOfPayment) feedback.proofOfPayment = proofOfPayment;\n if (fileURI) feedback.fileURI = fileURI;\n\n feedbacks.push(feedback);\n }\n\n // Optionally populate txHash (expensive: 1 RPC call per feedback)\n if (options?.includeTxHash) {\n const photon = this._sati.getLightClient().getRpc();\n await Promise.all(\n feedbacks.map(async (fb) => {\n const addr = fb.context?.satiCompressedAddress as string | undefined;\n if (!addr) return;\n try {\n const sigs = await photon.getCompressionSignaturesForAddress(solAddress(addr), { limit: 1 });\n fb.txHash = sigs.items[0]?.signature;\n } catch (error) {\n this._warn({\n code: \"SIGNATURE_LOOKUP_FAILED\",\n message: \"Failed to fetch tx signature\",\n context: addr,\n cause: error,\n });\n }\n }),\n );\n }\n\n return feedbacks;\n }\n\n /**\n * Append response to feedback.\n *\n * @throws UnsupportedOperationError - Not supported on SATI.\n */\n async appendResponse(\n _agentId: AgentId,\n _clientAddress: Address,\n _feedbackIndex: number,\n _response: { uri: URI; hash: string },\n ): Promise<never> {\n throw new UnsupportedOperationError(\"appendResponse\");\n }\n\n /**\n * Get reputation summary for an agent.\n *\n * Computes average score from all FeedbackPublic attestations,\n * optionally filtered by tags.\n */\n async getReputationSummary(\n agentId: AgentId,\n tag1?: string,\n tag2?: string,\n ): Promise<{ count: number; averageValue: number }> {\n const sasConfig = this._requireSASConfig();\n const identity = await this._resolveIdentity(agentId);\n\n const schema = sasConfig.schemas.feedbackPublic ?? sasConfig.schemas.feedback;\n const cacheKey = FeedbackCache.cacheKey(schema, identity.mint);\n const cached = this._feedbackCache.get<{ items: { data: FeedbackData }[] }>(cacheKey);\n const result = cached ?? (await this._sati.listFeedbacks({ sasSchema: schema, agentMint: identity.mint }));\n if (!cached) this._feedbackCache.set(cacheKey, result);\n\n if (result.items.length === 0) {\n return { count: 0, averageValue: 0 };\n }\n\n let sum = 0;\n let count = 0;\n\n for (const item of result.items) {\n const rawContent = this._parseContentJson(item.data.content, item.data.contentType);\n\n const score = rawContent?.score as number | undefined;\n const tags = (rawContent?.tags as string[]) ?? [];\n\n // Apply tag filters\n if (tag1 && !tags.includes(tag1)) continue;\n if (tag2 && !tags.includes(tag2)) continue;\n\n if (score !== undefined) {\n sum += score;\n count++;\n }\n }\n\n return {\n count,\n averageValue: count > 0 ? sum / count : 0,\n };\n }\n\n /**\n * Get a single feedback entry.\n *\n * Fetches feedbacks for the given agent + reviewer, then returns the one at feedbackIndex.\n */\n async getFeedback(agentId: AgentId, clientAddress: Address, feedbackIndex: number): Promise<Feedback> {\n const feedbacks = await this.searchFeedback({ agentId, reviewers: [clientAddress] });\n const fb = feedbacks[feedbackIndex];\n if (!fb) {\n throw new AgentNotFoundError(`Feedback at index ${feedbackIndex} for agent ${agentId} reviewer ${clientAddress}`);\n }\n return fb;\n }\n\n /**\n * Look up the creation transaction signature for a compressed attestation.\n *\n * Use `feedback.context.satiCompressedAddress` from `searchFeedback()` results\n * as the `compressedAddress` parameter.\n *\n * @param compressedAddress - Base58 address of the compressed account\n * @returns Transaction signature or null if not found\n */\n async getCreationSignature(compressedAddress: string): Promise<string | null> {\n try {\n const photon = this._sati.getLightClient().getRpc();\n const result = await photon.getCompressionSignaturesForAddress(solAddress(compressedAddress), { limit: 1 });\n return result.items[0]?.signature ?? null;\n } catch (error) {\n this._warn({\n code: \"RPC_ERROR\",\n message: \"Failed to fetch creation signature\",\n context: compressedAddress,\n cause: error,\n });\n return null;\n }\n }\n\n /** Revoke feedback by passing the Feedback object from searchFeedback. */\n revokeFeedback(feedback: Feedback): Promise<SolanaTransactionHandle<Feedback>>;\n /** @deprecated Use the Feedback object overload for stable addressing. */\n revokeFeedback(agentId: AgentId, feedbackIndex: number): Promise<SolanaTransactionHandle<Feedback>>;\n /**\n * Revoke (close) a previously submitted feedback.\n *\n * Closes the compressed attestation on-chain. The signer must be the\n * counterparty who originally submitted the feedback.\n *\n * Note: On SATI, revoked feedbacks are permanently deleted (Light Protocol\n * compressed accounts are closed). They cannot be recovered.\n *\n * Preferred: pass the Feedback object from `searchFeedback()` directly.\n * The object carries `context.satiCompressedAddress` for stable addressing.\n */\n async revokeFeedback(\n feedbackOrAgentId: Feedback | AgentId,\n feedbackIndex?: number,\n ): Promise<SolanaTransactionHandle<Feedback>> {\n const sasConfig = this._requireSASConfig();\n const signer = this._requireSigner(\"revokeFeedback\");\n\n // Feedback object path\n if (typeof feedbackOrAgentId === \"object\" && \"id\" in feedbackOrAgentId) {\n const fb = feedbackOrAgentId as Feedback;\n const addr = fb.context?.satiCompressedAddress as string | undefined;\n if (!addr) {\n throw new InvalidAgentIdError(\n \"Feedback missing context.satiCompressedAddress - use searchFeedback() to get addressable Feedback objects\",\n );\n }\n\n const schema = sasConfig.schemas.feedbackPublic ?? sasConfig.schemas.feedback;\n const result = await this._sati.closeCompressedAttestation({\n payer: signer,\n counterparty: signer,\n sasSchema: schema,\n attestationAddress: solAddress(addr),\n lookupTableAddress: sasConfig.lookupTable,\n });\n\n this._feedbackCache.invalidate();\n const revokedFb = { ...fb, isRevoked: true };\n return new SolanaTransactionHandle(result.signature, revokedFb);\n }\n\n // Legacy index path\n const agentId = feedbackOrAgentId as AgentId;\n const idx = feedbackIndex as number;\n const identity = await this._resolveIdentity(agentId);\n const schema = sasConfig.schemas.feedbackPublic ?? sasConfig.schemas.feedback;\n const queryResult = await this._sati.listFeedbacks({\n sasSchema: schema,\n agentMint: identity.mint,\n counterparty: signer.address,\n });\n\n const item = queryResult.items[idx];\n if (!item) {\n throw new AgentNotFoundError(`Feedback not found at index ${idx}`);\n }\n\n const [attestationAddress] = getAddressDecoder().read(item.address, 0);\n\n const closeResult = await this._sati.closeCompressedAttestation({\n payer: signer,\n counterparty: signer,\n sasSchema: item.attestation.sasSchema,\n attestationAddress,\n lookupTableAddress: sasConfig.lookupTable,\n });\n\n const rawContent = this._parseContentJson(item.data.content, item.data.contentType);\n const score = rawContent?.score as number | undefined;\n const tags = (rawContent?.tags as string[]) ?? [];\n const feedback = toFeedback({\n agentMint: item.data.agentMint,\n chain: this._chain,\n reviewer: item.data.counterparty,\n feedbackIndex: idx,\n content: { value: score, tag1: tags[0], tag2: tags[1] },\n txSignature: closeResult.signature,\n outcome: item.data.outcome,\n });\n feedback.isRevoked = true;\n\n this._feedbackCache.invalidate();\n return new SolanaTransactionHandle(closeResult.signature, feedback);\n }\n\n /**\n * Revoke (close) a feedback by its compressed account address.\n *\n * Lower-level alternative to `revokeFeedback(feedback)`.\n * Get the address from `feedback.context.satiCompressedAddress`.\n *\n * @param compressedAddress - Base58 compressed account address\n */\n async revokeFeedbackByAddress(compressedAddress: string): Promise<SolanaTransactionHandle<{ signature: string }>> {\n const sasConfig = this._requireSASConfig();\n const signer = this._requireSigner(\"revokeFeedbackByAddress\");\n\n const result = await this._sati.closeCompressedAttestation({\n payer: signer,\n counterparty: signer,\n sasSchema: sasConfig.schemas.feedbackPublic ?? sasConfig.schemas.feedback,\n attestationAddress: solAddress(compressedAddress),\n lookupTableAddress: sasConfig.lookupTable,\n });\n\n this._feedbackCache.invalidate();\n return new SolanaTransactionHandle(result.signature, { signature: result.signature });\n }\n\n // =========================================================================\n // Validations\n // =========================================================================\n\n /**\n * Search validation attestations for an agent.\n *\n * Validations are on-chain attestations from validators (TEE, zkML, re-execution, etc.)\n * that verify an agent's behavior. Unlike feedback, validations are typically automated.\n *\n * Note: `createdAt` timestamps are approximate - derived from Solana slot\n * numbers using ~400ms/slot estimate. May drift by minutes for recent or\n * hours for older attestations. For exact timestamps, use\n * `getCreationSignature()` + Solana's `getBlockTime()`.\n */\n async searchValidations(agentId: AgentId): Promise<ValidationResult[]> {\n const sasConfig = this._requireSASConfig();\n const validationSchema = sasConfig.schemas.validation;\n if (!validationSchema) {\n throw new SchemaNotDeployedError(\"Validation\", this._config.network);\n }\n\n const identity = await this._resolveIdentity(agentId);\n\n const result = await this._sati.listValidations({\n sasSchema: validationSchema,\n agentMint: identity.mint,\n });\n\n // Fetch current slot for timestamp conversion\n const currentSlot = await this._sati.getRpc().getSlot({ commitment: \"confirmed\" }).send();\n const nowSec = Math.floor(Date.now() / 1000);\n\n return result.items.map((item) => {\n const slotDiff = Number(BigInt(currentSlot) - item.raw.slotCreated);\n const createdAt = nowSec - Math.floor(slotDiff * 0.4);\n const [compressedAddress] = getAddressDecoder().read(item.address, 0);\n\n return {\n outcome: item.data.outcome,\n agentMint: item.data.agentMint,\n counterparty: item.data.counterparty,\n createdAt,\n compressedAddress,\n };\n });\n }\n\n // =========================================================================\n // Config accessors\n // =========================================================================\n\n /** Get the feedback schema address for the current network. */\n get feedbackSchema(): string | undefined {\n return this._sasConfig?.schemas.feedback;\n }\n\n /** Get the feedbackPublic schema address for the current network. */\n get feedbackPublicSchema(): string | undefined {\n return this._sasConfig?.schemas.feedbackPublic;\n }\n\n /** Get the validation schema address for the current network. */\n get validationSchema(): string | undefined {\n return this._sasConfig?.schemas.validation;\n }\n\n /** Get the lookup table address for the current network. */\n get lookupTable(): string | undefined {\n return this._sasConfig?.lookupTable;\n }\n\n // =========================================================================\n // Internal accessors (used by SatiAgent)\n // =========================================================================\n\n /** @internal */\n get config(): SatiSDKConfig {\n return this._config;\n }\n\n // =========================================================================\n // Private helpers\n // =========================================================================\n\n /** Safely parse JSON content from an attestation. Returns null on invalid JSON. */\n private _parseContentJson(content: Uint8Array, contentType: number): Record<string, unknown> | null {\n if (contentType !== ContentType.JSON || content.length === 0) return null;\n try {\n return JSON.parse(new TextDecoder().decode(content)) as Record<string, unknown>;\n } catch {\n return null;\n }\n }\n\n /** Fire a non-fatal warning via the optional onWarning callback. */\n private _warn(warning: SatiWarning): void {\n this._config.onWarning?.(warning);\n }\n\n private _requireSigner(operation?: string): KeyPairSigner {\n if (!this._config.signer) {\n throw new SignerRequiredError(operation);\n }\n return this._config.signer;\n }\n\n /** Returns either a KeyPairSigner or a TransactionSender, or throws if read-only. */\n private _requireWriteAccess(operation?: string): WriteAccess {\n if (this._config.signer) return { type: \"keypair\", signer: this._config.signer };\n if (this._config.transactionSender) return { type: \"sender\", sender: this._config.transactionSender };\n throw new ReadOnlyError(operation);\n }\n\n private _requireSASConfig(): SATISASConfig {\n if (!this._sasConfig) {\n throw new SchemaNotDeployedError(\"SAS\", this._config.network);\n }\n return this._sasConfig;\n }\n\n private async _resolveIdentity(agentId: AgentId): Promise<AgentIdentity> {\n const mint = parseSatiAgentId(agentId);\n if (mint === null) {\n throw new InvalidAgentIdError(agentId);\n }\n\n const identity = await this._sati.loadAgent(solAddress(mint));\n if (!identity) {\n throw new AgentNotFoundError(agentId);\n }\n\n return identity;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["SOLANA_CAIP2_CHAINS: Record<string, string>","SATI_TO_AGENT0_TYPE: Record<string, EndpointType>","EndpointType","AGENT0_TO_SATI_NAME: Record<string, string>","meta: Record<string, unknown>","result: SatiEndpoint","trustModels: (TrustModel | string)[]","TrustModel","tags: string[]","id: FeedbackIdTuple","context: Record<string, unknown>","_result: T","code: string","EndpointCrawler","TrustModel","EndpointType","meta: Record<string, unknown>","trustModels: (TrustModel | string)[]","solAddress","lastError: unknown","oasfEndpoint: Endpoint","fetchSatiRegistrationFile","buildSatiRegistrationFile","solAddress","agents: AgentIdentity[]","regFiles: (SatiRegistrationFile | null)[]","cheapFiltered: { identity: AgentIdentity; regFile: SatiRegistrationFile | null }[]","feedbackStatsMap: Map<string, { count: number; averageValue: number }> | null","results: AgentSummary[]","contentObj: Record<string, unknown>","ContentType","Outcome","satiFilter: Record<string, unknown>","knownIdentity: AgentIdentity | null","feedbacks: Feedback[]","schema"],"sources":["../src/adapters.ts","../src/transaction-handle.ts","../src/errors.ts","../src/agent.ts","../src/feedback-cache.ts","../src/sdk.ts"],"sourcesContent":["/**\n * Data format converters between SATI SDK types and agent0-sdk types.\n *\n * These functions bridge the gap between SATI's Solana-native data model\n * and agent0-sdk's EVM-centric interfaces.\n */\n\nimport type {\n AgentSummary,\n Feedback,\n FeedbackIdTuple,\n RegistrationFile as Agent0RegistrationFile,\n Endpoint as Agent0Endpoint,\n} from \"agent0-sdk\";\nimport { EndpointType, TrustModel } from \"agent0-sdk\";\nimport type { AgentIdentity } from \"@cascade-fyi/sati-sdk\";\nimport type { RegistrationFile as SatiRegistrationFile, Endpoint as SatiEndpoint } from \"@cascade-fyi/sati-sdk\";\n\n/** CAIP-2 chain references for Solana networks */\nexport const SOLANA_CAIP2_CHAINS: Record<string, string> = {\n mainnet: \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n devnet: \"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1\",\n localnet: \"solana:localnet\",\n};\n\n/**\n * Format a SATI agent as a CAIP-2 compatible AgentId string.\n *\n * Format: `solana:<chainRef>:<mintAddress>`\n */\nexport function formatSatiAgentId(mint: string, chain: string): string {\n return `${chain}:${mint}`;\n}\n\n/**\n * Parse a SATI CAIP-2 AgentId back to a mint address.\n * Returns null if the agentId is not a Solana agent.\n *\n * Expected format: `solana:<chainRef>:<mintAddress>`\n */\nexport function parseSatiAgentId(agentId: string): string | null {\n if (!agentId.startsWith(\"solana:\")) return null;\n const parts = agentId.split(\":\");\n if (parts.length !== 3) return null;\n return parts[2];\n}\n\n// ============================================================================\n// Endpoint converters\n// ============================================================================\n\nconst SATI_TO_AGENT0_TYPE: Record<string, EndpointType> = {\n MCP: EndpointType.MCP,\n A2A: EndpointType.A2A,\n ENS: EndpointType.ENS,\n DID: EndpointType.DID,\n AGENTWALLET: EndpointType.WALLET,\n WALLET: EndpointType.WALLET,\n OASF: EndpointType.OASF,\n};\n\nconst AGENT0_TO_SATI_NAME: Record<string, string> = {\n [EndpointType.MCP]: \"MCP\",\n [EndpointType.A2A]: \"A2A\",\n [EndpointType.ENS]: \"ENS\",\n [EndpointType.DID]: \"DID\",\n [EndpointType.WALLET]: \"agentWallet\",\n [EndpointType.OASF]: \"OASF\",\n};\n\n/**\n * Convert SATI endpoints (ERC-8004 format) to agent0 endpoint format.\n */\nexport function toAgent0Endpoints(satiEndpoints: SatiEndpoint[]): Agent0Endpoint[] {\n return satiEndpoints.map((ep) => {\n const meta: Record<string, unknown> = {};\n if (ep.version) meta.version = ep.version;\n if (ep.mcpTools?.length) meta.mcpTools = ep.mcpTools;\n if (ep.mcpPrompts?.length) meta.mcpPrompts = ep.mcpPrompts;\n if (ep.mcpResources?.length) meta.mcpResources = ep.mcpResources;\n if (ep.a2aSkills?.length) meta.a2aSkills = ep.a2aSkills;\n if (ep.skills?.length) meta.skills = ep.skills;\n if (ep.domains?.length) meta.domains = ep.domains;\n return {\n type: SATI_TO_AGENT0_TYPE[ep.name.toUpperCase()] ?? (ep.name as EndpointType),\n value: ep.endpoint,\n meta: Object.keys(meta).length > 0 ? meta : undefined,\n };\n });\n}\n\n/**\n * Convert agent0 endpoints to SATI registration file endpoint format.\n */\nexport function fromAgent0Endpoints(agent0Endpoints: Agent0Endpoint[]): SatiEndpoint[] {\n return agent0Endpoints.map((ep) => {\n const result: SatiEndpoint = {\n name: AGENT0_TO_SATI_NAME[ep.type] ?? ep.type,\n endpoint: ep.value,\n version: ep.meta?.version as string | undefined,\n };\n if (ep.meta?.mcpTools) result.mcpTools = ep.meta.mcpTools as string[];\n if (ep.meta?.mcpPrompts) result.mcpPrompts = ep.meta.mcpPrompts as string[];\n if (ep.meta?.mcpResources) result.mcpResources = ep.meta.mcpResources as string[];\n if (ep.meta?.a2aSkills) result.a2aSkills = ep.meta.a2aSkills as string[];\n if (ep.meta?.skills) result.skills = ep.meta.skills as string[];\n if (ep.meta?.domains) result.domains = ep.meta.domains as string[];\n return result;\n });\n}\n\n// ============================================================================\n// AgentSummary converter\n// ============================================================================\n\n/**\n * Convert a SATI AgentIdentity + optional registration file to agent0 AgentSummary.\n *\n * @param identity - On-chain agent identity\n * @param chain - CAIP-2 chain reference (e.g. \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\")\n * @param regFile - Off-chain registration file (optional)\n * @param feedbackStats - Pre-computed feedback stats (optional, from includeFeedbackStats)\n */\nexport function toAgentSummary(\n identity: AgentIdentity,\n chain: string,\n regFile?: SatiRegistrationFile | null,\n feedbackStats?: { count: number; averageValue: number } | null,\n): AgentSummary {\n const endpoints = regFile?.endpoints ?? [];\n\n const mcpEp = endpoints.find((e) => e.name.toUpperCase() === \"MCP\");\n const a2aEp = endpoints.find((e) => e.name.toUpperCase() === \"A2A\");\n const oasfEp = endpoints.find((e) => e.name.toUpperCase() === \"OASF\");\n const ensEp = endpoints.find((e) => e.name.toUpperCase() === \"ENS\");\n const didEp = endpoints.find((e) => e.name.toUpperCase() === \"DID\");\n const walletEp = endpoints.find((e) => e.name.toUpperCase() === \"AGENTWALLET\" || e.name.toUpperCase() === \"WALLET\");\n const webEp = endpoints.find((e) => e.name.toUpperCase() === \"WEB\");\n\n return {\n chainId: 0,\n agentId: formatSatiAgentId(identity.mint, chain),\n name: identity.name,\n image: regFile?.image,\n description: regFile?.description ?? \"\",\n owners: [identity.owner],\n operators: [],\n mcp: mcpEp?.endpoint,\n a2a: a2aEp?.endpoint,\n web: webEp?.endpoint,\n ens: ensEp?.endpoint,\n did: didEp?.endpoint,\n walletAddress: walletEp?.endpoint,\n supportedTrusts: regFile?.supportedTrust ?? [],\n mcpTools: mcpEp?.mcpTools ?? [],\n mcpPrompts: mcpEp?.mcpPrompts ?? [],\n mcpResources: mcpEp?.mcpResources ?? [],\n a2aSkills: a2aEp?.a2aSkills ?? [],\n oasfSkills: oasfEp?.skills ?? [],\n oasfDomains: oasfEp?.domains ?? [],\n active: regFile?.active ?? true,\n x402support: regFile?.x402support ?? false,\n agentURI: identity.uri,\n agentURIType: identity.uri ? detectURIType(identity.uri) : undefined,\n feedbackCount: feedbackStats?.count,\n averageValue: feedbackStats?.averageValue,\n extras: {},\n };\n}\n\n/** Detect URI type from prefix. */\nfunction detectURIType(uri: string): string {\n if (uri.startsWith(\"ipfs://\") || uri.includes(\"/ipfs/\")) return \"ipfs\";\n if (uri.startsWith(\"ar://\") || uri.includes(\"arweave.net\")) return \"arweave\";\n if (uri.startsWith(\"https://\") || uri.startsWith(\"http://\")) return \"https\";\n return \"unknown\";\n}\n\n// ============================================================================\n// RegistrationFile converters\n// ============================================================================\n\n/**\n * Convert a SATI registration file to agent0 RegistrationFile format.\n *\n * @param satiFile - SATI registration file\n * @param identity - On-chain agent identity (optional)\n * @param chain - CAIP-2 chain reference (required when identity is provided)\n */\nexport function toAgent0RegistrationFile(\n satiFile: SatiRegistrationFile,\n identity?: AgentIdentity,\n chain?: string,\n): Agent0RegistrationFile {\n const endpoints = toAgent0Endpoints(satiFile.endpoints ?? []);\n const trustModels: (TrustModel | string)[] = (satiFile.supportedTrust ?? []).map((t) => {\n if (t === \"reputation\") return TrustModel.REPUTATION;\n if (t === \"crypto-economic\") return TrustModel.CRYPTO_ECONOMIC;\n if (t === \"tee-attestation\") return TrustModel.TEE_ATTESTATION;\n return t;\n });\n\n return {\n agentId: identity && chain ? formatSatiAgentId(identity.mint, chain) : undefined,\n agentURI: identity?.uri,\n name: satiFile.name,\n description: satiFile.description,\n image: satiFile.image,\n endpoints,\n trustModels,\n owners: identity ? [identity.owner] : [],\n operators: [],\n active: satiFile.active ?? true,\n x402support: satiFile.x402support ?? false,\n metadata: {},\n updatedAt: Math.floor(Date.now() / 1000),\n };\n}\n\n/**\n * Convert agent0 RegistrationFile back to SATI registration file params.\n */\nexport function fromAgent0RegistrationFile(agent0File: Agent0RegistrationFile): Omit<\n SatiRegistrationFile,\n \"type\" | \"properties\"\n> & {\n name: string;\n description: string;\n image: string;\n} {\n const endpoints = fromAgent0Endpoints(agent0File.endpoints);\n const supportedTrust = agent0File.trustModels\n .map((t) => {\n if (t === TrustModel.REPUTATION) return \"reputation\" as const;\n if (t === TrustModel.CRYPTO_ECONOMIC) return \"crypto-economic\" as const;\n if (t === TrustModel.TEE_ATTESTATION) return \"tee-attestation\" as const;\n return null;\n })\n .filter((t): t is NonNullable<typeof t> => t !== null);\n\n return {\n name: agent0File.name,\n description: agent0File.description,\n image: agent0File.image ?? \"\",\n endpoints,\n supportedTrust,\n active: agent0File.active,\n x402support: agent0File.x402support,\n };\n}\n\n// ============================================================================\n// Feedback converter\n// ============================================================================\n\n/**\n * Convert SATI feedback attestation data to agent0 Feedback format.\n *\n * SATI stores feedback as compressed attestations with:\n * - outcome (always Neutral for FeedbackPublicV1)\n * - content JSON with value, tag1, tag2, endpoint\n *\n * agent0-sdk expects the Feedback interface with value, tags, endpoint, etc.\n */\nexport function toFeedback(opts: {\n agentMint: string;\n chain: string;\n reviewer: string;\n feedbackIndex: number;\n content: {\n value?: number;\n tag1?: string;\n tag2?: string;\n endpoint?: string;\n text?: string;\n context?: Record<string, unknown>;\n };\n txSignature?: string;\n createdAt?: number;\n /** SATI on-chain outcome (0=Negative, 1=Neutral, 2=Positive) */\n outcome?: number;\n}): Feedback {\n const agentId = formatSatiAgentId(opts.agentMint, opts.chain);\n const tags: string[] = [];\n if (opts.content.tag1) tags.push(opts.content.tag1);\n if (opts.content.tag2) tags.push(opts.content.tag2);\n\n const id: FeedbackIdTuple = [agentId, opts.reviewer, opts.feedbackIndex];\n\n const context: Record<string, unknown> = { ...opts.content.context };\n if (opts.outcome !== undefined) {\n context.outcome = opts.outcome;\n }\n\n return {\n id,\n agentId,\n reviewer: opts.reviewer,\n txHash: opts.txSignature,\n value: opts.content.value,\n tags,\n endpoint: opts.content.endpoint,\n text: opts.content.text,\n context: Object.keys(context).length > 0 ? context : opts.content.context,\n createdAt: opts.createdAt ?? Math.floor(Date.now() / 1000),\n answers: [],\n isRevoked: false,\n };\n}\n","/**\n * Solana transaction handle - pattern-compatible with agent0-sdk's TransactionHandle.\n *\n * Key differences from agent0-sdk's TransactionHandle:\n * - `hash` is a base58 Solana signature (not EVM hex)\n * - `waitMined()`/`waitConfirmed()` resolve immediately since Solana's\n * `sendAndConfirmTransaction` already waits for confirmation\n */\n\n/**\n * Solana transaction receipt.\n */\nexport interface SolanaReceipt {\n /** Transaction signature (base58) */\n signature: string;\n}\n\n/**\n * Result from awaiting a Solana transaction.\n */\nexport interface SolanaTransactionResult<T> {\n receipt: SolanaReceipt;\n result: T;\n}\n\n/**\n * Solana-compatible transaction handle.\n *\n * Mirrors agent0-sdk's `TransactionHandle<T>` API shape:\n * - `.hash` - transaction identifier\n * - `.waitMined()` - await confirmation and get result\n * - `.waitConfirmed()` - alias for waitMined\n *\n * On Solana, transactions are already confirmed when the SDK returns,\n * so both methods resolve immediately with the pre-computed result.\n *\n * @example\n * ```typescript\n * const handle = await sdk.giveFeedback(agentId, 85, \"quality\");\n * const { result } = await handle.waitMined();\n * console.log(result.value); // 85\n * console.log(handle.hash); // base58 signature\n * ```\n */\nexport class SolanaTransactionHandle<T> {\n /** Transaction signature (base58). Named `hash` for agent0-sdk compatibility. */\n readonly hash: string;\n\n constructor(\n signature: string,\n private readonly _result: T,\n ) {\n this.hash = signature;\n }\n\n /** Resolves immediately - Solana txs are confirmed before the SDK returns. */\n async waitMined(): Promise<SolanaTransactionResult<T>> {\n return { receipt: { signature: this.hash }, result: this._result };\n }\n\n /** Alias for waitMined. */\n async waitConfirmed(): Promise<SolanaTransactionResult<T>> {\n return this.waitMined();\n }\n}\n","/**\n * Typed error classes for the SATI Agent0 SDK.\n *\n * All errors extend `SatiError` which carries a `code` string for\n * programmatic matching. Use `instanceof` for typed catch handling.\n */\n\n/**\n * Base error for all SATI SDK errors.\n */\nexport class SatiError extends Error {\n constructor(\n readonly code: string,\n message: string,\n options?: ErrorOptions,\n ) {\n super(message, options);\n this.name = \"SatiError\";\n }\n}\n\n/**\n * Agent not found on-chain.\n */\nexport class AgentNotFoundError extends SatiError {\n constructor(agentId: string) {\n super(\"AGENT_NOT_FOUND\", `Agent not found: ${agentId}`);\n this.name = \"AgentNotFoundError\";\n }\n}\n\n/**\n * SDK is in read-only mode (no signer or transactionSender configured).\n */\nexport class ReadOnlyError extends SatiError {\n constructor(operation?: string) {\n const msg = operation\n ? `${operation} requires a signer or transactionSender. Initialize SatiSDK with one for write operations.`\n : \"This operation requires a signer or transactionSender. Initialize SatiSDK with one for write operations.\";\n super(\"READ_ONLY\", msg);\n this.name = \"ReadOnlyError\";\n }\n}\n\n/**\n * Operation requires a KeyPairSigner specifically (not just any write access).\n */\nexport class SignerRequiredError extends SatiError {\n constructor(operation?: string) {\n const msg = operation\n ? `${operation} requires a KeyPairSigner. Initialize SatiSDK with a signer for server-side write operations.`\n : \"This operation requires a KeyPairSigner. Initialize SatiSDK with a signer for server-side write operations.\";\n super(\"SIGNER_REQUIRED\", msg);\n this.name = \"SignerRequiredError\";\n }\n}\n\n/**\n * Required SAS schema is not deployed on the configured network.\n */\nexport class SchemaNotDeployedError extends SatiError {\n constructor(schema: string, network?: string) {\n const msg = network\n ? `${schema} schema not deployed on ${network}. Deploy schemas first.`\n : `${schema} schema not deployed on this network. Deploy schemas first.`;\n super(\"SCHEMA_NOT_DEPLOYED\", msg);\n this.name = \"SchemaNotDeployedError\";\n }\n}\n\n/**\n * Invalid SATI agent ID format. Expected `solana:<chainRef>:<mintAddress>`.\n */\nexport class InvalidAgentIdError extends SatiError {\n constructor(agentId: string) {\n super(\"INVALID_AGENT_ID\", `Invalid SATI agent ID: ${agentId}. Expected format: solana:<chainRef>:<mintAddress>`);\n this.name = \"InvalidAgentIdError\";\n }\n}\n\n/**\n * Operation is not supported on SATI.\n */\nexport class UnsupportedOperationError extends SatiError {\n constructor(operation: string) {\n super(\"UNSUPPORTED_OPERATION\", `${operation} is not supported on SATI`);\n this.name = \"UnsupportedOperationError\";\n }\n}\n","/**\n * Agent0-compatible agent wrapper backed by SATI infrastructure.\n *\n * Mirrors agent0-sdk's `Agent` class: fluent builders for endpoints,\n * metadata, trust models, and registration file management.\n */\n\nimport type { RegistrationFile, Endpoint, AgentId, URI, Address } from \"agent0-sdk\";\nimport { EndpointType, TrustModel, EndpointCrawler } from \"agent0-sdk\";\nimport {\n createPinataUploader,\n createSatiUploader,\n getRegisterAgentInstructionAsync,\n findRegistryConfigPda,\n fetchRegistryConfig,\n findAssociatedTokenAddress,\n findAgentIndexPda,\n type AgentIdentity,\n} from \"@cascade-fyi/sati-sdk\";\nimport { address as solAddress, generateKeyPairSigner, type TransactionSigner } from \"@solana/kit\";\nimport {\n getUpdateTokenMetadataFieldInstruction,\n tokenMetadataField,\n getTransferInstruction,\n} from \"@solana-program/token-2022\";\nimport { getCreateAssociatedTokenIdempotentInstruction } from \"@solana-program/token-2022\";\nimport type { SatiSDK } from \"./sdk.js\";\nimport type { WriteAccess } from \"./types.js\";\nimport { formatSatiAgentId, fromAgent0RegistrationFile } from \"./adapters.js\";\nimport { TOKEN_2022_PROGRAM_ADDRESS } from \"@cascade-fyi/sati-sdk\";\nimport { SolanaTransactionHandle } from \"./transaction-handle.js\";\nimport { SatiError, AgentNotFoundError, ReadOnlyError } from \"./errors.js\";\n\n/**\n * Agent0-compatible agent class backed by SATI's Solana infrastructure.\n *\n * Manages an in-memory registration file that can be flushed to chain\n * via `registerIPFS()`.\n */\nexport class SatiAgent {\n private _registrationFile: RegistrationFile;\n private _endpointCrawler: EndpointCrawler;\n private _identity: AgentIdentity | undefined;\n\n private readonly _sdk: SatiSDK;\n\n constructor(sdk: SatiSDK, registrationFile: RegistrationFile) {\n this._sdk = sdk;\n this._registrationFile = registrationFile;\n this._endpointCrawler = new EndpointCrawler(5000);\n }\n\n /** @internal Access the underlying SatiSDK instance. */\n get sdk(): SatiSDK {\n return this._sdk;\n }\n\n /**\n * Create a new agent in memory (not yet registered on-chain).\n * @internal Called by SatiSDK.createAgent()\n */\n static create(sdk: SatiSDK, name: string, description: string, image?: URI): SatiAgent {\n const registrationFile: RegistrationFile = {\n name,\n description,\n image,\n endpoints: [],\n trustModels: [TrustModel.REPUTATION],\n owners: [],\n operators: [],\n active: false,\n x402support: false,\n metadata: {},\n updatedAt: Math.floor(Date.now() / 1000),\n };\n return new SatiAgent(sdk, registrationFile);\n }\n\n /**\n * Reconstruct an agent from on-chain identity and registration file.\n * @internal Called by SatiSDK.loadAgent()\n */\n static fromIdentity(sdk: SatiSDK, identity: AgentIdentity, registrationFile: RegistrationFile): SatiAgent {\n const agent = new SatiAgent(sdk, registrationFile);\n agent._identity = identity;\n agent._registrationFile.agentId = formatSatiAgentId(identity.mint, sdk.chain);\n agent._registrationFile.agentURI = identity.uri;\n return agent;\n }\n\n // =========================================================================\n // Read-only properties (mirrors agent0-sdk Agent)\n // =========================================================================\n\n get agentId(): AgentId | undefined {\n return this._registrationFile.agentId;\n }\n\n get agentURI(): URI | undefined {\n return this._registrationFile.agentURI;\n }\n\n get name(): string {\n return this._registrationFile.name;\n }\n\n get description(): string {\n return this._registrationFile.description;\n }\n\n get image(): URI | undefined {\n return this._registrationFile.image;\n }\n\n get mcpEndpoint(): string | undefined {\n return this._registrationFile.endpoints.find((e) => e.type === EndpointType.MCP)?.value;\n }\n\n get a2aEndpoint(): string | undefined {\n return this._registrationFile.endpoints.find((e) => e.type === EndpointType.A2A)?.value;\n }\n\n get walletAddress(): Address | undefined {\n return this._registrationFile.walletAddress;\n }\n\n /** SATI-specific: the on-chain agent identity (available after registration). */\n get identity(): AgentIdentity | undefined {\n return this._identity;\n }\n\n get ensEndpoint(): string | undefined {\n return this._registrationFile.endpoints.find((e) => e.type === EndpointType.ENS)?.value;\n }\n\n get didEndpoint(): string | undefined {\n return this._registrationFile.endpoints.find((e) => e.type === EndpointType.DID)?.value;\n }\n\n get mcpTools(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.MCP);\n return (ep?.meta?.mcpTools as string[]) ?? [];\n }\n\n get mcpPrompts(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.MCP);\n return (ep?.meta?.mcpPrompts as string[]) ?? [];\n }\n\n get mcpResources(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.MCP);\n return (ep?.meta?.mcpResources as string[]) ?? [];\n }\n\n get a2aSkills(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.A2A);\n return (ep?.meta?.a2aSkills as string[]) ?? [];\n }\n\n get oasfSkills(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.OASF);\n return (ep?.meta?.skills as string[]) ?? [];\n }\n\n get oasfDomains(): string[] {\n const ep = this._registrationFile.endpoints.find((e) => e.type === EndpointType.OASF);\n return (ep?.meta?.domains as string[]) ?? [];\n }\n\n // =========================================================================\n // Endpoint management (mirrors agent0-sdk Agent)\n // =========================================================================\n\n /**\n * Set MCP endpoint. Auto-fetches capabilities by default.\n */\n async setMCP(endpoint: string, version = \"2025-06-18\", autoFetch = true): Promise<this> {\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => ep.type !== EndpointType.MCP);\n\n const meta: Record<string, unknown> = { version };\n if (autoFetch) {\n try {\n const capabilities = await this._endpointCrawler.fetchMcpCapabilities(endpoint);\n if (capabilities) {\n if (capabilities.mcpTools) meta.mcpTools = capabilities.mcpTools;\n if (capabilities.mcpPrompts) meta.mcpPrompts = capabilities.mcpPrompts;\n if (capabilities.mcpResources) meta.mcpResources = capabilities.mcpResources;\n }\n } catch {\n // Soft fail - continue without capabilities\n }\n }\n\n this._registrationFile.endpoints.push({\n type: EndpointType.MCP,\n value: endpoint,\n meta,\n });\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Set A2A endpoint. Auto-fetches capabilities by default.\n */\n async setA2A(agentcard: string, version = \"0.30\", autoFetch = true): Promise<this> {\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => ep.type !== EndpointType.A2A);\n\n const meta: Record<string, unknown> = { version };\n if (autoFetch) {\n try {\n const capabilities = await this._endpointCrawler.fetchA2aCapabilities(agentcard);\n if (capabilities?.a2aSkills) {\n meta.a2aSkills = capabilities.a2aSkills;\n }\n } catch {\n // Soft fail - continue without capabilities\n }\n }\n\n this._registrationFile.endpoints.push({\n type: EndpointType.A2A,\n value: agentcard,\n meta,\n });\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Set ENS endpoint.\n */\n setENS(name: string, version = \"1.0\"): this {\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => ep.type !== EndpointType.ENS);\n this._registrationFile.endpoints.push({\n type: EndpointType.ENS,\n value: name,\n meta: { version },\n });\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Remove endpoint(s).\n */\n removeEndpoint(opts?: { type?: EndpointType; value?: string }): this {\n if (!opts || (opts.type === undefined && opts.value === undefined)) {\n this._registrationFile.endpoints = [];\n } else {\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => {\n const typeMatches = opts.type === undefined || ep.type === opts.type;\n const valueMatches = opts.value === undefined || ep.value === opts.value;\n return !(typeMatches && valueMatches);\n });\n }\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Remove all endpoints (alias for removeEndpoint() with no args).\n */\n removeEndpoints(): this {\n return this.removeEndpoint();\n }\n\n // =========================================================================\n // Wallet management (mirrors agent0-sdk Agent)\n // =========================================================================\n\n /**\n * Get wallet address from the registration file.\n */\n getWallet(): Address | undefined {\n return this._registrationFile.walletAddress;\n }\n\n /**\n * Set wallet address and add a WALLET endpoint.\n * In-memory only - call registerIPFS() or registerHTTP() to persist on-chain.\n */\n setWallet(addr: Address): this {\n this._registrationFile.walletAddress = addr;\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => ep.type !== EndpointType.WALLET);\n this._registrationFile.endpoints.push({\n type: EndpointType.WALLET,\n value: addr,\n });\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Remove wallet address and wallet endpoint.\n */\n unsetWallet(): this {\n this._registrationFile.walletAddress = undefined;\n this._registrationFile.endpoints = this._registrationFile.endpoints.filter((ep) => ep.type !== EndpointType.WALLET);\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n // =========================================================================\n // OASF skills and domains (mirrors agent0-sdk Agent)\n // =========================================================================\n\n addSkill(slug: string): this {\n const oasfEp = this._getOrCreateOasfEndpoint();\n if (!oasfEp.meta) oasfEp.meta = {};\n if (!Array.isArray(oasfEp.meta.skills)) oasfEp.meta.skills = [];\n const skills = oasfEp.meta.skills as string[];\n if (!skills.includes(slug)) skills.push(slug);\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n removeSkill(slug: string): this {\n const oasfEp = this._registrationFile.endpoints.find((ep) => ep.type === EndpointType.OASF);\n if (oasfEp?.meta) {\n const skills = oasfEp.meta.skills;\n if (Array.isArray(skills)) {\n const idx = skills.indexOf(slug);\n if (idx !== -1) skills.splice(idx, 1);\n }\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n }\n return this;\n }\n\n addDomain(slug: string): this {\n const oasfEp = this._getOrCreateOasfEndpoint();\n if (!oasfEp.meta) oasfEp.meta = {};\n if (!Array.isArray(oasfEp.meta.domains)) oasfEp.meta.domains = [];\n const domains = oasfEp.meta.domains as string[];\n if (!domains.includes(slug)) domains.push(slug);\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n removeDomain(slug: string): this {\n const oasfEp = this._registrationFile.endpoints.find((ep) => ep.type === EndpointType.OASF);\n if (oasfEp?.meta) {\n const domains = oasfEp.meta.domains;\n if (Array.isArray(domains)) {\n const idx = domains.indexOf(slug);\n if (idx !== -1) domains.splice(idx, 1);\n }\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n }\n return this;\n }\n\n // =========================================================================\n // Status and trust (mirrors agent0-sdk Agent)\n // =========================================================================\n\n setActive(active: boolean): this {\n this._registrationFile.active = active;\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n setX402Support(x402Support: boolean): this {\n this._registrationFile.x402support = x402Support;\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n setTrust(reputation = false, cryptoEconomic = false, teeAttestation = false): this {\n const trustModels: (TrustModel | string)[] = [];\n if (reputation) trustModels.push(TrustModel.REPUTATION);\n if (cryptoEconomic) trustModels.push(TrustModel.CRYPTO_ECONOMIC);\n if (teeAttestation) trustModels.push(TrustModel.TEE_ATTESTATION);\n this._registrationFile.trustModels = trustModels;\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n // =========================================================================\n // Metadata (mirrors agent0-sdk Agent)\n // =========================================================================\n\n setMetadata(kv: Record<string, unknown>): this {\n Object.assign(this._registrationFile.metadata, kv);\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n getMetadata(): Record<string, unknown> {\n return { ...this._registrationFile.metadata };\n }\n\n delMetadata(key: string): this {\n if (key in this._registrationFile.metadata) {\n delete this._registrationFile.metadata[key];\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n }\n return this;\n }\n\n /**\n * Update basic agent information.\n */\n updateInfo(name?: string, description?: string, image?: URI): this {\n if (name !== undefined) this._registrationFile.name = name;\n if (description !== undefined) this._registrationFile.description = description;\n if (image !== undefined) this._registrationFile.image = image;\n this._registrationFile.updatedAt = Math.floor(Date.now() / 1000);\n return this;\n }\n\n /**\n * Get the current in-memory registration file.\n */\n getRegistrationFile(): RegistrationFile {\n return this._registrationFile;\n }\n\n // =========================================================================\n // On-chain operations (SATI-backed)\n // =========================================================================\n\n /**\n * Register agent on-chain with IPFS.\n *\n * Converts the in-memory agent0 registration file to SATI format,\n * uploads to IPFS via Pinata, then mints the agent NFT on Solana.\n *\n * @throws SatiError if image URL is not set or pinataJwt is not configured\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async registerIPFS(): Promise<SolanaTransactionHandle<RegistrationFile>> {\n if (this._identity) {\n throw new SatiError(\"ALREADY_REGISTERED\", \"Agent is already registered on-chain. Use updateIPFS() instead.\");\n }\n if (!this._registrationFile.image) {\n throw new SatiError(\n \"IMAGE_REQUIRED\",\n \"Image URL is required for registration. Set it via updateInfo() or createAgent().\",\n );\n }\n\n // Convert agent0 registration file to SATI format and upload to IPFS\n const satiParams = fromAgent0RegistrationFile(this._registrationFile);\n const pinataJwt = this._sdk.config.pinataJwt;\n const uploader = pinataJwt ? createPinataUploader(pinataJwt) : createSatiUploader();\n const uri = await this._sdk.sati.uploadRegistrationFile(satiParams, uploader);\n\n return this._registerOnChain(uri);\n }\n\n /**\n * Register agent on-chain with an HTTP URI.\n *\n * Same as registerIPFS but takes a URI directly instead of uploading to IPFS.\n * Use this when you already have a hosted registration file.\n *\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async registerHTTP(agentUri: URI): Promise<SolanaTransactionHandle<RegistrationFile>> {\n if (this._identity) {\n throw new SatiError(\"ALREADY_REGISTERED\", \"Agent is already registered on-chain. Use updateHTTP() instead.\");\n }\n return this._registerOnChain(agentUri);\n }\n\n /**\n * Re-upload the current in-memory registration file to IPFS and update the on-chain URI.\n *\n * Use after modifying the agent via fluent builders (setMCP, addSkill, setMetadata, etc.)\n * to persist changes on-chain.\n *\n * @throws AgentNotFoundError if agent is not registered on-chain\n * @throws SatiError if pinataJwt is not configured\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async updateIPFS(): Promise<SolanaTransactionHandle<RegistrationFile>> {\n if (!this._identity) {\n throw new AgentNotFoundError(\"Agent not registered on-chain. Call registerIPFS() first.\");\n }\n\n const satiParams = fromAgent0RegistrationFile(this._registrationFile);\n const pinataJwt = this._sdk.config.pinataJwt;\n const uploader = pinataJwt ? createPinataUploader(pinataJwt) : createSatiUploader();\n const newUri = await this._sdk.sati.uploadRegistrationFile(satiParams, uploader);\n return this.setAgentURI(newUri);\n }\n\n /**\n * Update the on-chain URI to point to a new HTTP-hosted registration file.\n *\n * @throws AgentNotFoundError if agent is not registered on-chain\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async updateHTTP(agentUri: URI): Promise<SolanaTransactionHandle<RegistrationFile>> {\n if (!this._identity) {\n throw new AgentNotFoundError(\"Agent not registered on-chain. Call registerHTTP() first.\");\n }\n return this.setAgentURI(agentUri);\n }\n\n /**\n * Update the agent's on-chain URI (metadata pointer).\n *\n * @throws AgentNotFoundError if agent is not registered on-chain\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async setAgentURI(agentURI: URI): Promise<SolanaTransactionHandle<RegistrationFile>> {\n if (!this._identity) {\n throw new AgentNotFoundError(\"Agent not registered on-chain. Call registerIPFS() or registerHTTP() first.\");\n }\n\n const access = this._requireWriteAccess(\"setAgentURI\");\n\n if (access.type === \"keypair\") {\n const result = await this._sdk.sati.updateAgentMetadata({\n payer: access.signer,\n owner: access.signer,\n mint: solAddress(this._identity.mint),\n updates: { uri: agentURI },\n });\n this._identity.uri = agentURI;\n this._registrationFile.agentURI = agentURI;\n return new SolanaTransactionHandle(result.signature, this._registrationFile);\n }\n\n // Sender path: build instruction and send via wallet\n const updateIx = getUpdateTokenMetadataFieldInstruction({\n metadata: this._identity.mint,\n updateAuthority: { address: solAddress(access.sender.address) } as TransactionSigner,\n field: tokenMetadataField(\"Uri\"),\n value: agentURI,\n });\n\n const signature = await access.sender.signAndSend([updateIx]);\n this._identity.uri = agentURI;\n this._registrationFile.agentURI = agentURI;\n return new SolanaTransactionHandle(signature, this._registrationFile);\n }\n\n /**\n * Transfer agent ownership to a new Solana address.\n *\n * @throws AgentNotFoundError if agent is not registered on-chain\n * @throws ReadOnlyError if SDK is in read-only mode\n */\n async transfer(\n newOwner: Address,\n ): Promise<SolanaTransactionHandle<{ txHash: string; from: string; to: string; agentId: AgentId | undefined }>> {\n if (!this._identity) {\n throw new AgentNotFoundError(\"Agent not registered on-chain. Call registerIPFS() or registerHTTP() first.\");\n }\n\n const access = this._requireWriteAccess(\"transfer\");\n\n if (access.type === \"keypair\") {\n const result = await this._sdk.sati.transferAgent({\n payer: access.signer,\n owner: access.signer,\n mint: this._identity.mint,\n newOwner: solAddress(newOwner),\n });\n return new SolanaTransactionHandle(result.signature, {\n txHash: result.signature,\n from: access.signer.address,\n to: newOwner,\n agentId: this.agentId,\n });\n }\n\n // Sender path: build ATA creation + transfer instructions\n const ownerAddr = solAddress(access.sender.address);\n const [sourceAta] = await findAssociatedTokenAddress(this._identity.mint, ownerAddr);\n const [destAta] = await findAssociatedTokenAddress(this._identity.mint, solAddress(newOwner));\n\n const createAtaIx = getCreateAssociatedTokenIdempotentInstruction({\n payer: { address: ownerAddr } as TransactionSigner,\n owner: solAddress(newOwner),\n mint: this._identity.mint,\n ata: destAta,\n tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,\n });\n\n const transferIx = getTransferInstruction({\n source: sourceAta,\n destination: destAta,\n authority: ownerAddr,\n amount: 1n,\n });\n\n const signature = await access.sender.signAndSend([createAtaIx, transferIx]);\n return new SolanaTransactionHandle(signature, {\n txHash: signature,\n from: access.sender.address,\n to: newOwner,\n agentId: this.agentId,\n });\n }\n\n // =========================================================================\n // Private helpers\n // =========================================================================\n\n private _requireWriteAccess(operation?: string): WriteAccess {\n if (this._sdk.config.signer) return { type: \"keypair\", signer: this._sdk.config.signer };\n if (this._sdk.config.transactionSender) return { type: \"sender\", sender: this._sdk.config.transactionSender };\n throw new ReadOnlyError(operation);\n }\n\n /**\n * Shared registration logic for registerIPFS/registerHTTP.\n * Supports both keypair and sender paths.\n */\n private async _registerOnChain(uri: string): Promise<SolanaTransactionHandle<RegistrationFile>> {\n const access = this._requireWriteAccess(\"registerAgent\");\n\n if (access.type === \"keypair\") {\n const result = await this._sdk.sati.registerAgent({\n payer: access.signer,\n name: this._registrationFile.name,\n uri,\n });\n this._storeIdentity(result.mint, access.signer.address, uri, result.memberNumber);\n return new SolanaTransactionHandle(result.signature, this._registrationFile);\n }\n\n // Sender path: build register instruction manually.\n // Retry on collision - concurrent registrations can race on memberNumber PDA.\n const agentMint = await generateKeyPairSigner();\n const rpc = this._sdk.sati.getRpc();\n const [registryConfigAddress] = await findRegistryConfigPda();\n const ownerAddress = solAddress(access.sender.address);\n const [agentTokenAccount] = await findAssociatedTokenAddress(agentMint.address, ownerAddress);\n\n const MAX_RETRIES = 3;\n const RETRY_DELAY_MS = 1500;\n let lastError: unknown;\n\n for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {\n try {\n const registryConfig = await fetchRegistryConfig(rpc, registryConfigAddress);\n const groupMint = registryConfig.data.groupMint;\n const memberNumber = registryConfig.data.totalAgents + 1n;\n const [agentIndex] = await findAgentIndexPda(memberNumber);\n\n const registerIx = await getRegisterAgentInstructionAsync({\n payer: { address: ownerAddress } as TransactionSigner,\n owner: ownerAddress,\n groupMint,\n agentMint,\n agentTokenAccount,\n agentIndex,\n name: this._registrationFile.name,\n symbol: \"\",\n uri,\n additionalMetadata: null,\n nonTransferable: false,\n });\n\n const signature = await access.sender.signAndSend([registerIx], [agentMint]);\n this._storeIdentity(agentMint.address, ownerAddress, uri, memberNumber);\n return new SolanaTransactionHandle(signature, this._registrationFile);\n } catch (error) {\n lastError = error;\n if (!isRegistrationCollisionError(error)) throw error;\n if (attempt < MAX_RETRIES - 1) {\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\n }\n }\n }\n\n throw new SatiError(\"REGISTRATION_FAILED\", `Registration failed after ${MAX_RETRIES} attempts`, {\n cause: lastError,\n });\n }\n\n private _storeIdentity(\n mint: import(\"@solana/kit\").Address,\n owner: import(\"@solana/kit\").Address,\n uri: string,\n memberNumber: bigint,\n ): void {\n this._identity = {\n mint,\n owner,\n name: this._registrationFile.name,\n uri,\n memberNumber,\n additionalMetadata: {},\n nonTransferable: false,\n };\n this._registrationFile.agentId = formatSatiAgentId(mint, this._sdk.chain);\n this._registrationFile.agentURI = uri;\n }\n\n private _getOrCreateOasfEndpoint(): Endpoint {\n const existing = this._registrationFile.endpoints.find((ep) => ep.type === EndpointType.OASF);\n if (existing) return existing;\n\n const oasfEndpoint: Endpoint = {\n type: EndpointType.OASF,\n value: \"https://github.com/agntcy/oasf/\",\n meta: { version: \"v0.8.0\", skills: [], domains: [] },\n };\n this._registrationFile.endpoints.push(oasfEndpoint);\n return oasfEndpoint;\n }\n}\n\n/** Detect PDA collision errors from concurrent registrations. */\nfunction isRegistrationCollisionError(error: unknown): boolean {\n const msg = error instanceof Error ? error.message : String(error);\n return msg.includes(\"already in use\") || msg.includes(\"already been initialized\") || msg.includes(\"0x0\");\n}\n","/**\n * Simple TTL cache for feedback query results.\n *\n * Reduces redundant RPC calls when the same feedback data is queried\n * multiple times in quick succession (e.g. listing then revoking,\n * or dashboard re-renders).\n *\n * Automatically invalidated after write operations (giveFeedback,\n * revokeFeedback, submitPreparedFeedback).\n */\n\ninterface CacheEntry<T> {\n data: T;\n expires: number;\n}\n\nexport class FeedbackCache {\n private cache = new Map<string, CacheEntry<unknown>>();\n\n constructor(private readonly ttlMs = 30_000) {}\n\n /** Get cached data or null if expired/missing. */\n get<T>(key: string): T | null {\n const entry = this.cache.get(key);\n if (!entry || Date.now() > entry.expires) {\n if (entry) this.cache.delete(key);\n return null;\n }\n return entry.data as T;\n }\n\n /** Store data with TTL. */\n set<T>(key: string, data: T): void {\n this.cache.set(key, { data, expires: Date.now() + this.ttlMs });\n }\n\n /** Invalidate a specific key, or all entries if no key given. */\n invalidate(key?: string): void {\n if (key) {\n this.cache.delete(key);\n } else {\n this.cache.clear();\n }\n }\n\n /** Build a cache key from schema and optional agent mint. */\n static cacheKey(sasSchema: string, agentMint?: string): string {\n return `${sasSchema}:${agentMint ?? \"*\"}`;\n }\n}\n","/**\n * Main SDK class for the SATI Agent0 adapter.\n *\n * Provides agent0-sdk compatible method signatures backed by SATI's\n * Solana infrastructure for agent identity, reputation, and attestation.\n */\n\nimport {\n Sati,\n loadDeployedConfig,\n fetchRegistrationFile as fetchSatiRegistrationFile,\n buildRegistrationFile as buildSatiRegistrationFile,\n Outcome,\n ContentType,\n serializeFeedback,\n zeroDataHash,\n buildCounterpartyMessage,\n findAssociatedTokenAddress,\n TOKEN_2022_PROGRAM_ADDRESS,\n type AgentIdentity,\n type SATISASConfig,\n type FeedbackData,\n type RegistrationFile as SatiRegistrationFile,\n} from \"@cascade-fyi/sati-sdk\";\nimport { signBytes, address as solAddress, getAddressDecoder } from \"@solana/kit\";\nimport { getCreateAssociatedTokenIdempotentInstruction, getTransferInstruction } from \"@solana-program/token-2022\";\nimport type {\n AgentSummary,\n Feedback,\n FeedbackFileInput,\n FeedbackSearchFilters,\n SearchFilters,\n AgentId,\n URI,\n Address,\n} from \"agent0-sdk\";\nimport type {\n SatiSDKConfig,\n SatiSearchOptions,\n SatiFeedbackSearchOptions,\n WriteAccess,\n PreparedFeedback,\n ValidationResult,\n SatiWarning,\n} from \"./types.js\";\nimport type { KeyPairSigner, TransactionSigner } from \"@solana/kit\";\nimport { SatiAgent } from \"./agent.js\";\nimport {\n SOLANA_CAIP2_CHAINS,\n parseSatiAgentId,\n toAgentSummary,\n toAgent0RegistrationFile,\n toFeedback,\n} from \"./adapters.js\";\nimport { SolanaTransactionHandle } from \"./transaction-handle.js\";\nimport { FeedbackCache } from \"./feedback-cache.js\";\nimport {\n SatiError,\n AgentNotFoundError,\n InvalidAgentIdError,\n ReadOnlyError,\n SignerRequiredError,\n SchemaNotDeployedError,\n UnsupportedOperationError,\n} from \"./errors.js\";\n\n/**\n * SATI Agent0 SDK - agent0-sdk compatible interface backed by Solana.\n *\n * Method signatures follow agent0-sdk's `SDK` class pattern. Write operations\n * return `SolanaTransactionHandle<T>` (compatible with agent0-sdk's\n * `TransactionHandle<T>` via `.hash`, `.waitMined()`, `.waitConfirmed()`).\n *\n * @example\n * ```typescript\n * import { SatiSDK } from \"@cascade-fyi/sati-agent0-sdk\";\n * import { generateKeyPairSigner } from \"@solana/kit\";\n *\n * const signer = await generateKeyPairSigner();\n * const sdk = new SatiSDK({\n * network: \"devnet\",\n * signer,\n * });\n *\n * const agent = sdk.createAgent(\"MyAgent\", \"An AI assistant\");\n * ```\n */\nexport class SatiSDK {\n private readonly _config: SatiSDKConfig;\n private readonly _sati: Sati;\n private readonly _sasConfig: SATISASConfig | null;\n private readonly _chain: string;\n private readonly _feedbackCache = new FeedbackCache();\n\n constructor(config: SatiSDKConfig) {\n this._config = config;\n this._sati = new Sati({\n network: config.network,\n rpcUrl: config.rpcUrl,\n photonRpcUrl: config.photonRpcUrl,\n });\n this._sasConfig = loadDeployedConfig(config.network);\n this._chain = SOLANA_CAIP2_CHAINS[config.network] ?? `solana:${config.network}`;\n }\n\n /** Get the SATI network. */\n get network(): SatiSDKConfig[\"network\"] {\n return this._config.network;\n }\n\n /**\n * Chain ID (0 for Solana - not an EVM chain).\n * Use `chain` property for the CAIP-2 identifier.\n */\n get chainId(): number {\n return 0;\n }\n\n /** Get the CAIP-2 chain reference. */\n get chain(): string {\n return this._chain;\n }\n\n /** True if SDK has no signer or transaction sender configured (read-only mode). */\n get isReadOnly(): boolean {\n return !this._config.signer && !this._config.transactionSender;\n }\n\n /**\n * Access the underlying SATI client for SATI-specific operations\n * not covered by the agent0-sdk interface (e.g. validations, compression).\n */\n get sati(): Sati {\n return this._sati;\n }\n\n /** @internal Access the SAS schema config. */\n get sasConfig(): SATISASConfig | null {\n return this._sasConfig;\n }\n\n // =========================================================================\n // Agent lifecycle (mirrors agent0-sdk SDK methods)\n // =========================================================================\n\n /**\n * Create a new agent (off-chain object in memory).\n * Call `agent.registerIPFS()` to register on-chain.\n */\n createAgent(name: string, description: string, image?: URI): SatiAgent {\n return SatiAgent.create(this, name, description, image);\n }\n\n /**\n * Load an existing agent by agent0-compatible AgentId.\n */\n async loadAgent(agentId: AgentId): Promise<SatiAgent> {\n const identity = await this._resolveIdentity(agentId);\n const regFile = await fetchSatiRegistrationFile(identity.uri);\n const fallback: SatiRegistrationFile =\n regFile ??\n buildSatiRegistrationFile({\n name: identity.name,\n description: \"\",\n image: \"https://placehold.co/256\",\n });\n const agent0RegFile = toAgent0RegistrationFile(fallback, identity, this._chain);\n return SatiAgent.fromIdentity(this, identity, agent0RegFile);\n }\n\n /**\n * Get agent summary (read-only).\n */\n async getAgent(agentId: AgentId): Promise<AgentSummary | null> {\n const mint = parseSatiAgentId(agentId);\n if (mint === null) return null;\n\n const identity = await this._sati.loadAgent(solAddress(mint));\n if (!identity) return null;\n\n const regFile = await fetchSatiRegistrationFile(identity.uri);\n return toAgentSummary(identity, this._chain, regFile);\n }\n\n /**\n * Search agents with filters.\n *\n * Fetches agents from on-chain registry and applies client-side filtering\n * against on-chain data and registration files.\n *\n * Supports most agent0-sdk SearchFilters. Unsupported filters (require indexer):\n * `keyword`, `registeredAtFrom/To`, `updatedAtFrom/To`, `hasMetadataKey`,\n * `metadataValue`, `operators`.\n *\n * Pass `includeFeedbackStats: true` in options to populate `feedbackCount` and\n * `averageValue` on results (slower - extra RPC calls per agent).\n * Automatically enabled when `filters.feedback` is set.\n *\n * Use `options.limit` and `options.offset` for pagination.\n */\n async searchAgents(filters?: SearchFilters, options?: SatiSearchOptions): Promise<AgentSummary[]> {\n const limit = options?.limit ?? 100;\n const offset = options?.offset;\n\n // Step 1: Fetch agents - use listAgentsByOwner when filtering by owners\n let agents: AgentIdentity[];\n if (filters?.owners?.length) {\n const ownerResults = await Promise.all(filters.owners.map((o) => this._sati.listAgentsByOwner(solAddress(o))));\n agents = ownerResults.flat();\n } else {\n agents = await this._sati.listAllAgents({ limit, offset });\n }\n\n // Step 2: Apply on-chain filters (cheap, no reg file needed)\n if (filters?.agentIds?.length) {\n const mintSet = new Set(\n filters.agentIds.map((id) => parseSatiAgentId(id)).filter((m): m is string => m !== null),\n );\n agents = agents.filter((a) => mintSet.has(a.mint));\n }\n if (filters?.name) {\n const lower = filters.name.toLowerCase();\n agents = agents.filter((a) => a.name.toLowerCase().includes(lower));\n }\n\n // Step 3: Determine if we need registration files\n const needsRegFile = !!(\n filters?.description ||\n filters?.active !== undefined ||\n filters?.hasMCP ||\n filters?.hasA2A ||\n filters?.hasOASF ||\n filters?.hasWeb ||\n filters?.hasEndpoints !== undefined ||\n filters?.hasRegistrationFile !== undefined ||\n filters?.x402support !== undefined ||\n filters?.supportedTrust?.length ||\n filters?.mcpTools?.length ||\n filters?.mcpPrompts?.length ||\n filters?.mcpResources?.length ||\n filters?.a2aSkills?.length ||\n filters?.oasfSkills?.length ||\n filters?.oasfDomains?.length ||\n filters?.walletAddress ||\n filters?.webContains ||\n filters?.mcpContains ||\n filters?.a2aContains ||\n filters?.ensContains ||\n filters?.didContains\n );\n\n const regFiles: (SatiRegistrationFile | null)[] = needsRegFile\n ? await Promise.all(agents.map((a) => fetchSatiRegistrationFile(a.uri)))\n : agents.map(() => null);\n\n // Step 4: Apply cheap filters FIRST (before feedback stats)\n const cheapFiltered: { identity: AgentIdentity; regFile: SatiRegistrationFile | null }[] = [];\n for (let i = 0; i < agents.length; i++) {\n const identity = agents[i];\n const regFile = regFiles[i];\n const endpoints = regFile?.endpoints ?? [];\n\n if (filters?.hasRegistrationFile === true && !regFile) continue;\n if (filters?.hasRegistrationFile === false && regFile) continue;\n if (filters?.description) {\n if (!regFile?.description?.toLowerCase().includes(filters.description.toLowerCase())) continue;\n }\n if (filters?.active !== undefined && (regFile?.active ?? true) !== filters.active) continue;\n if (filters?.x402support !== undefined && (regFile?.x402support ?? false) !== filters.x402support) continue;\n if (filters?.hasMCP && !endpoints.some((e) => e.name.toUpperCase() === \"MCP\")) continue;\n if (filters?.hasA2A && !endpoints.some((e) => e.name.toUpperCase() === \"A2A\")) continue;\n if (filters?.hasOASF && !endpoints.some((e) => e.name.toUpperCase() === \"OASF\")) continue;\n if (filters?.hasWeb && !endpoints.some((e) => e.name.toUpperCase() === \"WEB\")) continue;\n if (filters?.hasEndpoints === true && endpoints.length === 0) continue;\n if (filters?.mcpContains) {\n const ep = endpoints.find((e) => e.name.toUpperCase() === \"MCP\");\n if (!ep?.endpoint.includes(filters.mcpContains)) continue;\n }\n if (filters?.a2aContains) {\n const ep = endpoints.find((e) => e.name.toUpperCase() === \"A2A\");\n if (!ep?.endpoint.includes(filters.a2aContains)) continue;\n }\n if (filters?.ensContains) {\n const ep = endpoints.find((e) => e.name.toUpperCase() === \"ENS\");\n if (!ep?.endpoint.includes(filters.ensContains)) continue;\n }\n if (filters?.didContains) {\n const ep = endpoints.find((e) => e.name.toUpperCase() === \"DID\");\n if (!ep?.endpoint.includes(filters.didContains)) continue;\n }\n if (filters?.webContains) {\n const ep = endpoints.find((e) => e.name.toUpperCase() === \"WEB\");\n if (!ep?.endpoint.includes(filters.webContains)) continue;\n }\n if (filters?.walletAddress) {\n const walletEp = endpoints.find(\n (e) => e.name.toUpperCase() === \"AGENTWALLET\" || e.name.toUpperCase() === \"WALLET\",\n );\n if (!walletEp?.endpoint.includes(filters.walletAddress)) continue;\n }\n if (filters?.supportedTrust?.length) {\n const trusts = regFile?.supportedTrust ?? [];\n if (\n !filters.supportedTrust.every((t) =>\n trusts.includes(t as \"reputation\" | \"crypto-economic\" | \"tee-attestation\"),\n )\n )\n continue;\n }\n if (filters?.mcpTools?.length) {\n const tools = endpoints.find((e) => e.name.toUpperCase() === \"MCP\")?.mcpTools ?? [];\n if (!filters.mcpTools.some((t) => tools.includes(t))) continue;\n }\n if (filters?.mcpPrompts?.length) {\n const prompts = endpoints.find((e) => e.name.toUpperCase() === \"MCP\")?.mcpPrompts ?? [];\n if (!filters.mcpPrompts.some((t) => prompts.includes(t))) continue;\n }\n if (filters?.mcpResources?.length) {\n const resources = endpoints.find((e) => e.name.toUpperCase() === \"MCP\")?.mcpResources ?? [];\n if (!filters.mcpResources.some((t) => resources.includes(t))) continue;\n }\n if (filters?.a2aSkills?.length) {\n const skills = endpoints.find((e) => e.name.toUpperCase() === \"A2A\")?.a2aSkills ?? [];\n if (!filters.a2aSkills.some((t) => skills.includes(t))) continue;\n }\n if (filters?.oasfSkills?.length) {\n const skills = endpoints.find((e) => e.name.toUpperCase() === \"OASF\")?.skills ?? [];\n if (!filters.oasfSkills.some((t) => skills.includes(t))) continue;\n }\n if (filters?.oasfDomains?.length) {\n const domains = endpoints.find((e) => e.name.toUpperCase() === \"OASF\")?.domains ?? [];\n if (!filters.oasfDomains.some((t) => domains.includes(t))) continue;\n }\n\n cheapFiltered.push({ identity, regFile });\n }\n\n // Step 5: Fetch feedback stats ONLY for agents that passed cheap filters (lazy)\n const wantFeedbackStats = !!(options?.includeFeedbackStats || filters?.feedback);\n let feedbackStatsMap: Map<string, { count: number; averageValue: number }> | null = null;\n\n if (wantFeedbackStats && this._sasConfig && cheapFiltered.length > 0) {\n feedbackStatsMap = new Map();\n const schema = this._sasConfig.schemas.feedbackPublic ?? this._sasConfig.schemas.feedback;\n await Promise.all(\n cheapFiltered.map(async ({ identity }) => {\n try {\n const cacheKey = FeedbackCache.cacheKey(schema, identity.mint);\n const cached = this._feedbackCache.get<{ items: { data: FeedbackData }[] }>(cacheKey);\n const result = cached ?? (await this._sati.listFeedbacks({ sasSchema: schema, agentMint: identity.mint }));\n if (!cached) this._feedbackCache.set(cacheKey, result);\n\n const scores = result.items\n .map((item) => {\n const raw = this._parseContentJson(item.data.content, item.data.contentType);\n return raw?.score as number | undefined;\n })\n .filter((s): s is number => s !== undefined);\n const count = scores.length;\n const averageValue = count > 0 ? scores.reduce((a, b) => a + b, 0) / count : 0;\n feedbackStatsMap?.set(identity.mint, { count, averageValue });\n } catch (error) {\n this._warn({\n code: \"RPC_ERROR\",\n message: \"Failed to fetch feedback stats\",\n context: identity.mint,\n cause: error,\n });\n }\n }),\n );\n }\n\n // Step 6: Apply feedback filters and build results\n const results: AgentSummary[] = [];\n for (const { identity, regFile } of cheapFiltered) {\n if (filters?.feedback) {\n const fbStats = feedbackStatsMap?.get(identity.mint);\n const fb = filters.feedback;\n if (fb.hasFeedback === true && (!fbStats || fbStats.count === 0)) continue;\n if (fb.hasNoFeedback === true && fbStats && fbStats.count > 0) continue;\n if (fb.minValue !== undefined && (!fbStats || fbStats.averageValue < fb.minValue)) continue;\n if (fb.maxValue !== undefined && (!fbStats || fbStats.averageValue > fb.maxValue)) continue;\n if (fb.minCount !== undefined && (!fbStats || fbStats.count < fb.minCount)) continue;\n if (fb.maxCount !== undefined && (!fbStats || fbStats.count > fb.maxCount)) continue;\n }\n\n const stats = feedbackStatsMap?.get(identity.mint) ?? null;\n results.push(toAgentSummary(identity, this._chain, regFile, stats));\n }\n\n // Step 7: Sort\n const sortFields = options?.sort;\n if (sortFields?.length) {\n results.sort((a, b) => {\n for (const sortStr of sortFields) {\n const [field, dir] = sortStr.split(\":\");\n const mul = dir === \"asc\" ? 1 : -1;\n const aVal = (a as unknown as Record<string, unknown>)[field] ?? 0;\n const bVal = (b as unknown as Record<string, unknown>)[field] ?? 0;\n if (aVal !== bVal) return (aVal > bVal ? 1 : -1) * mul;\n }\n return 0;\n });\n }\n\n return results;\n }\n\n /**\n * Transfer agent ownership to a new Solana address.\n */\n async transferAgent(\n agentId: AgentId,\n newOwner: Address,\n ): Promise<SolanaTransactionHandle<{ txHash: string; from: string; to: string; agentId: AgentId }>> {\n const identity = await this._resolveIdentity(agentId);\n const access = this._requireWriteAccess(\"transferAgent\");\n\n if (access.type === \"keypair\") {\n const result = await this._sati.transferAgent({\n payer: access.signer,\n owner: access.signer,\n mint: identity.mint,\n newOwner: solAddress(newOwner),\n });\n return new SolanaTransactionHandle(result.signature, {\n txHash: result.signature,\n from: access.signer.address,\n to: newOwner,\n agentId,\n });\n }\n\n // Sender path: build ATA creation + transfer instructions\n const ownerAddr = solAddress(access.sender.address);\n const [sourceAta] = await findAssociatedTokenAddress(identity.mint, ownerAddr);\n const [destAta] = await findAssociatedTokenAddress(identity.mint, solAddress(newOwner));\n\n const createAtaIx = getCreateAssociatedTokenIdempotentInstruction({\n payer: { address: ownerAddr } as TransactionSigner,\n owner: solAddress(newOwner),\n mint: identity.mint,\n ata: destAta,\n tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,\n });\n\n const transferIx = getTransferInstruction({\n source: sourceAta,\n destination: destAta,\n authority: ownerAddr,\n amount: 1n,\n });\n\n const signature = await access.sender.signAndSend([createAtaIx, transferIx]);\n return new SolanaTransactionHandle(signature, {\n txHash: signature,\n from: access.sender.address,\n to: newOwner,\n agentId,\n });\n }\n\n /**\n * Check if address owns the agent.\n */\n async isAgentOwner(agentId: AgentId, addr: Address): Promise<boolean> {\n const owner = await this.getAgentOwner(agentId);\n return owner === addr;\n }\n\n /**\n * Get agent owner address.\n */\n async getAgentOwner(agentId: AgentId): Promise<Address> {\n const identity = await this._resolveIdentity(agentId);\n return (await this._sati.getAgentOwner(identity.mint)) as Address;\n }\n\n // =========================================================================\n // Feedback (mirrors agent0-sdk SDK methods)\n // =========================================================================\n\n /**\n * Prepare an off-chain feedback file.\n */\n prepareFeedbackFile(input: FeedbackFileInput, extra?: Record<string, unknown>): FeedbackFileInput {\n return { ...input, ...extra };\n }\n\n /**\n * Give feedback to an agent.\n *\n * Uses FeedbackPublicV1 schema (CounterpartySigned mode).\n * Value/tags stored in content JSON.\n *\n * SATI-specific fields (`outcome`, `taskRef`) can be passed via `feedbackFile`:\n * - `feedbackFile.outcome` - Attestation outcome (default: Neutral)\n * - `feedbackFile.taskRef` - Deterministic 32-byte task reference (default: random)\n */\n async giveFeedback(\n agentId: AgentId,\n value: number | string,\n tag1?: string,\n tag2?: string,\n endpoint?: string,\n feedbackFile?: FeedbackFileInput,\n ): Promise<SolanaTransactionHandle<Feedback>> {\n const sasConfig = this._requireSASConfig();\n const feedbackPublicSchema = sasConfig.schemas.feedbackPublic;\n if (!feedbackPublicSchema) {\n throw new SchemaNotDeployedError(\"FeedbackPublic\", this._config.network);\n }\n\n const identity = await this._resolveIdentity(agentId);\n const access = this._requireWriteAccess(\"giveFeedback\");\n\n // Validate and parse score\n const numericValue = typeof value === \"string\" ? Number.parseFloat(value) : value;\n if (!Number.isFinite(numericValue)) {\n throw new SatiError(\"INVALID_VALUE\", `Feedback value must be a finite number, got: ${value}`);\n }\n\n // Build content JSON\n const contentObj: Record<string, unknown> = {};\n if (value !== undefined) contentObj.score = numericValue;\n if (tag1) contentObj.tags = tag2 ? [tag1, tag2] : [tag1];\n if (endpoint) contentObj.endpoint = endpoint;\n if (feedbackFile?.text) contentObj.m = feedbackFile.text;\n\n const content =\n Object.keys(contentObj).length > 0 ? new TextEncoder().encode(JSON.stringify(contentObj)) : new Uint8Array(0);\n const contentType = content.length > 0 ? ContentType.JSON : ContentType.None;\n\n // Extract SATI-specific fields from feedbackFile\n const taskRef =\n (feedbackFile?.taskRef as Uint8Array | undefined) ?? globalThis.crypto.getRandomValues(new Uint8Array(32));\n const outcome = (feedbackFile?.outcome as Outcome | undefined) ?? Outcome.Neutral;\n\n if (access.type === \"keypair\") {\n const signer = access.signer;\n // Serialize feedback data to build SIWS message\n const feedbackData: FeedbackData = {\n taskRef,\n agentMint: identity.mint,\n counterparty: signer.address,\n dataHash: zeroDataHash(),\n outcome,\n contentType,\n content,\n };\n const serializedData = serializeFeedback(feedbackData);\n\n // Build SIWS message and sign with counterparty (signer)\n const { messageBytes } = buildCounterpartyMessage({\n schemaName: \"FeedbackPublicV1\",\n data: serializedData,\n });\n const sig = await signBytes(signer.keyPair.privateKey, messageBytes);\n\n // Create feedback via SATI (CounterpartySigned mode)\n const result = await this._sati.createFeedback({\n payer: signer,\n sasSchema: feedbackPublicSchema,\n taskRef,\n agentMint: identity.mint,\n counterparty: signer.address,\n dataHash: zeroDataHash(),\n outcome,\n contentType,\n content,\n agentSignature: {\n pubkey: signer.address,\n signature: new Uint8Array(sig),\n },\n counterpartyMessage: messageBytes,\n lookupTableAddress: sasConfig.lookupTable,\n });\n\n const feedback = toFeedback({\n agentMint: identity.mint,\n chain: this._chain,\n reviewer: signer.address,\n feedbackIndex: 0,\n content: { value: numericValue, tag1, tag2, endpoint, text: feedbackFile?.text },\n txSignature: result.signature,\n outcome,\n });\n\n this._feedbackCache.invalidate();\n return new SolanaTransactionHandle(result.signature, feedback);\n }\n\n // Sender path: Feedback requires Light Protocol compressed accounts,\n // which can't be expressed as simple instructions for signAndSend().\n // Use prepareFeedback() + submitPreparedFeedback() instead.\n throw new UnsupportedOperationError(\n \"giveFeedback via transactionSender (browser wallet). \" +\n \"Use prepareFeedback() + submitPreparedFeedback() instead\",\n );\n }\n\n /**\n * Prepare a feedback submission for browser wallet signing.\n *\n * Returns SIWS message bytes that the counterparty wallet must sign.\n * Pass the result + signature to `submitPreparedFeedback()`.\n *\n * @param agentId - Agent to give feedback to\n * @param value - Numeric feedback value\n * @param tag1 - Optional first tag\n * @param tag2 - Optional second tag\n * @param opts - Optional: endpoint, text, counterparty address, outcome, taskRef\n */\n async prepareFeedback(\n agentId: AgentId,\n value: number,\n tag1?: string,\n tag2?: string,\n opts?: {\n endpoint?: string;\n text?: string;\n counterparty?: string;\n outcome?: Outcome;\n taskRef?: Uint8Array;\n },\n ): Promise<PreparedFeedback> {\n const sasConfig = this._requireSASConfig();\n const feedbackPublicSchema = sasConfig.schemas.feedbackPublic;\n if (!feedbackPublicSchema) {\n throw new SchemaNotDeployedError(\"FeedbackPublic\", this._config.network);\n }\n\n const identity = await this._resolveIdentity(agentId);\n\n // Determine counterparty address\n const counterpartyAddr = opts?.counterparty ?? this._config.transactionSender?.address;\n if (!counterpartyAddr) {\n throw new ReadOnlyError(\n \"prepareFeedback (counterparty address required - provide via opts.counterparty or configure transactionSender)\",\n );\n }\n\n if (!Number.isFinite(value)) {\n throw new SatiError(\"INVALID_VALUE\", `Feedback value must be a finite number, got: ${value}`);\n }\n\n // Build content JSON\n const contentObj: Record<string, unknown> = {};\n if (value !== undefined) contentObj.score = value;\n if (tag1) contentObj.tags = tag2 ? [tag1, tag2] : [tag1];\n if (opts?.endpoint) contentObj.endpoint = opts.endpoint;\n if (opts?.text) contentObj.m = opts.text;\n\n const content =\n Object.keys(contentObj).length > 0 ? new TextEncoder().encode(JSON.stringify(contentObj)) : new Uint8Array(0);\n const contentType = content.length > 0 ? ContentType.JSON : ContentType.None;\n\n const taskRef = opts?.taskRef ?? globalThis.crypto.getRandomValues(new Uint8Array(32));\n const outcome = opts?.outcome ?? Outcome.Neutral;\n\n // Serialize feedback data to build SIWS message\n const feedbackData: FeedbackData = {\n taskRef,\n agentMint: identity.mint,\n counterparty: solAddress(counterpartyAddr),\n dataHash: zeroDataHash(),\n outcome,\n contentType,\n content,\n };\n const serializedData = serializeFeedback(feedbackData);\n\n // Build SIWS message\n const { messageBytes } = buildCounterpartyMessage({\n schemaName: \"FeedbackPublicV1\",\n data: serializedData,\n });\n\n return {\n messageBytes,\n agentMint: identity.mint,\n counterparty: solAddress(counterpartyAddr),\n taskRef,\n dataHash: zeroDataHash(),\n outcome,\n contentType,\n content,\n sasSchema: feedbackPublicSchema,\n lookupTable: sasConfig.lookupTable,\n feedbackMeta: {\n value,\n tag1,\n tag2,\n endpoint: opts?.endpoint,\n text: opts?.text,\n },\n };\n }\n\n /**\n * Submit a prepared feedback using a server-side KeyPairSigner.\n *\n * The signer pays gas. The counterparty's SIWS signature proves consent.\n *\n * @param prepared - Result from `prepareFeedback()`\n * @param counterpartySignature - Counterparty wallet's signature of `prepared.messageBytes`\n */\n async submitPreparedFeedback(\n prepared: PreparedFeedback,\n counterpartySignature: Uint8Array,\n ): Promise<SolanaTransactionHandle<Feedback>> {\n const signer = this._requireSigner(\"submitPreparedFeedback\");\n\n const result = await this._sati.createFeedback({\n payer: signer,\n sasSchema: prepared.sasSchema,\n taskRef: prepared.taskRef,\n agentMint: prepared.agentMint,\n counterparty: prepared.counterparty,\n dataHash: prepared.dataHash,\n outcome: prepared.outcome,\n contentType: prepared.contentType,\n content: prepared.content,\n agentSignature: {\n pubkey: prepared.counterparty,\n signature: new Uint8Array(counterpartySignature),\n },\n counterpartyMessage: prepared.messageBytes,\n lookupTableAddress: prepared.lookupTable,\n });\n\n const feedback = toFeedback({\n agentMint: prepared.agentMint,\n chain: this._chain,\n reviewer: prepared.counterparty,\n feedbackIndex: 0,\n content: prepared.feedbackMeta,\n txSignature: result.signature,\n outcome: prepared.outcome,\n });\n\n this._feedbackCache.invalidate();\n return new SolanaTransactionHandle(result.signature, feedback);\n }\n\n /**\n * Search feedback with filters.\n *\n * Supports most agent0-sdk FeedbackSearchFilters. The `includeRevoked`\n * filter is a no-op on SATI (closed attestations are permanently deleted).\n *\n * Note: `createdAt` timestamps are approximate - derived from Solana slot\n * numbers using ~400ms/slot estimate. May drift by minutes for recent or\n * hours for older attestations. For exact timestamps, use\n * `getCreationSignature()` + Solana's `getBlockTime()`.\n */\n async searchFeedback(filters: FeedbackSearchFilters, options?: SatiFeedbackSearchOptions): Promise<Feedback[]> {\n const sasConfig = this._requireSASConfig();\n\n // Build SATI attestation filter\n const satiFilter: Record<string, unknown> = {\n sasSchema: sasConfig.schemas.feedbackPublic ?? sasConfig.schemas.feedback,\n };\n\n // Resolve agentId to agentMint (use agentId or first of agents[])\n let knownIdentity: AgentIdentity | null = null;\n const targetAgentId = filters.agentId ?? filters.agents?.[0];\n if (targetAgentId) {\n knownIdentity = await this._resolveIdentity(targetAgentId);\n satiFilter.agentMint = knownIdentity.mint;\n }\n\n // Pass first reviewer to RPC filter (even though underlying queryAttestations\n // doesn't apply it, future versions may). We apply client-side filtering below.\n if (filters.reviewers?.length) {\n satiFilter.counterparty = solAddress(filters.reviewers[0]);\n }\n\n // Build sets for client-side filtering (underlying RPC only filters by sasSchema + agentMint)\n const reviewerSet = filters.reviewers?.length ? new Set(filters.reviewers) : null;\n const agentMintSet =\n filters.agents?.length && filters.agents.length > 1\n ? new Set(\n await Promise.all(\n filters.agents.map(async (id) => {\n const identity = await this._resolveIdentity(id);\n return identity.mint as string;\n }),\n ),\n )\n : null;\n\n // Check cache\n const schema = satiFilter.sasSchema as string;\n const agentMint = satiFilter.agentMint as string | undefined;\n const cacheKey = FeedbackCache.cacheKey(schema, agentMint);\n const cached = this._feedbackCache.get<{\n items: {\n data: FeedbackData;\n attestation: { sasSchema: string };\n raw: { slotCreated: bigint };\n address: Uint8Array;\n }[];\n }>(cacheKey);\n const result = cached ?? (await this._sati.listFeedbacks(satiFilter));\n if (!cached) this._feedbackCache.set(cacheKey, result);\n\n // Fetch current slot for timestamp conversion (slotCreated -> Unix seconds)\n const currentSlot = await this._sati.getRpc().getSlot({ commitment: \"confirmed\" }).send();\n const nowSec = Math.floor(Date.now() / 1000);\n\n const feedbacks: Feedback[] = [];\n for (let i = 0; i < result.items.length; i++) {\n const item = result.items[i];\n\n // Client-side counterparty/agent filtering\n if (reviewerSet && !reviewerSet.has(item.data.counterparty)) continue;\n if (agentMintSet && !agentMintSet.has(item.data.agentMint)) continue;\n\n // Parse content JSON (safe - malformed content returns null)\n const rawContent = this._parseContentJson(item.data.content, item.data.contentType);\n\n const score = rawContent?.score as number | undefined;\n const tags = (rawContent?.tags as string[]) ?? [];\n const text = rawContent?.m as string | undefined;\n const endpointVal = rawContent?.endpoint as string | undefined;\n const capability = rawContent?.cap as string | undefined;\n const name = rawContent?.n as string | undefined;\n const skill = rawContent?.sk as string | undefined;\n const task = rawContent?.tsk as string | undefined;\n const proofOfPayment = rawContent?.pop as Record<string, unknown> | undefined;\n const fileURI = rawContent?.fileURI as string | undefined;\n\n // Client-side tag filtering\n if (filters.tags?.length) {\n const hasAll = filters.tags.every((t) => tags.includes(t));\n if (!hasAll) continue;\n }\n\n // Client-side value filtering\n if (options?.minValue !== undefined && (score === undefined || score < options.minValue)) continue;\n if (options?.maxValue !== undefined && (score === undefined || score > options.maxValue)) continue;\n\n // Client-side capability/skill/task/name filtering\n if (filters.capabilities?.length && (!capability || !filters.capabilities.includes(capability))) continue;\n if (filters.skills?.length && (!skill || !filters.skills.includes(skill))) continue;\n if (filters.tasks?.length && (!task || !filters.tasks.includes(task))) continue;\n if (filters.names?.length && (!name || !filters.names.includes(name))) continue;\n\n // Compute createdAt from slotCreated (~400ms per slot)\n const slotDiff = Number(BigInt(currentSlot) - item.raw.slotCreated);\n const createdAt = nowSec - Math.floor(slotDiff * 0.4);\n\n // Decode compressed account address for on-demand tx lookups\n const [compressedAddress] = getAddressDecoder().read(item.address, 0);\n\n const feedback = toFeedback({\n agentMint: item.data.agentMint,\n chain: this._chain,\n reviewer: item.data.counterparty,\n feedbackIndex: i,\n content: {\n value: score,\n tag1: tags[0],\n tag2: tags[1],\n endpoint: endpointVal,\n text,\n context: {\n satiCompressedAddress: compressedAddress,\n counterparty: item.data.counterparty,\n agentMint: item.data.agentMint,\n },\n },\n createdAt,\n outcome: item.data.outcome,\n });\n\n // Populate additional fields\n if (capability) feedback.capability = capability;\n if (name) feedback.name = name;\n if (skill) feedback.skill = skill;\n if (task) feedback.task = task;\n if (proofOfPayment) feedback.proofOfPayment = proofOfPayment;\n if (fileURI) feedback.fileURI = fileURI;\n\n feedbacks.push(feedback);\n }\n\n // Optionally populate txHash (expensive: 1 RPC call per feedback)\n if (options?.includeTxHash) {\n const photon = this._sati.getLightClient().getRpc();\n await Promise.all(\n feedbacks.map(async (fb) => {\n const addr = fb.context?.satiCompressedAddress as string | undefined;\n if (!addr) return;\n try {\n const sigs = await photon.getCompressionSignaturesForAddress(solAddress(addr), { limit: 1 });\n fb.txHash = sigs.items[0]?.signature;\n } catch (error) {\n this._warn({\n code: \"SIGNATURE_LOOKUP_FAILED\",\n message: \"Failed to fetch tx signature\",\n context: addr,\n cause: error,\n });\n }\n }),\n );\n }\n\n return feedbacks;\n }\n\n /**\n * Append response to feedback.\n *\n * @throws UnsupportedOperationError - Not supported on SATI.\n */\n async appendResponse(\n _agentId: AgentId,\n _clientAddress: Address,\n _feedbackIndex: number,\n _response: { uri: URI; hash: string },\n ): Promise<never> {\n throw new UnsupportedOperationError(\"appendResponse\");\n }\n\n /**\n * Get reputation summary for an agent.\n *\n * Computes average score from all FeedbackPublic attestations,\n * optionally filtered by tags.\n */\n async getReputationSummary(\n agentId: AgentId,\n tag1?: string,\n tag2?: string,\n ): Promise<{ count: number; averageValue: number }> {\n const sasConfig = this._requireSASConfig();\n const identity = await this._resolveIdentity(agentId);\n\n const schema = sasConfig.schemas.feedbackPublic ?? sasConfig.schemas.feedback;\n const cacheKey = FeedbackCache.cacheKey(schema, identity.mint);\n const cached = this._feedbackCache.get<{ items: { data: FeedbackData }[] }>(cacheKey);\n const result = cached ?? (await this._sati.listFeedbacks({ sasSchema: schema, agentMint: identity.mint }));\n if (!cached) this._feedbackCache.set(cacheKey, result);\n\n if (result.items.length === 0) {\n return { count: 0, averageValue: 0 };\n }\n\n let sum = 0;\n let count = 0;\n\n for (const item of result.items) {\n const rawContent = this._parseContentJson(item.data.content, item.data.contentType);\n\n const score = rawContent?.score as number | undefined;\n const tags = (rawContent?.tags as string[]) ?? [];\n\n // Apply tag filters\n if (tag1 && !tags.includes(tag1)) continue;\n if (tag2 && !tags.includes(tag2)) continue;\n\n if (score !== undefined) {\n sum += score;\n count++;\n }\n }\n\n return {\n count,\n averageValue: count > 0 ? sum / count : 0,\n };\n }\n\n /**\n * Get a single feedback entry.\n *\n * Fetches feedbacks for the given agent + reviewer, then returns the one at feedbackIndex.\n */\n async getFeedback(agentId: AgentId, clientAddress: Address, feedbackIndex: number): Promise<Feedback> {\n const feedbacks = await this.searchFeedback({ agentId, reviewers: [clientAddress] });\n const fb = feedbacks[feedbackIndex];\n if (!fb) {\n throw new AgentNotFoundError(`Feedback at index ${feedbackIndex} for agent ${agentId} reviewer ${clientAddress}`);\n }\n return fb;\n }\n\n /**\n * Look up the creation transaction signature for a compressed attestation.\n *\n * Use `feedback.context.satiCompressedAddress` from `searchFeedback()` results\n * as the `compressedAddress` parameter.\n *\n * @param compressedAddress - Base58 address of the compressed account\n * @returns Transaction signature or null if not found\n */\n async getCreationSignature(compressedAddress: string): Promise<string | null> {\n try {\n const photon = this._sati.getLightClient().getRpc();\n const result = await photon.getCompressionSignaturesForAddress(solAddress(compressedAddress), { limit: 1 });\n return result.items[0]?.signature ?? null;\n } catch (error) {\n this._warn({\n code: \"RPC_ERROR\",\n message: \"Failed to fetch creation signature\",\n context: compressedAddress,\n cause: error,\n });\n return null;\n }\n }\n\n /** Revoke feedback by passing the Feedback object from searchFeedback. */\n revokeFeedback(feedback: Feedback): Promise<SolanaTransactionHandle<Feedback>>;\n /** @deprecated Use the Feedback object overload for stable addressing. */\n revokeFeedback(agentId: AgentId, feedbackIndex: number): Promise<SolanaTransactionHandle<Feedback>>;\n /**\n * Revoke (close) a previously submitted feedback.\n *\n * Closes the compressed attestation on-chain. The signer must be the\n * counterparty who originally submitted the feedback.\n *\n * Note: On SATI, revoked feedbacks are permanently deleted (Light Protocol\n * compressed accounts are closed). They cannot be recovered.\n *\n * Preferred: pass the Feedback object from `searchFeedback()` directly.\n * The object carries `context.satiCompressedAddress` for stable addressing.\n */\n async revokeFeedback(\n feedbackOrAgentId: Feedback | AgentId,\n feedbackIndex?: number,\n ): Promise<SolanaTransactionHandle<Feedback>> {\n const sasConfig = this._requireSASConfig();\n const signer = this._requireSigner(\"revokeFeedback\");\n\n // Feedback object path\n if (typeof feedbackOrAgentId === \"object\" && \"id\" in feedbackOrAgentId) {\n const fb = feedbackOrAgentId as Feedback;\n const addr = fb.context?.satiCompressedAddress as string | undefined;\n if (!addr) {\n throw new InvalidAgentIdError(\n \"Feedback missing context.satiCompressedAddress - use searchFeedback() to get addressable Feedback objects\",\n );\n }\n\n const schema = sasConfig.schemas.feedbackPublic ?? sasConfig.schemas.feedback;\n const result = await this._sati.closeCompressedAttestation({\n payer: signer,\n counterparty: signer,\n sasSchema: schema,\n attestationAddress: solAddress(addr),\n lookupTableAddress: sasConfig.lookupTable,\n });\n\n this._feedbackCache.invalidate();\n const revokedFb = { ...fb, isRevoked: true };\n return new SolanaTransactionHandle(result.signature, revokedFb);\n }\n\n // Legacy index path\n const agentId = feedbackOrAgentId as AgentId;\n const idx = feedbackIndex as number;\n const identity = await this._resolveIdentity(agentId);\n const schema = sasConfig.schemas.feedbackPublic ?? sasConfig.schemas.feedback;\n const queryResult = await this._sati.listFeedbacks({\n sasSchema: schema,\n agentMint: identity.mint,\n counterparty: signer.address,\n });\n\n const item = queryResult.items[idx];\n if (!item) {\n throw new AgentNotFoundError(`Feedback not found at index ${idx}`);\n }\n\n const [attestationAddress] = getAddressDecoder().read(item.address, 0);\n\n const closeResult = await this._sati.closeCompressedAttestation({\n payer: signer,\n counterparty: signer,\n sasSchema: item.attestation.sasSchema,\n attestationAddress,\n lookupTableAddress: sasConfig.lookupTable,\n });\n\n const rawContent = this._parseContentJson(item.data.content, item.data.contentType);\n const score = rawContent?.score as number | undefined;\n const tags = (rawContent?.tags as string[]) ?? [];\n const feedback = toFeedback({\n agentMint: item.data.agentMint,\n chain: this._chain,\n reviewer: item.data.counterparty,\n feedbackIndex: idx,\n content: { value: score, tag1: tags[0], tag2: tags[1] },\n txSignature: closeResult.signature,\n outcome: item.data.outcome,\n });\n feedback.isRevoked = true;\n\n this._feedbackCache.invalidate();\n return new SolanaTransactionHandle(closeResult.signature, feedback);\n }\n\n /**\n * Revoke (close) a feedback by its compressed account address.\n *\n * Lower-level alternative to `revokeFeedback(feedback)`.\n * Get the address from `feedback.context.satiCompressedAddress`.\n *\n * @param compressedAddress - Base58 compressed account address\n */\n async revokeFeedbackByAddress(compressedAddress: string): Promise<SolanaTransactionHandle<{ signature: string }>> {\n const sasConfig = this._requireSASConfig();\n const signer = this._requireSigner(\"revokeFeedbackByAddress\");\n\n const result = await this._sati.closeCompressedAttestation({\n payer: signer,\n counterparty: signer,\n sasSchema: sasConfig.schemas.feedbackPublic ?? sasConfig.schemas.feedback,\n attestationAddress: solAddress(compressedAddress),\n lookupTableAddress: sasConfig.lookupTable,\n });\n\n this._feedbackCache.invalidate();\n return new SolanaTransactionHandle(result.signature, { signature: result.signature });\n }\n\n // =========================================================================\n // Validations\n // =========================================================================\n\n /**\n * Search validation attestations for an agent.\n *\n * Validations are on-chain attestations from validators (TEE, zkML, re-execution, etc.)\n * that verify an agent's behavior. Unlike feedback, validations are typically automated.\n *\n * Note: `createdAt` timestamps are approximate - derived from Solana slot\n * numbers using ~400ms/slot estimate. May drift by minutes for recent or\n * hours for older attestations. For exact timestamps, use\n * `getCreationSignature()` + Solana's `getBlockTime()`.\n */\n async searchValidations(agentId: AgentId): Promise<ValidationResult[]> {\n const sasConfig = this._requireSASConfig();\n const validationSchema = sasConfig.schemas.validation;\n if (!validationSchema) {\n throw new SchemaNotDeployedError(\"Validation\", this._config.network);\n }\n\n const identity = await this._resolveIdentity(agentId);\n\n const result = await this._sati.listValidations({\n sasSchema: validationSchema,\n agentMint: identity.mint,\n });\n\n // Fetch current slot for timestamp conversion\n const currentSlot = await this._sati.getRpc().getSlot({ commitment: \"confirmed\" }).send();\n const nowSec = Math.floor(Date.now() / 1000);\n\n return result.items.map((item) => {\n const slotDiff = Number(BigInt(currentSlot) - item.raw.slotCreated);\n const createdAt = nowSec - Math.floor(slotDiff * 0.4);\n const [compressedAddress] = getAddressDecoder().read(item.address, 0);\n\n return {\n outcome: item.data.outcome,\n agentMint: item.data.agentMint,\n counterparty: item.data.counterparty,\n createdAt,\n compressedAddress,\n };\n });\n }\n\n // =========================================================================\n // Config accessors\n // =========================================================================\n\n /** Get the feedback schema address for the current network. */\n get feedbackSchema(): string | undefined {\n return this._sasConfig?.schemas.feedback;\n }\n\n /** Get the feedbackPublic schema address for the current network. */\n get feedbackPublicSchema(): string | undefined {\n return this._sasConfig?.schemas.feedbackPublic;\n }\n\n /** Get the validation schema address for the current network. */\n get validationSchema(): string | undefined {\n return this._sasConfig?.schemas.validation;\n }\n\n /** Get the lookup table address for the current network. */\n get lookupTable(): string | undefined {\n return this._sasConfig?.lookupTable;\n }\n\n // =========================================================================\n // Internal accessors (used by SatiAgent)\n // =========================================================================\n\n /** @internal */\n get config(): SatiSDKConfig {\n return this._config;\n }\n\n // =========================================================================\n // Private helpers\n // =========================================================================\n\n /** Safely parse JSON content from an attestation. Returns null on invalid JSON. */\n private _parseContentJson(content: Uint8Array, contentType: number): Record<string, unknown> | null {\n if (contentType !== ContentType.JSON || content.length === 0) return null;\n try {\n return JSON.parse(new TextDecoder().decode(content)) as Record<string, unknown>;\n } catch {\n return null;\n }\n }\n\n /** Fire a non-fatal warning via the optional onWarning callback. */\n private _warn(warning: SatiWarning): void {\n this._config.onWarning?.(warning);\n }\n\n private _requireSigner(operation?: string): KeyPairSigner {\n if (!this._config.signer) {\n throw new SignerRequiredError(operation);\n }\n return this._config.signer;\n }\n\n /** Returns either a KeyPairSigner or a TransactionSender, or throws if read-only. */\n private _requireWriteAccess(operation?: string): WriteAccess {\n if (this._config.signer) return { type: \"keypair\", signer: this._config.signer };\n if (this._config.transactionSender) return { type: \"sender\", sender: this._config.transactionSender };\n throw new ReadOnlyError(operation);\n }\n\n private _requireSASConfig(): SATISASConfig {\n if (!this._sasConfig) {\n throw new SchemaNotDeployedError(\"SAS\", this._config.network);\n }\n return this._sasConfig;\n }\n\n private async _resolveIdentity(agentId: AgentId): Promise<AgentIdentity> {\n const mint = parseSatiAgentId(agentId);\n if (mint === null) {\n throw new InvalidAgentIdError(agentId);\n }\n\n const identity = await this._sati.loadAgent(solAddress(mint));\n if (!identity) {\n throw new AgentNotFoundError(agentId);\n }\n\n return identity;\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cascade-fyi/sati-agent0-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Agent0-compatible adapter for SATI - Solana Agent Trust Infrastructure",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"tsx": "^4.20.6",
|
|
64
64
|
"typescript": "^5.9.3",
|
|
65
65
|
"vitest": "^4.0.16",
|
|
66
|
-
"@cascade-fyi/sati-sdk": "0.
|
|
66
|
+
"@cascade-fyi/sati-sdk": "0.6.0"
|
|
67
67
|
},
|
|
68
68
|
"scripts": {
|
|
69
69
|
"build": "tsdown --publint",
|