auramaxx 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +77 -0
  3. package/apps/desktop-electron/main.js +428 -0
  4. package/bin/auramaxx.js +1063 -0
  5. package/docs/ADAPTERS.md +466 -0
  6. package/docs/AGENT_SETUP.md +159 -0
  7. package/docs/API.md +127 -0
  8. package/docs/APPS.md +199 -0
  9. package/docs/ARCHITECTURE.md +235 -0
  10. package/docs/AUTH.md +318 -0
  11. package/docs/BEST-PRACTICES.md +82 -0
  12. package/docs/CLI.md +141 -0
  13. package/docs/DESKTOP_ELECTRON.md +26 -0
  14. package/docs/DEVELOPING-APPS.md +453 -0
  15. package/docs/MCP.md +122 -0
  16. package/docs/PACKAGING_POLICY.md +19 -0
  17. package/docs/PERMISSION.md +137 -0
  18. package/docs/PROTOCOL.md +142 -0
  19. package/docs/README.md +50 -0
  20. package/docs/SKILLS.md +132 -0
  21. package/docs/TROUBLESHOOTING.md +376 -0
  22. package/docs/WORKSPACE.md +673 -0
  23. package/docs/agent-auth.md +14 -0
  24. package/docs/api/authentication.md +79 -0
  25. package/docs/api/secrets/api-keys.md +28 -0
  26. package/docs/api/secrets/credentials.md +80 -0
  27. package/docs/api/secrets/sharing.md +48 -0
  28. package/docs/api/system.md +41 -0
  29. package/docs/api/wallets/apps-strategies.md +66 -0
  30. package/docs/api/wallets/core.md +46 -0
  31. package/docs/api/wallets/data-portfolio.md +42 -0
  32. package/docs/aura-file.md +48 -0
  33. package/docs/core-concepts/FEATURES.md +114 -0
  34. package/docs/credentials.md +120 -0
  35. package/docs/external/HOW_TO_AURAMAXX/GETTING_SECRETS.md +33 -0
  36. package/docs/external/HOW_TO_AURAMAXX/README.md +45 -0
  37. package/docs/external/getting-started.md +10 -0
  38. package/docs/external/overview.md +19 -0
  39. package/docs/external/persona-paths.md +7 -0
  40. package/docs/external/share-secret.md +76 -0
  41. package/docs/external/why-aura.md +7 -0
  42. package/docs/security.md +227 -0
  43. package/docs/templates/RELEASE_NOTES_TEMPLATE.md +22 -0
  44. package/docs/wallet/AI.md +508 -0
  45. package/docs/wallet/DEVELOPING-STRATEGIES.md +713 -0
  46. package/docs/wallet/README.md +47 -0
  47. package/docs/wallet/STRATEGY.md +89 -0
  48. package/next.config.ts +28 -0
  49. package/package.json +167 -0
  50. package/postcss.config.mjs +8 -0
  51. package/prisma/migrations/20260214170000_baseline/migration.sql +511 -0
  52. package/prisma/migrations/20260216214537_add_passkey_model/migration.sql +18 -0
  53. package/prisma/migrations/20260217150500_add_credential_access_audit/migration.sql +31 -0
  54. package/prisma/migrations/20260222090000_update_admin_ttl_default/migration.sql +10 -0
  55. package/prisma/migrations/migration_lock.toml +3 -0
  56. package/prisma/schema.prisma +447 -0
  57. package/public/logo.webp +0 -0
  58. package/scripts/add-app.js +245 -0
  59. package/server/abi/SwapHelper.json +438 -0
  60. package/server/cli/approval.ts +447 -0
  61. package/server/cli/commands/actions.ts +474 -0
  62. package/server/cli/commands/api.ts +220 -0
  63. package/server/cli/commands/apikey.ts +277 -0
  64. package/server/cli/commands/app.ts +204 -0
  65. package/server/cli/commands/auth.ts +464 -0
  66. package/server/cli/commands/cron.ts +24 -0
  67. package/server/cli/commands/diary.ts +274 -0
  68. package/server/cli/commands/doctor.ts +1247 -0
  69. package/server/cli/commands/env.ts +476 -0
  70. package/server/cli/commands/experimental.ts +69 -0
  71. package/server/cli/commands/init.ts +798 -0
  72. package/server/cli/commands/lock.ts +157 -0
  73. package/server/cli/commands/mcp.ts +285 -0
  74. package/server/cli/commands/quickhack.ts +86 -0
  75. package/server/cli/commands/release-check.ts +231 -0
  76. package/server/cli/commands/restore.ts +314 -0
  77. package/server/cli/commands/service.ts +320 -0
  78. package/server/cli/commands/shell-hook.ts +512 -0
  79. package/server/cli/commands/skill.ts +216 -0
  80. package/server/cli/commands/start.ts +139 -0
  81. package/server/cli/commands/status.ts +59 -0
  82. package/server/cli/commands/stop.ts +36 -0
  83. package/server/cli/commands/token.ts +180 -0
  84. package/server/cli/commands/unlock.ts +50 -0
  85. package/server/cli/commands/vault.ts +1323 -0
  86. package/server/cli/commands/wallet.ts +209 -0
  87. package/server/cli/index.ts +280 -0
  88. package/server/cli/lib/approval-poll.ts +94 -0
  89. package/server/cli/lib/aura-parser.ts +64 -0
  90. package/server/cli/lib/credential-create.ts +74 -0
  91. package/server/cli/lib/credential-resolve.ts +280 -0
  92. package/server/cli/lib/dotenv-migrate.ts +116 -0
  93. package/server/cli/lib/dotenv-parser.ts +146 -0
  94. package/server/cli/lib/escalation.ts +57 -0
  95. package/server/cli/lib/http.ts +91 -0
  96. package/server/cli/lib/init-steps.ts +76 -0
  97. package/server/cli/lib/local-agent-trust.ts +45 -0
  98. package/server/cli/lib/lock-unlock-helper.ts +71 -0
  99. package/server/cli/lib/process.ts +162 -0
  100. package/server/cli/lib/prompt.ts +294 -0
  101. package/server/cli/lib/theme.ts +240 -0
  102. package/server/cli/socket.ts +579 -0
  103. package/server/cli/transport-client.ts +50 -0
  104. package/server/cron/index.ts +137 -0
  105. package/server/cron/job.ts +31 -0
  106. package/server/cron/jobs/balance-sync.ts +436 -0
  107. package/server/cron/jobs/incoming-scan.ts +506 -0
  108. package/server/cron/jobs/native-price.ts +70 -0
  109. package/server/cron/jobs/orphan-cleanup.ts +40 -0
  110. package/server/cron/jobs/strategy-runner.ts +175 -0
  111. package/server/cron/scheduler.ts +125 -0
  112. package/server/index.ts +420 -0
  113. package/server/lib/adapters/factory.ts +119 -0
  114. package/server/lib/adapters/index.ts +19 -0
  115. package/server/lib/adapters/router.ts +297 -0
  116. package/server/lib/adapters/telegram.ts +645 -0
  117. package/server/lib/adapters/types.ts +89 -0
  118. package/server/lib/adapters/webhook.ts +95 -0
  119. package/server/lib/address.ts +49 -0
  120. package/server/lib/agent-auth/contracts.ts +1194 -0
  121. package/server/lib/agent-profiles.ts +419 -0
  122. package/server/lib/ai.ts +285 -0
  123. package/server/lib/api-registry/contracts.ts +86 -0
  124. package/server/lib/api-registry/validation.ts +172 -0
  125. package/server/lib/apikey-migration.ts +258 -0
  126. package/server/lib/app-installer.ts +505 -0
  127. package/server/lib/app-tokens.ts +247 -0
  128. package/server/lib/approval-link.ts +27 -0
  129. package/server/lib/auth.ts +314 -0
  130. package/server/lib/auto-execute.ts +160 -0
  131. package/server/lib/batch.ts +242 -0
  132. package/server/lib/cold.ts +1048 -0
  133. package/server/lib/config.ts +408 -0
  134. package/server/lib/credential-access-audit.ts +85 -0
  135. package/server/lib/credential-access-policy.ts +111 -0
  136. package/server/lib/credential-health.ts +343 -0
  137. package/server/lib/credential-import.ts +608 -0
  138. package/server/lib/credential-scope.ts +102 -0
  139. package/server/lib/credential-shares.ts +190 -0
  140. package/server/lib/credential-transport.ts +533 -0
  141. package/server/lib/credential-vault.ts +77 -0
  142. package/server/lib/credentials.ts +422 -0
  143. package/server/lib/crypto.ts +8 -0
  144. package/server/lib/db.ts +58 -0
  145. package/server/lib/defaults.ts +386 -0
  146. package/server/lib/dex/index.ts +80 -0
  147. package/server/lib/dex/relay.ts +235 -0
  148. package/server/lib/dex/types.ts +59 -0
  149. package/server/lib/dex/uniswap.ts +370 -0
  150. package/server/lib/diary.ts +34 -0
  151. package/server/lib/dont-ask-again-policy.ts +41 -0
  152. package/server/lib/e2e-agent/artifacts.ts +36 -0
  153. package/server/lib/e2e-agent/contracts.ts +112 -0
  154. package/server/lib/e2e-agent/validation.ts +135 -0
  155. package/server/lib/encrypt.ts +114 -0
  156. package/server/lib/error.ts +20 -0
  157. package/server/lib/events.ts +217 -0
  158. package/server/lib/feature-flags.ts +93 -0
  159. package/server/lib/hot.ts +357 -0
  160. package/server/lib/human-action-summary.ts +80 -0
  161. package/server/lib/key-fingerprint.ts +28 -0
  162. package/server/lib/logger.ts +340 -0
  163. package/server/lib/network.ts +137 -0
  164. package/server/lib/notifications.ts +230 -0
  165. package/server/lib/oauth2-refresh.ts +241 -0
  166. package/server/lib/oursecret.ts +71 -0
  167. package/server/lib/passkey-credential.ts +360 -0
  168. package/server/lib/passkey.ts +68 -0
  169. package/server/lib/permissions.ts +299 -0
  170. package/server/lib/pino.ts +24 -0
  171. package/server/lib/policy-preview.ts +138 -0
  172. package/server/lib/price.ts +338 -0
  173. package/server/lib/prices.ts +34 -0
  174. package/server/lib/project-scope.ts +297 -0
  175. package/server/lib/resolve-action.ts +328 -0
  176. package/server/lib/resolve.ts +36 -0
  177. package/server/lib/secret-gist-share.ts +296 -0
  178. package/server/lib/sessions.ts +634 -0
  179. package/server/lib/socket-path.ts +56 -0
  180. package/server/lib/solana/connection.ts +26 -0
  181. package/server/lib/solana/jupiter.ts +128 -0
  182. package/server/lib/solana/transfer.ts +108 -0
  183. package/server/lib/solana/wallet.ts +136 -0
  184. package/server/lib/strategy/emits.ts +21 -0
  185. package/server/lib/strategy/engine.ts +1305 -0
  186. package/server/lib/strategy/executor.ts +115 -0
  187. package/server/lib/strategy/hook-context.ts +159 -0
  188. package/server/lib/strategy/hooks.ts +990 -0
  189. package/server/lib/strategy/index.ts +28 -0
  190. package/server/lib/strategy/installer.ts +305 -0
  191. package/server/lib/strategy/loader.ts +256 -0
  192. package/server/lib/strategy/message.ts +237 -0
  193. package/server/lib/strategy/repository.ts +218 -0
  194. package/server/lib/strategy/session-logger.ts +693 -0
  195. package/server/lib/strategy/sources.ts +288 -0
  196. package/server/lib/strategy/state.ts +189 -0
  197. package/server/lib/strategy/templates.ts +403 -0
  198. package/server/lib/strategy/tick.ts +404 -0
  199. package/server/lib/strategy/types.ts +230 -0
  200. package/server/lib/swap.ts +3 -0
  201. package/server/lib/temp.ts +86 -0
  202. package/server/lib/token-metadata.ts +86 -0
  203. package/server/lib/token-safety.ts +200 -0
  204. package/server/lib/token-search.ts +444 -0
  205. package/server/lib/totp.ts +194 -0
  206. package/server/lib/transactions.ts +123 -0
  207. package/server/lib/transport.ts +84 -0
  208. package/server/lib/txhistory/decoder.ts +262 -0
  209. package/server/lib/txhistory/enricher.ts +652 -0
  210. package/server/lib/txhistory/index.ts +391 -0
  211. package/server/lib/txhistory/signatures.ts +59 -0
  212. package/server/lib/update-check.ts +35 -0
  213. package/server/lib/verified-summary.ts +414 -0
  214. package/server/lib/view-registry.ts +80 -0
  215. package/server/mcp/profile-policy.ts +30 -0
  216. package/server/mcp/server.ts +1589 -0
  217. package/server/mcp/tools.ts +276 -0
  218. package/server/middleware/auth.ts +119 -0
  219. package/server/middleware/requestLogger.ts +84 -0
  220. package/server/routes/actions.ts +539 -0
  221. package/server/routes/adapters.ts +711 -0
  222. package/server/routes/addressbook.ts +113 -0
  223. package/server/routes/ai.ts +34 -0
  224. package/server/routes/apikeys.ts +343 -0
  225. package/server/routes/apps.ts +601 -0
  226. package/server/routes/auth.ts +406 -0
  227. package/server/routes/backup.ts +404 -0
  228. package/server/routes/batch.ts +270 -0
  229. package/server/routes/bookmarks.ts +162 -0
  230. package/server/routes/credential-shares.ts +380 -0
  231. package/server/routes/credential-vaults.ts +159 -0
  232. package/server/routes/credentials.ts +1782 -0
  233. package/server/routes/dashboard.ts +97 -0
  234. package/server/routes/defaults.ts +124 -0
  235. package/server/routes/flags.ts +11 -0
  236. package/server/routes/fund.ts +225 -0
  237. package/server/routes/heartbeat.ts +375 -0
  238. package/server/routes/import.ts +364 -0
  239. package/server/routes/launch.ts +665 -0
  240. package/server/routes/lock.ts +54 -0
  241. package/server/routes/logs.ts +68 -0
  242. package/server/routes/nuke.ts +111 -0
  243. package/server/routes/passkey-credentials.ts +99 -0
  244. package/server/routes/passkey.ts +366 -0
  245. package/server/routes/portfolio.ts +217 -0
  246. package/server/routes/price.ts +63 -0
  247. package/server/routes/resolve.ts +31 -0
  248. package/server/routes/security.ts +45 -0
  249. package/server/routes/send-evm.ts +241 -0
  250. package/server/routes/send-solana.ts +281 -0
  251. package/server/routes/send.ts +178 -0
  252. package/server/routes/setup.ts +210 -0
  253. package/server/routes/strategy.ts +894 -0
  254. package/server/routes/swap-evm.ts +352 -0
  255. package/server/routes/swap-solana.ts +176 -0
  256. package/server/routes/swap.ts +356 -0
  257. package/server/routes/token.ts +247 -0
  258. package/server/routes/unlock.ts +467 -0
  259. package/server/routes/views.ts +41 -0
  260. package/server/routes/wallet-assets.ts +361 -0
  261. package/server/routes/wallet-transactions.ts +515 -0
  262. package/server/routes/wallet.ts +709 -0
  263. package/server/types.ts +146 -0
  264. package/shared/credential-field-schema.ts +248 -0
  265. package/skills/auramaxx/HEARTBEAT.md +78 -0
  266. package/skills/auramaxx/SKILL.md +745 -0
  267. package/skills/auramaxx/docs/AGENT_SETUP.md +155 -0
  268. package/skills/auramaxx/docs/API.md +127 -0
  269. package/skills/auramaxx/docs/AUTH.md +318 -0
  270. package/skills/auramaxx/docs/CLI.md +130 -0
  271. package/skills/auramaxx/docs/MCP.md +122 -0
  272. package/skills/auramaxx/docs/TROUBLESHOOTING.md +357 -0
  273. package/skills/auramaxx/docs/WORKSPACE.md +673 -0
  274. package/skills/auramaxx/docs/security.md +227 -0
  275. package/skills/task-lifecycle/SKILL.md +378 -0
  276. package/src/app/api/[...doc]/page.tsx +36 -0
  277. package/src/app/api/agent-requests/route.ts +30 -0
  278. package/src/app/api/apps/install/route.ts +132 -0
  279. package/src/app/api/apps/manifests/route.ts +16 -0
  280. package/src/app/api/apps/static/[...path]/route.ts +57 -0
  281. package/src/app/api/docs/plain/route.ts +74 -0
  282. package/src/app/api/events/route.ts +92 -0
  283. package/src/app/api/page.tsx +290 -0
  284. package/src/app/api/workspace/[id]/apps/[wid]/route.ts +119 -0
  285. package/src/app/api/workspace/[id]/apps/route.ts +81 -0
  286. package/src/app/api/workspace/[id]/export/route.ts +67 -0
  287. package/src/app/api/workspace/[id]/route.ts +168 -0
  288. package/src/app/api/workspace/auth.ts +40 -0
  289. package/src/app/api/workspace/config/route.ts +121 -0
  290. package/src/app/api/workspace/import/route.ts +127 -0
  291. package/src/app/api/workspace/route.ts +116 -0
  292. package/src/app/app-legacy-do-not-use/page.tsx +2245 -0
  293. package/src/app/apple-icon.png +0 -0
  294. package/src/app/approve/[actionId]/page.tsx +409 -0
  295. package/src/app/docs/DocsPageContent.tsx +269 -0
  296. package/src/app/docs/[...doc]/page.tsx +41 -0
  297. package/src/app/docs/page.tsx +38 -0
  298. package/src/app/favicon.ico +0 -0
  299. package/src/app/globals.css +819 -0
  300. package/src/app/health/page.tsx +5 -0
  301. package/src/app/hello/page.tsx +102 -0
  302. package/src/app/icon.png +0 -0
  303. package/src/app/layout.tsx +39 -0
  304. package/src/app/page.tsx +1964 -0
  305. package/src/app/privacy/page.tsx +63 -0
  306. package/src/app/providers.tsx +87 -0
  307. package/src/app/share/[token]/page.tsx +295 -0
  308. package/src/app/terms/page.tsx +80 -0
  309. package/src/components/ChainSelector.tsx +44 -0
  310. package/src/components/HumanActionBar.tsx +697 -0
  311. package/src/components/NotificationDrawer.tsx +387 -0
  312. package/src/components/PasskeyEnrollmentPrompt.tsx +235 -0
  313. package/src/components/apps/AgentKeysApp.tsx +490 -0
  314. package/src/components/apps/App.tsx +153 -0
  315. package/src/components/apps/AppGrid.tsx +15 -0
  316. package/src/components/apps/DetailedAddressDrawer.tsx +325 -0
  317. package/src/components/apps/DraggableApp.tsx +562 -0
  318. package/src/components/apps/IFrameApp.tsx +73 -0
  319. package/src/components/apps/LogsApp.tsx +360 -0
  320. package/src/components/apps/SendApp.tsx +394 -0
  321. package/src/components/apps/SetupWizardApp.tsx +1004 -0
  322. package/src/components/apps/SystemDefaultsApp.tsx +845 -0
  323. package/src/components/apps/ThirdPartyApp.tsx +428 -0
  324. package/src/components/apps/TokenApp.tsx +319 -0
  325. package/src/components/apps/TransactionsApp.tsx +438 -0
  326. package/src/components/apps/WalletDetailApp.tsx +1505 -0
  327. package/src/components/apps/index.ts +13 -0
  328. package/src/components/design-system/Button.tsx +88 -0
  329. package/src/components/design-system/ChainIndicator.tsx +65 -0
  330. package/src/components/design-system/ChainSelector.tsx +147 -0
  331. package/src/components/design-system/ConfirmationModal.tsx +107 -0
  332. package/src/components/design-system/ConfirmationPopover.tsx +81 -0
  333. package/src/components/design-system/DownloadButton.tsx +149 -0
  334. package/src/components/design-system/Drawer.tsx +133 -0
  335. package/src/components/design-system/FilterDropdown.tsx +183 -0
  336. package/src/components/design-system/ItemPicker.tsx +157 -0
  337. package/src/components/design-system/Modal.tsx +296 -0
  338. package/src/components/design-system/Popover.tsx +142 -0
  339. package/src/components/design-system/TextInput.tsx +85 -0
  340. package/src/components/design-system/Toggle.tsx +65 -0
  341. package/src/components/design-system/TyvekCollapsibleSection.tsx +55 -0
  342. package/src/components/design-system/index.ts +14 -0
  343. package/src/components/docs/ClientSideMarkdown.tsx +51 -0
  344. package/src/components/docs/DocsSearchBar.tsx +118 -0
  345. package/src/components/docs/DocsThemeToggle.tsx +38 -0
  346. package/src/components/docs/PersistentDocGroup.tsx +91 -0
  347. package/src/components/docs/ShareUrlButton.tsx +33 -0
  348. package/src/components/docs/SidebarScrollMemory.tsx +56 -0
  349. package/src/components/health/CredentialHealthDashboard.tsx +214 -0
  350. package/src/components/icons/ChainIcons.tsx +72 -0
  351. package/src/components/layout/AppStoreDrawer.tsx +369 -0
  352. package/src/components/layout/ContentArea.tsx +21 -0
  353. package/src/components/layout/CreateViewModal.tsx +88 -0
  354. package/src/components/layout/LeftRail.tsx +114 -0
  355. package/src/components/layout/TabBar.tsx +284 -0
  356. package/src/components/layout/WalletSidebar.tsx +1030 -0
  357. package/src/components/layout/index.ts +6 -0
  358. package/src/components/marketing/AuraMaxxSpecOverlay.tsx +653 -0
  359. package/src/components/marketing/DeviceMorphExperience.tsx +216 -0
  360. package/src/components/vault/ApiKeysConsole.tsx +1272 -0
  361. package/src/components/vault/AuditConsole.tsx +600 -0
  362. package/src/components/vault/CredentialDetail.tsx +625 -0
  363. package/src/components/vault/CredentialEmpty.tsx +55 -0
  364. package/src/components/vault/CredentialField.tsx +583 -0
  365. package/src/components/vault/CredentialForm.tsx +1484 -0
  366. package/src/components/vault/CredentialList.tsx +265 -0
  367. package/src/components/vault/CredentialRow.tsx +130 -0
  368. package/src/components/vault/CredentialShareModal.tsx +273 -0
  369. package/src/components/vault/CredentialVault.tsx +1662 -0
  370. package/src/components/vault/CredentialWalletWidget.tsx +103 -0
  371. package/src/components/vault/DocsConsole.tsx +113 -0
  372. package/src/components/vault/ImportCredentialsModal.tsx +578 -0
  373. package/src/components/vault/LargeTypeModal.tsx +88 -0
  374. package/src/components/vault/PasswordGenerator.tsx +232 -0
  375. package/src/components/vault/TOTPDisplay.tsx +108 -0
  376. package/src/components/vault/TotpSetupPanel.tsx +198 -0
  377. package/src/components/vault/VaultSidebar.tsx +881 -0
  378. package/src/components/vault/credentialFormName.ts +91 -0
  379. package/src/components/vault/hooks/useVaultKeyboardShortcuts.ts +69 -0
  380. package/src/components/vault/types.ts +56 -0
  381. package/src/context/AuthContext.tsx +365 -0
  382. package/src/context/PriceContext.tsx +113 -0
  383. package/src/context/ThemeContext.tsx +164 -0
  384. package/src/context/WebSocketContext.tsx +269 -0
  385. package/src/context/WorkspaceContext.tsx +668 -0
  386. package/src/hooks/index.ts +4 -0
  387. package/src/hooks/useAgentActions.ts +552 -0
  388. package/src/hooks/useBalance.ts +103 -0
  389. package/src/hooks/useBalances.ts +129 -0
  390. package/src/hooks/useTheme.ts +156 -0
  391. package/src/instrumentation.ts +12 -0
  392. package/src/lib/api-docs.ts +154 -0
  393. package/src/lib/api.ts +474 -0
  394. package/src/lib/app-loader.ts +148 -0
  395. package/src/lib/app-registry.ts +178 -0
  396. package/src/lib/app-sdk.ts +157 -0
  397. package/src/lib/audit-console-adapter.ts +151 -0
  398. package/src/lib/auth-client.ts +75 -0
  399. package/src/lib/config.ts +74 -0
  400. package/src/lib/credential-field-schema.ts +11 -0
  401. package/src/lib/crypto.ts +112 -0
  402. package/src/lib/db.ts +21 -0
  403. package/src/lib/docs.ts +544 -0
  404. package/src/lib/events.ts +363 -0
  405. package/src/lib/pino.ts +24 -0
  406. package/src/lib/theme-handlers.ts +168 -0
  407. package/src/lib/theme.ts +351 -0
  408. package/src/lib/tokenData.ts +378 -0
  409. package/src/lib/totp-import.ts +57 -0
  410. package/src/lib/vault-crypto.ts +129 -0
  411. package/src/lib/view-registry.ts +57 -0
  412. package/src/lib/websocket-server.ts +302 -0
  413. package/src/lib/websocket-setup.ts +79 -0
  414. package/src/lib/wordlist.ts +2050 -0
  415. package/src/lib/workspace-handlers.ts +285 -0
  416. package/start.sh +170 -0
  417. package/tailwind.config.ts +99 -0
  418. package/tsconfig.json +42 -0
@@ -0,0 +1,276 @@
1
+ /**
2
+ * MCP Tool Definitions
3
+ * ====================
4
+ * Provider-agnostic tool definitions + HTTP handler for executing wallet API calls.
5
+ * Single source of truth — both the MCP server and SDK tool-use loop read from here.
6
+ */
7
+
8
+ import Anthropic from '@anthropic-ai/sdk';
9
+ import { z } from 'zod';
10
+ import { getErrorMessage } from '../lib/error';
11
+
12
+ /** Provider-agnostic tool definition */
13
+ export interface ToolDef {
14
+ name: string;
15
+ description: string;
16
+ parameters: {
17
+ type: 'object';
18
+ properties: Record<string, unknown>;
19
+ required?: string[];
20
+ };
21
+ }
22
+
23
+ /** All available tools */
24
+ export const TOOLS: ToolDef[] = [
25
+ {
26
+ name: 'api',
27
+ description:
28
+ 'Call the AuraMaxx API. Common endpoints: GET /wallets, GET /token/search?q=PEPE&chain=base (find contract by ticker/name), POST /wallet/create, POST /send, POST /swap, POST /fund, GET /token/:tokenAddress/balance/:walletAddress (check any address\'s token balance). If you have no token yet, use socket bootstrap (preferred) or set AURA_TOKEN for CI/ops. Read the docs://api resource for the full endpoint reference.',
29
+ parameters: {
30
+ type: 'object',
31
+ properties: {
32
+ method: {
33
+ type: 'string',
34
+ enum: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
35
+ description: 'HTTP method',
36
+ },
37
+ endpoint: {
38
+ type: 'string',
39
+ description: 'API path, e.g. /wallets',
40
+ },
41
+ body: {
42
+ type: 'object',
43
+ description: 'POST/PUT/PATCH request body (optional)',
44
+ },
45
+ },
46
+ required: ['method', 'endpoint'],
47
+ },
48
+ },
49
+ {
50
+ name: 'status',
51
+ description: 'Get Aura setup/unlock health state (CLI equivalent: `auramaxx status`).',
52
+ parameters: {
53
+ type: 'object',
54
+ properties: {},
55
+ },
56
+ },
57
+ {
58
+ name: 'list_secrets',
59
+ description: 'List credentials with optional query filters (CLI equivalent: `auramaxx vault list --q ...`).',
60
+ parameters: {
61
+ type: 'object',
62
+ properties: {
63
+ q: { type: 'string', description: 'Optional search query' },
64
+ tag: { type: 'string', description: 'Optional tag filter' },
65
+ vault: { type: 'string', description: 'Optional vault id filter' },
66
+ lifecycle: { type: 'string', enum: ['active', 'archive', 'recently_deleted'], description: 'Optional lifecycle filter' },
67
+ },
68
+ },
69
+ },
70
+ ];
71
+
72
+ /**
73
+ * Convert JSON Schema properties to Zod schema shape.
74
+ * Used by the MCP server to bridge provider-agnostic tool defs with the MCP SDK's Zod requirement.
75
+ */
76
+ export function jsonSchemaToZod(
77
+ props: Record<string, unknown>,
78
+ requiredFields: string[],
79
+ ): Record<string, z.ZodTypeAny> {
80
+ const shape: Record<string, z.ZodTypeAny> = {};
81
+ const required = new Set(requiredFields);
82
+
83
+ for (const [key, schema] of Object.entries(props)) {
84
+ const s = schema as Record<string, unknown>;
85
+ let zodType: z.ZodTypeAny;
86
+
87
+ if (s.type === 'string') {
88
+ zodType = s.enum
89
+ ? z.enum(s.enum as [string, ...string[]])
90
+ : z.string();
91
+ } else if (s.type === 'object') {
92
+ zodType = z.record(z.unknown());
93
+ } else if (s.type === 'array') {
94
+ zodType = z.array(z.unknown());
95
+ } else if (s.type === 'number') {
96
+ zodType = z.number();
97
+ } else {
98
+ zodType = z.unknown();
99
+ }
100
+
101
+ if (s.description) {
102
+ zodType = zodType.describe(s.description as string);
103
+ }
104
+
105
+ shape[key] = required.has(key) ? zodType : zodType.optional();
106
+ }
107
+
108
+ return shape;
109
+ }
110
+
111
+ /** Base URL for the wallet server (configurable for testing) */
112
+ const WALLET_BASE_URL = process.env.WALLET_SERVER_URL || 'http://127.0.0.1:4242';
113
+
114
+ /** Max response size to prevent context bloat */
115
+ const MAX_RESPONSE_SIZE = 4096;
116
+
117
+ /** Timeout per tool call */
118
+ const TOOL_TIMEOUT_MS = 10_000;
119
+
120
+
121
+ /** Format for Anthropic SDK */
122
+ export function toAnthropicTools(): Anthropic.Tool[] {
123
+ return TOOLS.map((t) => ({
124
+ name: t.name,
125
+ description: t.description,
126
+ input_schema: {
127
+ type: t.parameters.type as 'object',
128
+ properties: t.parameters.properties,
129
+ required: t.parameters.required,
130
+ },
131
+ }));
132
+ }
133
+
134
+ /** Format for OpenAI SDK */
135
+ export function toOpenAITools(): Array<{
136
+ type: 'function';
137
+ function: { name: string; description: string; parameters: ToolDef['parameters'] };
138
+ }> {
139
+ return TOOLS.map((t) => ({
140
+ type: 'function' as const,
141
+ function: {
142
+ name: t.name,
143
+ description: t.description,
144
+ parameters: t.parameters,
145
+ },
146
+ }));
147
+ }
148
+
149
+ /**
150
+ * Execute a tool call — makes HTTP request to wallet server.
151
+ * Validates endpoint, enforces timeout, truncates response.
152
+ */
153
+ export async function executeTool(
154
+ toolName: string,
155
+ input: Record<string, unknown>,
156
+ token?: string,
157
+ ): Promise<string> {
158
+ if (toolName === 'status') {
159
+ return executeTypedWalletApi('status', 'GET', '/setup', undefined, token);
160
+ }
161
+
162
+ if (toolName === 'list_secrets') {
163
+ const q = typeof input.q === 'string' ? input.q.trim() : '';
164
+ const tag = typeof input.tag === 'string' ? input.tag.trim() : '';
165
+ const vault = typeof input.vault === 'string' ? input.vault.trim() : '';
166
+ const lifecycle = typeof input.lifecycle === 'string' ? input.lifecycle.trim() : '';
167
+ const params = new URLSearchParams();
168
+ if (q) params.set('q', q);
169
+ if (tag) params.set('tag', tag);
170
+ if (vault) params.set('vault', vault);
171
+ if (lifecycle) params.set('location', lifecycle);
172
+ const endpoint = params.toString() ? `/credentials?${params.toString()}` : '/credentials';
173
+ return executeTypedWalletApi('list_secrets', 'GET', endpoint, undefined, token);
174
+ }
175
+
176
+ if (toolName !== 'api') {
177
+ return JSON.stringify({ error: `Unknown tool: ${toolName}` });
178
+ }
179
+
180
+ return executeWalletApi(input, token);
181
+ }
182
+
183
+ async function executeTypedWalletApi(
184
+ tool: string,
185
+ method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',
186
+ endpoint: string,
187
+ body: Record<string, unknown> | undefined,
188
+ token?: string,
189
+ ): Promise<string> {
190
+ const raw = await executeWalletApi({ method, endpoint, ...(body ? { body } : {}) }, token);
191
+ try {
192
+ const parsed = JSON.parse(raw) as unknown;
193
+ const maybeObj = (parsed && typeof parsed === 'object') ? parsed as Record<string, unknown> : undefined;
194
+ if (maybeObj?.error) {
195
+ return JSON.stringify({ success: false, tool, error: maybeObj.error });
196
+ }
197
+ return JSON.stringify({ success: true, tool, data: parsed });
198
+ } catch {
199
+ if (raw.includes('"error"')) {
200
+ return JSON.stringify({ success: false, tool, error: raw });
201
+ }
202
+ return JSON.stringify({ success: true, tool, data: raw });
203
+ }
204
+ }
205
+
206
+ /** Execute a wallet_api tool call */
207
+ async function executeWalletApi(
208
+ input: Record<string, unknown>,
209
+ token?: string,
210
+ ): Promise<string> {
211
+ const { method, endpoint, body } = input as {
212
+ method: string;
213
+ endpoint: string;
214
+ body?: Record<string, unknown>;
215
+ };
216
+
217
+ // Validate endpoint
218
+ if (!endpoint || typeof endpoint !== 'string' || !endpoint.startsWith('/')) {
219
+ return JSON.stringify({ error: 'endpoint must start with /' });
220
+ }
221
+
222
+ // Block internal-only endpoints (defense-in-depth)
223
+ const BLOCKED_ENDPOINTS = ['/auth/internal', '/apps/internal', '/strategies/internal'];
224
+ if (BLOCKED_ENDPOINTS.some(prefix => endpoint.startsWith(prefix))) {
225
+ return JSON.stringify({ error: 'This endpoint is not accessible via MCP' });
226
+ }
227
+
228
+ // Validate method
229
+ const upperMethod = (method || 'GET').toUpperCase();
230
+ if (!['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].includes(upperMethod)) {
231
+ return JSON.stringify({ error: 'method must be GET, POST, PUT, PATCH, or DELETE' });
232
+ }
233
+
234
+ const url = `${WALLET_BASE_URL}${endpoint}`;
235
+ const headers: Record<string, string> = {
236
+ 'Content-Type': 'application/json',
237
+ };
238
+ if (token) {
239
+ headers['Authorization'] = `Bearer ${token}`;
240
+ }
241
+
242
+ try {
243
+ const controller = new AbortController();
244
+ const timeout = setTimeout(() => controller.abort(), TOOL_TIMEOUT_MS);
245
+
246
+ const fetchOpts: RequestInit = {
247
+ method: upperMethod,
248
+ headers,
249
+ signal: controller.signal,
250
+ };
251
+
252
+ if ((upperMethod === 'POST' || upperMethod === 'PUT' || upperMethod === 'PATCH') && body) {
253
+ fetchOpts.body = JSON.stringify(body);
254
+ }
255
+
256
+ const res = await fetch(url, fetchOpts);
257
+ clearTimeout(timeout);
258
+
259
+ const text = await res.text();
260
+
261
+ // Truncate to prevent context bloat, except encrypted credential reads
262
+ // where truncation breaks client-side decryption.
263
+ const bypassTruncation = /^\/credentials\/[^/]+\/read(?:\?.*)?$/.test(endpoint);
264
+ if (!bypassTruncation && text.length > MAX_RESPONSE_SIZE) {
265
+ return text.slice(0, MAX_RESPONSE_SIZE) + '\n...[truncated]';
266
+ }
267
+
268
+ return text;
269
+ } catch (err) {
270
+ const msg = getErrorMessage(err);
271
+ if (msg.includes('fetch failed') || msg.includes('ECONNREFUSED')) {
272
+ return JSON.stringify({ error: `Wallet server not reachable at ${WALLET_BASE_URL}. Is it running? Start it with: npx auramaxx` });
273
+ }
274
+ return JSON.stringify({ error: `API call failed: ${msg}` });
275
+ }
276
+ }
@@ -0,0 +1,119 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ import {
3
+ validateToken,
4
+ getTokenHash,
5
+ AgentTokenPayload,
6
+ } from '../lib/auth';
7
+ import { isRevoked } from '../lib/sessions';
8
+ import { logger } from '../lib/logger';
9
+
10
+ /**
11
+ * Auth info attached to requests
12
+ */
13
+ export interface AuthInfo {
14
+ token: AgentTokenPayload;
15
+ tokenHash: string;
16
+ raw: string;
17
+ }
18
+
19
+ // Extend Express Request to include auth info
20
+ declare global {
21
+ namespace Express {
22
+ interface Request {
23
+ auth?: AuthInfo;
24
+ }
25
+ }
26
+ }
27
+
28
+ /**
29
+ * Middleware that requires a valid Bearer token for all requests.
30
+ * Admin tokens are regular tokens with admin:* permission.
31
+ * Attaches auth info to req.auth on success.
32
+ */
33
+ export function requireWalletAuth(req: Request, res: Response, next: NextFunction): void {
34
+ const authHeader = req.headers.authorization;
35
+
36
+ if (!authHeader || !authHeader.startsWith('Bearer ')) {
37
+ logger.authFailed('Missing authorization header', req.path);
38
+ res.status(401).json({ error: 'Authorization header required' });
39
+ return;
40
+ }
41
+
42
+ const rawToken = authHeader.slice(7);
43
+ const token = validateToken(rawToken);
44
+
45
+ if (!token) {
46
+ logger.authFailed('Invalid or expired token', req.path);
47
+ res.status(401).json({ error: 'Invalid or expired token' });
48
+ return;
49
+ }
50
+
51
+ const tokenHash = getTokenHash(rawToken);
52
+
53
+ if (isRevoked(tokenHash)) {
54
+ logger.authFailed('Token revoked', req.path, { tokenHash });
55
+ res.status(401).json({ error: 'Token has been revoked' });
56
+ return;
57
+ }
58
+
59
+ // Attach auth info to request
60
+ req.auth = {
61
+ token,
62
+ tokenHash,
63
+ raw: rawToken,
64
+ };
65
+
66
+ next();
67
+ }
68
+
69
+ /**
70
+ * Middleware that requires admin permissions.
71
+ * Must be used after requireWalletAuth (needs req.auth).
72
+ */
73
+ export function requireAdmin(req: Request, res: Response, next: NextFunction): void {
74
+ if (!req.auth) {
75
+ res.status(401).json({ error: 'Authorization required' });
76
+ return;
77
+ }
78
+
79
+ // Check for admin permission in token
80
+ const perms: string[] = req.auth.token.permissions || [];
81
+ const hasAdmin = perms.some(p => p === 'admin:*' || p === '*');
82
+ if (!hasAdmin) {
83
+ res.status(403).json({ error: 'Admin access required' });
84
+ return;
85
+ }
86
+
87
+ next();
88
+ }
89
+
90
+ /**
91
+ * Optional auth middleware - extracts token if present but doesn't require it.
92
+ * Useful for routes that behave differently for authenticated vs unauthenticated users.
93
+ */
94
+ export function optionalWalletAuth(req: Request, res: Response, next: NextFunction): void {
95
+ const authHeader = req.headers.authorization;
96
+
97
+ if (!authHeader || !authHeader.startsWith('Bearer ')) {
98
+ // No auth - continue without setting req.auth
99
+ next();
100
+ return;
101
+ }
102
+
103
+ const rawToken = authHeader.slice(7);
104
+ const token = validateToken(rawToken);
105
+
106
+ if (token) {
107
+ const tokenHash = getTokenHash(rawToken);
108
+
109
+ if (!isRevoked(tokenHash)) {
110
+ req.auth = {
111
+ token,
112
+ tokenHash,
113
+ raw: rawToken,
114
+ };
115
+ }
116
+ }
117
+
118
+ next();
119
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Lightweight request/response logging middleware using Pino
3
+ *
4
+ * Console logging via Pino (structured, with request IDs and timing).
5
+ * Only stores events in DB for errors and security-relevant failures (4xx/5xx).
6
+ * Business events (send, fund, swap, token create, etc.) are logged separately
7
+ * by each route via the logger module, which handles DB + WebSocket storage.
8
+ */
9
+
10
+ import { randomBytes } from 'crypto';
11
+ import { Request, Response, NextFunction } from 'express';
12
+ import { log } from '../lib/pino';
13
+ import { events } from '../lib/events';
14
+
15
+ // Paths to skip logging entirely (high-frequency/low-value)
16
+ const SKIP_PATHS = new Set(['/health']);
17
+
18
+ /**
19
+ * Express middleware that logs request/response details via Pino
20
+ * Only persists error/security events to DB to avoid bloat
21
+ */
22
+ export function requestLogger(req: Request, res: Response, next: NextFunction): void {
23
+ if (SKIP_PATHS.has(req.path)) {
24
+ next();
25
+ return;
26
+ }
27
+
28
+ const requestId = randomBytes(4).toString('hex');
29
+ const startTime = process.hrtime.bigint();
30
+
31
+ const child = log.child({ requestId });
32
+
33
+ child.debug({
34
+ method: req.method,
35
+ url: req.originalUrl || req.path,
36
+ }, 'request start');
37
+
38
+ res.on('finish', () => {
39
+ const durationNs = process.hrtime.bigint() - startTime;
40
+ const durationMs = Number(durationNs) / 1_000_000;
41
+ const statusCode = res.statusCode;
42
+
43
+ const logData: Record<string, unknown> = {
44
+ method: req.method,
45
+ url: req.originalUrl || req.path,
46
+ statusCode,
47
+ durationMs: Math.round(durationMs * 100) / 100,
48
+ };
49
+
50
+ // Add agent identification for authenticated requests
51
+ if (req.auth) {
52
+ logData.agentId = req.auth.token.agentId;
53
+ }
54
+
55
+ // Log level based on status code
56
+ if (statusCode >= 500) {
57
+ child.error(logData, 'request error');
58
+ } else if (statusCode >= 400) {
59
+ child.warn(logData, 'request complete');
60
+ } else {
61
+ child.debug(logData, 'request complete');
62
+ }
63
+
64
+ // Only persist security-relevant failures to DB (auth failures, forbidden, rate limits, server errors)
65
+ if (statusCode === 401 || statusCode === 403 || statusCode === 429 || statusCode >= 500) {
66
+ const eventType =
67
+ statusCode === 401 ? 'request:auth_failed' :
68
+ statusCode === 403 ? 'request:forbidden' :
69
+ statusCode === 429 ? 'request:rate_limited' :
70
+ 'request:server_error';
71
+
72
+ events.custom(eventType, {
73
+ requestId,
74
+ method: req.method,
75
+ path: req.originalUrl || req.path,
76
+ statusCode,
77
+ durationMs: Math.round(durationMs * 100) / 100,
78
+ agentId: req.auth?.token?.agentId,
79
+ });
80
+ }
81
+ });
82
+
83
+ next();
84
+ }