@oobe-protocol-labs/sap-mcp-server 0.9.16 → 0.9.20

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 (602) hide show
  1. package/.env.example +8 -7
  2. package/CHANGELOG.md +199 -0
  3. package/README.md +3 -3
  4. package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +1 -1
  5. package/USER_DOCS/04_CLIENT_CONFIGS.md +3 -3
  6. package/USER_DOCS/05_SKILLS_AND_TOOLS.md +16 -8
  7. package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +5 -5
  8. package/config.example.json +5 -4
  9. package/config.schema.json +7 -2
  10. package/config.secure-example.json +5 -4
  11. package/dist/adapters/index.d.ts +7 -1
  12. package/dist/adapters/index.d.ts.map +1 -1
  13. package/dist/adapters/index.js +7 -1
  14. package/dist/adapters/index.js.map +1 -1
  15. package/dist/adapters/mcp/errors.d.ts +13 -1
  16. package/dist/adapters/mcp/errors.d.ts.map +1 -1
  17. package/dist/adapters/mcp/errors.js +13 -1
  18. package/dist/adapters/mcp/errors.js.map +1 -1
  19. package/dist/adapters/mcp/index.d.ts +7 -1
  20. package/dist/adapters/mcp/index.d.ts.map +1 -1
  21. package/dist/adapters/mcp/index.js +7 -1
  22. package/dist/adapters/mcp/index.js.map +1 -1
  23. package/dist/adapters/mcp/prompt-response.d.ts +13 -1
  24. package/dist/adapters/mcp/prompt-response.d.ts.map +1 -1
  25. package/dist/adapters/mcp/prompt-response.js +13 -1
  26. package/dist/adapters/mcp/prompt-response.js.map +1 -1
  27. package/dist/adapters/mcp/resource-response.d.ts +14 -1
  28. package/dist/adapters/mcp/resource-response.d.ts.map +1 -1
  29. package/dist/adapters/mcp/resource-response.js +14 -1
  30. package/dist/adapters/mcp/resource-response.js.map +1 -1
  31. package/dist/adapters/mcp/sdk-compat.d.ts +11 -3
  32. package/dist/adapters/mcp/sdk-compat.d.ts.map +1 -1
  33. package/dist/adapters/mcp/sdk-compat.js +213 -24
  34. package/dist/adapters/mcp/sdk-compat.js.map +1 -1
  35. package/dist/adapters/mcp/tool-response.d.ts +39 -4
  36. package/dist/adapters/mcp/tool-response.d.ts.map +1 -1
  37. package/dist/adapters/mcp/tool-response.js +39 -4
  38. package/dist/adapters/mcp/tool-response.js.map +1 -1
  39. package/dist/adapters/solana/commitment.d.ts +14 -2
  40. package/dist/adapters/solana/commitment.d.ts.map +1 -1
  41. package/dist/adapters/solana/commitment.js +14 -2
  42. package/dist/adapters/solana/commitment.js.map +1 -1
  43. package/dist/adapters/solana/connection.d.ts +11 -2
  44. package/dist/adapters/solana/connection.d.ts.map +1 -1
  45. package/dist/adapters/solana/connection.js +11 -2
  46. package/dist/adapters/solana/connection.js.map +1 -1
  47. package/dist/adapters/solana/index.d.ts +7 -1
  48. package/dist/adapters/solana/index.d.ts.map +1 -1
  49. package/dist/adapters/solana/index.js +7 -1
  50. package/dist/adapters/solana/index.js.map +1 -1
  51. package/dist/adapters/solana/public-key.d.ts +11 -2
  52. package/dist/adapters/solana/public-key.d.ts.map +1 -1
  53. package/dist/adapters/solana/public-key.js +11 -2
  54. package/dist/adapters/solana/public-key.js.map +1 -1
  55. package/dist/config/defaults.d.ts +5 -0
  56. package/dist/config/defaults.d.ts.map +1 -1
  57. package/dist/config/defaults.js +5 -0
  58. package/dist/config/defaults.js.map +1 -1
  59. package/dist/config/env.d.ts +4 -0
  60. package/dist/config/env.d.ts.map +1 -1
  61. package/dist/config/env.js +11 -6
  62. package/dist/config/env.js.map +1 -1
  63. package/dist/config/index.d.ts +5 -0
  64. package/dist/config/index.d.ts.map +1 -1
  65. package/dist/config/index.js +5 -0
  66. package/dist/config/index.js.map +1 -1
  67. package/dist/config/mcp-client-injection.d.ts.map +1 -1
  68. package/dist/config/mcp-client-injection.js +97 -1
  69. package/dist/config/mcp-client-injection.js.map +1 -1
  70. package/dist/config/paths.d.ts +5 -0
  71. package/dist/config/paths.d.ts.map +1 -1
  72. package/dist/config/paths.js +5 -0
  73. package/dist/config/paths.js.map +1 -1
  74. package/dist/config/profiles.d.ts +3 -10
  75. package/dist/config/profiles.d.ts.map +1 -1
  76. package/dist/config/profiles.js +5 -0
  77. package/dist/config/profiles.js.map +1 -1
  78. package/dist/config/schema.d.ts +5 -0
  79. package/dist/config/schema.d.ts.map +1 -1
  80. package/dist/config/schema.js +5 -0
  81. package/dist/config/schema.js.map +1 -1
  82. package/dist/config/secure-config.d.ts +5 -0
  83. package/dist/config/secure-config.d.ts.map +1 -1
  84. package/dist/config/secure-config.js +5 -0
  85. package/dist/config/secure-config.js.map +1 -1
  86. package/dist/config/setup.d.ts +5 -0
  87. package/dist/config/setup.d.ts.map +1 -1
  88. package/dist/config/setup.js +5 -0
  89. package/dist/config/setup.js.map +1 -1
  90. package/dist/config-cli.d.ts +3 -13
  91. package/dist/config-cli.d.ts.map +1 -1
  92. package/dist/config-cli.js +5 -0
  93. package/dist/config-cli.js.map +1 -1
  94. package/dist/core/constants.d.ts +25 -6
  95. package/dist/core/constants.d.ts.map +1 -1
  96. package/dist/core/constants.js +27 -8
  97. package/dist/core/constants.js.map +1 -1
  98. package/dist/core/errors.d.ts +5 -0
  99. package/dist/core/errors.d.ts.map +1 -1
  100. package/dist/core/errors.js +5 -0
  101. package/dist/core/errors.js.map +1 -1
  102. package/dist/core/guards.d.ts +5 -0
  103. package/dist/core/guards.d.ts.map +1 -1
  104. package/dist/core/guards.js +3 -1
  105. package/dist/core/guards.js.map +1 -1
  106. package/dist/core/index.d.ts +7 -1
  107. package/dist/core/index.d.ts.map +1 -1
  108. package/dist/core/index.js +7 -1
  109. package/dist/core/index.js.map +1 -1
  110. package/dist/core/logger.js +1 -1
  111. package/dist/core/logger.js.map +1 -1
  112. package/dist/core/result.d.ts +77 -9
  113. package/dist/core/result.d.ts.map +1 -1
  114. package/dist/core/result.js +68 -9
  115. package/dist/core/result.js.map +1 -1
  116. package/dist/core/types.d.ts +5 -0
  117. package/dist/core/types.d.ts.map +1 -1
  118. package/dist/core/types.js +3 -4
  119. package/dist/core/types.js.map +1 -1
  120. package/dist/index.d.ts +5 -0
  121. package/dist/index.d.ts.map +1 -1
  122. package/dist/index.js +5 -0
  123. package/dist/index.js.map +1 -1
  124. package/dist/payments/facilitator-rpc-fallback.d.ts.map +1 -1
  125. package/dist/payments/facilitator-rpc-fallback.js +95 -0
  126. package/dist/payments/facilitator-rpc-fallback.js.map +1 -1
  127. package/dist/payments/hosted-tool-eligibility.d.ts +1 -0
  128. package/dist/payments/hosted-tool-eligibility.d.ts.map +1 -1
  129. package/dist/payments/hosted-tool-eligibility.js +1 -0
  130. package/dist/payments/hosted-tool-eligibility.js.map +1 -1
  131. package/dist/payments/mcp-session-cache.d.ts +35 -0
  132. package/dist/payments/mcp-session-cache.d.ts.map +1 -0
  133. package/dist/payments/mcp-session-cache.js +83 -0
  134. package/dist/payments/mcp-session-cache.js.map +1 -0
  135. package/dist/payments/monetization-gate.d.ts +5 -0
  136. package/dist/payments/monetization-gate.d.ts.map +1 -1
  137. package/dist/payments/monetization-gate.js +24 -1
  138. package/dist/payments/monetization-gate.js.map +1 -1
  139. package/dist/payments/pricing.d.ts +1 -0
  140. package/dist/payments/pricing.d.ts.map +1 -1
  141. package/dist/payments/pricing.js +64 -8
  142. package/dist/payments/pricing.js.map +1 -1
  143. package/dist/payments/usage-ledger.d.ts +36 -2
  144. package/dist/payments/usage-ledger.d.ts.map +1 -1
  145. package/dist/payments/usage-ledger.js +121 -4
  146. package/dist/payments/usage-ledger.js.map +1 -1
  147. package/dist/payments/x402-paid-call.d.ts +50 -0
  148. package/dist/payments/x402-paid-call.d.ts.map +1 -1
  149. package/dist/payments/x402-paid-call.js +171 -0
  150. package/dist/payments/x402-paid-call.js.map +1 -1
  151. package/dist/policy/default-policies.d.ts +18 -2
  152. package/dist/policy/default-policies.d.ts.map +1 -1
  153. package/dist/policy/default-policies.js +18 -2
  154. package/dist/policy/default-policies.js.map +1 -1
  155. package/dist/policy/index.d.ts +6 -3
  156. package/dist/policy/index.d.ts.map +1 -1
  157. package/dist/policy/index.js +6 -3
  158. package/dist/policy/index.js.map +1 -1
  159. package/dist/policy/local-policy-engine.d.ts +71 -13
  160. package/dist/policy/local-policy-engine.d.ts.map +1 -1
  161. package/dist/policy/local-policy-engine.js +33 -11
  162. package/dist/policy/local-policy-engine.js.map +1 -1
  163. package/dist/policy/permission-checks.d.ts +29 -3
  164. package/dist/policy/permission-checks.d.ts.map +1 -1
  165. package/dist/policy/permission-checks.js +29 -3
  166. package/dist/policy/permission-checks.js.map +1 -1
  167. package/dist/policy/policy-engine.d.ts +22 -2
  168. package/dist/policy/policy-engine.d.ts.map +1 -1
  169. package/dist/policy/policy-engine.js +22 -2
  170. package/dist/policy/policy-engine.js.map +1 -1
  171. package/dist/policy/policy-types.d.ts +55 -5
  172. package/dist/policy/policy-types.d.ts.map +1 -1
  173. package/dist/policy/policy-types.js +8 -1
  174. package/dist/policy/policy-types.js.map +1 -1
  175. package/dist/policy/risk-level.d.ts +32 -3
  176. package/dist/policy/risk-level.d.ts.map +1 -1
  177. package/dist/policy/risk-level.js +32 -3
  178. package/dist/policy/risk-level.js.map +1 -1
  179. package/dist/policy/spending-limits.d.ts +29 -3
  180. package/dist/policy/spending-limits.d.ts.map +1 -1
  181. package/dist/policy/spending-limits.js +29 -3
  182. package/dist/policy/spending-limits.js.map +1 -1
  183. package/dist/premium/activation-manager.d.ts +43 -0
  184. package/dist/premium/activation-manager.d.ts.map +1 -0
  185. package/dist/premium/activation-manager.js +131 -0
  186. package/dist/premium/activation-manager.js.map +1 -0
  187. package/dist/premium/builtin-plugins.d.ts +143 -0
  188. package/dist/premium/builtin-plugins.d.ts.map +1 -0
  189. package/dist/premium/builtin-plugins.js +394 -0
  190. package/dist/premium/builtin-plugins.js.map +1 -0
  191. package/dist/premium/event-store.d.ts +61 -0
  192. package/dist/premium/event-store.d.ts.map +1 -0
  193. package/dist/premium/event-store.js +130 -0
  194. package/dist/premium/event-store.js.map +1 -0
  195. package/dist/premium/index.d.ts +54 -0
  196. package/dist/premium/index.d.ts.map +1 -0
  197. package/dist/premium/index.js +54 -0
  198. package/dist/premium/index.js.map +1 -0
  199. package/dist/premium/manifest-builder.d.ts +65 -0
  200. package/dist/premium/manifest-builder.d.ts.map +1 -0
  201. package/dist/premium/manifest-builder.js +182 -0
  202. package/dist/premium/manifest-builder.js.map +1 -0
  203. package/dist/premium/meme-radar-capabilities.d.ts +38 -0
  204. package/dist/premium/meme-radar-capabilities.d.ts.map +1 -0
  205. package/dist/premium/meme-radar-capabilities.js +306 -0
  206. package/dist/premium/meme-radar-capabilities.js.map +1 -0
  207. package/dist/premium/metrics.d.ts +27 -0
  208. package/dist/premium/metrics.d.ts.map +1 -0
  209. package/dist/premium/metrics.js +65 -0
  210. package/dist/premium/metrics.js.map +1 -0
  211. package/dist/premium/plugin-validator.d.ts +39 -0
  212. package/dist/premium/plugin-validator.d.ts.map +1 -0
  213. package/dist/premium/plugin-validator.js +325 -0
  214. package/dist/premium/plugin-validator.js.map +1 -0
  215. package/dist/premium/private-manifest-loader.d.ts +111 -0
  216. package/dist/premium/private-manifest-loader.d.ts.map +1 -0
  217. package/dist/premium/private-manifest-loader.js +285 -0
  218. package/dist/premium/private-manifest-loader.js.map +1 -0
  219. package/dist/premium/provider-bridge.d.ts +109 -0
  220. package/dist/premium/provider-bridge.d.ts.map +1 -0
  221. package/dist/premium/provider-bridge.js +239 -0
  222. package/dist/premium/provider-bridge.js.map +1 -0
  223. package/dist/premium/session-manager.d.ts +125 -0
  224. package/dist/premium/session-manager.d.ts.map +1 -0
  225. package/dist/premium/session-manager.js +337 -0
  226. package/dist/premium/session-manager.js.map +1 -0
  227. package/dist/premium/stream-broker.d.ts +98 -0
  228. package/dist/premium/stream-broker.d.ts.map +1 -0
  229. package/dist/premium/stream-broker.js +199 -0
  230. package/dist/premium/stream-broker.js.map +1 -0
  231. package/dist/premium/tech-fundamentals-capabilities.d.ts +37 -0
  232. package/dist/premium/tech-fundamentals-capabilities.d.ts.map +1 -0
  233. package/dist/premium/tech-fundamentals-capabilities.js +283 -0
  234. package/dist/premium/tech-fundamentals-capabilities.js.map +1 -0
  235. package/dist/premium/trading-capabilities.d.ts +36 -0
  236. package/dist/premium/trading-capabilities.d.ts.map +1 -0
  237. package/dist/premium/trading-capabilities.js +205 -0
  238. package/dist/premium/trading-capabilities.js.map +1 -0
  239. package/dist/premium/types.d.ts +518 -0
  240. package/dist/premium/types.d.ts.map +1 -0
  241. package/dist/premium/types.js +23 -0
  242. package/dist/premium/types.js.map +1 -0
  243. package/dist/premium/webhook-engine.d.ts +102 -0
  244. package/dist/premium/webhook-engine.d.ts.map +1 -0
  245. package/dist/premium/webhook-engine.js +382 -0
  246. package/dist/premium/webhook-engine.js.map +1 -0
  247. package/dist/prompts/context/sap-agent-context.prompt.d.ts +5 -0
  248. package/dist/prompts/context/sap-agent-context.prompt.d.ts.map +1 -1
  249. package/dist/prompts/context/sap-agent-context.prompt.js +2 -8
  250. package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
  251. package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts +14 -0
  252. package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts.map +1 -0
  253. package/dist/prompts/context/sap-agent-intent-router.prompt.js +155 -0
  254. package/dist/prompts/context/sap-agent-intent-router.prompt.js.map +1 -0
  255. package/dist/prompts/context/sap-agent-start.prompt.js +1 -0
  256. package/dist/prompts/context/sap-agent-start.prompt.js.map +1 -1
  257. package/dist/prompts/developer/debug-sap-error.prompt.d.ts +5 -0
  258. package/dist/prompts/developer/debug-sap-error.prompt.d.ts.map +1 -1
  259. package/dist/prompts/developer/debug-sap-error.prompt.js +3 -4
  260. package/dist/prompts/developer/debug-sap-error.prompt.js.map +1 -1
  261. package/dist/prompts/developer/generate-sap-integration.prompt.d.ts +5 -0
  262. package/dist/prompts/developer/generate-sap-integration.prompt.d.ts.map +1 -1
  263. package/dist/prompts/developer/generate-sap-integration.prompt.js +3 -4
  264. package/dist/prompts/developer/generate-sap-integration.prompt.js.map +1 -1
  265. package/dist/prompts/developer/index.d.ts +4 -1
  266. package/dist/prompts/developer/index.d.ts.map +1 -1
  267. package/dist/prompts/developer/index.js +4 -1
  268. package/dist/prompts/developer/index.js.map +1 -1
  269. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts +5 -0
  270. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts.map +1 -1
  271. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js +3 -4
  272. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js.map +1 -1
  273. package/dist/prompts/execution-proof/index.d.ts +4 -1
  274. package/dist/prompts/execution-proof/index.d.ts.map +1 -1
  275. package/dist/prompts/execution-proof/index.js +4 -1
  276. package/dist/prompts/execution-proof/index.js.map +1 -1
  277. package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts +5 -0
  278. package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts.map +1 -1
  279. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js +3 -4
  280. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js.map +1 -1
  281. package/dist/prompts/index.d.ts +4 -1
  282. package/dist/prompts/index.d.ts.map +1 -1
  283. package/dist/prompts/index.js +4 -1
  284. package/dist/prompts/index.js.map +1 -1
  285. package/dist/prompts/payments/create-paid-api.prompt.d.ts +5 -0
  286. package/dist/prompts/payments/create-paid-api.prompt.d.ts.map +1 -1
  287. package/dist/prompts/payments/create-paid-api.prompt.js +3 -4
  288. package/dist/prompts/payments/create-paid-api.prompt.js.map +1 -1
  289. package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts +5 -0
  290. package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts.map +1 -1
  291. package/dist/prompts/payments/explain-x402-settlement.prompt.js +3 -4
  292. package/dist/prompts/payments/explain-x402-settlement.prompt.js.map +1 -1
  293. package/dist/prompts/payments/index.d.ts +4 -1
  294. package/dist/prompts/payments/index.d.ts.map +1 -1
  295. package/dist/prompts/payments/index.js +4 -1
  296. package/dist/prompts/payments/index.js.map +1 -1
  297. package/dist/prompts/register-prompts.d.ts +18 -2
  298. package/dist/prompts/register-prompts.d.ts.map +1 -1
  299. package/dist/prompts/register-prompts.js +21 -3
  300. package/dist/prompts/register-prompts.js.map +1 -1
  301. package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts +5 -0
  302. package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts.map +1 -1
  303. package/dist/prompts/registry/analyze-sap-agent.prompt.js +3 -4
  304. package/dist/prompts/registry/analyze-sap-agent.prompt.js.map +1 -1
  305. package/dist/prompts/registry/index.d.ts +4 -1
  306. package/dist/prompts/registry/index.d.ts.map +1 -1
  307. package/dist/prompts/registry/index.js +4 -1
  308. package/dist/prompts/registry/index.js.map +1 -1
  309. package/dist/prompts/registry/register-sap-agent.prompt.d.ts +5 -0
  310. package/dist/prompts/registry/register-sap-agent.prompt.d.ts.map +1 -1
  311. package/dist/prompts/registry/register-sap-agent.prompt.js +3 -4
  312. package/dist/prompts/registry/register-sap-agent.prompt.js.map +1 -1
  313. package/dist/remote/premium-memory.d.ts +90 -0
  314. package/dist/remote/premium-memory.d.ts.map +1 -0
  315. package/dist/remote/premium-memory.js +161 -0
  316. package/dist/remote/premium-memory.js.map +1 -0
  317. package/dist/remote/premium-routes.d.ts +99 -0
  318. package/dist/remote/premium-routes.d.ts.map +1 -0
  319. package/dist/remote/premium-routes.js +346 -0
  320. package/dist/remote/premium-routes.js.map +1 -0
  321. package/dist/remote/public-home/sections.d.ts.map +1 -1
  322. package/dist/remote/public-home/sections.js +7 -1
  323. package/dist/remote/public-home/sections.js.map +1 -1
  324. package/dist/remote/public-home/types.d.ts +6 -0
  325. package/dist/remote/public-home/types.d.ts.map +1 -1
  326. package/dist/remote/server.d.ts +18 -0
  327. package/dist/remote/server.d.ts.map +1 -1
  328. package/dist/remote/server.js +298 -116
  329. package/dist/remote/server.js.map +1 -1
  330. package/dist/remote/tx-relay.d.ts +42 -0
  331. package/dist/remote/tx-relay.d.ts.map +1 -0
  332. package/dist/remote/tx-relay.js +118 -0
  333. package/dist/remote/tx-relay.js.map +1 -0
  334. package/dist/resources/current/sap-current-config.resource.d.ts +5 -0
  335. package/dist/resources/current/sap-current-config.resource.d.ts.map +1 -1
  336. package/dist/resources/current/sap-current-config.resource.js +2 -5
  337. package/dist/resources/current/sap-current-config.resource.js.map +1 -1
  338. package/dist/resources/execution-proof/index.d.ts +5 -0
  339. package/dist/resources/execution-proof/index.d.ts.map +1 -1
  340. package/dist/resources/execution-proof/index.js +5 -0
  341. package/dist/resources/execution-proof/index.js.map +1 -1
  342. package/dist/resources/execution-proof/sap-execution-record.resource.d.ts +5 -0
  343. package/dist/resources/execution-proof/sap-execution-record.resource.d.ts.map +1 -1
  344. package/dist/resources/execution-proof/sap-execution-record.resource.js +3 -4
  345. package/dist/resources/execution-proof/sap-execution-record.resource.js.map +1 -1
  346. package/dist/resources/index.d.ts +5 -0
  347. package/dist/resources/index.d.ts.map +1 -1
  348. package/dist/resources/index.js +5 -0
  349. package/dist/resources/index.js.map +1 -1
  350. package/dist/resources/memory/index.d.ts +5 -0
  351. package/dist/resources/memory/index.d.ts.map +1 -1
  352. package/dist/resources/memory/index.js +5 -0
  353. package/dist/resources/memory/index.js.map +1 -1
  354. package/dist/resources/memory/sap-memory.resource.d.ts +5 -0
  355. package/dist/resources/memory/sap-memory.resource.d.ts.map +1 -1
  356. package/dist/resources/memory/sap-memory.resource.js +3 -4
  357. package/dist/resources/memory/sap-memory.resource.js.map +1 -1
  358. package/dist/resources/profile/sap-active-profile.resource.d.ts +5 -0
  359. package/dist/resources/profile/sap-active-profile.resource.d.ts.map +1 -1
  360. package/dist/resources/profile/sap-active-profile.resource.js +2 -5
  361. package/dist/resources/profile/sap-active-profile.resource.js.map +1 -1
  362. package/dist/resources/register-resources.d.ts +5 -0
  363. package/dist/resources/register-resources.d.ts.map +1 -1
  364. package/dist/resources/register-resources.js +3 -1
  365. package/dist/resources/register-resources.js.map +1 -1
  366. package/dist/resources/registry/index.d.ts +5 -0
  367. package/dist/resources/registry/index.d.ts.map +1 -1
  368. package/dist/resources/registry/index.js +5 -0
  369. package/dist/resources/registry/index.js.map +1 -1
  370. package/dist/resources/registry/sap-agent.resource.d.ts +5 -0
  371. package/dist/resources/registry/sap-agent.resource.d.ts.map +1 -1
  372. package/dist/resources/registry/sap-agent.resource.js +3 -4
  373. package/dist/resources/registry/sap-agent.resource.js.map +1 -1
  374. package/dist/resources/registry/sap-global-registry.resource.d.ts +18 -4
  375. package/dist/resources/registry/sap-global-registry.resource.d.ts.map +1 -1
  376. package/dist/resources/registry/sap-global-registry.resource.js +18 -4
  377. package/dist/resources/registry/sap-global-registry.resource.js.map +1 -1
  378. package/dist/resources/reputation/index.d.ts +4 -1
  379. package/dist/resources/reputation/index.d.ts.map +1 -1
  380. package/dist/resources/reputation/index.js +4 -1
  381. package/dist/resources/reputation/index.js.map +1 -1
  382. package/dist/resources/reputation/sap-reputation.resource.d.ts +18 -4
  383. package/dist/resources/reputation/sap-reputation.resource.d.ts.map +1 -1
  384. package/dist/resources/reputation/sap-reputation.resource.js +18 -4
  385. package/dist/resources/reputation/sap-reputation.resource.js.map +1 -1
  386. package/dist/resources/tool-schema/index.d.ts +4 -1
  387. package/dist/resources/tool-schema/index.d.ts.map +1 -1
  388. package/dist/resources/tool-schema/index.js +4 -1
  389. package/dist/resources/tool-schema/index.js.map +1 -1
  390. package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts +18 -4
  391. package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts.map +1 -1
  392. package/dist/resources/tool-schema/sap-tool-schema.resource.js +18 -4
  393. package/dist/resources/tool-schema/sap-tool-schema.resource.js.map +1 -1
  394. package/dist/sap/index.d.ts +7 -1
  395. package/dist/sap/index.d.ts.map +1 -1
  396. package/dist/sap/index.js +7 -1
  397. package/dist/sap/index.js.map +1 -1
  398. package/dist/sap/sap-client-manager.d.ts +80 -13
  399. package/dist/sap/sap-client-manager.d.ts.map +1 -1
  400. package/dist/sap/sap-client-manager.js +80 -13
  401. package/dist/sap/sap-client-manager.js.map +1 -1
  402. package/dist/sap/sap-errors.d.ts +22 -3
  403. package/dist/sap/sap-errors.d.ts.map +1 -1
  404. package/dist/sap/sap-errors.js +22 -3
  405. package/dist/sap/sap-errors.js.map +1 -1
  406. package/dist/sap/sap-types.d.ts +75 -6
  407. package/dist/sap/sap-types.d.ts.map +1 -1
  408. package/dist/sap/sap-types.js +11 -1
  409. package/dist/sap/sap-types.js.map +1 -1
  410. package/dist/schemas/common.schema.d.ts +45 -8
  411. package/dist/schemas/common.schema.d.ts.map +1 -1
  412. package/dist/schemas/common.schema.js +45 -8
  413. package/dist/schemas/common.schema.js.map +1 -1
  414. package/dist/schemas/developer.schema.d.ts +22 -3
  415. package/dist/schemas/developer.schema.d.ts.map +1 -1
  416. package/dist/schemas/developer.schema.js +22 -3
  417. package/dist/schemas/developer.schema.js.map +1 -1
  418. package/dist/schemas/execution-proof.schema.d.ts +29 -4
  419. package/dist/schemas/execution-proof.schema.d.ts.map +1 -1
  420. package/dist/schemas/execution-proof.schema.js +29 -4
  421. package/dist/schemas/execution-proof.schema.js.map +1 -1
  422. package/dist/schemas/identity.schema.d.ts +23 -3
  423. package/dist/schemas/identity.schema.d.ts.map +1 -1
  424. package/dist/schemas/identity.schema.js +23 -3
  425. package/dist/schemas/identity.schema.js.map +1 -1
  426. package/dist/schemas/index.d.ts +11 -1
  427. package/dist/schemas/index.d.ts.map +1 -1
  428. package/dist/schemas/index.js +11 -1
  429. package/dist/schemas/index.js.map +1 -1
  430. package/dist/schemas/memory.schema.d.ts +23 -3
  431. package/dist/schemas/memory.schema.d.ts.map +1 -1
  432. package/dist/schemas/memory.schema.js +23 -3
  433. package/dist/schemas/memory.schema.js.map +1 -1
  434. package/dist/schemas/payments.schema.d.ts +24 -3
  435. package/dist/schemas/payments.schema.d.ts.map +1 -1
  436. package/dist/schemas/payments.schema.js +24 -3
  437. package/dist/schemas/payments.schema.js.map +1 -1
  438. package/dist/schemas/registry.schema.d.ts +36 -4
  439. package/dist/schemas/registry.schema.d.ts.map +1 -1
  440. package/dist/schemas/registry.schema.js +36 -4
  441. package/dist/schemas/registry.schema.js.map +1 -1
  442. package/dist/schemas/reputation.schema.d.ts +22 -3
  443. package/dist/schemas/reputation.schema.d.ts.map +1 -1
  444. package/dist/schemas/reputation.schema.js +22 -3
  445. package/dist/schemas/reputation.schema.js.map +1 -1
  446. package/dist/schemas/settlement.schema.d.ts +31 -4
  447. package/dist/schemas/settlement.schema.d.ts.map +1 -1
  448. package/dist/schemas/settlement.schema.js +31 -4
  449. package/dist/schemas/settlement.schema.js.map +1 -1
  450. package/dist/schemas/tool-schema.schema.d.ts +29 -3
  451. package/dist/schemas/tool-schema.schema.d.ts.map +1 -1
  452. package/dist/schemas/tool-schema.schema.js +29 -3
  453. package/dist/schemas/tool-schema.schema.js.map +1 -1
  454. package/dist/schemas/transaction.schema.d.ts +23 -3
  455. package/dist/schemas/transaction.schema.d.ts.map +1 -1
  456. package/dist/schemas/transaction.schema.js +23 -3
  457. package/dist/schemas/transaction.schema.js.map +1 -1
  458. package/dist/security/approval-required.d.ts +19 -2
  459. package/dist/security/approval-required.d.ts.map +1 -1
  460. package/dist/security/approval-required.js +19 -2
  461. package/dist/security/approval-required.js.map +1 -1
  462. package/dist/security/index.d.ts +7 -1
  463. package/dist/security/index.d.ts.map +1 -1
  464. package/dist/security/index.js +7 -1
  465. package/dist/security/index.js.map +1 -1
  466. package/dist/security/private-key-guard.d.ts +18 -2
  467. package/dist/security/private-key-guard.d.ts.map +1 -1
  468. package/dist/security/private-key-guard.js +19 -2
  469. package/dist/security/private-key-guard.js.map +1 -1
  470. package/dist/security/prompt-injection-notes.d.ts +10 -1
  471. package/dist/security/prompt-injection-notes.d.ts.map +1 -1
  472. package/dist/security/prompt-injection-notes.js +10 -1
  473. package/dist/security/prompt-injection-notes.js.map +1 -1
  474. package/dist/security/unsafe-action-guard.d.ts +36 -10
  475. package/dist/security/unsafe-action-guard.d.ts.map +1 -1
  476. package/dist/security/unsafe-action-guard.js +67 -15
  477. package/dist/security/unsafe-action-guard.js.map +1 -1
  478. package/dist/server/create-server.d.ts +18 -3
  479. package/dist/server/create-server.d.ts.map +1 -1
  480. package/dist/server/create-server.js +18 -3
  481. package/dist/server/create-server.js.map +1 -1
  482. package/dist/server/index.d.ts +6 -1
  483. package/dist/server/index.d.ts.map +1 -1
  484. package/dist/server/index.js +6 -1
  485. package/dist/server/index.js.map +1 -1
  486. package/dist/server/register-capabilities.d.ts +17 -2
  487. package/dist/server/register-capabilities.d.ts.map +1 -1
  488. package/dist/server/register-capabilities.js +17 -2
  489. package/dist/server/register-capabilities.js.map +1 -1
  490. package/dist/server/server-metadata.d.ts +34 -1
  491. package/dist/server/server-metadata.d.ts.map +1 -1
  492. package/dist/server/server-metadata.js +35 -2
  493. package/dist/server/server-metadata.js.map +1 -1
  494. package/dist/session/agent-session.d.ts +35 -4
  495. package/dist/session/agent-session.d.ts.map +1 -1
  496. package/dist/session/agent-session.js +35 -4
  497. package/dist/session/agent-session.js.map +1 -1
  498. package/dist/session/delegated-session.d.ts +31 -3
  499. package/dist/session/delegated-session.d.ts.map +1 -1
  500. package/dist/session/delegated-session.js +31 -3
  501. package/dist/session/delegated-session.js.map +1 -1
  502. package/dist/session/index.d.ts +7 -1
  503. package/dist/session/index.d.ts.map +1 -1
  504. package/dist/session/index.js +7 -1
  505. package/dist/session/index.js.map +1 -1
  506. package/dist/session/redis-session-store.d.ts +94 -21
  507. package/dist/session/redis-session-store.d.ts.map +1 -1
  508. package/dist/session/redis-session-store.js +87 -20
  509. package/dist/session/redis-session-store.js.map +1 -1
  510. package/dist/session/session-limits.d.ts +34 -4
  511. package/dist/session/session-limits.d.ts.map +1 -1
  512. package/dist/session/session-limits.js +34 -4
  513. package/dist/session/session-limits.js.map +1 -1
  514. package/dist/session/session-permissions.d.ts +57 -7
  515. package/dist/session/session-permissions.d.ts.map +1 -1
  516. package/dist/session/session-permissions.js +57 -7
  517. package/dist/session/session-permissions.js.map +1 -1
  518. package/dist/session/session-store.d.ts +9 -1
  519. package/dist/session/session-store.d.ts.map +1 -1
  520. package/dist/session/session-store.js +18 -3
  521. package/dist/session/session-store.js.map +1 -1
  522. package/dist/session/session-types.d.ts +33 -4
  523. package/dist/session/session-types.d.ts.map +1 -1
  524. package/dist/session/session-types.js +9 -1
  525. package/dist/session/session-types.js.map +1 -1
  526. package/dist/signer/index.d.ts +7 -1
  527. package/dist/signer/index.d.ts.map +1 -1
  528. package/dist/signer/index.js +7 -1
  529. package/dist/signer/index.js.map +1 -1
  530. package/dist/signer/load-keypair.d.ts +25 -4
  531. package/dist/signer/load-keypair.d.ts.map +1 -1
  532. package/dist/signer/load-keypair.js +25 -4
  533. package/dist/signer/load-keypair.js.map +1 -1
  534. package/dist/signer/local-keypair-signer.d.ts +16 -2
  535. package/dist/signer/local-keypair-signer.d.ts.map +1 -1
  536. package/dist/signer/local-keypair-signer.js +16 -2
  537. package/dist/signer/local-keypair-signer.js.map +1 -1
  538. package/dist/signer/signer-resolver.d.ts +19 -2
  539. package/dist/signer/signer-resolver.d.ts.map +1 -1
  540. package/dist/signer/signer-resolver.js +26 -3
  541. package/dist/signer/signer-resolver.js.map +1 -1
  542. package/dist/signer/signer-types.d.ts +47 -5
  543. package/dist/signer/signer-types.d.ts.map +1 -1
  544. package/dist/signer/signer-types.js +13 -1
  545. package/dist/signer/signer-types.js.map +1 -1
  546. package/dist/tools/agent-start-tool.js +20 -1
  547. package/dist/tools/agent-start-tool.js.map +1 -1
  548. package/dist/tools/client-sdk-tools.d.ts.map +1 -1
  549. package/dist/tools/client-sdk-tools.js +27 -2
  550. package/dist/tools/client-sdk-tools.js.map +1 -1
  551. package/dist/tools/estimate-tool-cost.d.ts +13 -0
  552. package/dist/tools/estimate-tool-cost.d.ts.map +1 -0
  553. package/dist/tools/estimate-tool-cost.js +139 -0
  554. package/dist/tools/estimate-tool-cost.js.map +1 -0
  555. package/dist/tools/index.d.ts +6 -0
  556. package/dist/tools/index.d.ts.map +1 -1
  557. package/dist/tools/index.js +7 -0
  558. package/dist/tools/index.js.map +1 -1
  559. package/dist/tools/magicblock-tools.d.ts +25 -0
  560. package/dist/tools/magicblock-tools.d.ts.map +1 -1
  561. package/dist/tools/magicblock-tools.js +116 -8
  562. package/dist/tools/magicblock-tools.js.map +1 -1
  563. package/dist/tools/perp-tools.d.ts +39 -0
  564. package/dist/tools/perp-tools.d.ts.map +1 -0
  565. package/dist/tools/perp-tools.js +1110 -0
  566. package/dist/tools/perp-tools.js.map +1 -0
  567. package/dist/tools/premium-tools.d.ts +8 -0
  568. package/dist/tools/premium-tools.d.ts.map +1 -0
  569. package/dist/tools/premium-tools.js +732 -0
  570. package/dist/tools/premium-tools.js.map +1 -0
  571. package/dist/tools/register-tools.d.ts.map +1 -1
  572. package/dist/tools/register-tools.js +9 -0
  573. package/dist/tools/register-tools.js.map +1 -1
  574. package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
  575. package/dist/tools/sap-sdk-tools.js +42 -32
  576. package/dist/tools/sap-sdk-tools.js.map +1 -1
  577. package/dist/tools/x402-paid-call-tool.js +2 -2
  578. package/dist/tools/x402-paid-call-tool.js.map +1 -1
  579. package/dist/transports/index.d.ts +6 -1
  580. package/dist/transports/index.d.ts.map +1 -1
  581. package/dist/transports/index.js +6 -1
  582. package/dist/transports/index.js.map +1 -1
  583. package/dist/transports/stdio.d.ts +17 -5
  584. package/dist/transports/stdio.d.ts.map +1 -1
  585. package/dist/transports/stdio.js +17 -5
  586. package/dist/transports/stdio.js.map +1 -1
  587. package/dist/tui/wizard-save.d.ts +88 -8
  588. package/dist/tui/wizard-save.d.ts.map +1 -1
  589. package/dist/tui/wizard-save.js +77 -8
  590. package/dist/tui/wizard-save.js.map +1 -1
  591. package/docs/06_PAYMENTS_X402_AND_PAYSH.md +3 -3
  592. package/docs/07_ENDPOINTS_AND_CLIENTS.md +4 -1
  593. package/docs/14_DESKTOP_WIZARD_RELEASE.md +3 -3
  594. package/docs/16_SAP_AGENT_IDENTITY_PIPELINE.md +6 -0
  595. package/docs/18_PREMIUM_PLUGIN_RUNTIME.md +108 -0
  596. package/docs/README.md +12 -0
  597. package/package.json +8 -9
  598. package/server.json +3 -3
  599. package/skills/sap-agent-registry/SKILL.md +6 -0
  600. package/skills/sap-mcp/SKILL.md +27 -4
  601. package/skills/sap-mcp/TOOL_REFERENCE.md +4 -1
  602. package/skills/sap-payments-x402/SKILL.md +22 -8
@@ -0,0 +1,382 @@
1
+ /**
2
+ * @name premium/webhook-engine
3
+ * @description Signed webhook delivery engine for premium event callbacks.
4
+ *
5
+ * After a session is activated, the webhook engine registers a buyer-owned
6
+ * HTTPS endpoint, subscribes to the provider for matching events, signs each
7
+ * delivery with HMAC-SHA256, and dispatches it via HTTP POST.
8
+ *
9
+ * The engine enforces:
10
+ * - Event filtering: only delivers event ids listed in the subscription.
11
+ * - URL validation: rejects localhost, private networks, and non-HTTPS URLs.
12
+ * - Signing: HMAC-SHA256 over `{deliveryId, deliveredAt, payload}` using
13
+ * the `SAP_MCP_PREMIUM_WEBHOOK_SIGNER` env var.
14
+ * - Retry: up to 3 attempts with exponential backoff for non-2xx responses.
15
+ * - Unit quota: decrements after each successful delivery.
16
+ * - Idempotency: deduplicates via `eventId` in the event store.
17
+ *
18
+ * @flow
19
+ * 1. Buyer calls `POST /premium/webhook/register` with targetUrl + events.
20
+ * 2. → `registerWebhook()` validates URL, creates subscription.
21
+ * 3. Engine subscribes to provider, receives events matching the subscription.
22
+ * 4. For each matching event: sign, POST to targetUrl, record delivery.
23
+ * 5. Buyer can check delivery status via `getWebhookDeliveryStatus()`.
24
+ *
25
+ * @module premium/webhook-engine
26
+ */
27
+ import { createHmac, randomUUID } from 'node:crypto';
28
+ import { request } from 'node:https';
29
+ import { request as httpRequest } from 'node:http';
30
+ import { URL } from 'node:url';
31
+ import { getPremiumSession, decrementSessionQuota, closeSession } from './session-manager.js';
32
+ import { subscribeToProvider } from './provider-bridge.js';
33
+ import { appendEvent } from './event-store.js';
34
+ /**
35
+ * @description Registry of active webhook subscriptions keyed by subscription id.
36
+ */
37
+ const webhookSubscriptions = new Map();
38
+ /**
39
+ * @description Delivery attempt records keyed by delivery id.
40
+ */
41
+ const deliveryRecords = new Map();
42
+ /**
43
+ * @description Hard cap on stored delivery records.
44
+ *
45
+ * Default: 100_000 (tuned for a 312GB RAM production server).
46
+ * Each record is ~512B, so 100K records ≈ 50MB.
47
+ * Override via `SAP_MCP_PREMIUM_MAX_DELIVERIES` env var.
48
+ */
49
+ const MAX_DELIVERY_RECORDS = (() => {
50
+ const raw = process.env.SAP_MCP_PREMIUM_MAX_DELIVERIES;
51
+ const parsed = Number(raw);
52
+ return Number.isFinite(parsed) && parsed > 0 ? Math.trunc(parsed) : 100_000;
53
+ })();
54
+ /**
55
+ * @description Maximum retry attempts per delivery.
56
+ */
57
+ const MAX_RETRIES = 3;
58
+ /**
59
+ * @description Base delay for exponential backoff in milliseconds.
60
+ */
61
+ const RETRY_BASE_DELAY_MS = 500;
62
+ /**
63
+ * @name validateWebhookUrl
64
+ * @description Validate that a webhook target URL is safe for delivery.
65
+ *
66
+ * Rejects:
67
+ * - Non-HTTPS URLs in production (allow HTTP for localhost testing).
68
+ * - localhost, 127.0.0.1, 0.0.0.0, private network ranges (10.x, 172.16-31.x, 192.168.x).
69
+ *
70
+ * @param targetUrl - The URL to validate.
71
+ * @returns True if the URL is safe for webhook delivery.
72
+ *
73
+ * @internal
74
+ */
75
+ function validateWebhookUrl(targetUrl) {
76
+ let parsed;
77
+ try {
78
+ parsed = new URL(targetUrl);
79
+ }
80
+ catch {
81
+ return false;
82
+ }
83
+ // Must be HTTPS in production. Allow HTTP only for localhost testing.
84
+ const isLocalhost = parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1';
85
+ if (parsed.protocol !== 'https:' && !isLocalhost)
86
+ return false;
87
+ // Block private network ranges (SSRF prevention).
88
+ const host = parsed.hostname;
89
+ if (host.startsWith('10.') ||
90
+ host.startsWith('172.16.') || host.startsWith('172.17.') || host.startsWith('172.18.') ||
91
+ host.startsWith('172.19.') || host.startsWith('172.20.') || host.startsWith('172.21.') ||
92
+ host.startsWith('172.22.') || host.startsWith('172.23.') || host.startsWith('172.24.') ||
93
+ host.startsWith('172.25.') || host.startsWith('172.26.') || host.startsWith('172.27.') ||
94
+ host.startsWith('172.28.') || host.startsWith('172.29.') || host.startsWith('172.30.') ||
95
+ host.startsWith('172.31.') ||
96
+ host.startsWith('192.168.') ||
97
+ host === '0.0.0.0' ||
98
+ host === '::1' ||
99
+ host.startsWith('fe80:')) {
100
+ return false;
101
+ }
102
+ return true;
103
+ }
104
+ /**
105
+ * @name signDelivery
106
+ * @description Sign a webhook delivery payload with HMAC-SHA256.
107
+ *
108
+ * The signature is computed over the string `${deliveryId}.${deliveredAt}.${JSON.stringify(payload)}`
109
+ * using the `SAP_MCP_PREMIUM_WEBHOOK_SIGNER` env var as the key.
110
+ *
111
+ * @param deliveryId - The unique delivery id.
112
+ * @param deliveredAt - ISO timestamp of the delivery.
113
+ * @param payload - The event payload to sign.
114
+ * @returns Hex-encoded HMAC-SHA256 signature.
115
+ *
116
+ * @internal
117
+ */
118
+ function signDelivery(deliveryId, deliveredAt, payload) {
119
+ const key = process.env.SAP_MCP_PREMIUM_WEBHOOK_SIGNER;
120
+ if (!key) {
121
+ throw new Error('SAP_MCP_PREMIUM_WEBHOOK_SIGNER is not set — webhook delivery requires a configured signing key');
122
+ }
123
+ const message = `${deliveryId}.${deliveredAt}.${JSON.stringify(payload)}`;
124
+ return createHmac('sha256', key).update(message).digest('hex');
125
+ }
126
+ /**
127
+ * @name deliverWebhook
128
+ * @description Deliver a single event to a webhook target URL with retries.
129
+ *
130
+ * @param subscription - The webhook subscription.
131
+ * @param event - The provider event to deliver.
132
+ * @returns The `PremiumWebhookDelivery` record for this attempt.
133
+ *
134
+ * @internal
135
+ */
136
+ async function deliverWebhook(subscription, event) {
137
+ const deliveryId = `wh-delivery-${randomUUID()}`;
138
+ const deliveredAt = new Date().toISOString();
139
+ const signature = signDelivery(deliveryId, deliveredAt, event.payload);
140
+ const body = JSON.stringify({
141
+ deliveryId,
142
+ eventType: event.eventType,
143
+ deliveredAt,
144
+ signature,
145
+ payload: event.payload,
146
+ });
147
+ let httpStatus = null;
148
+ let success = false;
149
+ let responseBody;
150
+ let retryCount = 0;
151
+ const parsedUrl = new URL(subscription.targetUrl);
152
+ const isHttps = parsedUrl.protocol === 'https:';
153
+ const reqFn = isHttps ? request : httpRequest;
154
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
155
+ retryCount = attempt;
156
+ try {
157
+ const response = await new Promise((resolve, reject) => {
158
+ const req = reqFn({
159
+ hostname: parsedUrl.hostname,
160
+ port: parsedUrl.port || (isHttps ? 443 : 80),
161
+ path: `${parsedUrl.pathname}${parsedUrl.search}`,
162
+ method: 'POST',
163
+ headers: {
164
+ 'Content-Type': 'application/json',
165
+ 'Content-Length': Buffer.byteLength(body),
166
+ 'X-SAP-Premium-Delivery-Id': deliveryId,
167
+ 'X-SAP-Premium-Signature': signature,
168
+ },
169
+ timeout: 10_000,
170
+ }, (res) => {
171
+ let data = '';
172
+ res.on('data', (chunk) => { data += chunk.toString(); });
173
+ res.on('end', () => resolve({ status: res.statusCode ?? 0, body: data }));
174
+ });
175
+ req.on('error', reject);
176
+ req.on('timeout', () => { req.destroy(); reject(new Error('Webhook delivery timeout.')); });
177
+ req.write(body);
178
+ req.end();
179
+ });
180
+ httpStatus = response.status;
181
+ responseBody = response.body.slice(0, 512);
182
+ success = response.status >= 200 && response.status < 300;
183
+ if (success)
184
+ break;
185
+ }
186
+ catch (error) {
187
+ responseBody = error instanceof Error ? error.message : 'Unknown delivery error.';
188
+ }
189
+ if (attempt < MAX_RETRIES) {
190
+ await new Promise(resolve => setTimeout(resolve, RETRY_BASE_DELAY_MS * 2 ** attempt));
191
+ }
192
+ }
193
+ const delivery = {
194
+ deliveryId,
195
+ subscriptionId: subscription.subscriptionId,
196
+ eventId: event.eventId,
197
+ eventType: event.eventType,
198
+ deliveredAt,
199
+ signature,
200
+ httpStatus,
201
+ success,
202
+ responseBody,
203
+ retryCount,
204
+ };
205
+ // Store delivery record with cap.
206
+ deliveryRecords.set(deliveryId, delivery);
207
+ if (deliveryRecords.size > MAX_DELIVERY_RECORDS) {
208
+ const oldestKey = deliveryRecords.keys().next().value;
209
+ if (oldestKey)
210
+ deliveryRecords.delete(oldestKey);
211
+ }
212
+ // Update subscription stats.
213
+ subscription.deliveriesAttempted++;
214
+ if (success)
215
+ subscription.deliveriesSucceeded++;
216
+ subscription.lastDeliveryAt = deliveredAt;
217
+ subscription.lastDeliveryStatus = httpStatus;
218
+ return delivery;
219
+ }
220
+ /**
221
+ * @name registerWebhook
222
+ * @description Register a webhook subscription for an active premium session.
223
+ *
224
+ * @param sessionId - The activated premium session id.
225
+ * @param targetUrl - HTTPS endpoint owned by the buyer.
226
+ * @param events - Exact event ids to deliver.
227
+ * @param signingPublicKey - Optional buyer public key for signature verification.
228
+ * @returns The `PremiumWebhookSubscription`, or `null` if the session is not
229
+ * active or the URL is invalid.
230
+ *
231
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_register`,
232
+ * `remote/server.ts` → `POST /premium/webhook/register`
233
+ */
234
+ export async function registerWebhook(sessionId, targetUrl, events, signingPublicKey) {
235
+ const session = getPremiumSession(sessionId);
236
+ if (!session || session.status !== 'active')
237
+ return null;
238
+ if (!validateWebhookUrl(targetUrl))
239
+ return null;
240
+ if (events.length === 0)
241
+ return null;
242
+ const subscription = {
243
+ subscriptionId: `wh-sub-${randomUUID()}`,
244
+ sessionId,
245
+ pluginId: session.pluginId,
246
+ capabilityId: session.capabilityId,
247
+ targetUrl,
248
+ events,
249
+ signingPublicKey,
250
+ createdAt: new Date().toISOString(),
251
+ deliveriesAttempted: 0,
252
+ deliveriesSucceeded: 0,
253
+ lastDeliveryAt: null,
254
+ lastDeliveryStatus: null,
255
+ active: true,
256
+ };
257
+ webhookSubscriptions.set(subscription.subscriptionId, subscription);
258
+ return subscription;
259
+ }
260
+ /**
261
+ * @name startWebhookDelivery
262
+ * @description Start the webhook delivery loop for a subscription.
263
+ *
264
+ * Subscribes to the provider, receives events, filters by the subscription's
265
+ * event list, signs and delivers each matching event, and decrements the
266
+ * session quota. Stops when the quota reaches zero or the subscription is
267
+ * deactivated.
268
+ *
269
+ * @param subscription - The webhook subscription to deliver for.
270
+ *
271
+ * @usedBy `remote/server.ts` → webhook delivery worker
272
+ */
273
+ export async function startWebhookDelivery(subscription) {
274
+ const iterable = await subscribeToProvider(subscription.pluginId, subscription.capabilityId, {});
275
+ if (!iterable)
276
+ return;
277
+ for await (const event of iterable) {
278
+ if (!subscription.active)
279
+ break;
280
+ // Filter: only deliver events listed in the subscription.
281
+ if (!subscription.events.includes(event.eventType))
282
+ continue;
283
+ // Store the event for replay/idempotency.
284
+ appendEvent({
285
+ eventId: event.eventId,
286
+ sessionId: subscription.sessionId,
287
+ pluginId: subscription.pluginId,
288
+ capabilityId: subscription.capabilityId,
289
+ eventType: event.eventType,
290
+ observedAt: event.observedAt,
291
+ payload: event.payload,
292
+ deliveredAt: new Date().toISOString(),
293
+ });
294
+ // Deliver via HTTP POST with retries.
295
+ await deliverWebhook(subscription, event);
296
+ // Decrement quota and auto-close at zero.
297
+ const remaining = decrementSessionQuota(subscription.sessionId);
298
+ if (remaining <= 0) {
299
+ subscription.active = false;
300
+ closeSession(subscription.sessionId, 'Webhook unit quota exhausted.');
301
+ break;
302
+ }
303
+ }
304
+ }
305
+ /**
306
+ * @name unregisterWebhook
307
+ * @description Deactivate and remove a webhook subscription.
308
+ *
309
+ * @param subscriptionId - The webhook subscription id.
310
+ * @returns True if the subscription was found and removed.
311
+ *
312
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_unregister`
313
+ */
314
+ export function unregisterWebhook(subscriptionId) {
315
+ const subscription = webhookSubscriptions.get(subscriptionId);
316
+ if (!subscription)
317
+ return false;
318
+ subscription.active = false;
319
+ webhookSubscriptions.delete(subscriptionId);
320
+ return true;
321
+ }
322
+ /**
323
+ * @name getWebhookSubscription
324
+ * @description Retrieve a webhook subscription by id.
325
+ *
326
+ * @param subscriptionId - The webhook subscription id.
327
+ * @returns The subscription, or `null` if not found.
328
+ *
329
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
330
+ */
331
+ export function getWebhookSubscription(subscriptionId) {
332
+ const sub = webhookSubscriptions.get(subscriptionId);
333
+ return sub ? { ...sub } : null;
334
+ }
335
+ /**
336
+ * @name getWebhookDeliveries
337
+ * @description Retrieve delivery records for a subscription.
338
+ *
339
+ * @param subscriptionId - The webhook subscription id.
340
+ * @param limit - Maximum records to return (default 50).
341
+ * @returns Array of `PremiumWebhookDelivery` records.
342
+ *
343
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
344
+ */
345
+ export function getWebhookDeliveries(subscriptionId, limit = 50) {
346
+ const results = [];
347
+ for (const delivery of deliveryRecords.values()) {
348
+ if (delivery.subscriptionId === subscriptionId) {
349
+ results.push(delivery);
350
+ if (results.length >= limit)
351
+ break;
352
+ }
353
+ }
354
+ return results;
355
+ }
356
+ /**
357
+ * @name getActiveWebhookCount
358
+ * @description Return the number of currently active webhook subscriptions.
359
+ *
360
+ * @usedBy `metrics.ts`
361
+ */
362
+ export function getActiveWebhookCount() {
363
+ let count = 0;
364
+ for (const sub of webhookSubscriptions.values()) {
365
+ if (sub.active)
366
+ count++;
367
+ }
368
+ return count;
369
+ }
370
+ /**
371
+ * @name stopAllWebhooks
372
+ * @description Deactivate all webhook subscriptions. Called during graceful shutdown.
373
+ *
374
+ * @usedBy `remote/server.ts` shutdown handler
375
+ */
376
+ export function stopAllWebhooks() {
377
+ for (const sub of webhookSubscriptions.values()) {
378
+ sub.active = false;
379
+ }
380
+ webhookSubscriptions.clear();
381
+ }
382
+ //# sourceMappingURL=webhook-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-engine.js","sourceRoot":"","sources":["../../src/premium/webhook-engine.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,8 @@
1
+ /**
2
+ * @name prompts/context/sap-agent-context
3
+ * @description Prompt providing complete SAP MCP agent context, configuration, and capabilities
4
+ * @module prompts/context/sap-agent-context
5
+ */
1
6
  /**
2
7
  * SAP MCP Agent Context Prompt
3
8
  *
@@ -1 +1 @@
1
- {"version":3,"file":"sap-agent-context.prompt.d.ts","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-context.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAwBzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAoGnF"}
1
+ {"version":3,"file":"sap-agent-context.prompt.d.ts","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-context.prompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAwBzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAoGnF"}
@@ -1,12 +1,6 @@
1
1
  /**
2
- * SAP MCP Agent Context Prompt
3
- *
4
- * Provides complete context about the current SAP MCP configuration,
5
- * active profile, wallet, and available capabilities.
6
- *
7
- * Agents should call this prompt before executing any SAP-related operations
8
- * to understand their operating context and constraints.
9
- *
2
+ * @name prompts/context/sap-agent-context
3
+ * @description Prompt providing complete SAP MCP agent context, configuration, and capabilities
10
4
  * @module prompts/context/sap-agent-context
11
5
  */
12
6
  import { registerPrompt } from '../../adapters/mcp/sdk-compat.js';
@@ -1 +1 @@
1
- {"version":3,"file":"sap-agent-context.prompt.js","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-context.prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sap-agent-context.prompt.js","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-context.prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * SAP MCP Agent Intent Router Prompt
3
+ *
4
+ * Gives agent runtimes a compact decision tree for choosing hosted reads,
5
+ * paid hosted calls, local user signing, unsigned builders, or repair flows.
6
+ */
7
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
8
+ import type { SapMcpContext } from '../../core/types.js';
9
+ /**
10
+ * @name sapAgentIntentRouterPrompt
11
+ * @description Registers the compact SAP MCP intent routing prompt.
12
+ */
13
+ export declare function sapAgentIntentRouterPrompt(server: Server, context: SapMcpContext): void;
14
+ //# sourceMappingURL=sap-agent-intent-router.prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sap-agent-intent-router.prompt.d.ts","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-intent-router.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUzD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAqDvF"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * SAP MCP Agent Intent Router Prompt
3
+ *
4
+ * Gives agent runtimes a compact decision tree for choosing hosted reads,
5
+ * paid hosted calls, local user signing, unsigned builders, or repair flows.
6
+ */
7
+ import { registerPrompt } from '../../adapters/mcp/sdk-compat.js';
8
+ import { logger } from '../../core/logger.js';
9
+ /**
10
+ * @name sapAgentIntentRouterPrompt
11
+ * @description Registers the compact SAP MCP intent routing prompt.
12
+ */
13
+ export function sapAgentIntentRouterPrompt(server, context) {
14
+ registerPrompt(server, 'sap-agent-intent-router', {}, {
15
+ description: 'Route a user SAP MCP request to the correct hosted/read, paid-call, local-signing, unsigned-builder, or repair flow. Use before paid/write operations and after routing errors.',
16
+ arguments: [
17
+ {
18
+ name: 'userIntent',
19
+ description: 'Plain-language user goal, e.g. "check balance", "register my agent", "update metadata image", "swap SOL to USDC", "create escrow", or "is SAP connected?".',
20
+ required: false,
21
+ },
22
+ {
23
+ name: 'targetTool',
24
+ description: 'Optional exact MCP tool name being considered. Use exact names from tools/list; do not rewrite hyphenated names.',
25
+ required: false,
26
+ },
27
+ {
28
+ name: 'lastError',
29
+ description: 'Optional last error string or JSON-RPC error data. The router maps common SAP/x402/MCP errors to the next safe tool.',
30
+ required: false,
31
+ },
32
+ ],
33
+ }, async (args) => {
34
+ const parsed = parseIntentRouterArgs(args);
35
+ logger.debug('SAP agent intent router prompt generated', {
36
+ mode: context.config.mode,
37
+ userIntent: parsed.userIntent,
38
+ targetTool: parsed.targetTool,
39
+ });
40
+ return {
41
+ description: 'SAP MCP intent routing instructions',
42
+ messages: [
43
+ {
44
+ role: 'user',
45
+ content: {
46
+ type: 'text',
47
+ text: buildIntentRouterPrompt(context, parsed),
48
+ },
49
+ },
50
+ ],
51
+ };
52
+ });
53
+ logger.debug('SAP agent intent router prompt registered');
54
+ }
55
+ function parseIntentRouterArgs(args) {
56
+ const record = (args ?? {});
57
+ return {
58
+ userIntent: typeof record.userIntent === 'string' ? record.userIntent : undefined,
59
+ targetTool: typeof record.targetTool === 'string' ? record.targetTool : undefined,
60
+ lastError: typeof record.lastError === 'string' ? record.lastError : undefined,
61
+ };
62
+ }
63
+ function buildIntentRouterPrompt(context, args) {
64
+ return `# SAP MCP Intent Router
65
+
66
+ Use this router to choose the next SAP MCP action with the least friction and no unsafe shortcuts.
67
+
68
+ ## Current Request
69
+ - User intent: ${args.userIntent ? `\`${args.userIntent}\`` : 'not supplied'}
70
+ - Target tool: ${args.targetTool ? `\`${args.targetTool}\`` : 'not supplied'}
71
+ - Last error: ${args.lastError ? `\`${args.lastError}\`` : 'none'}
72
+ - Server mode visible to this prompt: \`${context.config.mode}\`
73
+
74
+ ## Decision Tree
75
+
76
+ ### 1. Connection/status only
77
+ If the user asks "are you connected?", "is SAP ready?", or similar:
78
+ 1. Call \`sap_agent_start\`.
79
+ 2. Call \`sap_agent_runtime_status\` with \`{"intent":"connection"}\`.
80
+ 3. Answer briefly: endpoint, mode, hosted non-custodial status, local \`sap_payments\` readiness only if checked, and one next action.
81
+ Do not dump the full tool catalog.
82
+
83
+ ### 2. Exact/base reads
84
+ For exact agent, wallet, balance, global-state, or compact directory orientation:
85
+ - Prefer free exact/base tools first:
86
+ \`sap_agent_context\`, \`sap_get_agent\`, \`sap_get_agent_profile\`,
87
+ \`sap_get_agent_stats\`, \`sap_get_global_state\`, \`sap_is_agent_active\`,
88
+ \`sap_list_agents\` with \`limit <= 20\` and \`view: "compact"\`,
89
+ \`sol_get_balance\`, \`spl-token_getBalance\`, \`spl-token_getTokenAccounts\`,
90
+ or \`magicblock_balance\`.
91
+ - Use broad/enriched paid discovery only when the user asked for search, ranking,
92
+ enrichment, analytics, or larger pages.
93
+
94
+ ### 3. Paid hosted tools
95
+ Before a paid hosted read/builder/value tool:
96
+ 1. Call \`sap_estimate_tool_cost\` for the target tool.
97
+ 2. Verify the local payer has SOL for fees and USDC for x402 when balance tools are available.
98
+ 3. Use \`sap_payments_call_paid_tool\` when the runtime cannot replay x402 natively.
99
+ 4. Treat x402/pay.sh 402 responses as a payment challenge, not as a failure.
100
+ 5. If the challenge price exceeds \`maxPriceUsd\`, stop and ask the user before increasing the cap.
101
+
102
+ ### 4. Registry writes
103
+ For SAP agent registration or update:
104
+ - Do not use hosted \`sap_register_agent\` or hosted \`sap_update_agent\` when they return \`hosted_local_signer_required\`.
105
+ - Use local \`sap_payments_register_agent\` for registration and local \`sap_payments_update_agent\` for profile/metadata updates.
106
+ - Use \`confirm: true\` only after the user approves the preview.
107
+ - Report the agent PDA, owner, transaction signature, and protocol-fee verification status.
108
+ - Do not call the lifecycle complete if the agent account or protocol-fee audit is missing.
109
+ - If a profile update returns Anchor 3012, \`AccountNotInitialized\`, or
110
+ \`pricing_menu\`, do not repair the runtime and do not retry the same write.
111
+ Use \`sap_agent_next_action\` and \`sap_protocol_invariants\`; the failure is
112
+ an SAP registry account lifecycle issue.
113
+
114
+ ### 5. Unsigned builders and transaction finalization
115
+ If a hosted tool returns \`transactionBase64\`, \`transaction\`, or an unsigned transaction object:
116
+ 1. Call \`sap_payments_finalize_transaction\`.
117
+ 2. Preview first.
118
+ 3. Sign locally through the SAP profile or external signer.
119
+ 4. Submit only when the user approved \`submit: true\`.
120
+ 5. Prefer the hosted submit relay for already-signed bytes unless the user chose local RPC.
121
+ Never create temporary signing scripts, never read keypair JSON, and never export secret bytes.
122
+
123
+ ### 6. Escrow V2
124
+ - Use V2 only.
125
+ - Default \`settlementSecurity\` is \`DisputeWindow (2)\`; never default to \`SelfReport (0)\`.
126
+ - Amounts are smallest units: lamports for SOL, micro-USDC for USDC.
127
+ - Hosted mode should use \`sap_escrow_build_*_transaction\` then
128
+ \`sap_payments_finalize_transaction\`.
129
+
130
+ ### 7. Repair and missing bridge
131
+ If \`sap_payments\` is missing, startup closes before initialization, or the runtime
132
+ does not expose local tools after config repair:
133
+ - Say the hosted SAP MCP is connected but the local payment/signing bridge is not visible in this runtime.
134
+ - Ask the user to run \`npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-config repair\`.
135
+ - Ask them to fully restart the agent runtime.
136
+ - Do not claim the hosted server can see local wallet paths.
137
+
138
+ ### 8. Error routing
139
+ - \`hosted_local_signer_required\`: no x402 fee should be charged; switch to local \`sap_payments_*\` or unsigned builder finalization.
140
+ - \`payment_required\` or HTTP 402: normal x402 challenge; use local paid-call bridge.
141
+ - \`BlockhashNotFound\`, \`node is behind\`, \`minimum context slot\`, \`fetch failed\`, \`transaction_simulation_failed\`: retry with a fresh challenge or fresh transaction; do not reuse stale signed payment payloads.
142
+ - \`mcp_session_required\`: call \`initialize\` first and reuse the returned \`mcp-session-id\`; do not invent client UUIDs.
143
+ - \`session_not_found\`: reinitialize the MCP session and retry once.
144
+ - Schema mismatch: call \`tools/list\` or inspect the exact input schema; do not guess aliases.
145
+
146
+ ## Final Answer Style
147
+ Be concise and action-oriented:
148
+ - what was checked
149
+ - which profile/wallet was used, redacted when needed
150
+ - what was paid, if anything
151
+ - what was signed/submitted, if anything
152
+ - one safe next action
153
+ `;
154
+ }
155
+ //# sourceMappingURL=sap-agent-intent-router.prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sap-agent-intent-router.prompt.js","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-intent-router.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAW9C;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,OAAsB;IAC/E,cAAc,CACZ,MAAM,EACN,yBAAyB,EACzB,EAAE,EACF;QACE,WAAW,EACT,iLAAiL;QACnL,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EACT,4JAA4J;gBAC9J,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EACT,kHAAkH;gBACpH,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,WAAW,EACT,sHAAsH;gBACxH,QAAQ,EAAE,KAAK;aAChB;SACF;KACF,EACD,KAAK,EAAE,IAAgB,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE;YACvD,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QAEH,OAAO;YACL,WAAW,EAAE,qCAAqC;YAClD,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC;qBAC/C;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAgB;IAC7C,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IACvD,OAAO;QACL,UAAU,EAAE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACjF,UAAU,EAAE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACjF,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KAC/E,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAsB,EAAE,IAAsB;IAC7E,OAAO;;;;;iBAKQ,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,cAAc;iBAC3D,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,cAAc;gBAC5D,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,MAAM;0CACvB,OAAO,CAAC,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiF5D,CAAC;AACF,CAAC"}
@@ -81,6 +81,7 @@ Do not infer that tools are callable from startup logs alone. A tool is callable
81
81
  - If a hosted paid/write tool returns \`transactionBase64\`, \`transaction\`, or an unsigned transaction object, finalize it through local \`sap_payments_finalize_transaction\`.
82
82
  - If hosted \`sap_register_agent\` returns \`hosted_local_signer_required\`, no x402 payment was charged. Do not retry hosted \`sap_register_agent\`; call local \`sap_payments_register_agent\` with the same registration fields and \`confirm: true\`.
83
83
  - If hosted \`sap_update_agent\` returns \`hosted_local_signer_required\`, no x402 payment was charged. Do not retry hosted \`sap_update_agent\`; call local \`sap_payments_update_agent\` with the intended replacement fields and \`confirm: true\`.
84
+ - If \`sap_payments_update_agent\` returns Anchor 3012, \`AccountNotInitialized\`, or \`pricing_menu\`, do not run repair and do not retry the same write. The local bridge worked; this is an SAP registry account lifecycle issue. Call \`sap_agent_next_action\` and \`sap_protocol_invariants\` before deciding the next safe initializer or upgrade path.
84
85
  - For Escrow V2 hosted flows, use \`sap_escrow_build_create_transaction\`, \`sap_escrow_build_deposit_transaction\`, \`sap_escrow_build_settle_transaction\`, \`sap_escrow_build_finalize_transaction\`, \`sap_escrow_build_withdraw_transaction\`, or \`sap_escrow_build_close_transaction\`, then finalize locally with \`sap_payments_finalize_transaction\`.
85
86
  - If another hosted write returns \`hosted_local_signer_required\`, no x402 payment was charged. Switch to the local SAP MCP profile or a hosted unsigned builder plus \`sap_payments_finalize_transaction\` when one exists.
86
87
  - Never create temporary signing scripts, read keypair JSON, export keypair bytes, or call hosted \`sap_sign_transaction\` for user-owned signing.
@@ -1 +1 @@
1
- {"version":3,"file":"sap-agent-start.prompt.js","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-start.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAC7D,MAAM,cAAc,GAAG,sFAAsF,CAAC;AAQ9G;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,OAAsB;IACxE,cAAc,CACZ,MAAM,EACN,iBAAiB,EACjB,EAAE,EACF;QACE,WAAW,EAAE,uIAAuI;QACpJ,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,+GAA+G;gBAC5H,QAAQ,EAAE,KAAK;aAChB;SACF;KACF,EACD,KAAK,EAAE,IAAgB,EAAE,EAAE;QACzB,MAAM,IAAI,GAAG,OAAQ,IAAmC,EAAE,IAAI,KAAK,QAAQ;YACzE,CAAC,CAAG,IAAuB,CAAC,IAAe;YAC3C,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtF,OAAO;YACL,WAAW,EAAE,8BAA8B;YAC3C,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC;qBACtC;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAsB,EAAE,IAAwB;IACxE,OAAO;;;;;EAKP,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,6FAA6F;;;4BAGxF,cAAc;kDACQ,OAAO,CAAC,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAuC/C,cAAc;;;;;;CAMnC,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"sap-agent-start.prompt.js","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-start.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAC7D,MAAM,cAAc,GAAG,sFAAsF,CAAC;AAQ9G;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,OAAsB;IACxE,cAAc,CACZ,MAAM,EACN,iBAAiB,EACjB,EAAE,EACF;QACE,WAAW,EAAE,uIAAuI;QACpJ,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,+GAA+G;gBAC5H,QAAQ,EAAE,KAAK;aAChB;SACF;KACF,EACD,KAAK,EAAE,IAAgB,EAAE,EAAE;QACzB,MAAM,IAAI,GAAG,OAAQ,IAAmC,EAAE,IAAI,KAAK,QAAQ;YACzE,CAAC,CAAG,IAAuB,CAAC,IAAe;YAC3C,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtF,OAAO;YACL,WAAW,EAAE,8BAA8B;YAC3C,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC;qBACtC;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAsB,EAAE,IAAwB;IACxE,OAAO;;;;;EAKP,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,6FAA6F;;;4BAGxF,cAAc;kDACQ,OAAO,CAAC,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAwC/C,cAAc;;;;;;CAMnC,CAAC;AACF,CAAC"}