auramaxx 1.0.0-alpha.4

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 (363) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +112 -0
  3. package/bin/aurawallet.js +121 -0
  4. package/docs/ADAPTERS.md +467 -0
  5. package/docs/API.md +2679 -0
  6. package/docs/APPS.md +198 -0
  7. package/docs/ARCHITECTURE.md +350 -0
  8. package/docs/AUTH.md +698 -0
  9. package/docs/BEST-PRACTICES.md +121 -0
  10. package/docs/CLI.md +61 -0
  11. package/docs/DEVELOPING-APPS.md +452 -0
  12. package/docs/EXTENSION.md +97 -0
  13. package/docs/JOBS.md +33 -0
  14. package/docs/MCP.md +76 -0
  15. package/docs/PROTOCOL.md +142 -0
  16. package/docs/SETUP.md +219 -0
  17. package/docs/WORKSPACE.md +672 -0
  18. package/docs/agent-auth.md +63 -0
  19. package/docs/aura-file.md +48 -0
  20. package/docs/credentials.md +53 -0
  21. package/docs/external/getting-started.md +65 -0
  22. package/docs/external/overview.md +45 -0
  23. package/docs/external/use-cases.md +48 -0
  24. package/docs/external/why-aura.md +35 -0
  25. package/docs/jobs/connect-agent.md +77 -0
  26. package/docs/jobs/migrate-from-dotenv.md +79 -0
  27. package/docs/jobs/recover-from-lockout.md +72 -0
  28. package/docs/jobs/secure-ci.md +63 -0
  29. package/docs/oauth2.md +42 -0
  30. package/docs/passkeys.md +60 -0
  31. package/docs/security.md +540 -0
  32. package/docs/specs/aura-open-protocol.md +61 -0
  33. package/docs/specs/aura-provider-plugin.md +24 -0
  34. package/docs/specs/aura-registry-model.md +31 -0
  35. package/docs/specs/fixtures/invalid-bad-key.aura +1 -0
  36. package/docs/specs/fixtures/invalid-bad-unicode-escape.aura +1 -0
  37. package/docs/specs/fixtures/invalid-duplicate-key.aura +2 -0
  38. package/docs/specs/fixtures/valid-basic.aura +4 -0
  39. package/docs/specs/fixtures/valid-provider-ref.aura +1 -0
  40. package/docs/specs/fixtures/valid-quoted-escapes.aura +2 -0
  41. package/docs/templates/RELEASE_NOTES_TEMPLATE.md +22 -0
  42. package/docs/totp.md +40 -0
  43. package/docs/wallet/AI.md +508 -0
  44. package/docs/wallet/DEVELOPING-STRATEGIES.md +713 -0
  45. package/docs/wallet/README.md +47 -0
  46. package/docs/wallet/STRATEGY.md +89 -0
  47. package/next.config.ts +21 -0
  48. package/package.json +151 -0
  49. package/postcss.config.mjs +8 -0
  50. package/prisma/migrations/20260214170000_baseline/migration.sql +511 -0
  51. package/prisma/migrations/20260216214537_add_passkey_model/migration.sql +18 -0
  52. package/prisma/migrations/20260217150500_add_credential_access_audit/migration.sql +31 -0
  53. package/prisma/migrations/migration_lock.toml +3 -0
  54. package/prisma/schema.prisma +447 -0
  55. package/public/logo-chevron.svg +31 -0
  56. package/public/logo-concentric.svg +31 -0
  57. package/public/logo-crosshatch.svg +39 -0
  58. package/public/logo-dashed.svg +39 -0
  59. package/public/logo-horizontal.svg +31 -0
  60. package/public/logo-m56.svg +64 -0
  61. package/public/logo.webp +0 -0
  62. package/scripts/add-app.js +245 -0
  63. package/scripts/init.sh +57 -0
  64. package/scripts/migrate-apikeys-to-credentials.ts +35 -0
  65. package/scripts/sandbox-agent-flow.sh +235 -0
  66. package/scripts/sandbox.sh +175 -0
  67. package/scripts/validate-job-docs.mjs +125 -0
  68. package/server/abi/SwapHelper.json +438 -0
  69. package/server/cli/approval.ts +447 -0
  70. package/server/cli/commands/app.ts +204 -0
  71. package/server/cli/commands/cron.ts +24 -0
  72. package/server/cli/commands/doctor.ts +1007 -0
  73. package/server/cli/commands/env.ts +456 -0
  74. package/server/cli/commands/init.ts +752 -0
  75. package/server/cli/commands/mcp.ts +125 -0
  76. package/server/cli/commands/restore.ts +314 -0
  77. package/server/cli/commands/shell-hook.ts +468 -0
  78. package/server/cli/commands/start.ts +62 -0
  79. package/server/cli/commands/status.ts +59 -0
  80. package/server/cli/commands/stop.ts +14 -0
  81. package/server/cli/commands/token.ts +180 -0
  82. package/server/cli/commands/unlock.ts +49 -0
  83. package/server/cli/commands/vault.ts +417 -0
  84. package/server/cli/index.ts +328 -0
  85. package/server/cli/lib/aura-parser.ts +64 -0
  86. package/server/cli/lib/credential-create.ts +74 -0
  87. package/server/cli/lib/credential-resolve.ts +254 -0
  88. package/server/cli/lib/dotenv-migrate.ts +116 -0
  89. package/server/cli/lib/dotenv-parser.ts +146 -0
  90. package/server/cli/lib/http.ts +91 -0
  91. package/server/cli/lib/init-steps.ts +76 -0
  92. package/server/cli/lib/local-agent-trust.ts +45 -0
  93. package/server/cli/lib/process.ts +136 -0
  94. package/server/cli/lib/prompt.ts +85 -0
  95. package/server/cli/lib/theme.ts +240 -0
  96. package/server/cli/socket.ts +570 -0
  97. package/server/cli/transport-client.ts +50 -0
  98. package/server/cron/index.ts +137 -0
  99. package/server/cron/job.ts +31 -0
  100. package/server/cron/jobs/balance-sync.ts +436 -0
  101. package/server/cron/jobs/incoming-scan.ts +506 -0
  102. package/server/cron/jobs/native-price.ts +70 -0
  103. package/server/cron/jobs/orphan-cleanup.ts +40 -0
  104. package/server/cron/jobs/strategy-runner.ts +175 -0
  105. package/server/cron/scheduler.ts +125 -0
  106. package/server/index.ts +406 -0
  107. package/server/lib/adapters/factory.ts +110 -0
  108. package/server/lib/adapters/index.ts +19 -0
  109. package/server/lib/adapters/router.ts +297 -0
  110. package/server/lib/adapters/telegram.ts +645 -0
  111. package/server/lib/adapters/types.ts +89 -0
  112. package/server/lib/adapters/webhook.ts +95 -0
  113. package/server/lib/address.ts +49 -0
  114. package/server/lib/agent-auth/contracts.ts +1194 -0
  115. package/server/lib/agent-profiles.ts +328 -0
  116. package/server/lib/ai.ts +285 -0
  117. package/server/lib/api-registry/contracts.ts +86 -0
  118. package/server/lib/api-registry/validation.ts +172 -0
  119. package/server/lib/apikey-migration.ts +189 -0
  120. package/server/lib/app-installer.ts +505 -0
  121. package/server/lib/app-tokens.ts +247 -0
  122. package/server/lib/auth.ts +314 -0
  123. package/server/lib/batch.ts +242 -0
  124. package/server/lib/cold.ts +874 -0
  125. package/server/lib/config.ts +381 -0
  126. package/server/lib/credential-access-audit.ts +85 -0
  127. package/server/lib/credential-access-policy.ts +110 -0
  128. package/server/lib/credential-health.ts +343 -0
  129. package/server/lib/credential-import.ts +487 -0
  130. package/server/lib/credential-scope.ts +87 -0
  131. package/server/lib/credential-shares.ts +190 -0
  132. package/server/lib/credential-transport.ts +342 -0
  133. package/server/lib/credential-vault.ts +77 -0
  134. package/server/lib/credentials.ts +333 -0
  135. package/server/lib/crypto.ts +8 -0
  136. package/server/lib/db.ts +15 -0
  137. package/server/lib/defaults.ts +366 -0
  138. package/server/lib/dex/index.ts +80 -0
  139. package/server/lib/dex/relay.ts +235 -0
  140. package/server/lib/dex/types.ts +59 -0
  141. package/server/lib/dex/uniswap.ts +370 -0
  142. package/server/lib/e2e-agent/artifacts.ts +36 -0
  143. package/server/lib/e2e-agent/contracts.ts +112 -0
  144. package/server/lib/e2e-agent/validation.ts +135 -0
  145. package/server/lib/encrypt.ts +128 -0
  146. package/server/lib/error.ts +20 -0
  147. package/server/lib/events.ts +205 -0
  148. package/server/lib/hot.ts +357 -0
  149. package/server/lib/key-fingerprint.ts +28 -0
  150. package/server/lib/logger.ts +331 -0
  151. package/server/lib/network.ts +137 -0
  152. package/server/lib/notifications.ts +219 -0
  153. package/server/lib/oauth2-refresh.ts +241 -0
  154. package/server/lib/oursecret.ts +54 -0
  155. package/server/lib/passkey-credential.ts +360 -0
  156. package/server/lib/passkey.ts +68 -0
  157. package/server/lib/permissions.ts +248 -0
  158. package/server/lib/pino.ts +24 -0
  159. package/server/lib/policy-preview.ts +138 -0
  160. package/server/lib/price.ts +338 -0
  161. package/server/lib/prices.ts +34 -0
  162. package/server/lib/project-scope.ts +239 -0
  163. package/server/lib/resolve-action.ts +427 -0
  164. package/server/lib/resolve.ts +36 -0
  165. package/server/lib/sessions.ts +632 -0
  166. package/server/lib/solana/connection.ts +26 -0
  167. package/server/lib/solana/jupiter.ts +128 -0
  168. package/server/lib/solana/transfer.ts +108 -0
  169. package/server/lib/solana/wallet.ts +136 -0
  170. package/server/lib/strategy/emits.ts +21 -0
  171. package/server/lib/strategy/engine.ts +1305 -0
  172. package/server/lib/strategy/executor.ts +115 -0
  173. package/server/lib/strategy/hook-context.ts +158 -0
  174. package/server/lib/strategy/hooks.ts +990 -0
  175. package/server/lib/strategy/index.ts +28 -0
  176. package/server/lib/strategy/installer.ts +305 -0
  177. package/server/lib/strategy/loader.ts +256 -0
  178. package/server/lib/strategy/message.ts +235 -0
  179. package/server/lib/strategy/repository.ts +218 -0
  180. package/server/lib/strategy/session-logger.ts +693 -0
  181. package/server/lib/strategy/sources.ts +288 -0
  182. package/server/lib/strategy/state.ts +189 -0
  183. package/server/lib/strategy/templates.ts +403 -0
  184. package/server/lib/strategy/tick.ts +404 -0
  185. package/server/lib/strategy/types.ts +230 -0
  186. package/server/lib/swap.ts +3 -0
  187. package/server/lib/temp.ts +86 -0
  188. package/server/lib/token-metadata.ts +86 -0
  189. package/server/lib/token-safety.ts +200 -0
  190. package/server/lib/token-search.ts +444 -0
  191. package/server/lib/totp.ts +194 -0
  192. package/server/lib/transactions.ts +123 -0
  193. package/server/lib/transport.ts +75 -0
  194. package/server/lib/txhistory/decoder.ts +262 -0
  195. package/server/lib/txhistory/enricher.ts +652 -0
  196. package/server/lib/txhistory/index.ts +391 -0
  197. package/server/lib/txhistory/signatures.ts +59 -0
  198. package/server/lib/verified-summary.ts +421 -0
  199. package/server/mcp/profile-policy.ts +30 -0
  200. package/server/mcp/server.ts +619 -0
  201. package/server/mcp/tools.ts +523 -0
  202. package/server/middleware/auth.ts +119 -0
  203. package/server/middleware/requestLogger.ts +84 -0
  204. package/server/routes/actions.ts +459 -0
  205. package/server/routes/adapters.ts +703 -0
  206. package/server/routes/addressbook.ts +113 -0
  207. package/server/routes/ai.ts +34 -0
  208. package/server/routes/apikeys.ts +295 -0
  209. package/server/routes/apps.ts +601 -0
  210. package/server/routes/auth.ts +457 -0
  211. package/server/routes/backup.ts +340 -0
  212. package/server/routes/batch.ts +270 -0
  213. package/server/routes/bookmarks.ts +162 -0
  214. package/server/routes/credential-shares.ts +198 -0
  215. package/server/routes/credential-vaults.ts +154 -0
  216. package/server/routes/credentials.ts +1290 -0
  217. package/server/routes/dashboard.ts +71 -0
  218. package/server/routes/defaults.ts +124 -0
  219. package/server/routes/fund.ts +229 -0
  220. package/server/routes/import.ts +352 -0
  221. package/server/routes/launch.ts +665 -0
  222. package/server/routes/lock.ts +54 -0
  223. package/server/routes/logs.ts +68 -0
  224. package/server/routes/nuke.ts +111 -0
  225. package/server/routes/passkey-credentials.ts +99 -0
  226. package/server/routes/passkey.ts +346 -0
  227. package/server/routes/portfolio.ts +217 -0
  228. package/server/routes/price.ts +63 -0
  229. package/server/routes/resolve.ts +31 -0
  230. package/server/routes/security.ts +45 -0
  231. package/server/routes/send-evm.ts +241 -0
  232. package/server/routes/send-solana.ts +281 -0
  233. package/server/routes/send.ts +178 -0
  234. package/server/routes/setup.ts +210 -0
  235. package/server/routes/strategy.ts +894 -0
  236. package/server/routes/swap-evm.ts +353 -0
  237. package/server/routes/swap-solana.ts +177 -0
  238. package/server/routes/swap.ts +356 -0
  239. package/server/routes/token.ts +247 -0
  240. package/server/routes/unlock.ts +403 -0
  241. package/server/routes/wallet-assets.ts +361 -0
  242. package/server/routes/wallet-transactions.ts +515 -0
  243. package/server/routes/wallet.ts +710 -0
  244. package/server/types.ts +146 -0
  245. package/skills/aurawallet/SKILL.md +739 -0
  246. package/skills/aurawallet-setup/SKILL.md +74 -0
  247. package/skills/security-review/SKILL.md +148 -0
  248. package/src/app/api/agent-requests/route.ts +30 -0
  249. package/src/app/api/apps/install/route.ts +126 -0
  250. package/src/app/api/apps/manifests/route.ts +16 -0
  251. package/src/app/api/apps/static/[...path]/route.ts +57 -0
  252. package/src/app/api/events/route.ts +92 -0
  253. package/src/app/api/page.tsx +212 -0
  254. package/src/app/api/workspace/[id]/apps/[wid]/route.ts +119 -0
  255. package/src/app/api/workspace/[id]/apps/route.ts +81 -0
  256. package/src/app/api/workspace/[id]/export/route.ts +67 -0
  257. package/src/app/api/workspace/[id]/route.ts +168 -0
  258. package/src/app/api/workspace/auth.ts +34 -0
  259. package/src/app/api/workspace/config/route.ts +106 -0
  260. package/src/app/api/workspace/import/route.ts +127 -0
  261. package/src/app/api/workspace/route.ts +116 -0
  262. package/src/app/app/page.tsx +2122 -0
  263. package/src/app/apple-icon.png +0 -0
  264. package/src/app/docs/page.tsx +178 -0
  265. package/src/app/favicon.ico +0 -0
  266. package/src/app/globals.css +572 -0
  267. package/src/app/health/page.tsx +5 -0
  268. package/src/app/hello/page.tsx +15 -0
  269. package/src/app/icon.png +0 -0
  270. package/src/app/layout.tsx +34 -0
  271. package/src/app/page.tsx +986 -0
  272. package/src/app/providers.tsx +90 -0
  273. package/src/app/share/[token]/page.tsx +295 -0
  274. package/src/components/ChainSelector.tsx +144 -0
  275. package/src/components/HumanActionBar.tsx +695 -0
  276. package/src/components/NotificationDrawer.tsx +129 -0
  277. package/src/components/apps/AgentKeysApp.tsx +490 -0
  278. package/src/components/apps/App.tsx +153 -0
  279. package/src/components/apps/AppGrid.tsx +15 -0
  280. package/src/components/apps/DetailedAddressDrawer.tsx +325 -0
  281. package/src/components/apps/DraggableApp.tsx +562 -0
  282. package/src/components/apps/IFrameApp.tsx +73 -0
  283. package/src/components/apps/LogsApp.tsx +360 -0
  284. package/src/components/apps/SendApp.tsx +394 -0
  285. package/src/components/apps/SetupWizardApp.tsx +1004 -0
  286. package/src/components/apps/SystemDefaultsApp.tsx +845 -0
  287. package/src/components/apps/ThirdPartyApp.tsx +428 -0
  288. package/src/components/apps/TokenApp.tsx +319 -0
  289. package/src/components/apps/TransactionsApp.tsx +438 -0
  290. package/src/components/apps/WalletDetailApp.tsx +1505 -0
  291. package/src/components/apps/index.ts +13 -0
  292. package/src/components/design-system/Button.tsx +53 -0
  293. package/src/components/design-system/ChainIndicator.tsx +65 -0
  294. package/src/components/design-system/ChainSelector.tsx +137 -0
  295. package/src/components/design-system/ConfirmationModal.tsx +106 -0
  296. package/src/components/design-system/ConfirmationPopover.tsx +81 -0
  297. package/src/components/design-system/Drawer.tsx +123 -0
  298. package/src/components/design-system/FilterDropdown.tsx +72 -0
  299. package/src/components/design-system/Modal.tsx +206 -0
  300. package/src/components/design-system/Popover.tsx +142 -0
  301. package/src/components/design-system/TextInput.tsx +85 -0
  302. package/src/components/design-system/Toggle.tsx +58 -0
  303. package/src/components/design-system/index.ts +11 -0
  304. package/src/components/docs/DocsThemeToggle.tsx +49 -0
  305. package/src/components/health/CredentialHealthDashboard.tsx +214 -0
  306. package/src/components/icons/ChainIcons.tsx +72 -0
  307. package/src/components/layout/AppStoreDrawer.tsx +369 -0
  308. package/src/components/layout/ContentArea.tsx +21 -0
  309. package/src/components/layout/TabBar.tsx +278 -0
  310. package/src/components/layout/WalletSidebar.tsx +1033 -0
  311. package/src/components/layout/index.ts +4 -0
  312. package/src/components/marketing/AuraWalletSpecOverlay.tsx +635 -0
  313. package/src/components/marketing/DeviceMorphExperience.tsx +216 -0
  314. package/src/components/vault/ApiKeysConsole.tsx +1080 -0
  315. package/src/components/vault/AuditConsole.tsx +584 -0
  316. package/src/components/vault/CredentialDetail.tsx +455 -0
  317. package/src/components/vault/CredentialEmpty.tsx +55 -0
  318. package/src/components/vault/CredentialField.tsx +361 -0
  319. package/src/components/vault/CredentialForm.tsx +1212 -0
  320. package/src/components/vault/CredentialList.tsx +165 -0
  321. package/src/components/vault/CredentialRow.tsx +97 -0
  322. package/src/components/vault/CredentialShareModal.tsx +178 -0
  323. package/src/components/vault/CredentialVault.tsx +754 -0
  324. package/src/components/vault/CredentialWalletWidget.tsx +103 -0
  325. package/src/components/vault/ImportCredentialsModal.tsx +515 -0
  326. package/src/components/vault/LargeTypeModal.tsx +64 -0
  327. package/src/components/vault/PasswordGenerator.tsx +224 -0
  328. package/src/components/vault/TOTPDisplay.tsx +123 -0
  329. package/src/components/vault/VaultSidebar.tsx +413 -0
  330. package/src/components/vault/types.ts +54 -0
  331. package/src/context/AuthContext.tsx +337 -0
  332. package/src/context/PriceContext.tsx +113 -0
  333. package/src/context/ThemeContext.tsx +164 -0
  334. package/src/context/WebSocketContext.tsx +269 -0
  335. package/src/context/WorkspaceContext.tsx +668 -0
  336. package/src/hooks/index.ts +3 -0
  337. package/src/hooks/useAgentActions.ts +368 -0
  338. package/src/hooks/useBalance.ts +103 -0
  339. package/src/hooks/useBalances.ts +129 -0
  340. package/src/instrumentation.ts +12 -0
  341. package/src/lib/api.ts +449 -0
  342. package/src/lib/app-loader.ts +148 -0
  343. package/src/lib/app-registry.ts +178 -0
  344. package/src/lib/app-sdk.ts +157 -0
  345. package/src/lib/audit-console-adapter.ts +151 -0
  346. package/src/lib/auth-client.ts +75 -0
  347. package/src/lib/config.ts +74 -0
  348. package/src/lib/crypto.ts +112 -0
  349. package/src/lib/db.ts +21 -0
  350. package/src/lib/docs.ts +390 -0
  351. package/src/lib/events.ts +361 -0
  352. package/src/lib/pino.ts +24 -0
  353. package/src/lib/theme-handlers.ts +168 -0
  354. package/src/lib/theme.ts +351 -0
  355. package/src/lib/tokenData.ts +378 -0
  356. package/src/lib/vault-crypto.ts +129 -0
  357. package/src/lib/websocket-server.ts +302 -0
  358. package/src/lib/websocket-setup.ts +79 -0
  359. package/src/lib/wordlist.ts +2050 -0
  360. package/src/lib/workspace-handlers.ts +285 -0
  361. package/start.sh +80 -0
  362. package/tailwind.config.ts +99 -0
  363. package/tsconfig.json +42 -0
@@ -0,0 +1,447 @@
1
+ // This is your Prisma schema file,
2
+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
+
4
+ generator client {
5
+ provider = "prisma-client-js"
6
+ }
7
+
8
+ datasource db {
9
+ provider = "sqlite"
10
+ url = env("DATABASE_URL")
11
+ }
12
+
13
+ model Log {
14
+ id String @id @default(cuid())
15
+ walletAddress String
16
+ title String
17
+ description String?
18
+ txHash String?
19
+ createdAt DateTime @default(now())
20
+
21
+ @@index([walletAddress])
22
+ @@index([createdAt])
23
+ }
24
+
25
+ model HotWallet {
26
+ id String @id @default(cuid())
27
+ address String @unique
28
+ encryptedPrivateKey String // Encrypted with in-memory seed
29
+ tokenHash String // Which auth token owns this wallet
30
+ coldWalletId String? // Vault ID (null = primary vault)
31
+
32
+ // Decorative fields
33
+ name String?
34
+ color String? // Hex color e.g. "#FF5733"
35
+ description String?
36
+ emoji String? // e.g. "🔥"
37
+ hidden Boolean @default(false)
38
+
39
+ chain String @default("base")
40
+ createdAt DateTime @default(now())
41
+
42
+ @@index([address])
43
+ @@index([tokenHash])
44
+ @@index([hidden])
45
+ @@index([coldWalletId])
46
+ }
47
+
48
+ model HumanAction {
49
+ id String @id @default(cuid())
50
+ type String // 'fund' | 'send' | 'agent_access' | 'action' | 'app:approve'
51
+ fromTier String // 'cold' | 'hot' | 'temp' | 'system'
52
+ toAddress String?
53
+ amount String?
54
+ chain String
55
+ status String @default("pending") // 'pending' | 'approved' | 'rejected'
56
+ createdAt DateTime @default(now())
57
+ resolvedAt DateTime?
58
+ metadata String? // JSON string for flexible metadata
59
+ notification Notification?
60
+
61
+ @@index([status])
62
+ @@index([createdAt])
63
+ }
64
+
65
+ model Notification {
66
+ id String @id @default(cuid())
67
+ type String // 'pending_approval' | 'info' | 'warning' | 'success' | 'error' | 'system'
68
+ category String? // 'transaction' | 'security' | 'token' | 'wallet' | 'general'
69
+ title String
70
+ message String
71
+ read Boolean @default(false)
72
+ dismissed Boolean @default(false)
73
+ actions String? // JSON: [{ id, label, type, action, endpoint, href }]
74
+ metadata String? // JSON for flexible data
75
+ humanActionId String? @unique
76
+ humanAction HumanAction? @relation(fields: [humanActionId], references: [id])
77
+ expiresAt DateTime?
78
+ createdAt DateTime @default(now())
79
+ updatedAt DateTime @updatedAt
80
+ source String @default("system") // 'system' | 'agent' | 'user'
81
+ agentId String?
82
+
83
+ @@index([read, dismissed])
84
+ @@index([type])
85
+ @@index([createdAt])
86
+ }
87
+
88
+ // Stores all WebSocket events for debugging and audit trail
89
+ model Event {
90
+ id String @id @default(cuid())
91
+ type String // e.g., 'request:created', 'token:revoked'
92
+ source String // 'express' | 'nextjs'
93
+ data String // JSON payload
94
+ timestamp DateTime @default(now())
95
+ createdAt DateTime @default(now())
96
+
97
+ @@index([type])
98
+ @@index([timestamp])
99
+ @@index([source])
100
+ }
101
+
102
+ // Stores token metadata for UI/logs - actual signing stays in memory
103
+ model AgentToken {
104
+ id String @id @default(cuid())
105
+ tokenHash String @unique // Hash of token for identification (not the token itself)
106
+ agentId String
107
+ limit Float // Max spending limit in ETH
108
+ spent Float @default(0)
109
+ permissions String // JSON array of permissions
110
+ expiresAt DateTime
111
+ isRevoked Boolean @default(false)
112
+ revokedAt DateTime?
113
+ createdAt DateTime @default(now())
114
+ lastUsedAt DateTime?
115
+
116
+ @@index([agentId])
117
+ @@index([isRevoked])
118
+ @@index([expiresAt])
119
+ }
120
+
121
+ model CredentialAccessAudit {
122
+ id String @id @default(cuid())
123
+ timestamp DateTime @default(now())
124
+ credentialId String
125
+ vaultId String
126
+ action String
127
+ allowed Boolean
128
+ result String
129
+ reasonCode String
130
+ httpStatus Int
131
+ tokenHash String?
132
+ agentId String?
133
+ requestId String?
134
+ actorType String
135
+ projectScope String?
136
+ sensitiveRead Boolean @default(true)
137
+ metadata String?
138
+
139
+ @@index([credentialId, timestamp(sort: Desc)])
140
+ @@index([tokenHash, timestamp(sort: Desc)])
141
+ @@index([allowed, timestamp(sort: Desc)])
142
+ @@index([reasonCode, timestamp(sort: Desc)])
143
+ }
144
+
145
+ // Workspace system for programmatic dashboard control
146
+ model Workspace {
147
+ id String @id @default(cuid())
148
+ name String
149
+ slug String @unique
150
+ icon String? // Lucide icon name
151
+ emoji String? // Emoji character e.g. "🚀"
152
+ color String? // Hex color code e.g. "#ff4d00"
153
+ order Int @default(0)
154
+ isDefault Boolean @default(false)
155
+ isCloseable Boolean @default(true)
156
+ createdAt DateTime @default(now())
157
+ updatedAt DateTime @updatedAt
158
+ apps WorkspaceApp[]
159
+ theme WorkspaceTheme?
160
+ }
161
+
162
+ model WorkspaceApp {
163
+ id String @id @default(cuid())
164
+ workspaceId String
165
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
166
+
167
+ appType String // 'wallets' | 'logs' | 'iframe' | 'installed:app-id'
168
+ x Int @default(20)
169
+ y Int @default(20)
170
+ width Int @default(320)
171
+ height Int @default(280)
172
+ zIndex Int @default(10)
173
+ isVisible Boolean @default(true)
174
+ isLocked Boolean @default(false)
175
+ config String? // JSON for iframe url, installed app props, etc.
176
+
177
+ createdAt DateTime @default(now())
178
+ updatedAt DateTime @updatedAt
179
+
180
+ @@index([workspaceId])
181
+ }
182
+
183
+ // Global theme configuration
184
+ model ThemeConfig {
185
+ id String @id @default("global")
186
+ activeThemeId String @default("light")
187
+ accentColor String @default("#ccff00")
188
+ customThemes String? // JSON array of custom themes
189
+ createdAt DateTime @default(now())
190
+ updatedAt DateTime @updatedAt
191
+ }
192
+
193
+ // Per-workspace theme overrides
194
+ model WorkspaceTheme {
195
+ id String @id @default(cuid())
196
+ workspaceId String @unique
197
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
198
+ mode String? // 'light' | 'dark' - null means inherit from global
199
+ accent String? // Hex color - null means inherit from global
200
+ overrides String? // JSON for app palette overrides
201
+ createdAt DateTime @default(now())
202
+ updatedAt DateTime @updatedAt
203
+ }
204
+
205
+ // API Keys for external services (Alchemy, etc.)
206
+ model ApiKey {
207
+ id String @id @default(cuid())
208
+ service String // 'alchemy' | 'infura' | 'etherscan' | etc.
209
+ name String // Display name e.g. "My Alchemy Key"
210
+ key String // The actual API key (stored encrypted in production)
211
+ metadata String? // JSON for service-specific config (e.g., allowed chains)
212
+ isActive Boolean @default(true)
213
+ createdAt DateTime @default(now())
214
+ updatedAt DateTime @updatedAt
215
+
216
+ @@unique([service, name])
217
+ @@index([service])
218
+ @@index([isActive])
219
+ }
220
+
221
+ // Transaction history for wallets
222
+ model Transaction {
223
+ id String @id @default(cuid())
224
+ walletAddress String
225
+ txHash String?
226
+ type String // 'send' | 'receive' | 'swap' | 'contract' | 'manual'
227
+ status String @default("confirmed")
228
+ amount String? // ETH amount
229
+ tokenAddress String? // Token contract address if applicable
230
+ tokenAmount String? // Token amount if applicable
231
+ from String?
232
+ to String?
233
+ description String?
234
+ blockNumber Int?
235
+ chain String @default("base")
236
+ createdAt DateTime @default(now())
237
+ updatedAt DateTime @updatedAt
238
+ executedAt DateTime?
239
+
240
+ @@unique([txHash, chain])
241
+ @@index([walletAddress])
242
+ @@index([walletAddress, createdAt])
243
+ @@index([type])
244
+ @@index([tokenAddress])
245
+ }
246
+
247
+ // Tracked assets (tokens) for wallets
248
+ model TrackedAsset {
249
+ id String @id @default(cuid())
250
+ walletAddress String?
251
+ tokenAddress String
252
+ symbol String?
253
+ name String?
254
+ decimals Int @default(18)
255
+ lastBalance String?
256
+ lastBalanceAt DateTime?
257
+ isHidden Boolean @default(false)
258
+ chain String @default("base")
259
+ poolAddress String? // Cached pool address for price lookup
260
+ poolVersion String? // "v2" | "v3" | "v4"
261
+ icon String? // Token icon URL
262
+ createdAt DateTime @default(now())
263
+ updatedAt DateTime @updatedAt
264
+
265
+ @@unique([walletAddress, tokenAddress, chain])
266
+ @@index([walletAddress])
267
+ @@index([walletAddress, updatedAt])
268
+ @@index([tokenAddress])
269
+ }
270
+
271
+ // Cached native balances (ETH/SOL) per wallet per chain
272
+ model NativeBalance {
273
+ id String @id @default(cuid())
274
+ walletAddress String
275
+ chain String
276
+ balance String
277
+ updatedAt DateTime @updatedAt
278
+
279
+ @@unique([walletAddress, chain])
280
+ @@index([walletAddress])
281
+ }
282
+
283
+ // Cached native currency prices (ETH, SOL → USD)
284
+ model NativePrice {
285
+ currency String @id // "ETH" | "SOL"
286
+ priceUsd String
287
+ updatedAt DateTime @updatedAt
288
+ }
289
+
290
+ // Balance sync state per chain
291
+ model SyncState {
292
+ id String @id @default(cuid())
293
+ chain String @unique
294
+ lastSyncAt DateTime?
295
+ lastSyncStatus String @default("idle")
296
+ lastError String?
297
+ syncCount Int @default(0)
298
+ lastBlock String? // Block cursor for event scanning jobs (stringified bigint)
299
+ updatedAt DateTime @updatedAt
300
+ }
301
+
302
+ // First-class strategy resources (template/headless + app-linked compatibility)
303
+ model Strategy {
304
+ id String @id @default(cuid())
305
+ name String
306
+ templateId String?
307
+ mode String @default("headless") // 'headless' | 'app-linked'
308
+ manifest String // JSON-encoded strategy manifest snapshot
309
+ config String? // JSON-encoded user config
310
+ state String? // JSON-encoded strategy state
311
+ schedule String? // JSON-encoded schedule metadata (tier/cron/interval)
312
+ permissions String @default("[]") // JSON-encoded permission list
313
+ limits String? // JSON-encoded limits object
314
+ enabled Boolean @default(false)
315
+ status String @default("draft")
316
+ createdBy String @default("human")
317
+ provenance String? // JSON-encoded source/provenance metadata
318
+ appId String? // legacy linkage when imported from a app
319
+ lastTickAt DateTime?
320
+ lastError String?
321
+ errorCount Int @default(0)
322
+ createdAt DateTime @default(now())
323
+ updatedAt DateTime @updatedAt
324
+ runs StrategyRun[]
325
+
326
+ @@index([enabled, status])
327
+ @@index([templateId])
328
+ @@index([appId])
329
+ }
330
+
331
+ // Optional strategy run audit trail for cron/runtime debugging
332
+ model StrategyRun {
333
+ id String @id @default(cuid())
334
+ strategyId String
335
+ strategy Strategy @relation(fields: [strategyId], references: [id], onDelete: Cascade)
336
+ startedAt DateTime @default(now())
337
+ endedAt DateTime?
338
+ status String
339
+ error String?
340
+ metadata String? // JSON-encoded run metadata
341
+
342
+ @@index([strategyId, startedAt])
343
+ }
344
+
345
+ // Per-app persistent storage for third-party apps
346
+ model AppStorage {
347
+ id String @id @default(cuid())
348
+ appId String
349
+ key String
350
+ value String // JSON stringified
351
+ updatedAt DateTime @updatedAt
352
+
353
+ @@unique([appId, key])
354
+ @@index([appId])
355
+ }
356
+
357
+ // Cached token metadata for enriching on-chain events
358
+ model TokenMetadata {
359
+ id String @id @default(cuid())
360
+ tokenAddress String
361
+ chain String
362
+ symbol String?
363
+ name String?
364
+ decimals Int @default(18)
365
+ icon String?
366
+ description String?
367
+ priceUsd String? // Last known USD price (string for decimal precision)
368
+ marketCap Float?
369
+ fdv Float?
370
+ liquidity Float? // DEX liquidity USD
371
+ volume24h Float?
372
+ dexId String? // Source DEX (e.g. "uniswap", "raydium")
373
+ pairAddress String?
374
+ websites String? // JSON-encoded string array
375
+ socials String? // JSON-encoded [{type,url}] array
376
+ lastAccessedAt DateTime @default(now())
377
+ lastVerifiedAt DateTime?
378
+ updatedAt DateTime @updatedAt
379
+
380
+ @@unique([tokenAddress, chain])
381
+ @@index([tokenAddress])
382
+ }
383
+
384
+ // Cached DEX pool metadata for enriching swap events
385
+ model PoolMetadata {
386
+ id String @id @default(cuid())
387
+ poolAddress String
388
+ chain String
389
+ token0 String?
390
+ token1 String?
391
+ fee Int?
392
+ dex String? // "uniswap_v2" | "uniswap_v3" | "uniswap_v4"
393
+
394
+ @@unique([poolAddress, chain])
395
+ @@index([poolAddress])
396
+ }
397
+
398
+ // Address book for labeling external addresses
399
+ model AddressLabel {
400
+ id String @id @default(cuid())
401
+ address String @unique
402
+ label String
403
+ emoji String?
404
+ color String?
405
+ notes String?
406
+ createdBy String @default("human")
407
+ createdAt DateTime @default(now())
408
+ updatedAt DateTime @updatedAt
409
+
410
+ @@index([label])
411
+ }
412
+
413
+ // Centralized system defaults (key-value store for configurable limits, permissions, TTLs, etc.)
414
+ model SystemDefault {
415
+ key String @id // e.g. "limits.fund", "permissions.default"
416
+ value String // JSON-encoded value
417
+ type String // Category: "permissions" | "financial" | "ttl" | "rate_limit" | "ai_safety" | "launch" | "app" | "swap"
418
+ label String // Human-readable label for dashboard
419
+ description String? // Optional description
420
+ updatedAt DateTime @updatedAt
421
+
422
+ @@index([type])
423
+ }
424
+
425
+ // WebAuthn passkey credentials for biometric vault unlock
426
+ model Passkey {
427
+ id String @id @default(cuid())
428
+ credentialId String @unique // base64url WebAuthn credential ID
429
+ publicKey Bytes // COSE public key (base64url ↔ Uint8Array conversion needed)
430
+ counter Int @default(0) // signature counter (replay/clone detection)
431
+ transports String @default("[]") // JSON array of transport hints
432
+ rpId String // relying party ID (e.g. "localhost")
433
+ aaguid String @default("") // authenticator AAGUID
434
+ createdAt DateTime @default(now())
435
+ lastUsedAt DateTime?
436
+
437
+ @@index([rpId])
438
+ }
439
+
440
+ // Global app configuration (singleton)
441
+ model AppConfig {
442
+ id String @id @default("global")
443
+ chainConfig String? // JSON: { base: { rpc: "...", chainId: 8453 }, ... }
444
+ adapterConfig String? // JSON: { enabled: true, adapters: [{ type, enabled, config }] }
445
+ createdAt DateTime @default(now())
446
+ updatedAt DateTime @updatedAt
447
+ }
@@ -0,0 +1,31 @@
1
+ <svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <clipPath id="clip-chev">
4
+ <rect width="56" height="56"/>
5
+ </clipPath>
6
+ <pattern id="dots-chev" x="0" y="0" width="3" height="3" patternUnits="userSpaceOnUse">
7
+ <circle cx="1.5" cy="1.5" r="0.5" fill="#000000" fill-opacity="0.03"/>
8
+ </pattern>
9
+ </defs>
10
+
11
+ <!-- Background -->
12
+ <rect width="56" height="56" fill="#ffffff"/>
13
+ <rect width="56" height="56" fill="url(#dots-chev)"/>
14
+
15
+ <!-- Chevron Stripes — V-shaped like hazard tape folded -->
16
+ <g clip-path="url(#clip-chev)" opacity="0.9">
17
+ <!-- Chevron 1 (outer) -->
18
+ <polygon points="0,0 28,16 56,0 56,8 28,24 0,8" fill="#0a0a0a"/>
19
+ <!-- Chevron 2 (middle) -->
20
+ <polygon points="0,20 28,36 56,20 56,28 28,44 0,28" fill="#0a0a0a"/>
21
+ <!-- Chevron 3 (bottom) -->
22
+ <polygon points="0,40 28,56 56,40 56,48 28,64 0,48" fill="#0a0a0a"/>
23
+ </g>
24
+
25
+ <!-- Main Border -->
26
+ <rect x="0.5" y="0.5" width="55" height="55" stroke="#d1d5db" stroke-width="1" fill="none"/>
27
+
28
+ <!-- Corner Marks -->
29
+ <path d="M 8 4.5 L 4.5 4.5 L 4.5 8" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
30
+ <path d="M 48 51.5 L 51.5 51.5 L 51.5 48" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
31
+ </svg>
@@ -0,0 +1,31 @@
1
+ <svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <clipPath id="clip-con">
4
+ <rect width="56" height="56"/>
5
+ </clipPath>
6
+ <pattern id="dots-con" x="0" y="0" width="3" height="3" patternUnits="userSpaceOnUse">
7
+ <circle cx="1.5" cy="1.5" r="0.5" fill="#000000" fill-opacity="0.03"/>
8
+ </pattern>
9
+ </defs>
10
+
11
+ <!-- Background -->
12
+ <rect width="56" height="56" fill="#ffffff"/>
13
+ <rect width="56" height="56" fill="url(#dots-con)"/>
14
+
15
+ <!-- Concentric square rings — like a target / vault door -->
16
+ <g clip-path="url(#clip-con)" opacity="0.9">
17
+ <!-- Outermost ring -->
18
+ <rect x="2" y="2" width="52" height="52" stroke="#0a0a0a" stroke-width="7" fill="none"/>
19
+ <!-- Middle ring -->
20
+ <rect x="14" y="14" width="28" height="28" stroke="#0a0a0a" stroke-width="6" fill="none"/>
21
+ <!-- Inner dot -->
22
+ <rect x="24" y="24" width="8" height="8" fill="#0a0a0a"/>
23
+ </g>
24
+
25
+ <!-- Main Border -->
26
+ <rect x="0.5" y="0.5" width="55" height="55" stroke="#d1d5db" stroke-width="1" fill="none"/>
27
+
28
+ <!-- Corner Marks -->
29
+ <path d="M 8 4.5 L 4.5 4.5 L 4.5 8" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
30
+ <path d="M 48 51.5 L 51.5 51.5 L 51.5 48" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
31
+ </svg>
@@ -0,0 +1,39 @@
1
+ <svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <clipPath id="clip-xh">
4
+ <rect width="56" height="56"/>
5
+ </clipPath>
6
+ <pattern id="dots-xh" x="0" y="0" width="3" height="3" patternUnits="userSpaceOnUse">
7
+ <circle cx="1.5" cy="1.5" r="0.5" fill="#000000" fill-opacity="0.03"/>
8
+ </pattern>
9
+ </defs>
10
+
11
+ <!-- Background -->
12
+ <rect width="56" height="56" fill="#ffffff"/>
13
+ <rect width="56" height="56" fill="url(#dots-xh)"/>
14
+
15
+ <!-- Cross-hatch: diagonal stripes both directions, thinner -->
16
+ <g clip-path="url(#clip-xh)" opacity="0.85">
17
+ <!-- Forward diagonals (top-left to bottom-right) -->
18
+ <g transform="translate(28, 28) scale(1.6) rotate(45) translate(-28, -28)">
19
+ <rect x="0" y="4" width="56" height="6" fill="#0a0a0a"/>
20
+ <rect x="0" y="18" width="56" height="6" fill="#0a0a0a"/>
21
+ <rect x="0" y="32" width="56" height="6" fill="#0a0a0a"/>
22
+ <rect x="0" y="46" width="56" height="6" fill="#0a0a0a"/>
23
+ </g>
24
+ <!-- Back diagonals (top-right to bottom-left) -->
25
+ <g transform="translate(28, 28) scale(1.6) rotate(-45) translate(-28, -28)" opacity="0.5">
26
+ <rect x="0" y="4" width="56" height="6" fill="#0a0a0a"/>
27
+ <rect x="0" y="18" width="56" height="6" fill="#0a0a0a"/>
28
+ <rect x="0" y="32" width="56" height="6" fill="#0a0a0a"/>
29
+ <rect x="0" y="46" width="56" height="6" fill="#0a0a0a"/>
30
+ </g>
31
+ </g>
32
+
33
+ <!-- Main Border -->
34
+ <rect x="0.5" y="0.5" width="55" height="55" stroke="#d1d5db" stroke-width="1" fill="none"/>
35
+
36
+ <!-- Corner Marks -->
37
+ <path d="M 8 4.5 L 4.5 4.5 L 4.5 8" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
38
+ <path d="M 48 51.5 L 51.5 51.5 L 51.5 48" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
39
+ </svg>
@@ -0,0 +1,39 @@
1
+ <svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <clipPath id="clip-dash">
4
+ <rect width="56" height="56"/>
5
+ </clipPath>
6
+ <pattern id="dots-dash" x="0" y="0" width="3" height="3" patternUnits="userSpaceOnUse">
7
+ <circle cx="1.5" cy="1.5" r="0.5" fill="#000000" fill-opacity="0.03"/>
8
+ </pattern>
9
+ </defs>
10
+
11
+ <!-- Background -->
12
+ <rect width="56" height="56" fill="#ffffff"/>
13
+ <rect width="56" height="56" fill="url(#dots-dash)"/>
14
+
15
+ <!-- Dashed diagonal stripes — same 45° angle as parent but broken into segments -->
16
+ <g clip-path="url(#clip-dash)" opacity="0.9">
17
+ <g transform="translate(28, 28) scale(1.8) rotate(45) translate(-28, -28)">
18
+ <!-- Stripe 1 — dashed -->
19
+ <rect x="0" y="5" width="14" height="10" fill="#0a0a0a"/>
20
+ <rect x="21" y="5" width="14" height="10" fill="#0a0a0a"/>
21
+ <rect x="42" y="5" width="14" height="10" fill="#0a0a0a"/>
22
+ <!-- Stripe 2 — dashed, offset -->
23
+ <rect x="7" y="23" width="14" height="10" fill="#0a0a0a"/>
24
+ <rect x="28" y="23" width="14" height="10" fill="#0a0a0a"/>
25
+ <rect x="49" y="23" width="14" height="10" fill="#0a0a0a"/>
26
+ <!-- Stripe 3 — dashed -->
27
+ <rect x="0" y="41" width="14" height="10" fill="#0a0a0a"/>
28
+ <rect x="21" y="41" width="14" height="10" fill="#0a0a0a"/>
29
+ <rect x="42" y="41" width="14" height="10" fill="#0a0a0a"/>
30
+ </g>
31
+ </g>
32
+
33
+ <!-- Main Border -->
34
+ <rect x="0.5" y="0.5" width="55" height="55" stroke="#d1d5db" stroke-width="1" fill="none"/>
35
+
36
+ <!-- Corner Marks -->
37
+ <path d="M 8 4.5 L 4.5 4.5 L 4.5 8" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
38
+ <path d="M 48 51.5 L 51.5 51.5 L 51.5 48" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
39
+ </svg>
@@ -0,0 +1,31 @@
1
+ <svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <clipPath id="clip-hz">
4
+ <rect width="56" height="56"/>
5
+ </clipPath>
6
+ <pattern id="dots-hz" x="0" y="0" width="3" height="3" patternUnits="userSpaceOnUse">
7
+ <circle cx="1.5" cy="1.5" r="0.5" fill="#000000" fill-opacity="0.03"/>
8
+ </pattern>
9
+ </defs>
10
+
11
+ <!-- Background -->
12
+ <rect width="56" height="56" fill="#ffffff"/>
13
+ <rect width="56" height="56" fill="url(#dots-hz)"/>
14
+
15
+ <!-- Horizontal stripes — barcode / scan-line feel -->
16
+ <g clip-path="url(#clip-hz)" opacity="0.9">
17
+ <rect x="0" y="3" width="56" height="8" fill="#0a0a0a"/>
18
+ <rect x="0" y="15" width="56" height="3" fill="#0a0a0a"/>
19
+ <rect x="0" y="22" width="56" height="8" fill="#0a0a0a"/>
20
+ <rect x="0" y="34" width="56" height="3" fill="#0a0a0a"/>
21
+ <rect x="0" y="41" width="56" height="8" fill="#0a0a0a"/>
22
+ <rect x="0" y="53" width="56" height="3" fill="#0a0a0a"/>
23
+ </g>
24
+
25
+ <!-- Main Border -->
26
+ <rect x="0.5" y="0.5" width="55" height="55" stroke="#d1d5db" stroke-width="1" fill="none"/>
27
+
28
+ <!-- Corner Marks -->
29
+ <path d="M 8 4.5 L 4.5 4.5 L 4.5 8" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
30
+ <path d="M 48 51.5 L 51.5 51.5 L 51.5 48" stroke="#9ca3af" stroke-width="1" fill="none" stroke-linecap="square"/>
31
+ </svg>