@scriptmasterlabs/mcp-x402 2.1.1 → 2.1.2

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.
Files changed (290) hide show
  1. package/.well-known/agentcard.json +34 -0
  2. package/.well-known/ai.txt +32 -0
  3. package/CONTRIBUTING.md +76 -0
  4. package/LICENSE +21 -57
  5. package/README.md +304 -262
  6. package/agents.json +81 -0
  7. package/ai/faq.json +74 -0
  8. package/ai/summary.json +157 -0
  9. package/dist/lib/chains/base.d.ts +10 -0
  10. package/dist/lib/chains/base.d.ts.map +1 -0
  11. package/dist/lib/chains/base.js +75 -0
  12. package/dist/lib/chains/base.js.map +1 -0
  13. package/dist/lib/chains/solana.d.ts +10 -0
  14. package/dist/lib/chains/solana.d.ts.map +1 -0
  15. package/dist/lib/chains/solana.js +49 -0
  16. package/dist/lib/chains/solana.js.map +1 -0
  17. package/dist/lib/chains/xrpl.d.ts +10 -0
  18. package/dist/lib/chains/xrpl.d.ts.map +1 -0
  19. package/dist/lib/chains/xrpl.js +55 -0
  20. package/dist/lib/chains/xrpl.js.map +1 -0
  21. package/dist/lib/credit/bureau.d.ts +16 -0
  22. package/dist/lib/credit/bureau.d.ts.map +1 -0
  23. package/dist/lib/credit/bureau.js +88 -0
  24. package/dist/lib/credit/bureau.js.map +1 -0
  25. package/dist/lib/sml-api/agentcard.d.ts +17 -0
  26. package/dist/lib/sml-api/agentcard.d.ts.map +1 -0
  27. package/dist/lib/sml-api/agentcard.js +30 -0
  28. package/dist/lib/sml-api/agentcard.js.map +1 -0
  29. package/dist/lib/sml-api/backtest.d.ts +22 -0
  30. package/dist/lib/sml-api/backtest.d.ts.map +1 -0
  31. package/dist/lib/sml-api/backtest.js +28 -0
  32. package/dist/lib/sml-api/backtest.js.map +1 -0
  33. package/dist/lib/sml-api/brokers.d.ts +40 -0
  34. package/dist/lib/sml-api/brokers.d.ts.map +1 -0
  35. package/dist/lib/sml-api/brokers.js +128 -0
  36. package/dist/lib/sml-api/brokers.js.map +1 -0
  37. package/dist/lib/sml-api/copytrader.d.ts +11 -0
  38. package/dist/lib/sml-api/copytrader.d.ts.map +1 -0
  39. package/dist/lib/sml-api/copytrader.js +30 -0
  40. package/dist/lib/sml-api/copytrader.js.map +1 -0
  41. package/dist/lib/sml-api/crawl.d.ts +20 -0
  42. package/dist/lib/sml-api/crawl.d.ts.map +1 -0
  43. package/dist/lib/sml-api/crawl.js +32 -0
  44. package/dist/lib/sml-api/crawl.js.map +1 -0
  45. package/dist/lib/sml-api/echo.d.ts +10 -0
  46. package/dist/lib/sml-api/echo.d.ts.map +1 -0
  47. package/dist/lib/sml-api/echo.js +23 -0
  48. package/dist/lib/sml-api/echo.js.map +1 -0
  49. package/dist/lib/sml-api/forge.d.ts +11 -0
  50. package/dist/lib/sml-api/forge.d.ts.map +1 -0
  51. package/dist/lib/sml-api/forge.js +29 -0
  52. package/dist/lib/sml-api/forge.js.map +1 -0
  53. package/dist/lib/sml-api/ftd.d.ts +18 -0
  54. package/dist/lib/sml-api/ftd.d.ts.map +1 -0
  55. package/dist/lib/sml-api/ftd.js +43 -0
  56. package/dist/lib/sml-api/ftd.js.map +1 -0
  57. package/dist/lib/sml-api/ghost.d.ts +13 -0
  58. package/dist/lib/sml-api/ghost.d.ts.map +1 -0
  59. package/dist/lib/sml-api/ghost.js +29 -0
  60. package/dist/lib/sml-api/ghost.js.map +1 -0
  61. package/dist/lib/sml-api/launchpad.d.ts +20 -0
  62. package/dist/lib/sml-api/launchpad.d.ts.map +1 -0
  63. package/dist/lib/sml-api/launchpad.js +31 -0
  64. package/dist/lib/sml-api/launchpad.js.map +1 -0
  65. package/dist/lib/sml-api/leviathan.d.ts +22 -0
  66. package/dist/lib/sml-api/leviathan.d.ts.map +1 -0
  67. package/dist/lib/sml-api/leviathan.js +33 -0
  68. package/dist/lib/sml-api/leviathan.js.map +1 -0
  69. package/dist/lib/sml-api/nexus.d.ts +18 -0
  70. package/dist/lib/sml-api/nexus.d.ts.map +1 -0
  71. package/dist/lib/sml-api/nexus.js +40 -0
  72. package/dist/lib/sml-api/nexus.js.map +1 -0
  73. package/dist/lib/sml-api/proof402.d.ts +6 -0
  74. package/dist/lib/sml-api/proof402.d.ts.map +1 -0
  75. package/dist/lib/sml-api/proof402.js +30 -0
  76. package/dist/lib/sml-api/proof402.js.map +1 -0
  77. package/dist/lib/sml-api/rails.d.ts +12 -0
  78. package/dist/lib/sml-api/rails.d.ts.map +1 -0
  79. package/dist/lib/sml-api/rails.js +29 -0
  80. package/dist/lib/sml-api/rails.js.map +1 -0
  81. package/dist/lib/sml-api/shadow.d.ts +15 -0
  82. package/dist/lib/sml-api/shadow.d.ts.map +1 -0
  83. package/dist/lib/sml-api/shadow.js +27 -0
  84. package/dist/lib/sml-api/shadow.js.map +1 -0
  85. package/dist/lib/sml-api/squeezeos.d.ts +21 -0
  86. package/dist/lib/sml-api/squeezeos.d.ts.map +1 -0
  87. package/dist/lib/sml-api/squeezeos.js +97 -0
  88. package/dist/lib/sml-api/squeezeos.js.map +1 -0
  89. package/dist/lib/sml-api/xdeo.d.ts +13 -0
  90. package/dist/lib/sml-api/xdeo.d.ts.map +1 -0
  91. package/dist/lib/sml-api/xdeo.js +34 -0
  92. package/dist/lib/sml-api/xdeo.js.map +1 -0
  93. package/dist/lib/sml-api/xmit.d.ts +13 -0
  94. package/dist/lib/sml-api/xmit.d.ts.map +1 -0
  95. package/dist/lib/sml-api/xmit.js +34 -0
  96. package/dist/lib/sml-api/xmit.js.map +1 -0
  97. package/dist/server/apm/capabilities.d.ts +31 -0
  98. package/dist/server/apm/capabilities.d.ts.map +1 -0
  99. package/dist/server/apm/capabilities.js +157 -0
  100. package/dist/server/apm/capabilities.js.map +1 -0
  101. package/dist/server/apm/execute.d.ts +18 -0
  102. package/dist/server/apm/execute.d.ts.map +1 -0
  103. package/dist/server/apm/execute.js +37 -0
  104. package/dist/server/apm/execute.js.map +1 -0
  105. package/dist/server/apm/matcher.d.ts +17 -0
  106. package/dist/server/apm/matcher.d.ts.map +1 -0
  107. package/dist/server/apm/matcher.js +71 -0
  108. package/dist/server/apm/matcher.js.map +1 -0
  109. package/dist/server/apm/quote.d.ts +53 -0
  110. package/dist/server/apm/quote.d.ts.map +1 -0
  111. package/dist/server/apm/quote.js +82 -0
  112. package/dist/server/apm/quote.js.map +1 -0
  113. package/dist/server/apm/schema.d.ts +109 -0
  114. package/dist/server/apm/schema.d.ts.map +1 -0
  115. package/dist/server/apm/schema.js +31 -0
  116. package/dist/server/apm/schema.js.map +1 -0
  117. package/dist/server/health.d.ts +16 -0
  118. package/dist/server/health.d.ts.map +1 -0
  119. package/dist/server/health.js +39 -0
  120. package/dist/server/health.js.map +1 -0
  121. package/dist/server/index.d.ts +3 -0
  122. package/dist/server/index.d.ts.map +1 -0
  123. package/dist/server/index.js +322 -0
  124. package/dist/server/index.js.map +1 -0
  125. package/dist/server/payments/agent-payment.d.ts +71 -0
  126. package/dist/server/payments/agent-payment.d.ts.map +1 -0
  127. package/dist/server/payments/agent-payment.js +112 -0
  128. package/dist/server/payments/agent-payment.js.map +1 -0
  129. package/dist/server/payments/ap2.d.ts +17 -0
  130. package/dist/server/payments/ap2.d.ts.map +1 -0
  131. package/dist/server/payments/ap2.js +77 -0
  132. package/dist/server/payments/ap2.js.map +1 -0
  133. package/dist/server/payments/receipt.d.ts +28 -0
  134. package/dist/server/payments/receipt.d.ts.map +1 -0
  135. package/dist/server/payments/receipt.js +60 -0
  136. package/dist/server/payments/receipt.js.map +1 -0
  137. package/dist/server/payments/router.d.ts +23 -0
  138. package/dist/server/payments/router.d.ts.map +1 -0
  139. package/dist/server/payments/router.js +69 -0
  140. package/dist/server/payments/router.js.map +1 -0
  141. package/dist/server/payments/wallet.d.ts +18 -0
  142. package/dist/server/payments/wallet.d.ts.map +1 -0
  143. package/dist/server/payments/wallet.js +107 -0
  144. package/dist/server/payments/wallet.js.map +1 -0
  145. package/dist/server/payments/x402.d.ts +55 -0
  146. package/dist/server/payments/x402.d.ts.map +1 -0
  147. package/dist/server/payments/x402.js +247 -0
  148. package/dist/server/payments/x402.js.map +1 -0
  149. package/dist/server/registry/backends.d.ts +29 -0
  150. package/dist/server/registry/backends.d.ts.map +1 -0
  151. package/dist/server/registry/backends.js +61 -0
  152. package/dist/server/registry/backends.js.map +1 -0
  153. package/dist/server/registry/catalog.d.ts +12 -0
  154. package/dist/server/registry/catalog.d.ts.map +1 -0
  155. package/dist/server/registry/catalog.js +55 -0
  156. package/dist/server/registry/catalog.js.map +1 -0
  157. package/dist/server/registry/discovery.d.ts +16 -0
  158. package/dist/server/registry/discovery.d.ts.map +1 -0
  159. package/dist/server/registry/discovery.js +33 -0
  160. package/dist/server/registry/discovery.js.map +1 -0
  161. package/dist/server/registry/pricing.d.ts +10 -0
  162. package/dist/server/registry/pricing.d.ts.map +1 -0
  163. package/dist/server/registry/pricing.js +124 -0
  164. package/dist/server/registry/pricing.js.map +1 -0
  165. package/dist/server/security/acl.d.ts +28 -0
  166. package/dist/server/security/acl.d.ts.map +1 -0
  167. package/dist/server/security/acl.js +36 -0
  168. package/dist/server/security/acl.js.map +1 -0
  169. package/dist/server/security/audit.d.ts +15 -0
  170. package/dist/server/security/audit.d.ts.map +1 -0
  171. package/dist/server/security/audit.js +77 -0
  172. package/dist/server/security/audit.js.map +1 -0
  173. package/dist/server/security/rate-limit.d.ts +12 -0
  174. package/dist/server/security/rate-limit.d.ts.map +1 -0
  175. package/dist/server/security/rate-limit.js +72 -0
  176. package/dist/server/security/rate-limit.js.map +1 -0
  177. package/dist/server/security/sandbox.d.ts +7 -0
  178. package/dist/server/security/sandbox.d.ts.map +1 -0
  179. package/dist/server/security/sandbox.js +42 -0
  180. package/dist/server/security/sandbox.js.map +1 -0
  181. package/dist/server/tools/agentcard.d.ts +3 -0
  182. package/dist/server/tools/agentcard.d.ts.map +1 -0
  183. package/dist/server/tools/agentcard.js +118 -0
  184. package/dist/server/tools/agentcard.js.map +1 -0
  185. package/dist/server/tools/apm-execute.d.ts +3 -0
  186. package/dist/server/tools/apm-execute.d.ts.map +1 -0
  187. package/dist/server/tools/apm-execute.js +94 -0
  188. package/dist/server/tools/apm-execute.js.map +1 -0
  189. package/dist/server/tools/apm.d.ts +3 -0
  190. package/dist/server/tools/apm.d.ts.map +1 -0
  191. package/dist/server/tools/apm.js +135 -0
  192. package/dist/server/tools/apm.js.map +1 -0
  193. package/dist/server/tools/backtest.d.ts +3 -0
  194. package/dist/server/tools/backtest.d.ts.map +1 -0
  195. package/dist/server/tools/backtest.js +112 -0
  196. package/dist/server/tools/backtest.js.map +1 -0
  197. package/dist/server/tools/brokers.d.ts +3 -0
  198. package/dist/server/tools/brokers.d.ts.map +1 -0
  199. package/dist/server/tools/brokers.js +223 -0
  200. package/dist/server/tools/brokers.js.map +1 -0
  201. package/dist/server/tools/copytrader.d.ts +3 -0
  202. package/dist/server/tools/copytrader.d.ts.map +1 -0
  203. package/dist/server/tools/copytrader.js +90 -0
  204. package/dist/server/tools/copytrader.js.map +1 -0
  205. package/dist/server/tools/crawl.d.ts +3 -0
  206. package/dist/server/tools/crawl.d.ts.map +1 -0
  207. package/dist/server/tools/crawl.js +60 -0
  208. package/dist/server/tools/crawl.js.map +1 -0
  209. package/dist/server/tools/discovery.d.ts +3 -0
  210. package/dist/server/tools/discovery.d.ts.map +1 -0
  211. package/dist/server/tools/discovery.js +181 -0
  212. package/dist/server/tools/discovery.js.map +1 -0
  213. package/dist/server/tools/echo.d.ts +3 -0
  214. package/dist/server/tools/echo.d.ts.map +1 -0
  215. package/dist/server/tools/echo.js +48 -0
  216. package/dist/server/tools/echo.js.map +1 -0
  217. package/dist/server/tools/forge.d.ts +3 -0
  218. package/dist/server/tools/forge.d.ts.map +1 -0
  219. package/dist/server/tools/forge.js +77 -0
  220. package/dist/server/tools/forge.js.map +1 -0
  221. package/dist/server/tools/ftd.d.ts +3 -0
  222. package/dist/server/tools/ftd.d.ts.map +1 -0
  223. package/dist/server/tools/ftd.js +70 -0
  224. package/dist/server/tools/ftd.js.map +1 -0
  225. package/dist/server/tools/ghost.d.ts +3 -0
  226. package/dist/server/tools/ghost.d.ts.map +1 -0
  227. package/dist/server/tools/ghost.js +83 -0
  228. package/dist/server/tools/ghost.js.map +1 -0
  229. package/dist/server/tools/index.d.ts +3 -0
  230. package/dist/server/tools/index.d.ts.map +1 -0
  231. package/dist/server/tools/index.js +48 -0
  232. package/dist/server/tools/index.js.map +1 -0
  233. package/dist/server/tools/launchpad.d.ts +3 -0
  234. package/dist/server/tools/launchpad.d.ts.map +1 -0
  235. package/dist/server/tools/launchpad.js +151 -0
  236. package/dist/server/tools/launchpad.js.map +1 -0
  237. package/dist/server/tools/leviathan.d.ts +3 -0
  238. package/dist/server/tools/leviathan.d.ts.map +1 -0
  239. package/dist/server/tools/leviathan.js +73 -0
  240. package/dist/server/tools/leviathan.js.map +1 -0
  241. package/dist/server/tools/nexus.d.ts +3 -0
  242. package/dist/server/tools/nexus.d.ts.map +1 -0
  243. package/dist/server/tools/nexus.js +65 -0
  244. package/dist/server/tools/nexus.js.map +1 -0
  245. package/dist/server/tools/proof402.d.ts +3 -0
  246. package/dist/server/tools/proof402.d.ts.map +1 -0
  247. package/dist/server/tools/proof402.js +74 -0
  248. package/dist/server/tools/proof402.js.map +1 -0
  249. package/dist/server/tools/rails.d.ts +3 -0
  250. package/dist/server/tools/rails.d.ts.map +1 -0
  251. package/dist/server/tools/rails.js +82 -0
  252. package/dist/server/tools/rails.js.map +1 -0
  253. package/dist/server/tools/shadow.d.ts +3 -0
  254. package/dist/server/tools/shadow.d.ts.map +1 -0
  255. package/dist/server/tools/shadow.js +114 -0
  256. package/dist/server/tools/shadow.js.map +1 -0
  257. package/dist/server/tools/squeezeos.d.ts +3 -0
  258. package/dist/server/tools/squeezeos.d.ts.map +1 -0
  259. package/dist/server/tools/squeezeos.js +249 -0
  260. package/dist/server/tools/squeezeos.js.map +1 -0
  261. package/dist/server/tools/xdeo.d.ts +3 -0
  262. package/dist/server/tools/xdeo.d.ts.map +1 -0
  263. package/dist/server/tools/xdeo.js +58 -0
  264. package/dist/server/tools/xdeo.js.map +1 -0
  265. package/dist/server/tools/xmit.d.ts +3 -0
  266. package/dist/server/tools/xmit.d.ts.map +1 -0
  267. package/dist/server/tools/xmit.js +59 -0
  268. package/dist/server/tools/xmit.js.map +1 -0
  269. package/eslint.config.mjs +28 -0
  270. package/llms.txt +170 -108
  271. package/package.json +78 -65
  272. package/server.json +24 -0
  273. package/.well-known/x402.json +0 -37
  274. package/dist/index.d.ts +0 -12
  275. package/dist/index.d.ts.map +0 -1
  276. package/dist/index.js +0 -9
  277. package/dist/index.js.map +0 -1
  278. package/dist/mcp-wrapper.d.ts +0 -71
  279. package/dist/mcp-wrapper.d.ts.map +0 -1
  280. package/dist/mcp-wrapper.js +0 -104
  281. package/dist/mcp-wrapper.js.map +0 -1
  282. package/dist/x402-middleware.d.ts +0 -76
  283. package/dist/x402-middleware.d.ts.map +0 -1
  284. package/dist/x402-middleware.js +0 -113
  285. package/dist/x402-middleware.js.map +0 -1
  286. package/dist/xrpl-facilitator.d.ts +0 -77
  287. package/dist/xrpl-facilitator.d.ts.map +0 -1
  288. package/dist/xrpl-facilitator.js +0 -156
  289. package/dist/xrpl-facilitator.js.map +0 -1
  290. package/schema.jsonld +0 -97
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XdeoClient = void 0;
4
+ class XdeoClient {
5
+ static instance;
6
+ baseUrl;
7
+ constructor() {
8
+ this.baseUrl = process.env['SML_API_BASE'] ?? 'https://api.scriptmasterlabs.com';
9
+ }
10
+ static getInstance() {
11
+ if (!XdeoClient.instance) {
12
+ XdeoClient.instance = new XdeoClient();
13
+ }
14
+ return XdeoClient.instance;
15
+ }
16
+ async getEstimate(params) {
17
+ const res = await fetch(`${this.baseUrl}/xdeo/v1/estimate`, {
18
+ method: 'POST',
19
+ headers: { 'Content-Type': 'application/json' },
20
+ body: JSON.stringify({
21
+ ticker: params.ticker,
22
+ fiscal_quarter: params.fiscalQuarter,
23
+ estimate_type: params.estimateType,
24
+ }),
25
+ signal: AbortSignal.timeout(10_000),
26
+ });
27
+ if (!res.ok) {
28
+ throw new Error(`xDEO API error: HTTP ${res.status}`);
29
+ }
30
+ return res.json();
31
+ }
32
+ }
33
+ exports.XdeoClient = XdeoClient;
34
+ //# sourceMappingURL=xdeo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xdeo.js","sourceRoot":"","sources":["../../../src/lib/sml-api/xdeo.ts"],"names":[],"mappings":";;;AAMA,MAAa,UAAU;IACb,MAAM,CAAC,QAAQ,CAAa;IACnB,OAAO,CAAS;IAEjC;QACE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,kCAAkC,CAAC;IACnF,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAA0B;QAC1C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,cAAc,EAAE,MAAM,CAAC,aAAa;gBACpC,aAAa,EAAE,MAAM,CAAC,YAAY;aACnC,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;CACF;AAjCD,gCAiCC"}
@@ -0,0 +1,13 @@
1
+ export interface XmitDecodeParams {
2
+ filingUrl: string;
3
+ parseTarget: 'executive_pay' | 'holdings' | 'ownership_changes' | 'all';
4
+ format: 'json' | 'markdown';
5
+ }
6
+ export declare class XmitClient {
7
+ private static instance;
8
+ private readonly baseUrl;
9
+ private constructor();
10
+ static getInstance(): XmitClient;
11
+ decode(params: XmitDecodeParams): Promise<unknown>;
12
+ }
13
+ //# sourceMappingURL=xmit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xmit.d.ts","sourceRoot":"","sources":["../../../src/lib/sml-api/xmit.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,eAAe,GAAG,UAAU,GAAG,mBAAmB,GAAG,KAAK,CAAC;IACxE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CAC7B;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,UAAU;IAO1B,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAkBzD"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XmitClient = void 0;
4
+ class XmitClient {
5
+ static instance;
6
+ baseUrl;
7
+ constructor() {
8
+ this.baseUrl = process.env['SML_API_BASE'] ?? 'https://api.scriptmasterlabs.com';
9
+ }
10
+ static getInstance() {
11
+ if (!XmitClient.instance) {
12
+ XmitClient.instance = new XmitClient();
13
+ }
14
+ return XmitClient.instance;
15
+ }
16
+ async decode(params) {
17
+ const res = await fetch(`${this.baseUrl}/xmit/v1/decode`, {
18
+ method: 'POST',
19
+ headers: { 'Content-Type': 'application/json' },
20
+ body: JSON.stringify({
21
+ filing_url: params.filingUrl,
22
+ parse_target: params.parseTarget,
23
+ format: params.format,
24
+ }),
25
+ signal: AbortSignal.timeout(30_000),
26
+ });
27
+ if (!res.ok) {
28
+ throw new Error(`xMIT API error: HTTP ${res.status}`);
29
+ }
30
+ return res.json();
31
+ }
32
+ }
33
+ exports.XmitClient = XmitClient;
34
+ //# sourceMappingURL=xmit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xmit.js","sourceRoot":"","sources":["../../../src/lib/sml-api/xmit.ts"],"names":[],"mappings":";;;AAMA,MAAa,UAAU;IACb,MAAM,CAAC,QAAQ,CAAa;IACnB,OAAO,CAAS;IAEjC;QACE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,kCAAkC,CAAC;IACnF,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAwB;QACnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,UAAU,EAAE,MAAM,CAAC,SAAS;gBAC5B,YAAY,EAAE,MAAM,CAAC,WAAW;gBAChC,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;CACF;AAjCD,gCAiCC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * APM capability index — the real, curated map of what each LIVE SML tool can do,
3
+ * how fresh its data is, which payment chains it settles on, and what it costs.
4
+ *
5
+ * Prices mirror src/server/registry/pricing.ts (BASE_PRICES). `product` MUST match a
6
+ * product key in src/server/registry/backends.ts so live-status can be resolved.
7
+ *
8
+ * This is the matchable surface APM negotiates against — not a simulation.
9
+ */
10
+ export interface Capability {
11
+ /** MCP tool name an agent would ultimately call. */
12
+ tool: string;
13
+ /** Backend product key (must match backends.ts `product`). */
14
+ product: string;
15
+ /** True if calling the tool costs USDC. */
16
+ paid: boolean;
17
+ /** Base price in USDC (string, '0.00' for free tools). */
18
+ basePrice: string;
19
+ /** Payment chains this tool settles on. Data tools accept all three. */
20
+ paymentChains: string[];
21
+ /** Worst-case data staleness in seconds (0 = live/realtime). */
22
+ freshnessSec: number;
23
+ /** True if the tool cites authoritative sources (e.g. SEC filings). */
24
+ attribution: boolean;
25
+ /** Match keywords. */
26
+ tags: string[];
27
+ /** One-line description. */
28
+ summary: string;
29
+ }
30
+ export declare const CAPABILITIES: Capability[];
31
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/server/apm/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,IAAI,EAAE,OAAO,CAAC;IACd,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,WAAW,EAAE,OAAO,CAAC;IACrB,sBAAsB;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,eAAO,MAAM,YAAY,EAAE,UAAU,EAsJpC,CAAC"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ /**
3
+ * APM capability index — the real, curated map of what each LIVE SML tool can do,
4
+ * how fresh its data is, which payment chains it settles on, and what it costs.
5
+ *
6
+ * Prices mirror src/server/registry/pricing.ts (BASE_PRICES). `product` MUST match a
7
+ * product key in src/server/registry/backends.ts so live-status can be resolved.
8
+ *
9
+ * This is the matchable surface APM negotiates against — not a simulation.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CAPABILITIES = void 0;
13
+ const ALL_CHAINS = ['base', 'xrpl', 'solana'];
14
+ exports.CAPABILITIES = [
15
+ // ── SqueezeOS (squeezeos-api.onrender.com) ────────────────────────────────
16
+ {
17
+ tool: 'squeezeos_council', product: 'SqueezeOS', paid: true, basePrice: '0.10',
18
+ paymentChains: ALL_CHAINS, freshnessSec: 60, attribution: false,
19
+ tags: ['squeeze', 'signal', 'equity', 'equities', 'stock', 'stocks', 'ticker', 'council', 'verdict', 'momentum', 'trading', 'ai', 'confidence'],
20
+ summary: 'Multi-engine AI council verdict for any symbol — highest-confidence squeeze signal.',
21
+ },
22
+ {
23
+ tool: 'squeezeos_scan', product: 'SqueezeOS', paid: true, basePrice: '0.05',
24
+ paymentChains: ALL_CHAINS, freshnessSec: 300, attribution: false,
25
+ tags: ['scan', 'screener', 'candidates', 'squeeze', 'list', 'stocks', 'ranked', 'discover'],
26
+ summary: 'Full $1–$50 squeeze candidate scanner — ranked by squeeze score.',
27
+ },
28
+ {
29
+ tool: 'squeezeos_options', product: 'SqueezeOS', paid: true, basePrice: '0.05',
30
+ paymentChains: ALL_CHAINS, freshnessSec: 60, attribution: false,
31
+ tags: ['options', 'flow', 'darkpool', 'sweep', 'greeks', 'derivatives', 'unusual'],
32
+ summary: 'Institutional options flow analysis — dark pool and sweep detection.',
33
+ },
34
+ {
35
+ tool: 'squeezeos_iwm', product: 'SqueezeOS', paid: true, basePrice: '0.03',
36
+ paymentChains: ALL_CHAINS, freshnessSec: 5, attribution: false,
37
+ tags: ['iwm', '0dte', 'options', 'greeks', 'realtime', 'index', 'russell', 'probability'],
38
+ summary: 'IWM 0DTE contract scorer — real-time Greeks and probability.',
39
+ },
40
+ {
41
+ tool: 'squeezeos_preview', product: 'SqueezeOS', paid: false, basePrice: '0.00',
42
+ paymentChains: ALL_CHAINS, freshnessSec: 900, attribution: false,
43
+ tags: ['preview', 'bias', 'signal', 'free', 'ticker', 'sample'],
44
+ summary: 'Free signal bias preview for any ticker (15-min cache).',
45
+ },
46
+ {
47
+ tool: 'squeezeos_oracle', product: 'SqueezeOS', paid: false, basePrice: '0.00',
48
+ paymentChains: ALL_CHAINS, freshnessSec: 5, attribution: false,
49
+ tags: ['oracle', 'directive', 'signal', 'aggregate', 'free', 'fractal'],
50
+ summary: 'Free oracle directive — aggregated signal across all engines.',
51
+ },
52
+ // ── Core SML Intelligence (served by squeezeos-api) ───────────────────────
53
+ {
54
+ tool: 'leviathan_signal', product: 'SqueezeOS', paid: true, basePrice: '0.05',
55
+ paymentChains: ALL_CHAINS, freshnessSec: 60, attribution: false,
56
+ tags: ['squeeze', 'signal', 'institutional', 'verdict', 'ticker', 'momentum', 'leviathan', 'proprietary'],
57
+ summary: 'Institutional squeeze signals — proprietary multi-engine verdict for any ticker.',
58
+ },
59
+ {
60
+ tool: 'xmit_edgar_decode', product: 'SqueezeOS', paid: true, basePrice: '0.02',
61
+ paymentChains: ALL_CHAINS, freshnessSec: 86400, attribution: true,
62
+ tags: ['sec', 'edgar', 'filing', 'filings', '13f', '13d', 'def14a', 'parse', 'proxy', 'institutional', 'holdings'],
63
+ summary: 'Parse SEC DEF 14A / 13F / 13D filings — raw text never leaves SML servers.',
64
+ },
65
+ {
66
+ tool: 'xdeo_earnings_estimate', product: 'SqueezeOS', paid: true, basePrice: '0.02',
67
+ paymentChains: ALL_CHAINS, freshnessSec: 3600, attribution: true,
68
+ tags: ['earnings', 'estimate', 'oracle', 'consensus', 'eps', 'finance', 'forecast'],
69
+ summary: 'Decentralized earnings oracle — consensus estimate across data sources.',
70
+ },
71
+ {
72
+ tool: 'ftd_threshold_scan', product: 'SqueezeOS', paid: false, basePrice: '0.05',
73
+ paymentChains: ALL_CHAINS, freshnessSec: 900, attribution: true,
74
+ tags: ['ftd', 'fail', 'deliver', 'regsho', 'threshold', 'sec', 'short', 'naked'],
75
+ summary: 'SEC Reg SHO FTD data — threshold alerts free, full scanner $0.05.',
76
+ },
77
+ {
78
+ tool: 'crawl_paid_fetch', product: 'SqueezeOS', paid: true, basePrice: '0.005',
79
+ paymentChains: ALL_CHAINS, freshnessSec: 0, attribution: false,
80
+ tags: ['crawl', 'scrape', 'fetch', 'web', 'url', 'page', 'data', 'http'],
81
+ summary: 'Pay-per-fetch web scraping for AI agents ($0.005/fetch).',
82
+ },
83
+ {
84
+ tool: 'nexus_agent_hire', product: 'SqueezeOS', paid: false, basePrice: '0.00',
85
+ paymentChains: ALL_CHAINS, freshnessSec: 0, attribution: false,
86
+ tags: ['agent', 'hire', 'marketplace', 'job', 'delegate', 'a2a', 'workforce'],
87
+ summary: 'Agent job marketplace — browse free, hire charges 5% commission.',
88
+ },
89
+ // ── Ghost Layer (cross-chain settlement) ──────────────────────────────────
90
+ {
91
+ tool: 'ghost_route', product: 'Ghost Layer', paid: true, basePrice: '0.01',
92
+ paymentChains: ['xrpl', 'base'], freshnessSec: 0, attribution: false,
93
+ tags: ['route', 'cross-chain', 'crosschain', 'bridge', 'settlement', 'xrpl', 'base', 'toll', 'transfer', 'private'],
94
+ summary: 'Route a transaction through the dual-chain XRPL+Base gateway with toll collection.',
95
+ },
96
+ // ── 402Proof (payment + trust) ────────────────────────────────────────────
97
+ {
98
+ tool: 'proof_invoice', product: '402Proof', paid: false, basePrice: '0.00',
99
+ paymentChains: ALL_CHAINS, freshnessSec: 0, attribution: false,
100
+ tags: ['invoice', 'x402', 'payment', 'bill', 'quote', 'pay'],
101
+ summary: 'Generate an x402 payment invoice for any SML endpoint.',
102
+ },
103
+ {
104
+ tool: 'proof_verify', product: '402Proof', paid: false, basePrice: '0.00',
105
+ paymentChains: ALL_CHAINS, freshnessSec: 0, attribution: false,
106
+ tags: ['verify', 'payment', 'tx', 'receipt', 'confirm', 'settlement'],
107
+ summary: 'Verify an XRPL or Base payment tx_hash — returns receipt and confirmation.',
108
+ },
109
+ {
110
+ tool: 'proof_credit_score', product: '402Proof', paid: false, basePrice: '0.00',
111
+ paymentChains: ALL_CHAINS, freshnessSec: 0, attribution: false,
112
+ tags: ['credit', 'score', 'reputation', 'bureau', 'trust', 'history', 'identity'],
113
+ summary: 'Get an agent credit score (300–850) and payment history by wallet.',
114
+ },
115
+ // ── RLUSD Rails (XRPL/Xahau settlement) ───────────────────────────────────
116
+ {
117
+ tool: 'rails_transfer', product: 'RLUSD Rails', paid: true, basePrice: '0.01',
118
+ paymentChains: ['xrpl'], freshnessSec: 0, attribution: false,
119
+ tags: ['rlusd', 'xrp', 'transfer', 'remittance', 'payment', 'settlement', 'xrpl', 'xahau', 'send'],
120
+ summary: 'Initiate an RLUSD or XRP transfer via SML Rails — returns tx_hash.',
121
+ },
122
+ // ── XRPL Copy-Trader ──────────────────────────────────────────────────────
123
+ {
124
+ tool: 'copytrader_subscribe', product: 'Copy-Trader', paid: true, basePrice: '0.05',
125
+ paymentChains: ['xrpl'], freshnessSec: 60, attribution: false,
126
+ tags: ['whale', 'copy', 'mirror', 'trade', 'xrpl', 'follow', 'position'],
127
+ summary: 'Subscribe to mirror a whale wallet — auto-copies future positions.',
128
+ },
129
+ // ── Memecoin Launchpad ────────────────────────────────────────────────────
130
+ {
131
+ tool: 'launchpad_create', product: 'Launchpad', paid: true, basePrice: '0.10',
132
+ paymentChains: ['xrpl'], freshnessSec: 0, attribution: false,
133
+ tags: ['memecoin', 'token', 'launch', 'create', 'bonding', 'curve', 'xrpl', 'mint'],
134
+ summary: 'Create a new memecoin with a bonding curve — supply, curve, metadata.',
135
+ },
136
+ {
137
+ tool: 'launchpad_buy', product: 'Launchpad', paid: true, basePrice: '0.01',
138
+ paymentChains: ['xrpl'], freshnessSec: 5, attribution: false,
139
+ tags: ['memecoin', 'token', 'buy', 'bonding', 'curve', 'xrpl', 'trade'],
140
+ summary: 'Buy tokens on a memecoin bonding curve — returns executed price and tx.',
141
+ },
142
+ // ── Shadow Desk (alpha intelligence) ──────────────────────────────────────
143
+ {
144
+ tool: 'shadow_query', product: 'Shadow Desk', paid: true, basePrice: '0.02',
145
+ paymentChains: ALL_CHAINS, freshnessSec: 300, attribution: false,
146
+ tags: ['alpha', 'signal', 'intelligence', 'feed', 'query', 'shadow', 'edge'],
147
+ summary: 'Query signal intelligence from the Shadow Desk alpha feed.',
148
+ },
149
+ // ── Forge Gateway (BYOK LLM proxy) ────────────────────────────────────────
150
+ {
151
+ tool: 'forge_llm', product: 'Forge Gateway', paid: true, basePrice: '0.02',
152
+ paymentChains: ALL_CHAINS, freshnessSec: 0, attribution: false,
153
+ tags: ['llm', 'ai', 'model', 'inference', 'completion', 'byok', 'proxy', 'gpt', 'claude'],
154
+ summary: 'BYOK LLM proxy — call any AI model, pay per request via x402.',
155
+ },
156
+ ];
157
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/server/apm/capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * APM execution layer — what apm_execute can broker today and the brokerage math.
3
+ *
4
+ * v1 brokers the LIVE SqueezeOS family (verified online). Each executor maps a tool
5
+ * name to the real SML API client call; apm_execute collects the locked price +
6
+ * brokerage, then runs the tool through SML's own paid path.
7
+ */
8
+ export interface BrokerArgs {
9
+ symbol?: string;
10
+ wallet_address: string;
11
+ }
12
+ /** Locked price * (1 + brokerage%), at USDC-native (6-decimal) precision. */
13
+ export declare function brokeredTotal(priceUsd: string, brokeragePct: number): string;
14
+ /** Tools apm_execute can broker right now (live SqueezeOS family). */
15
+ export declare const BROKERABLE_TOOLS: Record<string, (args: BrokerArgs) => Promise<unknown>>;
16
+ export declare function isBrokerable(tool: string): boolean;
17
+ export declare function brokerableTools(): string[];
18
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/server/apm/execute.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAG5E;AAED,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAQnF,CAAC;AAEF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * APM execution layer — what apm_execute can broker today and the brokerage math.
4
+ *
5
+ * v1 brokers the LIVE SqueezeOS family (verified online). Each executor maps a tool
6
+ * name to the real SML API client call; apm_execute collects the locked price +
7
+ * brokerage, then runs the tool through SML's own paid path.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.BROKERABLE_TOOLS = void 0;
11
+ exports.brokeredTotal = brokeredTotal;
12
+ exports.isBrokerable = isBrokerable;
13
+ exports.brokerableTools = brokerableTools;
14
+ const squeezeos_js_1 = require("../../lib/sml-api/squeezeos.js");
15
+ /** Locked price * (1 + brokerage%), at USDC-native (6-decimal) precision. */
16
+ function brokeredTotal(priceUsd, brokeragePct) {
17
+ const total = parseFloat(priceUsd) * (1 + brokeragePct / 100);
18
+ return (Math.round(total * 1e6) / 1e6).toString();
19
+ }
20
+ /** Tools apm_execute can broker right now (live SqueezeOS family). */
21
+ exports.BROKERABLE_TOOLS = {
22
+ squeezeos_council: (a) => {
23
+ if (!a.symbol)
24
+ throw new Error('squeezeos_council requires a `symbol`.');
25
+ return squeezeos_js_1.SqueezeOSAPI.council(a.symbol, a.wallet_address);
26
+ },
27
+ squeezeos_scan: (a) => squeezeos_js_1.SqueezeOSAPI.scan(a.wallet_address),
28
+ squeezeos_options: (a) => squeezeos_js_1.SqueezeOSAPI.options(a.wallet_address),
29
+ squeezeos_iwm: (a) => squeezeos_js_1.SqueezeOSAPI.iwm(a.wallet_address),
30
+ };
31
+ function isBrokerable(tool) {
32
+ return Object.prototype.hasOwnProperty.call(exports.BROKERABLE_TOOLS, tool);
33
+ }
34
+ function brokerableTools() {
35
+ return Object.keys(exports.BROKERABLE_TOOLS);
36
+ }
37
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/server/apm/execute.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAUH,sCAGC;AAaD,oCAEC;AAED,0CAEC;AA9BD,iEAA8D;AAO9D,6EAA6E;AAC7E,SAAgB,aAAa,CAAC,QAAgB,EAAE,YAAoB;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACpD,CAAC;AAED,sEAAsE;AACzD,QAAA,gBAAgB,GAA2D;IACtF,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACzE,OAAO,2BAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IACD,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,2BAAY,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;IAC1D,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,2BAAY,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;IAChE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,2BAAY,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC;CACzD,CAAC;AAEF,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,wBAAgB,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,wBAAgB,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * APM matcher — deterministic, pure functions that turn an agent's stated need
3
+ * into a ranked list of SML capabilities with per-constraint fit. No randomness,
4
+ * no network: live-status is injected by the caller.
5
+ */
6
+ import type { Capability } from './capabilities.js';
7
+ import type { Constraints, ConstraintFit, ScoredMatch } from './schema.js';
8
+ export declare function tokenize(text: string): string[];
9
+ /** Keyword overlap score between a need and a capability. Tag hits weigh double. */
10
+ export declare function scoreCapability(cap: Capability, needTokens: string[]): number;
11
+ export declare function evaluateFit(cap: Capability, c: Constraints): ConstraintFit;
12
+ /**
13
+ * Rank capabilities against a need. Returns only positive-score matches,
14
+ * sorted by score desc, then price asc. `live` is the set of online product keys.
15
+ */
16
+ export declare function matchManifest(need: string, constraints: Constraints, capabilities: Capability[], live: Set<string>): ScoredMatch[];
17
+ //# sourceMappingURL=matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../../src/server/apm/matcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAc7E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,GAAG,aAAa,CAgB1E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,UAAU,EAAE,EAC1B,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAChB,WAAW,EAAE,CAyBf"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ /**
3
+ * APM matcher — deterministic, pure functions that turn an agent's stated need
4
+ * into a ranked list of SML capabilities with per-constraint fit. No randomness,
5
+ * no network: live-status is injected by the caller.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.tokenize = tokenize;
9
+ exports.scoreCapability = scoreCapability;
10
+ exports.evaluateFit = evaluateFit;
11
+ exports.matchManifest = matchManifest;
12
+ function tokenize(text) {
13
+ return text.toLowerCase().match(/[a-z0-9]+/g) ?? [];
14
+ }
15
+ /** Keyword overlap score between a need and a capability. Tag hits weigh double. */
16
+ function scoreCapability(cap, needTokens) {
17
+ const haystack = new Set([
18
+ ...cap.tags,
19
+ ...tokenize(cap.tool),
20
+ ...tokenize(cap.summary),
21
+ ...tokenize(cap.product),
22
+ ]);
23
+ const tagSet = new Set(cap.tags);
24
+ let score = 0;
25
+ for (const token of needTokens) {
26
+ if (haystack.has(token))
27
+ score += 1;
28
+ if (tagSet.has(token))
29
+ score += 1; // tags are the strongest signal
30
+ }
31
+ return score;
32
+ }
33
+ function evaluateFit(cap, c) {
34
+ const price = c.max_price_usd === undefined || Number(cap.basePrice) <= c.max_price_usd;
35
+ const chain = !cap.paid ||
36
+ c.chains_accepted === undefined ||
37
+ c.chains_accepted.length === 0 ||
38
+ cap.paymentChains.some((ch) => c.chains_accepted.includes(ch));
39
+ const freshness = c.max_freshness_sec === undefined || cap.freshnessSec <= c.max_freshness_sec;
40
+ const attribution = c.needs_attribution !== true || cap.attribution === true;
41
+ return { price, chain, freshness, attribution };
42
+ }
43
+ /**
44
+ * Rank capabilities against a need. Returns only positive-score matches,
45
+ * sorted by score desc, then price asc. `live` is the set of online product keys.
46
+ */
47
+ function matchManifest(need, constraints, capabilities, live) {
48
+ const tokens = tokenize(need);
49
+ return capabilities
50
+ .map((cap) => {
51
+ const score = scoreCapability(cap, tokens);
52
+ const fits = evaluateFit(cap, constraints);
53
+ return {
54
+ tool: cap.tool,
55
+ product: cap.product,
56
+ summary: cap.summary,
57
+ paid: cap.paid,
58
+ price_usd: cap.basePrice,
59
+ payment_chains: cap.paymentChains,
60
+ freshness_sec: cap.freshnessSec,
61
+ attribution: cap.attribution,
62
+ live: live.has(cap.product),
63
+ score,
64
+ fits,
65
+ meets_all_constraints: fits.price && fits.chain && fits.freshness && fits.attribution,
66
+ };
67
+ })
68
+ .filter((m) => m.score > 0)
69
+ .sort((a, b) => b.score - a.score || Number(a.price_usd) - Number(b.price_usd));
70
+ }
71
+ //# sourceMappingURL=matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../../src/server/apm/matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * APM price-locked quote — a real, verifiable HMAC-signed quote.
3
+ *
4
+ * The quote binds {tool, price, chains, brokerage, expiry} so an agent can rely on
5
+ * the price for `ttl_sec`. Signed with HMAC-SHA256 over a canonical payload using
6
+ * APM_QUOTE_SECRET. If the secret is unset, the quote is still issued but marked
7
+ * `signed: false` (honest signalling — never a fake signature).
8
+ */
9
+ export interface QuoteTerms {
10
+ tool: string;
11
+ price_usd: string;
12
+ payment_chains: string[];
13
+ brokerage_commission_pct: number;
14
+ ttl_sec: number;
15
+ agent_id?: string;
16
+ }
17
+ export interface SignedQuote {
18
+ quote_id: string;
19
+ tool: string;
20
+ price_usd: string;
21
+ currency: 'USDC';
22
+ payment_chains: string[];
23
+ brokerage_commission_pct: number;
24
+ agent_id: string | null;
25
+ issued_at: string;
26
+ expires_at: string;
27
+ algo: 'HMAC-SHA256';
28
+ signature: string;
29
+ signed: boolean;
30
+ canonical: string;
31
+ }
32
+ export declare function createQuote(terms: QuoteTerms): SignedQuote;
33
+ /** Verify a quote's signature against APM_QUOTE_SECRET. Returns false if unsigned/unset. */
34
+ export declare function verifyQuote(canonical: string, signature: string): boolean;
35
+ export interface ParsedQuote {
36
+ tool: string;
37
+ price_usd: string;
38
+ currency: string;
39
+ payment_chains: string[];
40
+ brokerage_commission_pct: number;
41
+ agent_id: string | null;
42
+ issued_at: string;
43
+ expires_at: string;
44
+ }
45
+ export interface QuoteCheck {
46
+ valid: boolean;
47
+ expired: boolean;
48
+ reason?: string;
49
+ quote?: ParsedQuote;
50
+ }
51
+ /** Verify a quote's signature AND parse it, reporting expiry. Used by apm_execute. */
52
+ export declare function verifyAndParseQuote(canonical: string, signature: string): QuoteCheck;
53
+ //# sourceMappingURL=quote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote.d.ts","sourceRoot":"","sources":["../../../src/server/apm/quote.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAOD,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAuC1D;AAED,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAQzE;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAYpF"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ /**
3
+ * APM price-locked quote — a real, verifiable HMAC-signed quote.
4
+ *
5
+ * The quote binds {tool, price, chains, brokerage, expiry} so an agent can rely on
6
+ * the price for `ttl_sec`. Signed with HMAC-SHA256 over a canonical payload using
7
+ * APM_QUOTE_SECRET. If the secret is unset, the quote is still issued but marked
8
+ * `signed: false` (honest signalling — never a fake signature).
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.createQuote = createQuote;
12
+ exports.verifyQuote = verifyQuote;
13
+ exports.verifyAndParseQuote = verifyAndParseQuote;
14
+ const node_crypto_1 = require("node:crypto");
15
+ function canonicalize(payload) {
16
+ // Deterministic: sorted top-level keys (array form selects + orders keys).
17
+ return JSON.stringify(payload, Object.keys(payload).sort());
18
+ }
19
+ function createQuote(terms) {
20
+ const issuedMs = Date.now();
21
+ const expiresMs = issuedMs + terms.ttl_sec * 1000;
22
+ const payload = {
23
+ tool: terms.tool,
24
+ price_usd: terms.price_usd,
25
+ currency: 'USDC',
26
+ payment_chains: [...terms.payment_chains].sort(),
27
+ brokerage_commission_pct: terms.brokerage_commission_pct,
28
+ agent_id: terms.agent_id ?? null,
29
+ issued_at: new Date(issuedMs).toISOString(),
30
+ expires_at: new Date(expiresMs).toISOString(),
31
+ };
32
+ const canonical = canonicalize(payload);
33
+ const quoteId = (0, node_crypto_1.createHash)('sha256').update(canonical).digest('hex').slice(0, 24);
34
+ const secret = process.env['APM_QUOTE_SECRET'] ?? '';
35
+ const signed = secret.length > 0;
36
+ const signature = signed
37
+ ? (0, node_crypto_1.createHmac)('sha256', secret).update(canonical).digest('hex')
38
+ : '';
39
+ return {
40
+ quote_id: quoteId,
41
+ tool: payload.tool,
42
+ price_usd: payload.price_usd,
43
+ currency: payload.currency,
44
+ payment_chains: payload.payment_chains,
45
+ brokerage_commission_pct: payload.brokerage_commission_pct,
46
+ agent_id: payload.agent_id,
47
+ issued_at: payload.issued_at,
48
+ expires_at: payload.expires_at,
49
+ algo: 'HMAC-SHA256',
50
+ signature,
51
+ signed,
52
+ canonical,
53
+ };
54
+ }
55
+ /** Verify a quote's signature against APM_QUOTE_SECRET. Returns false if unsigned/unset. */
56
+ function verifyQuote(canonical, signature) {
57
+ const secret = process.env['APM_QUOTE_SECRET'] ?? '';
58
+ if (!secret || !signature)
59
+ return false;
60
+ const expected = (0, node_crypto_1.createHmac)('sha256', secret).update(canonical).digest('hex');
61
+ const a = Buffer.from(expected, 'hex');
62
+ const b = Buffer.from(signature, 'hex');
63
+ if (a.length !== b.length)
64
+ return false;
65
+ return (0, node_crypto_1.timingSafeEqual)(a, b);
66
+ }
67
+ /** Verify a quote's signature AND parse it, reporting expiry. Used by apm_execute. */
68
+ function verifyAndParseQuote(canonical, signature) {
69
+ if (!verifyQuote(canonical, signature)) {
70
+ return { valid: false, expired: false, reason: 'signature_invalid_or_unsigned' };
71
+ }
72
+ let parsed;
73
+ try {
74
+ parsed = JSON.parse(canonical);
75
+ }
76
+ catch {
77
+ return { valid: false, expired: false, reason: 'canonical_unparseable' };
78
+ }
79
+ const expired = Date.now() > new Date(parsed.expires_at).getTime();
80
+ return { valid: true, expired, quote: parsed };
81
+ }
82
+ //# sourceMappingURL=quote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote.js","sourceRoot":"","sources":["../../../src/server/apm/quote.ts"],"names":[],"mappings":"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"}