@oobe-protocol-labs/sap-mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (593) hide show
  1. package/.env.example +159 -0
  2. package/CHANGELOG.md +55 -0
  3. package/LICENSE +21 -0
  4. package/README.md +223 -0
  5. package/config.example.json +64 -0
  6. package/config.schema.json +370 -0
  7. package/config.secure-example.json +100 -0
  8. package/dist/adapters/index.d.ts +6 -0
  9. package/dist/adapters/index.d.ts.map +1 -0
  10. package/dist/adapters/index.js +6 -0
  11. package/dist/adapters/index.js.map +1 -0
  12. package/dist/adapters/mcp/errors.d.ts +7 -0
  13. package/dist/adapters/mcp/errors.d.ts.map +1 -0
  14. package/dist/adapters/mcp/errors.js +10 -0
  15. package/dist/adapters/mcp/errors.js.map +1 -0
  16. package/dist/adapters/mcp/index.d.ts +8 -0
  17. package/dist/adapters/mcp/index.d.ts.map +1 -0
  18. package/dist/adapters/mcp/index.js +8 -0
  19. package/dist/adapters/mcp/index.js.map +1 -0
  20. package/dist/adapters/mcp/prompt-response.d.ts +13 -0
  21. package/dist/adapters/mcp/prompt-response.d.ts.map +1 -0
  22. package/dist/adapters/mcp/prompt-response.js +7 -0
  23. package/dist/adapters/mcp/prompt-response.js.map +1 -0
  24. package/dist/adapters/mcp/resource-response.d.ts +8 -0
  25. package/dist/adapters/mcp/resource-response.d.ts.map +1 -0
  26. package/dist/adapters/mcp/resource-response.js +7 -0
  27. package/dist/adapters/mcp/resource-response.js.map +1 -0
  28. package/dist/adapters/mcp/sdk-compat.d.ts +191 -0
  29. package/dist/adapters/mcp/sdk-compat.d.ts.map +1 -0
  30. package/dist/adapters/mcp/sdk-compat.js +606 -0
  31. package/dist/adapters/mcp/sdk-compat.js.map +1 -0
  32. package/dist/adapters/mcp/tool-response.d.ts +32 -0
  33. package/dist/adapters/mcp/tool-response.d.ts.map +1 -0
  34. package/dist/adapters/mcp/tool-response.js +27 -0
  35. package/dist/adapters/mcp/tool-response.js.map +1 -0
  36. package/dist/adapters/solana/commitment.d.ts +9 -0
  37. package/dist/adapters/solana/commitment.d.ts.map +1 -0
  38. package/dist/adapters/solana/commitment.js +14 -0
  39. package/dist/adapters/solana/commitment.js.map +1 -0
  40. package/dist/adapters/solana/connection.d.ts +10 -0
  41. package/dist/adapters/solana/connection.d.ts.map +1 -0
  42. package/dist/adapters/solana/connection.js +13 -0
  43. package/dist/adapters/solana/connection.js.map +1 -0
  44. package/dist/adapters/solana/index.d.ts +7 -0
  45. package/dist/adapters/solana/index.d.ts.map +1 -0
  46. package/dist/adapters/solana/index.js +7 -0
  47. package/dist/adapters/solana/index.js.map +1 -0
  48. package/dist/adapters/solana/public-key.d.ts +9 -0
  49. package/dist/adapters/solana/public-key.d.ts.map +1 -0
  50. package/dist/adapters/solana/public-key.js +11 -0
  51. package/dist/adapters/solana/public-key.js.map +1 -0
  52. package/dist/cli.d.ts +29 -0
  53. package/dist/cli.d.ts.map +1 -0
  54. package/dist/cli.js +269 -0
  55. package/dist/cli.js.map +1 -0
  56. package/dist/config/defaults.d.ts +28 -0
  57. package/dist/config/defaults.d.ts.map +1 -0
  58. package/dist/config/defaults.js +28 -0
  59. package/dist/config/defaults.js.map +1 -0
  60. package/dist/config/env.d.ts +297 -0
  61. package/dist/config/env.d.ts.map +1 -0
  62. package/dist/config/env.js +563 -0
  63. package/dist/config/env.js.map +1 -0
  64. package/dist/config/index.d.ts +7 -0
  65. package/dist/config/index.d.ts.map +1 -0
  66. package/dist/config/index.js +7 -0
  67. package/dist/config/index.js.map +1 -0
  68. package/dist/config/mcp-client-injection.d.ts +113 -0
  69. package/dist/config/mcp-client-injection.d.ts.map +1 -0
  70. package/dist/config/mcp-client-injection.js +453 -0
  71. package/dist/config/mcp-client-injection.js.map +1 -0
  72. package/dist/config/paths.d.ts +37 -0
  73. package/dist/config/paths.d.ts.map +1 -0
  74. package/dist/config/paths.js +93 -0
  75. package/dist/config/paths.js.map +1 -0
  76. package/dist/config/profiles.d.ts +85 -0
  77. package/dist/config/profiles.d.ts.map +1 -0
  78. package/dist/config/profiles.js +346 -0
  79. package/dist/config/profiles.js.map +1 -0
  80. package/dist/config/schema.d.ts +9 -0
  81. package/dist/config/schema.d.ts.map +1 -0
  82. package/dist/config/schema.js +8 -0
  83. package/dist/config/schema.js.map +1 -0
  84. package/dist/config/secure-config.d.ts +607 -0
  85. package/dist/config/secure-config.d.ts.map +1 -0
  86. package/dist/config/secure-config.js +526 -0
  87. package/dist/config/secure-config.js.map +1 -0
  88. package/dist/config/setup.d.ts +42 -0
  89. package/dist/config/setup.d.ts.map +1 -0
  90. package/dist/config/setup.js +173 -0
  91. package/dist/config/setup.js.map +1 -0
  92. package/dist/config/wizard.d.ts +15 -0
  93. package/dist/config/wizard.d.ts.map +1 -0
  94. package/dist/config/wizard.js +1176 -0
  95. package/dist/config/wizard.js.map +1 -0
  96. package/dist/config-cli.d.ts +21 -0
  97. package/dist/config-cli.d.ts.map +1 -0
  98. package/dist/config-cli.js +679 -0
  99. package/dist/config-cli.js.map +1 -0
  100. package/dist/core/constants.d.ts +78 -0
  101. package/dist/core/constants.d.ts.map +1 -0
  102. package/dist/core/constants.js +78 -0
  103. package/dist/core/constants.js.map +1 -0
  104. package/dist/core/errors.d.ts +188 -0
  105. package/dist/core/errors.d.ts.map +1 -0
  106. package/dist/core/errors.js +337 -0
  107. package/dist/core/errors.js.map +1 -0
  108. package/dist/core/guards.d.ts +41 -0
  109. package/dist/core/guards.d.ts.map +1 -0
  110. package/dist/core/guards.js +93 -0
  111. package/dist/core/guards.js.map +1 -0
  112. package/dist/core/index.d.ts +11 -0
  113. package/dist/core/index.d.ts.map +1 -0
  114. package/dist/core/index.js +10 -0
  115. package/dist/core/index.js.map +1 -0
  116. package/dist/core/logger.d.ts +64 -0
  117. package/dist/core/logger.d.ts.map +1 -0
  118. package/dist/core/logger.js +159 -0
  119. package/dist/core/logger.js.map +1 -0
  120. package/dist/core/result.d.ts +49 -0
  121. package/dist/core/result.d.ts.map +1 -0
  122. package/dist/core/result.js +61 -0
  123. package/dist/core/result.js.map +1 -0
  124. package/dist/core/types.d.ts +147 -0
  125. package/dist/core/types.d.ts.map +1 -0
  126. package/dist/core/types.js +8 -0
  127. package/dist/core/types.js.map +1 -0
  128. package/dist/index.d.ts +18 -0
  129. package/dist/index.d.ts.map +1 -0
  130. package/dist/index.js +15 -0
  131. package/dist/index.js.map +1 -0
  132. package/dist/payments/http-adapter.d.ts +76 -0
  133. package/dist/payments/http-adapter.d.ts.map +1 -0
  134. package/dist/payments/http-adapter.js +126 -0
  135. package/dist/payments/http-adapter.js.map +1 -0
  136. package/dist/payments/index.d.ts +12 -0
  137. package/dist/payments/index.d.ts.map +1 -0
  138. package/dist/payments/index.js +9 -0
  139. package/dist/payments/index.js.map +1 -0
  140. package/dist/payments/json-rpc.d.ts +49 -0
  141. package/dist/payments/json-rpc.d.ts.map +1 -0
  142. package/dist/payments/json-rpc.js +53 -0
  143. package/dist/payments/json-rpc.js.map +1 -0
  144. package/dist/payments/monetization-gate.d.ts +49 -0
  145. package/dist/payments/monetization-gate.d.ts.map +1 -0
  146. package/dist/payments/monetization-gate.js +398 -0
  147. package/dist/payments/monetization-gate.js.map +1 -0
  148. package/dist/payments/oobe-facilitator-server.d.ts +71 -0
  149. package/dist/payments/oobe-facilitator-server.d.ts.map +1 -0
  150. package/dist/payments/oobe-facilitator-server.js +409 -0
  151. package/dist/payments/oobe-facilitator-server.js.map +1 -0
  152. package/dist/payments/pay-sh-spec.d.ts +44 -0
  153. package/dist/payments/pay-sh-spec.d.ts.map +1 -0
  154. package/dist/payments/pay-sh-spec.js +218 -0
  155. package/dist/payments/pay-sh-spec.js.map +1 -0
  156. package/dist/payments/pricing.d.ts +60 -0
  157. package/dist/payments/pricing.d.ts.map +1 -0
  158. package/dist/payments/pricing.js +272 -0
  159. package/dist/payments/pricing.js.map +1 -0
  160. package/dist/payments/usage-ledger.d.ts +84 -0
  161. package/dist/payments/usage-ledger.d.ts.map +1 -0
  162. package/dist/payments/usage-ledger.js +126 -0
  163. package/dist/payments/usage-ledger.js.map +1 -0
  164. package/dist/policy/bento-policy-engine.d.ts +71 -0
  165. package/dist/policy/bento-policy-engine.d.ts.map +1 -0
  166. package/dist/policy/bento-policy-engine.js +218 -0
  167. package/dist/policy/bento-policy-engine.js.map +1 -0
  168. package/dist/policy/default-policies.d.ts +9 -0
  169. package/dist/policy/default-policies.d.ts.map +1 -0
  170. package/dist/policy/default-policies.js +69 -0
  171. package/dist/policy/default-policies.js.map +1 -0
  172. package/dist/policy/hybrid-policy-engine.d.ts +95 -0
  173. package/dist/policy/hybrid-policy-engine.d.ts.map +1 -0
  174. package/dist/policy/hybrid-policy-engine.js +297 -0
  175. package/dist/policy/hybrid-policy-engine.js.map +1 -0
  176. package/dist/policy/index.d.ts +10 -0
  177. package/dist/policy/index.d.ts.map +1 -0
  178. package/dist/policy/index.js +10 -0
  179. package/dist/policy/index.js.map +1 -0
  180. package/dist/policy/local-policy-engine.d.ts +119 -0
  181. package/dist/policy/local-policy-engine.d.ts.map +1 -0
  182. package/dist/policy/local-policy-engine.js +318 -0
  183. package/dist/policy/local-policy-engine.js.map +1 -0
  184. package/dist/policy/permission-checks.d.ts +19 -0
  185. package/dist/policy/permission-checks.d.ts.map +1 -0
  186. package/dist/policy/permission-checks.js +60 -0
  187. package/dist/policy/permission-checks.js.map +1 -0
  188. package/dist/policy/policy-engine.d.ts +57 -0
  189. package/dist/policy/policy-engine.d.ts.map +1 -0
  190. package/dist/policy/policy-engine.js +162 -0
  191. package/dist/policy/policy-engine.js.map +1 -0
  192. package/dist/policy/policy-types.d.ts +46 -0
  193. package/dist/policy/policy-types.d.ts.map +1 -0
  194. package/dist/policy/policy-types.js +5 -0
  195. package/dist/policy/policy-types.js.map +1 -0
  196. package/dist/policy/risk-level.d.ts +18 -0
  197. package/dist/policy/risk-level.d.ts.map +1 -0
  198. package/dist/policy/risk-level.js +46 -0
  199. package/dist/policy/risk-level.js.map +1 -0
  200. package/dist/policy/spending-limits.d.ts +17 -0
  201. package/dist/policy/spending-limits.d.ts.map +1 -0
  202. package/dist/policy/spending-limits.js +40 -0
  203. package/dist/policy/spending-limits.js.map +1 -0
  204. package/dist/prompts/context/sap-agent-context.prompt.d.ts +64 -0
  205. package/dist/prompts/context/sap-agent-context.prompt.d.ts.map +1 -0
  206. package/dist/prompts/context/sap-agent-context.prompt.js +336 -0
  207. package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -0
  208. package/dist/prompts/developer/debug-sap-error.prompt.d.ts +13 -0
  209. package/dist/prompts/developer/debug-sap-error.prompt.d.ts.map +1 -0
  210. package/dist/prompts/developer/debug-sap-error.prompt.js +78 -0
  211. package/dist/prompts/developer/debug-sap-error.prompt.js.map +1 -0
  212. package/dist/prompts/developer/generate-sap-integration.prompt.d.ts +13 -0
  213. package/dist/prompts/developer/generate-sap-integration.prompt.d.ts.map +1 -0
  214. package/dist/prompts/developer/generate-sap-integration.prompt.js +132 -0
  215. package/dist/prompts/developer/generate-sap-integration.prompt.js.map +1 -0
  216. package/dist/prompts/developer/index.d.ts +6 -0
  217. package/dist/prompts/developer/index.d.ts.map +1 -0
  218. package/dist/prompts/developer/index.js +6 -0
  219. package/dist/prompts/developer/index.js.map +1 -0
  220. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts +13 -0
  221. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts.map +1 -0
  222. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js +97 -0
  223. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js.map +1 -0
  224. package/dist/prompts/execution-proof/index.d.ts +6 -0
  225. package/dist/prompts/execution-proof/index.d.ts.map +1 -0
  226. package/dist/prompts/execution-proof/index.js +6 -0
  227. package/dist/prompts/execution-proof/index.js.map +1 -0
  228. package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts +13 -0
  229. package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts.map +1 -0
  230. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js +95 -0
  231. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js.map +1 -0
  232. package/dist/prompts/index.d.ts +5 -0
  233. package/dist/prompts/index.d.ts.map +1 -0
  234. package/dist/prompts/index.js +5 -0
  235. package/dist/prompts/index.js.map +1 -0
  236. package/dist/prompts/payments/create-paid-api.prompt.d.ts +13 -0
  237. package/dist/prompts/payments/create-paid-api.prompt.d.ts.map +1 -0
  238. package/dist/prompts/payments/create-paid-api.prompt.js +142 -0
  239. package/dist/prompts/payments/create-paid-api.prompt.js.map +1 -0
  240. package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts +13 -0
  241. package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts.map +1 -0
  242. package/dist/prompts/payments/explain-x402-settlement.prompt.js +83 -0
  243. package/dist/prompts/payments/explain-x402-settlement.prompt.js.map +1 -0
  244. package/dist/prompts/payments/index.d.ts +6 -0
  245. package/dist/prompts/payments/index.d.ts.map +1 -0
  246. package/dist/prompts/payments/index.js +6 -0
  247. package/dist/prompts/payments/index.js.map +1 -0
  248. package/dist/prompts/register-prompts.d.ts +10 -0
  249. package/dist/prompts/register-prompts.d.ts.map +1 -0
  250. package/dist/prompts/register-prompts.js +40 -0
  251. package/dist/prompts/register-prompts.js.map +1 -0
  252. package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts +13 -0
  253. package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts.map +1 -0
  254. package/dist/prompts/registry/analyze-sap-agent.prompt.js +85 -0
  255. package/dist/prompts/registry/analyze-sap-agent.prompt.js.map +1 -0
  256. package/dist/prompts/registry/index.d.ts +6 -0
  257. package/dist/prompts/registry/index.d.ts.map +1 -0
  258. package/dist/prompts/registry/index.js +6 -0
  259. package/dist/prompts/registry/index.js.map +1 -0
  260. package/dist/prompts/registry/register-sap-agent.prompt.d.ts +13 -0
  261. package/dist/prompts/registry/register-sap-agent.prompt.d.ts.map +1 -0
  262. package/dist/prompts/registry/register-sap-agent.prompt.js +152 -0
  263. package/dist/prompts/registry/register-sap-agent.prompt.js.map +1 -0
  264. package/dist/remote/auth/index.d.ts +86 -0
  265. package/dist/remote/auth/index.d.ts.map +1 -0
  266. package/dist/remote/auth/index.js +152 -0
  267. package/dist/remote/auth/index.js.map +1 -0
  268. package/dist/remote/server.d.ts +140 -0
  269. package/dist/remote/server.d.ts.map +1 -0
  270. package/dist/remote/server.js +412 -0
  271. package/dist/remote/server.js.map +1 -0
  272. package/dist/resources/current/sap-current-config.resource.d.ts +30 -0
  273. package/dist/resources/current/sap-current-config.resource.d.ts.map +1 -0
  274. package/dist/resources/current/sap-current-config.resource.js +142 -0
  275. package/dist/resources/current/sap-current-config.resource.js.map +1 -0
  276. package/dist/resources/execution-proof/index.d.ts +5 -0
  277. package/dist/resources/execution-proof/index.d.ts.map +1 -0
  278. package/dist/resources/execution-proof/index.js +5 -0
  279. package/dist/resources/execution-proof/index.js.map +1 -0
  280. package/dist/resources/execution-proof/sap-execution-record.resource.d.ts +13 -0
  281. package/dist/resources/execution-proof/sap-execution-record.resource.d.ts.map +1 -0
  282. package/dist/resources/execution-proof/sap-execution-record.resource.js +75 -0
  283. package/dist/resources/execution-proof/sap-execution-record.resource.js.map +1 -0
  284. package/dist/resources/index.d.ts +5 -0
  285. package/dist/resources/index.d.ts.map +1 -0
  286. package/dist/resources/index.js +5 -0
  287. package/dist/resources/index.js.map +1 -0
  288. package/dist/resources/memory/index.d.ts +5 -0
  289. package/dist/resources/memory/index.d.ts.map +1 -0
  290. package/dist/resources/memory/index.js +5 -0
  291. package/dist/resources/memory/index.js.map +1 -0
  292. package/dist/resources/memory/sap-memory.resource.d.ts +13 -0
  293. package/dist/resources/memory/sap-memory.resource.d.ts.map +1 -0
  294. package/dist/resources/memory/sap-memory.resource.js +77 -0
  295. package/dist/resources/memory/sap-memory.resource.js.map +1 -0
  296. package/dist/resources/profile/sap-active-profile.resource.d.ts +51 -0
  297. package/dist/resources/profile/sap-active-profile.resource.d.ts.map +1 -0
  298. package/dist/resources/profile/sap-active-profile.resource.js +119 -0
  299. package/dist/resources/profile/sap-active-profile.resource.js.map +1 -0
  300. package/dist/resources/register-resources.d.ts +10 -0
  301. package/dist/resources/register-resources.d.ts.map +1 -0
  302. package/dist/resources/register-resources.js +33 -0
  303. package/dist/resources/register-resources.js.map +1 -0
  304. package/dist/resources/registry/index.d.ts +6 -0
  305. package/dist/resources/registry/index.d.ts.map +1 -0
  306. package/dist/resources/registry/index.js +6 -0
  307. package/dist/resources/registry/index.js.map +1 -0
  308. package/dist/resources/registry/sap-agent.resource.d.ts +13 -0
  309. package/dist/resources/registry/sap-agent.resource.d.ts.map +1 -0
  310. package/dist/resources/registry/sap-agent.resource.js +75 -0
  311. package/dist/resources/registry/sap-agent.resource.js.map +1 -0
  312. package/dist/resources/registry/sap-global-registry.resource.d.ts +13 -0
  313. package/dist/resources/registry/sap-global-registry.resource.d.ts.map +1 -0
  314. package/dist/resources/registry/sap-global-registry.resource.js +71 -0
  315. package/dist/resources/registry/sap-global-registry.resource.js.map +1 -0
  316. package/dist/resources/reputation/index.d.ts +5 -0
  317. package/dist/resources/reputation/index.d.ts.map +1 -0
  318. package/dist/resources/reputation/index.js +5 -0
  319. package/dist/resources/reputation/index.js.map +1 -0
  320. package/dist/resources/reputation/sap-reputation.resource.d.ts +13 -0
  321. package/dist/resources/reputation/sap-reputation.resource.d.ts.map +1 -0
  322. package/dist/resources/reputation/sap-reputation.resource.js +75 -0
  323. package/dist/resources/reputation/sap-reputation.resource.js.map +1 -0
  324. package/dist/resources/stats/sap-network-stats.resource.d.ts +14 -0
  325. package/dist/resources/stats/sap-network-stats.resource.d.ts.map +1 -0
  326. package/dist/resources/stats/sap-network-stats.resource.js +86 -0
  327. package/dist/resources/stats/sap-network-stats.resource.js.map +1 -0
  328. package/dist/resources/tool-schema/index.d.ts +5 -0
  329. package/dist/resources/tool-schema/index.d.ts.map +1 -0
  330. package/dist/resources/tool-schema/index.js +5 -0
  331. package/dist/resources/tool-schema/index.js.map +1 -0
  332. package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts +13 -0
  333. package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts.map +1 -0
  334. package/dist/resources/tool-schema/sap-tool-schema.resource.js +75 -0
  335. package/dist/resources/tool-schema/sap-tool-schema.resource.js.map +1 -0
  336. package/dist/sap/index.d.ts +7 -0
  337. package/dist/sap/index.d.ts.map +1 -0
  338. package/dist/sap/index.js +6 -0
  339. package/dist/sap/index.js.map +1 -0
  340. package/dist/sap/sap-client-manager.d.ts +54 -0
  341. package/dist/sap/sap-client-manager.d.ts.map +1 -0
  342. package/dist/sap/sap-client-manager.js +129 -0
  343. package/dist/sap/sap-client-manager.js.map +1 -0
  344. package/dist/sap/sap-errors.d.ts +13 -0
  345. package/dist/sap/sap-errors.d.ts.map +1 -0
  346. package/dist/sap/sap-errors.js +23 -0
  347. package/dist/sap/sap-errors.js.map +1 -0
  348. package/dist/sap/sap-types.d.ts +69 -0
  349. package/dist/sap/sap-types.d.ts.map +1 -0
  350. package/dist/sap/sap-types.js +5 -0
  351. package/dist/sap/sap-types.js.map +1 -0
  352. package/dist/schemas/common.schema.d.ts +42 -0
  353. package/dist/schemas/common.schema.d.ts.map +1 -0
  354. package/dist/schemas/common.schema.js +36 -0
  355. package/dist/schemas/common.schema.js.map +1 -0
  356. package/dist/schemas/developer.schema.d.ts +31 -0
  357. package/dist/schemas/developer.schema.d.ts.map +1 -0
  358. package/dist/schemas/developer.schema.js +19 -0
  359. package/dist/schemas/developer.schema.js.map +1 -0
  360. package/dist/schemas/execution-proof.schema.d.ts +44 -0
  361. package/dist/schemas/execution-proof.schema.d.ts.map +1 -0
  362. package/dist/schemas/execution-proof.schema.js +26 -0
  363. package/dist/schemas/execution-proof.schema.js.map +1 -0
  364. package/dist/schemas/identity.schema.d.ts +34 -0
  365. package/dist/schemas/identity.schema.d.ts.map +1 -0
  366. package/dist/schemas/identity.schema.js +21 -0
  367. package/dist/schemas/identity.schema.js.map +1 -0
  368. package/dist/schemas/index.d.ts +15 -0
  369. package/dist/schemas/index.d.ts.map +1 -0
  370. package/dist/schemas/index.js +15 -0
  371. package/dist/schemas/index.js.map +1 -0
  372. package/dist/schemas/memory.schema.d.ts +34 -0
  373. package/dist/schemas/memory.schema.d.ts.map +1 -0
  374. package/dist/schemas/memory.schema.js +21 -0
  375. package/dist/schemas/memory.schema.js.map +1 -0
  376. package/dist/schemas/payments.schema.d.ts +37 -0
  377. package/dist/schemas/payments.schema.d.ts.map +1 -0
  378. package/dist/schemas/payments.schema.js +22 -0
  379. package/dist/schemas/payments.schema.js.map +1 -0
  380. package/dist/schemas/registry.schema.d.ts +65 -0
  381. package/dist/schemas/registry.schema.d.ts.map +1 -0
  382. package/dist/schemas/registry.schema.js +34 -0
  383. package/dist/schemas/registry.schema.js.map +1 -0
  384. package/dist/schemas/reputation.schema.d.ts +31 -0
  385. package/dist/schemas/reputation.schema.d.ts.map +1 -0
  386. package/dist/schemas/reputation.schema.js +20 -0
  387. package/dist/schemas/reputation.schema.js.map +1 -0
  388. package/dist/schemas/settlement.schema.d.ts +50 -0
  389. package/dist/schemas/settlement.schema.d.ts.map +1 -0
  390. package/dist/schemas/settlement.schema.js +29 -0
  391. package/dist/schemas/settlement.schema.js.map +1 -0
  392. package/dist/schemas/tool-schema.schema.d.ts +56 -0
  393. package/dist/schemas/tool-schema.schema.d.ts.map +1 -0
  394. package/dist/schemas/tool-schema.schema.js +26 -0
  395. package/dist/schemas/tool-schema.schema.js.map +1 -0
  396. package/dist/schemas/transaction.schema.d.ts +34 -0
  397. package/dist/schemas/transaction.schema.d.ts.map +1 -0
  398. package/dist/schemas/transaction.schema.js +20 -0
  399. package/dist/schemas/transaction.schema.js.map +1 -0
  400. package/dist/security/approval-required.d.ts +9 -0
  401. package/dist/security/approval-required.d.ts.map +1 -0
  402. package/dist/security/approval-required.js +10 -0
  403. package/dist/security/approval-required.js.map +1 -0
  404. package/dist/security/index.d.ts +9 -0
  405. package/dist/security/index.d.ts.map +1 -0
  406. package/dist/security/index.js +9 -0
  407. package/dist/security/index.js.map +1 -0
  408. package/dist/security/private-key-guard.d.ts +11 -0
  409. package/dist/security/private-key-guard.d.ts.map +1 -0
  410. package/dist/security/private-key-guard.js +22 -0
  411. package/dist/security/private-key-guard.js.map +1 -0
  412. package/dist/security/prompt-injection-notes.d.ts +13 -0
  413. package/dist/security/prompt-injection-notes.d.ts.map +1 -0
  414. package/dist/security/prompt-injection-notes.js +23 -0
  415. package/dist/security/prompt-injection-notes.js.map +1 -0
  416. package/dist/security/tool-permissions.d.ts +30 -0
  417. package/dist/security/tool-permissions.d.ts.map +1 -0
  418. package/dist/security/tool-permissions.js +270 -0
  419. package/dist/security/tool-permissions.js.map +1 -0
  420. package/dist/security/unsafe-action-guard.d.ts +28 -0
  421. package/dist/security/unsafe-action-guard.d.ts.map +1 -0
  422. package/dist/security/unsafe-action-guard.js +175 -0
  423. package/dist/security/unsafe-action-guard.js.map +1 -0
  424. package/dist/server/create-server.d.ts +12 -0
  425. package/dist/server/create-server.d.ts.map +1 -0
  426. package/dist/server/create-server.js +57 -0
  427. package/dist/server/create-server.js.map +1 -0
  428. package/dist/server/index.d.ts +7 -0
  429. package/dist/server/index.d.ts.map +1 -0
  430. package/dist/server/index.js +7 -0
  431. package/dist/server/index.js.map +1 -0
  432. package/dist/server/register-capabilities.d.ts +10 -0
  433. package/dist/server/register-capabilities.d.ts.map +1 -0
  434. package/dist/server/register-capabilities.js +23 -0
  435. package/dist/server/register-capabilities.js.map +1 -0
  436. package/dist/server/server-metadata.d.ts +32 -0
  437. package/dist/server/server-metadata.d.ts.map +1 -0
  438. package/dist/server/server-metadata.js +32 -0
  439. package/dist/server/server-metadata.js.map +1 -0
  440. package/dist/session/agent-session.d.ts +25 -0
  441. package/dist/session/agent-session.d.ts.map +1 -0
  442. package/dist/session/agent-session.js +35 -0
  443. package/dist/session/agent-session.js.map +1 -0
  444. package/dist/session/delegated-session.d.ts +20 -0
  445. package/dist/session/delegated-session.d.ts.map +1 -0
  446. package/dist/session/delegated-session.js +47 -0
  447. package/dist/session/delegated-session.js.map +1 -0
  448. package/dist/session/index.d.ts +10 -0
  449. package/dist/session/index.d.ts.map +1 -0
  450. package/dist/session/index.js +9 -0
  451. package/dist/session/index.js.map +1 -0
  452. package/dist/session/redis-session-store.d.ts +89 -0
  453. package/dist/session/redis-session-store.d.ts.map +1 -0
  454. package/dist/session/redis-session-store.js +219 -0
  455. package/dist/session/redis-session-store.js.map +1 -0
  456. package/dist/session/session-limits.d.ts +20 -0
  457. package/dist/session/session-limits.d.ts.map +1 -0
  458. package/dist/session/session-limits.js +55 -0
  459. package/dist/session/session-limits.js.map +1 -0
  460. package/dist/session/session-permissions.d.ts +37 -0
  461. package/dist/session/session-permissions.d.ts.map +1 -0
  462. package/dist/session/session-permissions.js +58 -0
  463. package/dist/session/session-permissions.js.map +1 -0
  464. package/dist/session/session-store.d.ts +38 -0
  465. package/dist/session/session-store.d.ts.map +1 -0
  466. package/dist/session/session-store.js +62 -0
  467. package/dist/session/session-store.js.map +1 -0
  468. package/dist/session/session-types.d.ts +33 -0
  469. package/dist/session/session-types.d.ts.map +1 -0
  470. package/dist/session/session-types.js +5 -0
  471. package/dist/session/session-types.js.map +1 -0
  472. package/dist/signer/external-signer.d.ts +16 -0
  473. package/dist/signer/external-signer.d.ts.map +1 -0
  474. package/dist/signer/external-signer.js +128 -0
  475. package/dist/signer/external-signer.js.map +1 -0
  476. package/dist/signer/index.d.ts +9 -0
  477. package/dist/signer/index.d.ts.map +1 -0
  478. package/dist/signer/index.js +8 -0
  479. package/dist/signer/index.js.map +1 -0
  480. package/dist/signer/load-keypair.d.ts +15 -0
  481. package/dist/signer/load-keypair.d.ts.map +1 -0
  482. package/dist/signer/load-keypair.js +39 -0
  483. package/dist/signer/load-keypair.js.map +1 -0
  484. package/dist/signer/local-keypair-signer.d.ts +11 -0
  485. package/dist/signer/local-keypair-signer.d.ts.map +1 -0
  486. package/dist/signer/local-keypair-signer.js +46 -0
  487. package/dist/signer/local-keypair-signer.js.map +1 -0
  488. package/dist/signer/signer-resolver.d.ts +10 -0
  489. package/dist/signer/signer-resolver.d.ts.map +1 -0
  490. package/dist/signer/signer-resolver.js +63 -0
  491. package/dist/signer/signer-resolver.js.map +1 -0
  492. package/dist/signer/signer-types.d.ts +35 -0
  493. package/dist/signer/signer-types.d.ts.map +1 -0
  494. package/dist/signer/signer-types.js +5 -0
  495. package/dist/signer/signer-types.js.map +1 -0
  496. package/dist/signer/signing-proxy.d.ts +45 -0
  497. package/dist/signer/signing-proxy.d.ts.map +1 -0
  498. package/dist/signer/signing-proxy.js +300 -0
  499. package/dist/signer/signing-proxy.js.map +1 -0
  500. package/dist/tools/client-sdk-tools.d.ts +22 -0
  501. package/dist/tools/client-sdk-tools.d.ts.map +1 -0
  502. package/dist/tools/client-sdk-tools.js +220 -0
  503. package/dist/tools/client-sdk-tools.js.map +1 -0
  504. package/dist/tools/index.d.ts +11 -0
  505. package/dist/tools/index.d.ts.map +1 -0
  506. package/dist/tools/index.js +17 -0
  507. package/dist/tools/index.js.map +1 -0
  508. package/dist/tools/profile-tools.d.ts +12 -0
  509. package/dist/tools/profile-tools.d.ts.map +1 -0
  510. package/dist/tools/profile-tools.js +250 -0
  511. package/dist/tools/profile-tools.js.map +1 -0
  512. package/dist/tools/register-tools.d.ts +12 -0
  513. package/dist/tools/register-tools.d.ts.map +1 -0
  514. package/dist/tools/register-tools.js +36 -0
  515. package/dist/tools/register-tools.js.map +1 -0
  516. package/dist/tools/sap-network-stats.tool.d.ts +14 -0
  517. package/dist/tools/sap-network-stats.tool.d.ts.map +1 -0
  518. package/dist/tools/sap-network-stats.tool.js +101 -0
  519. package/dist/tools/sap-network-stats.tool.js.map +1 -0
  520. package/dist/tools/sap-sdk-tools.d.ts +15 -0
  521. package/dist/tools/sap-sdk-tools.d.ts.map +1 -0
  522. package/dist/tools/sap-sdk-tools.js +1515 -0
  523. package/dist/tools/sap-sdk-tools.js.map +1 -0
  524. package/dist/tools/sap-sns-tools.d.ts +35 -0
  525. package/dist/tools/sap-sns-tools.d.ts.map +1 -0
  526. package/dist/tools/sap-sns-tools.js +626 -0
  527. package/dist/tools/sap-sns-tools.js.map +1 -0
  528. package/dist/tools/skills-tools.d.ts +12 -0
  529. package/dist/tools/skills-tools.d.ts.map +1 -0
  530. package/dist/tools/skills-tools.js +273 -0
  531. package/dist/tools/skills-tools.js.map +1 -0
  532. package/dist/tools/transaction-tools.d.ts +14 -0
  533. package/dist/tools/transaction-tools.d.ts.map +1 -0
  534. package/dist/tools/transaction-tools.js +297 -0
  535. package/dist/tools/transaction-tools.js.map +1 -0
  536. package/dist/transports/http.d.ts +40 -0
  537. package/dist/transports/http.d.ts.map +1 -0
  538. package/dist/transports/http.js +212 -0
  539. package/dist/transports/http.js.map +1 -0
  540. package/dist/transports/index.d.ts +6 -0
  541. package/dist/transports/index.d.ts.map +1 -0
  542. package/dist/transports/index.js +6 -0
  543. package/dist/transports/index.js.map +1 -0
  544. package/dist/transports/stdio.d.ts +14 -0
  545. package/dist/transports/stdio.d.ts.map +1 -0
  546. package/dist/transports/stdio.js +32 -0
  547. package/dist/transports/stdio.js.map +1 -0
  548. package/dist/tui/components.d.ts +59 -0
  549. package/dist/tui/components.d.ts.map +1 -0
  550. package/dist/tui/components.js +82 -0
  551. package/dist/tui/components.js.map +1 -0
  552. package/dist/tui/config-wizard.d.ts +12 -0
  553. package/dist/tui/config-wizard.d.ts.map +1 -0
  554. package/dist/tui/config-wizard.js +348 -0
  555. package/dist/tui/config-wizard.js.map +1 -0
  556. package/dist/tui/wizard-save.d.ts +51 -0
  557. package/dist/tui/wizard-save.d.ts.map +1 -0
  558. package/dist/tui/wizard-save.js +148 -0
  559. package/dist/tui/wizard-save.js.map +1 -0
  560. package/docs/00_README.md +45 -0
  561. package/docs/01_PRODUCT_OVERVIEW.md +69 -0
  562. package/docs/02_ARCHITECTURE_AND_REQUEST_FLOW.md +120 -0
  563. package/docs/03_CONFIGURATION_AND_WIZARD.md +143 -0
  564. package/docs/04_LOCAL_STDIO_USAGE.md +118 -0
  565. package/docs/05_REMOTE_VPS_DEPLOYMENT.md +136 -0
  566. package/docs/06_PAYMENTS_X402_AND_PAYSH.md +162 -0
  567. package/docs/07_ENDPOINTS_AND_CLIENTS.md +114 -0
  568. package/docs/08_SECURITY_POLICY_AND_SIGNING.md +134 -0
  569. package/docs/09_TOOLS_SKILLS_AND_AGENT_GUIDE.md +72 -0
  570. package/docs/10_OPERATIONS_RELEASE_AND_PM2.md +90 -0
  571. package/docs/11_CODE_QUALITY_AUDIT.md +49 -0
  572. package/ecosystem.config.example.cjs +55 -0
  573. package/package.json +132 -0
  574. package/skills/README.md +146 -0
  575. package/skills/sap-agent-registry/SKILL.md +39 -0
  576. package/skills/sap-agentkit/SKILL.md +40 -0
  577. package/skills/sap-defi/SKILL.md +51 -0
  578. package/skills/sap-discovery-indexing/SKILL.md +33 -0
  579. package/skills/sap-escrow-settlement/SKILL.md +37 -0
  580. package/skills/sap-ledger-session/SKILL.md +24 -0
  581. package/skills/sap-market-data/SKILL.md +36 -0
  582. package/skills/sap-mcp/SKILL.md +202 -0
  583. package/skills/sap-mcp/TOOL_REFERENCE.md +184 -0
  584. package/skills/sap-memory-vault/SKILL.md +29 -0
  585. package/skills/sap-nft-metaplex/SKILL.md +38 -0
  586. package/skills/sap-operations/SKILL.md +97 -0
  587. package/skills/sap-payments-x402/SKILL.md +47 -0
  588. package/skills/sap-reputation-attestation/SKILL.md +30 -0
  589. package/skills/sap-sns/SKILL.md +51 -0
  590. package/skills/sap-social-gaming/SKILL.md +30 -0
  591. package/skills/sap-solana-token/SKILL.md +32 -0
  592. package/skills/sap-staking/SKILL.md +24 -0
  593. package/skills/sap-tool-registry/SKILL.md +29 -0
@@ -0,0 +1,679 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SAP MCP Server - Config CLI
4
+ *
5
+ * Manage secure JSON configuration with approval workflow.
6
+ *
7
+ * Usage:
8
+ * npx sap-mcp-config init # Create default config
9
+ * npx sap-mcp-config wizard # Interactive setup wizard
10
+ * npx sap-mcp-config show # Show current config
11
+ * npx sap-mcp-config set mode readonly # Set a field
12
+ * npx sap-mcp-config pending # List pending changes
13
+ * npx sap-mcp-config approve <id> # Approve a change
14
+ * npx sap-mcp-config deny <id> # Deny a change
15
+ * npx sap-mcp-config audit # Show audit log
16
+ */
17
+ import { getConfigManager } from './config/secure-config.js';
18
+ import { runWizard } from './config/wizard.js';
19
+ import { getPreferredConfigDir } from './config/paths.js';
20
+ import { listProfiles, switchProfile, createProfile, deleteProfile, getCurrentProfileInfo, getActiveProfile, getProfileConfigPath, loadProfileConfig, } from './config/profiles.js';
21
+ import { existsSync, readFileSync } from 'fs';
22
+ const cliColors = {
23
+ aqua: '\x1b[36m',
24
+ gray: '\x1b[90m',
25
+ green: '\x1b[32m',
26
+ purple: '\x1b[35m',
27
+ red: '\x1b[31m',
28
+ reset: '\x1b[0m',
29
+ yellow: '\x1b[33m',
30
+ };
31
+ const secretFieldPattern = /(?:apiKey|secret|privateKey|mnemonic|password|token)/i;
32
+ /**
33
+ * Wraps terminal output with an ANSI color and reset sequence.
34
+ */
35
+ function colorize(value, color) {
36
+ return `${cliColors[color]}${value}${cliColors.reset}`;
37
+ }
38
+ /**
39
+ * Prints a wizard-style boxed header for config CLI commands.
40
+ */
41
+ function printCliHeader(title, subtitle) {
42
+ const width = 70;
43
+ const line = '═'.repeat(width);
44
+ const space = ' '.repeat(width);
45
+ console.log('');
46
+ console.log(colorize(`╔${line}╗`, 'purple'));
47
+ console.log(`${colorize('║', 'purple')}${space}${colorize('║', 'purple')}`);
48
+ const titlePadding = Math.max(0, Math.floor((width - title.length) / 2));
49
+ const titleLine = ' '.repeat(titlePadding) + title + ' '.repeat(Math.max(0, width - titlePadding - title.length));
50
+ console.log(`${colorize('║', 'purple')}${titleLine}${colorize('║', 'purple')}`);
51
+ if (subtitle) {
52
+ const subtitlePadding = Math.max(0, Math.floor((width - subtitle.length) / 2));
53
+ const subtitleLine = ' '.repeat(subtitlePadding) + subtitle + ' '.repeat(Math.max(0, width - subtitlePadding - subtitle.length));
54
+ console.log(`${colorize('║', 'purple')}${subtitleLine}${colorize('║', 'purple')}`);
55
+ }
56
+ console.log(`${colorize('║', 'purple')}${space}${colorize('║', 'purple')}`);
57
+ console.log(colorize(`╚${line}╝`, 'purple'));
58
+ console.log('');
59
+ }
60
+ /**
61
+ * Prints a wizard-style section divider.
62
+ */
63
+ function printCliSection(title) {
64
+ console.log(colorize('─'.repeat(70), 'purple'));
65
+ console.log(` ${colorize(title, 'aqua')}`);
66
+ console.log(colorize('─'.repeat(70), 'purple'));
67
+ }
68
+ /**
69
+ * Prints a colored key/value row.
70
+ */
71
+ function printKeyValue(label, value, valueColor = 'aqua') {
72
+ console.log(` ${colorize(`${label}:`, 'aqua')} ${colorize(formatCliValue(value), valueColor)}`);
73
+ }
74
+ /**
75
+ * Prints a success message using the same visual language as the wizard.
76
+ */
77
+ function printSuccess(message) {
78
+ console.log(`${colorize('✓', 'green')} ${message}`);
79
+ }
80
+ /**
81
+ * Prints a warning message using the same visual language as the wizard.
82
+ */
83
+ function printWarning(message) {
84
+ console.log(`${colorize('⚠', 'yellow')} ${message}`);
85
+ }
86
+ /**
87
+ * Prints an error message using the same visual language as the wizard.
88
+ */
89
+ function printCliError(message) {
90
+ console.error(`${colorize('✗', 'red')} ${message}`);
91
+ }
92
+ /**
93
+ * Formats scalar and object values for CLI display without losing type meaning.
94
+ */
95
+ function formatCliValue(value) {
96
+ if (typeof value === 'string') {
97
+ return value;
98
+ }
99
+ if (value === undefined) {
100
+ return 'undefined';
101
+ }
102
+ if (value === null || typeof value === 'number' || typeof value === 'boolean') {
103
+ return String(value);
104
+ }
105
+ return JSON.stringify(value);
106
+ }
107
+ /**
108
+ * Returns true when a config field name should not be printed verbatim.
109
+ */
110
+ function isSecretField(fieldName) {
111
+ return secretFieldPattern.test(fieldName);
112
+ }
113
+ /**
114
+ * Redacts secret-looking config values before they are printed to a terminal.
115
+ */
116
+ function redactForDisplay(value, fieldName = '') {
117
+ if (isSecretField(fieldName)) {
118
+ return '[redacted]';
119
+ }
120
+ if (Array.isArray(value)) {
121
+ if (value.length >= 32 && value.every((item) => typeof item === 'number')) {
122
+ return '[redacted byte array]';
123
+ }
124
+ return value.map((item) => redactForDisplay(item, fieldName));
125
+ }
126
+ if (value && typeof value === 'object') {
127
+ const redacted = {};
128
+ for (const [key, nestedValue] of Object.entries(value)) {
129
+ redacted[key] = redactForDisplay(nestedValue, key);
130
+ }
131
+ return redacted;
132
+ }
133
+ return value;
134
+ }
135
+ /**
136
+ * Formats a field value after applying terminal-safe redaction.
137
+ */
138
+ function formatDisplayValue(fieldName, value) {
139
+ return formatCliValue(redactForDisplay(value, fieldName));
140
+ }
141
+ /**
142
+ * Prints one pending config change in a readable, colorized block.
143
+ */
144
+ function printPendingChange(change) {
145
+ console.log(`${colorize('ID', 'aqua')}: ${colorize(change.id, 'purple')}`);
146
+ printKeyValue('Field', change.field, 'yellow');
147
+ printKeyValue('Old', formatDisplayValue(change.field, change.oldValue), 'gray');
148
+ printKeyValue('New', formatDisplayValue(change.field, change.newValue), 'green');
149
+ printKeyValue('Requested', `${change.requestedAt} by ${change.requestedBy}`, 'aqua');
150
+ printKeyValue('Expires', change.expiresAt, 'yellow');
151
+ printKeyValue('Status', change.status, change.status === 'pending' ? 'yellow' : 'green');
152
+ console.log('');
153
+ }
154
+ /**
155
+ * Prints one audit entry in a readable, colorized block.
156
+ */
157
+ function printAuditEntry(entry) {
158
+ console.log(`${colorize(`[${entry.timestamp}]`, 'gray')} ${colorize(entry.action, 'purple')}`);
159
+ printKeyValue('User', entry.user, 'aqua');
160
+ for (const change of entry.changes ?? []) {
161
+ printKeyValue('Change', change.field, 'yellow');
162
+ printKeyValue('Old', formatDisplayValue(change.field, change.oldValue), 'gray');
163
+ printKeyValue('New', formatDisplayValue(change.field, change.newValue), 'green');
164
+ }
165
+ printKeyValue('Approval', entry.approvalStatus || 'not required', entry.approvalStatus === 'denied' ? 'red' : 'green');
166
+ printKeyValue('Hash', entry.configHash, 'gray');
167
+ console.log('');
168
+ }
169
+ /**
170
+ * Loads the active profile config, falling back to the default secure config manager for first-run setup.
171
+ */
172
+ function loadActiveConfigForDisplay() {
173
+ const profileName = getActiveProfile();
174
+ const profileConfig = loadProfileConfig(profileName);
175
+ if (profileConfig) {
176
+ return {
177
+ config: profileConfig,
178
+ profileName,
179
+ configPath: getProfileConfigPath(profileName),
180
+ };
181
+ }
182
+ return {
183
+ config: getConfigManager().load(),
184
+ profileName: 'default',
185
+ configPath: `${getPreferredConfigDir()}/config.json`,
186
+ };
187
+ }
188
+ /**
189
+ * Internal helper for the print usage operation.
190
+ */
191
+ function printUsage() {
192
+ const purple = cliColors.purple;
193
+ const aqua = cliColors.aqua;
194
+ const reset = cliColors.reset;
195
+ printCliHeader('SAP MCP Config Manager');
196
+ console.log('');
197
+ console.log(`${aqua}Usage:${reset} sap-mcp-config <command> [options]`);
198
+ console.log('');
199
+ console.log(`${purple}Core Commands:${reset}`);
200
+ console.log(' init Create default configuration');
201
+ console.log(' wizard Interactive setup wizard (recommended for first-time)');
202
+ console.log(' show Show current configuration');
203
+ console.log(' set <field> <value> Set a configuration field');
204
+ console.log(' pubkey Show agent public key');
205
+ console.log(' info Show full configuration info');
206
+ console.log(' wallet Show wallet information');
207
+ console.log('');
208
+ console.log(`${purple}Profile Management (Multi-Agent):${reset}`);
209
+ console.log(' profiles List all available profiles');
210
+ console.log(' profile <name> Switch to a profile');
211
+ console.log(' create-profile <name> Create new profile from current');
212
+ console.log(' delete-profile <name> Delete a profile');
213
+ console.log(' profile-info Show current profile info');
214
+ console.log('');
215
+ console.log(`${purple}Approval Workflow:${reset}`);
216
+ console.log(' pending List pending changes');
217
+ console.log(' approve <id> Approve a pending change');
218
+ console.log(' deny <id> Deny a pending change');
219
+ console.log('');
220
+ console.log(`${purple}Audit & Security:${reset}`);
221
+ console.log(' audit Show audit log');
222
+ console.log(' hash Show config hash');
223
+ console.log('');
224
+ console.log(`${purple}Other:${reset}`);
225
+ console.log(' help Show this help message');
226
+ console.log('');
227
+ console.log(`${aqua}Examples:${reset}`);
228
+ console.log(` ${purple}sap-mcp-config wizard${reset} # Start interactive wizard`);
229
+ console.log(` ${purple}sap-mcp-config pubkey${reset} # Show agent pubkey`);
230
+ console.log(` ${purple}sap-mcp-config profiles${reset} # List all profiles`);
231
+ console.log(` ${purple}sap-mcp-config profile hermes${reset} # Switch to hermes profile`);
232
+ console.log(` ${purple}sap-mcp-config create-profile claude${reset} # Create claude profile`);
233
+ console.log(` ${purple}sap-mcp-config set mode readonly${reset}`);
234
+ console.log(` ${purple}sap-mcp-config pending${reset}`);
235
+ console.log(` ${purple}sap-mcp-config approve chg_1719139200_abc123${reset}`);
236
+ console.log(` ${purple}sap-mcp-config audit --limit 20${reset}`);
237
+ console.log('');
238
+ }
239
+ /**
240
+ * Internal helper for the main operation.
241
+ */
242
+ async function main() {
243
+ const args = process.argv.slice(2);
244
+ const command = args[0];
245
+ if (!command || command === 'help' || command === '--help' || command === '-h') {
246
+ printUsage();
247
+ return;
248
+ }
249
+ try {
250
+ const configManager = getConfigManager();
251
+ switch (command) {
252
+ case 'init': {
253
+ console.log('Initializing configuration...');
254
+ configManager.load();
255
+ console.log('✓ Configuration initialized at:', `${getPreferredConfigDir()}/config.json`);
256
+ console.log('');
257
+ console.log('Edit with: sap-mcp-config set <field> <value>');
258
+ console.log('Or use wizard for interactive setup: sap-mcp-config wizard');
259
+ break;
260
+ }
261
+ case 'wizard': {
262
+ console.log('Starting interactive configuration wizard...\n');
263
+ await runWizard();
264
+ break;
265
+ }
266
+ case 'show': {
267
+ const { config, profileName, configPath } = loadActiveConfigForDisplay();
268
+ printCliHeader('Current Configuration', 'Active SAP MCP profile');
269
+ printCliSection('Profile');
270
+ printKeyValue('Name', profileName, 'green');
271
+ printKeyValue('Path', configPath, 'purple');
272
+ printKeyValue('Config Root', getPreferredConfigDir(), 'aqua');
273
+ console.log('');
274
+ printCliSection('JSON');
275
+ console.log(colorize('Secret values are redacted before display.', 'gray'));
276
+ console.log(JSON.stringify(redactForDisplay(config), null, 2));
277
+ console.log('');
278
+ break;
279
+ }
280
+ // Profile Management
281
+ case 'profiles': {
282
+ const profiles = listProfiles();
283
+ if (profiles.length === 0) {
284
+ console.log('No profiles found. Create one with: sap-mcp-config create-profile <name>');
285
+ }
286
+ else {
287
+ console.log('Available Profiles:');
288
+ console.log('─────────────────────────────────────────────────────────');
289
+ for (const profile of profiles) {
290
+ const activeMarker = profile.name === getActiveProfile() ? '● ' : ' ';
291
+ console.log(`${activeMarker}${profile.name}`);
292
+ console.log(` Path: ${profile.path}`);
293
+ if (profile.agentPubkey) {
294
+ console.log(` Pubkey: ${profile.agentPubkey}`);
295
+ }
296
+ if (profile.mode) {
297
+ console.log(` Mode: ${profile.mode}`);
298
+ }
299
+ if (profile.walletPath) {
300
+ console.log(` Wallet: ${profile.walletPath}`);
301
+ }
302
+ console.log('');
303
+ }
304
+ }
305
+ break;
306
+ }
307
+ case 'profile': {
308
+ if (args.length < 2) {
309
+ console.error('Error: Missing profile name');
310
+ console.log('Usage: sap-mcp-config profile <name>');
311
+ console.log('');
312
+ console.log('Available profiles:');
313
+ const profiles = listProfiles();
314
+ for (const p of profiles) {
315
+ const activeMarker = p.name === getActiveProfile() ? '●' : ' ';
316
+ console.log(` ${activeMarker} ${p.name}`);
317
+ }
318
+ process.exit(1);
319
+ }
320
+ const profileName = args[1];
321
+ const result = switchProfile(profileName);
322
+ if (result.success) {
323
+ console.log(`✓ ${result.message}`);
324
+ // Show new profile info
325
+ const newConfig = loadProfileConfig(profileName);
326
+ if (newConfig) {
327
+ console.log('');
328
+ console.log('New Profile Configuration:');
329
+ console.log(` Agent Pubkey: ${newConfig.agentPubkey || 'Not set'}`);
330
+ console.log(` Mode: ${newConfig.mode}`);
331
+ console.log(` RPC: ${newConfig.rpcUrl}`);
332
+ console.log(` Wallet: ${newConfig.walletPath || 'Not set'}`);
333
+ }
334
+ }
335
+ else {
336
+ console.error(`✗ ${result.message}`);
337
+ process.exit(1);
338
+ }
339
+ break;
340
+ }
341
+ case 'create-profile': {
342
+ if (args.length < 2) {
343
+ console.error('Error: Missing profile name');
344
+ console.log('Usage: sap-mcp-config create-profile <name> [copy-from]');
345
+ process.exit(1);
346
+ }
347
+ const profileName = args[1];
348
+ const copyFrom = args[2]; // Optional
349
+ const result = await createProfile(profileName, copyFrom);
350
+ if (result.success) {
351
+ console.log(`✓ ${result.message}`);
352
+ }
353
+ else {
354
+ console.error(`✗ ${result.message}`);
355
+ process.exit(1);
356
+ }
357
+ break;
358
+ }
359
+ case 'delete-profile': {
360
+ if (args.length < 2) {
361
+ console.error('Error: Missing profile name');
362
+ console.log('Usage: sap-mcp-config delete-profile <name>');
363
+ process.exit(1);
364
+ }
365
+ const profileName = args[1];
366
+ const result = await deleteProfile(profileName);
367
+ if (result.success) {
368
+ console.log(`✓ ${result.message}`);
369
+ }
370
+ else {
371
+ console.error(`✗ ${result.message}`);
372
+ process.exit(1);
373
+ }
374
+ break;
375
+ }
376
+ case 'profile-info': {
377
+ const info = getCurrentProfileInfo();
378
+ console.log('Current Profile:');
379
+ console.log('─────────────────────────────────────────────────────────');
380
+ console.log(`Name: ${info.name}`);
381
+ console.log(`Path: ${info.path}`);
382
+ console.log(`Exists: ${info.exists ? 'Yes' : 'No'}`);
383
+ if (info.exists) {
384
+ if (info.agentPubkey) {
385
+ console.log(`Agent Pubkey: ${info.agentPubkey}`);
386
+ }
387
+ if (info.mode) {
388
+ console.log(`Mode: ${info.mode}`);
389
+ }
390
+ if (info.walletPath) {
391
+ console.log(`Wallet: ${info.walletPath}`);
392
+ }
393
+ }
394
+ break;
395
+ }
396
+ // Config Extension Commands
397
+ case 'pubkey': {
398
+ const { config, configPath } = loadActiveConfigForDisplay();
399
+ const purple = '\x1b[35m';
400
+ const aqua = '\x1b[36m';
401
+ const green = '\x1b[32m';
402
+ const yellow = '\x1b[33m';
403
+ const reset = '\x1b[0m';
404
+ console.log('');
405
+ console.log(`${purple}╔══════════════════════════════════════════════════════════╗${reset}`);
406
+ console.log(`${purple}║${reset} SAP MCP Agent Public Key ${purple}║${reset}`);
407
+ console.log(`${purple}╚══════════════════════════════════════════════════════════╝${reset}`);
408
+ console.log('');
409
+ if (config.agentPubkey) {
410
+ console.log(`${aqua}Agent Public Key:${reset} ${green}${config.agentPubkey}${reset}`);
411
+ console.log('');
412
+ console.log(`${aqua}This pubkey is:${reset}`);
413
+ console.log(` ${green}✓${reset} Auto-extracted from your wallet file`);
414
+ console.log(` ${green}✓${reset} Saved in config for easy access`);
415
+ console.log(` ${green}✓${reset} Used for SAP agent registration`);
416
+ console.log('');
417
+ console.log(`${aqua}Use this pubkey to:${reset}`);
418
+ console.log(' - Register your SAP agent on-chain');
419
+ console.log(' - Bridge Identity over Metaplex 014 Agent Registry');
420
+ console.log(' - Link SNS domain to your agent');
421
+ console.log(' - Configure AI agent identity');
422
+ console.log(' - Execute tools on Solana and SAP');
423
+ console.log('');
424
+ }
425
+ else {
426
+ console.log(`${yellow}⚠ No agentPubkey found in config!${reset}`);
427
+ console.log('');
428
+ console.log(`${aqua}Run the wizard to auto-extract your pubkey:${reset}`);
429
+ console.log(` ${purple}sap-mcp-config wizard${reset}`);
430
+ console.log('');
431
+ console.log(`${aqua}Or manually set walletPath:${reset}`);
432
+ console.log(` ${purple}sap-mcp-config set walletPath ~/.config/mcp-sap/keypairs/your-wallet.json${reset}`);
433
+ console.log('');
434
+ }
435
+ console.log(`${aqua}Config Location:${reset}`);
436
+ console.log(` ${purple}${configPath}${reset}`);
437
+ console.log('');
438
+ break;
439
+ }
440
+ case 'info': {
441
+ const { config, profileName, configPath } = loadActiveConfigForDisplay();
442
+ console.log('');
443
+ console.log('╔══════════════════════════════════════════════════════════╗');
444
+ console.log('║ SAP MCP Configuration Info ║');
445
+ console.log('╚══════════════════════════════════════════════════════════╝');
446
+ console.log('');
447
+ console.log('Agent Identity:');
448
+ console.log(` Profile: ${profileName}`);
449
+ console.log(` Pubkey: ${config.agentPubkey || 'Not set (run wizard to extract)'}`);
450
+ console.log(` Wallet: ${config.walletPath || 'Not set'}`);
451
+ console.log('');
452
+ console.log('Server Configuration:');
453
+ console.log(` Mode: ${config.mode}`);
454
+ console.log(` RPC: ${config.rpcUrl}`);
455
+ console.log(` Program ID: ${config.programId}`);
456
+ console.log('');
457
+ console.log('Security Limits:');
458
+ console.log(` Max TX Value: ${config.maxTxValueSol} SOL`);
459
+ console.log(` Daily Limit: ${config.dailyLimitSol} SOL`);
460
+ console.log(` Approval Above: ${config.requireApprovalAboveSol} SOL`);
461
+ console.log('');
462
+ console.log('HTTP Transport:');
463
+ console.log(` Enabled: ${config.enableHttp ? 'Yes' : 'No'}`);
464
+ if (config.enableHttp) {
465
+ console.log(` Port: ${config.httpPort}`);
466
+ console.log(` Host: ${config.httpHost}`);
467
+ if (config.httpCorsOrigins) {
468
+ console.log(` CORS: ${config.httpCorsOrigins.join(', ')}`);
469
+ }
470
+ }
471
+ console.log('');
472
+ console.log('Bento Integration:');
473
+ console.log(` Enabled: ${config.bento?.enabled ? 'Yes' : 'No'}`);
474
+ if (config.bento?.enabled) {
475
+ console.log(` Agent ID: ${config.bento.agentId || 'Not set'}`);
476
+ }
477
+ console.log('');
478
+ console.log('Policy Engine:');
479
+ console.log(` Mode: ${config.policy?.mode || 'local-only'}`);
480
+ console.log(` Fail Open: ${config.policy?.failOpen ? 'Yes' : 'No'}`);
481
+ console.log('');
482
+ console.log('Files:');
483
+ console.log(` Config: ${configPath}`);
484
+ console.log(` Keypairs: ${getPreferredConfigDir()}/keypairs/`);
485
+ console.log(` Logs: ${getPreferredConfigDir()}/logs/`);
486
+ console.log('');
487
+ break;
488
+ }
489
+ case 'wallet': {
490
+ const { config } = loadActiveConfigForDisplay();
491
+ console.log('');
492
+ console.log('╔══════════════════════════════════════════════════════════╗');
493
+ console.log('║ SAP MCP Wallet Information ║');
494
+ console.log('╚══════════════════════════════════════════════════════════╝');
495
+ console.log('');
496
+ if (!config.walletPath) {
497
+ console.log('⚠ No wallet configured!');
498
+ console.log('');
499
+ console.log('Run wizard to create or select a wallet:');
500
+ console.log(' npx sap-mcp-config wizard');
501
+ console.log('');
502
+ break;
503
+ }
504
+ console.log(`Wallet Path: ${config.walletPath}`);
505
+ console.log('');
506
+ if (existsSync(config.walletPath)) {
507
+ console.log('✓ Wallet file exists');
508
+ try {
509
+ const keypairData = JSON.parse(readFileSync(config.walletPath, 'utf-8'));
510
+ console.log(` Format: ${Array.isArray(keypairData) ? 'Secret key array (64 bytes)' : 'Unknown'}`);
511
+ console.log(` Size: ${keypairData.length} bytes`);
512
+ }
513
+ catch {
514
+ console.log(' ⚠ Could not read wallet');
515
+ }
516
+ }
517
+ else {
518
+ console.log('✗ Wallet file NOT found');
519
+ console.log('');
520
+ console.log('Create wallet with wizard:');
521
+ console.log(' npx sap-mcp-config wizard');
522
+ }
523
+ console.log('');
524
+ console.log('Keypairs Directory:');
525
+ console.log(` ${getPreferredConfigDir()}/keypairs/`);
526
+ console.log('');
527
+ console.log('Agent Pubkey:');
528
+ if (config.agentPubkey) {
529
+ console.log(` ${config.agentPubkey}`);
530
+ }
531
+ else {
532
+ console.log(' Not extracted (run wizard to auto-extract)');
533
+ }
534
+ console.log('');
535
+ break;
536
+ }
537
+ case 'set': {
538
+ if (args.length < 3) {
539
+ printCliError('Missing field or value');
540
+ console.log('Usage: sap-mcp-config set <field> <value>');
541
+ process.exit(1);
542
+ }
543
+ const field = args[1];
544
+ const value = args[2];
545
+ // Parse value type
546
+ let parsedValue = value;
547
+ if (value === 'true')
548
+ parsedValue = true;
549
+ else if (value === 'false')
550
+ parsedValue = false;
551
+ else if (/^\d+$/.test(value))
552
+ parsedValue = parseInt(value, 10);
553
+ const result = await configManager.update({ [field]: parsedValue }, process.env.USER || 'user');
554
+ printCliHeader('Configuration Update', 'Secure config change workflow');
555
+ printCliSection('Requested Change');
556
+ printKeyValue('Field', field, 'yellow');
557
+ printKeyValue('Value', formatDisplayValue(field, parsedValue), 'green');
558
+ console.log('');
559
+ if (result.applied.length > 0) {
560
+ printCliSection('Applied Immediately');
561
+ result.applied.forEach((appliedField) => printSuccess(appliedField));
562
+ console.log('');
563
+ }
564
+ if (result.pendingChanges.length > 0) {
565
+ printCliSection('Pending Approval');
566
+ result.pendingChanges.forEach((pendingChange) => {
567
+ printPendingChange(pendingChange);
568
+ });
569
+ console.log(`${colorize('Next:', 'aqua')} sap-mcp-config approve <id>`);
570
+ }
571
+ if (result.applied.length === 0 && result.pendingChanges.length === 0) {
572
+ printWarning('No changes were applied or queued.');
573
+ }
574
+ break;
575
+ }
576
+ case 'pending': {
577
+ const pending = configManager.getPendingChanges();
578
+ printCliHeader('Pending Changes', 'Approval queue');
579
+ if (pending.length === 0) {
580
+ printSuccess('No pending changes');
581
+ console.log('');
582
+ }
583
+ else {
584
+ printCliSection(`${pending.length} change${pending.length === 1 ? '' : 's'} awaiting approval`);
585
+ pending.forEach((change) => {
586
+ printPendingChange(change);
587
+ });
588
+ console.log(`${colorize('Approve:', 'aqua')} sap-mcp-config approve <id>`);
589
+ console.log(`${colorize('Deny:', 'aqua')} sap-mcp-config deny <id>`);
590
+ console.log('');
591
+ }
592
+ break;
593
+ }
594
+ case 'approve': {
595
+ if (args.length < 2) {
596
+ printCliError('Missing change ID');
597
+ console.log('Usage: sap-mcp-config approve <id>');
598
+ process.exit(1);
599
+ }
600
+ const changeId = args[1];
601
+ printCliHeader('Approve Change', 'Security approval workflow');
602
+ printKeyValue('Change ID', changeId, 'purple');
603
+ console.log('');
604
+ const success = configManager.approve(changeId, process.env.USER || 'user');
605
+ if (success) {
606
+ printSuccess('Change approved and applied');
607
+ console.log('');
608
+ }
609
+ else {
610
+ printCliError('Failed to approve change (not found or expired)');
611
+ process.exit(1);
612
+ }
613
+ break;
614
+ }
615
+ case 'deny': {
616
+ if (args.length < 2) {
617
+ printCliError('Missing change ID');
618
+ console.log('Usage: sap-mcp-config deny <id>');
619
+ process.exit(1);
620
+ }
621
+ const changeId = args[1];
622
+ printCliHeader('Deny Change', 'Security approval workflow');
623
+ printKeyValue('Change ID', changeId, 'purple');
624
+ console.log('');
625
+ const success = configManager.deny(changeId, process.env.USER || 'user');
626
+ if (success) {
627
+ printSuccess('Change denied');
628
+ console.log('');
629
+ }
630
+ else {
631
+ printCliError('Failed to deny change (not found)');
632
+ process.exit(1);
633
+ }
634
+ break;
635
+ }
636
+ case 'audit': {
637
+ const limit = args.includes('--limit') ? parseInt(args[args.indexOf('--limit') + 1], 10) : 20;
638
+ const audit = configManager.getAuditLog(limit);
639
+ printCliHeader('Audit Log', 'Configuration security history');
640
+ printKeyValue('Limit', limit, 'yellow');
641
+ console.log('');
642
+ if (audit.length === 0) {
643
+ printWarning('No audit entries');
644
+ console.log('');
645
+ }
646
+ else {
647
+ printCliSection(`${audit.length} entr${audit.length === 1 ? 'y' : 'ies'}`);
648
+ audit.forEach((entry) => {
649
+ printAuditEntry(entry);
650
+ });
651
+ }
652
+ break;
653
+ }
654
+ case 'hash': {
655
+ const hash = configManager.getConfigHash();
656
+ console.log('Current Configuration Hash:');
657
+ console.log(hash);
658
+ break;
659
+ }
660
+ default:
661
+ console.error(`Unknown command: ${command}`);
662
+ printUsage();
663
+ process.exit(1);
664
+ }
665
+ }
666
+ catch (error) {
667
+ console.error('Error:', error instanceof Error ? error.message : error);
668
+ process.exit(1);
669
+ }
670
+ }
671
+ // Export for use in main CLI
672
+ /**
673
+ * Executes the run config cli operation.
674
+ */
675
+ export async function runConfigCLI() {
676
+ await main();
677
+ }
678
+ main();
679
+ //# sourceMappingURL=config-cli.js.map