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,464 @@
1
+ /**
2
+ * auramaxx auth — Request/poll agent auth approvals from CLI
3
+ */
4
+
5
+ import fs from 'fs';
6
+ import {
7
+ decryptWithPrivateKey,
8
+ generateEphemeralKeypair,
9
+ type ProfileIssuanceSelection,
10
+ } from '../../lib/credential-transport';
11
+ import { getErrorMessage } from '../../lib/error';
12
+ import { waitForAuthDecision, fetchAuthDecisionOnce } from '../lib/approval-poll';
13
+ import { serverUrl } from '../lib/http';
14
+ import { printHelp } from '../lib/theme';
15
+
16
+ type JsonObject = Record<string, unknown>;
17
+
18
+ interface AuthCreateResponse {
19
+ success?: boolean;
20
+ requestId?: string;
21
+ secret?: string;
22
+ error?: string;
23
+ [key: string]: unknown;
24
+ }
25
+
26
+ interface ParsedCommon {
27
+ json: boolean;
28
+ noWait: boolean;
29
+ rawToken: boolean;
30
+ timeoutMs: number;
31
+ intervalMs: number;
32
+ }
33
+
34
+ interface ParsedRequestFlags extends ParsedCommon {
35
+ agentId: string;
36
+ profile: string;
37
+ profileVersion?: string;
38
+ profileOverrides?: JsonObject;
39
+ action?: { endpoint: string; method: string; body?: JsonObject };
40
+ }
41
+
42
+ function showHelp(): void {
43
+ printHelp('AUTH', 'npx auramaxx auth <subcommand> [options]', [
44
+ { name: 'request', desc: 'Request auth token via /auth and optionally poll for approval' },
45
+ { name: 'poll <requestId>', desc: 'Poll /auth/:requestId with secret' },
46
+ { name: 'pending', desc: 'List pending auth requests' },
47
+ { name: 'validate', desc: 'Validate a bearer token' },
48
+ ], [
49
+ 'Request options:',
50
+ ' --agent-id <id> Agent id (default: cli-auth)',
51
+ ' --profile <id> Profile id (default: strict)',
52
+ ' --profile-version <v> Profile version (default: v1)',
53
+ ' --profile-overrides <json> Tighten-only profile override JSON',
54
+ ' --action <json> Pre-computed action to auto-execute on approval',
55
+ ' JSON: {"endpoint":"/send","method":"POST","body":{...}}',
56
+ ' --no-wait Do not poll after creating request',
57
+ ' --timeout-ms <ms> Poll timeout (default: 120000)',
58
+ ' --interval-ms <ms> Poll interval (default: 3000)',
59
+ ' --raw-token Print full token when approved',
60
+ ' --json JSON output',
61
+ '',
62
+ 'Poll options:',
63
+ ' --secret <secret> Required request secret',
64
+ ' --once Single poll attempt (no loop)',
65
+ ' --private-key-file <path> Optional private key PEM to decrypt approved token',
66
+ '',
67
+ 'Validate options:',
68
+ ' --token <token> Token to validate (default: AURA_TOKEN env)',
69
+ '',
70
+ 'Examples:',
71
+ ' npx auramaxx auth request --agent-id codex --profile strict',
72
+ ' npx auramaxx auth request --profile dev --profile-overrides \'{"ttlSeconds":900}\' --json',
73
+ ' npx auramaxx auth request --profile strict --action \'{"endpoint":"/send","method":"POST","body":{"to":"0x...","amount":"0.01"}}\'',
74
+ ' npx auramaxx auth poll <requestId> --secret <secret>',
75
+ ' npx auramaxx auth validate --token $AURA_TOKEN',
76
+ ]);
77
+ }
78
+
79
+ function getFlagValue(args: string[], flag: string): string | undefined {
80
+ const idx = args.indexOf(flag);
81
+ return idx >= 0 ? args[idx + 1] : undefined;
82
+ }
83
+
84
+ function parseIntegerFlag(args: string[], flag: string, fallback: number): number {
85
+ const raw = getFlagValue(args, flag);
86
+ if (!raw) return fallback;
87
+ const parsed = Number(raw);
88
+ if (!Number.isFinite(parsed) || parsed <= 0) {
89
+ throw new Error(`${flag} must be a positive number`);
90
+ }
91
+ return Math.floor(parsed);
92
+ }
93
+
94
+ function parseJsonObjectFlag(args: string[], flag: string): JsonObject | undefined {
95
+ const raw = getFlagValue(args, flag);
96
+ if (!raw) return undefined;
97
+ const parsed = JSON.parse(raw) as unknown;
98
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
99
+ throw new Error(`${flag} must be a JSON object`);
100
+ }
101
+ return parsed as JsonObject;
102
+ }
103
+
104
+ function parseCommon(args: string[]): ParsedCommon {
105
+ return {
106
+ json: args.includes('--json'),
107
+ noWait: args.includes('--no-wait'),
108
+ rawToken: args.includes('--raw-token'),
109
+ timeoutMs: parseIntegerFlag(args, '--timeout-ms', 120_000),
110
+ intervalMs: parseIntegerFlag(args, '--interval-ms', 3_000),
111
+ };
112
+ }
113
+
114
+ function parseActionFlag(args: string[]): ParsedRequestFlags['action'] {
115
+ const raw = getFlagValue(args, '--action');
116
+ if (!raw) return undefined;
117
+ const parsed = JSON.parse(raw) as unknown;
118
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
119
+ throw new Error('--action must be a JSON object with endpoint and method');
120
+ }
121
+ const obj = parsed as Record<string, unknown>;
122
+ if (typeof obj.endpoint !== 'string' || typeof obj.method !== 'string') {
123
+ throw new Error('--action requires "endpoint" (string) and "method" (string)');
124
+ }
125
+ const action: { endpoint: string; method: string; body?: JsonObject } = {
126
+ endpoint: obj.endpoint,
127
+ method: obj.method.toUpperCase(),
128
+ };
129
+ if (obj.body && typeof obj.body === 'object' && !Array.isArray(obj.body)) {
130
+ action.body = obj.body as JsonObject;
131
+ }
132
+ return action;
133
+ }
134
+
135
+ function parseRequestFlags(args: string[]): ParsedRequestFlags {
136
+ const common = parseCommon(args);
137
+ return {
138
+ ...common,
139
+ agentId: getFlagValue(args, '--agent-id') || 'cli-auth',
140
+ profile: getFlagValue(args, '--profile') || 'strict',
141
+ profileVersion: getFlagValue(args, '--profile-version') || 'v1',
142
+ profileOverrides: parseJsonObjectFlag(args, '--profile-overrides'),
143
+ action: parseActionFlag(args),
144
+ };
145
+ }
146
+
147
+ async function createAuthRequest(payload: JsonObject): Promise<AuthCreateResponse> {
148
+ let res: Response;
149
+ try {
150
+ res = await fetch(`${serverUrl()}/auth`, {
151
+ method: 'POST',
152
+ headers: { 'Content-Type': 'application/json' },
153
+ body: JSON.stringify(payload),
154
+ signal: AbortSignal.timeout(10_000),
155
+ });
156
+ } catch (error) {
157
+ throw new Error(`Cannot reach AuraMaxx server at ${serverUrl()}. Run 'npx auramaxx' first. (${getErrorMessage(error)})`);
158
+ }
159
+ const data = await res.json().catch(() => ({})) as AuthCreateResponse;
160
+ if (!res.ok || !data.success || !data.requestId || !data.secret) {
161
+ throw new Error(data.error || `Failed to create auth request (HTTP ${res.status})`);
162
+ }
163
+ return data;
164
+ }
165
+
166
+ function maskToken(token: string): string {
167
+ if (token.length <= 24) return token;
168
+ return `${token.slice(0, 20)}...${token.slice(-4)}`;
169
+ }
170
+
171
+ async function handleApprovalFlow(
172
+ createResult: AuthCreateResponse,
173
+ privateKeyPem: string,
174
+ options: ParsedCommon,
175
+ ): Promise<number> {
176
+ const requestId = createResult.requestId!;
177
+ const secret = createResult.secret!;
178
+
179
+ const approveUrl = typeof createResult.approveUrl === 'string' ? createResult.approveUrl : undefined;
180
+
181
+ if (options.noWait) {
182
+ if (options.json) {
183
+ console.log(JSON.stringify({
184
+ success: true,
185
+ status: 'pending',
186
+ requestId,
187
+ secret,
188
+ ...(approveUrl ? { approveUrl } : {}),
189
+ message: 'Request created. Poll /auth/:requestId with secret.',
190
+ }, null, 2));
191
+ } else {
192
+ console.log(`Request created.`);
193
+ if (approveUrl) console.log(` approveUrl: ${approveUrl}`);
194
+ console.log(` requestId: ${requestId}`);
195
+ console.log(` secret: ${secret}`);
196
+ console.log('Use `npx auramaxx auth poll <requestId> --secret <secret>` to continue.');
197
+ }
198
+ return 0;
199
+ }
200
+
201
+ if (approveUrl) {
202
+ console.log(`Request created (${requestId}). Approve at:\n ${approveUrl}\nWaiting for approval...`);
203
+ } else {
204
+ console.log(`Request created (${requestId}). Waiting for approval...`);
205
+ }
206
+
207
+ const { response, attempts, elapsedMs } = await waitForAuthDecision(
208
+ serverUrl(),
209
+ requestId,
210
+ secret,
211
+ {
212
+ timeoutMs: options.timeoutMs,
213
+ intervalMs: options.intervalMs,
214
+ onPending: ({ attempt }) => {
215
+ if (attempt === 1 || attempt % 5 === 0) {
216
+ console.log(' pending...');
217
+ }
218
+ },
219
+ },
220
+ );
221
+
222
+ if (response.status === 'rejected') {
223
+ if (options.json) {
224
+ console.log(JSON.stringify({
225
+ success: true,
226
+ status: 'rejected',
227
+ requestId,
228
+ attempts,
229
+ elapsedMs,
230
+ }, null, 2));
231
+ } else {
232
+ console.log('Request was rejected.');
233
+ }
234
+ return 1;
235
+ }
236
+
237
+ if (!response.encryptedToken) {
238
+ throw new Error('Approved response did not include encryptedToken');
239
+ }
240
+
241
+ const token = decryptWithPrivateKey(response.encryptedToken, privateKeyPem);
242
+
243
+ if (options.json) {
244
+ console.log(JSON.stringify({
245
+ success: true,
246
+ status: 'approved',
247
+ requestId,
248
+ attempts,
249
+ elapsedMs,
250
+ token: options.rawToken ? token : undefined,
251
+ tokenPreview: maskToken(token),
252
+ }, null, 2));
253
+ } else {
254
+ console.log('Approved.');
255
+ if (options.rawToken) {
256
+ console.log(` token: ${token}`);
257
+ } else {
258
+ console.log(` token: ${maskToken(token)}`);
259
+ console.log(' (use --raw-token to print the full token)');
260
+ }
261
+ console.log(` export AURA_TOKEN='${token}'`);
262
+ }
263
+
264
+ return 0;
265
+ }
266
+
267
+ async function cmdRequest(args: string[]): Promise<number> {
268
+ const flags = parseRequestFlags(args);
269
+ const keypair = generateEphemeralKeypair();
270
+ const profileSelection: ProfileIssuanceSelection = {
271
+ profile: flags.profile,
272
+ profileVersion: flags.profileVersion,
273
+ ...(flags.profileOverrides ? { profileOverrides: flags.profileOverrides } : {}),
274
+ };
275
+
276
+ const createResult = await createAuthRequest({
277
+ agentId: flags.agentId,
278
+ profile: profileSelection.profile,
279
+ ...(profileSelection.profileVersion ? { profileVersion: profileSelection.profileVersion } : {}),
280
+ ...(profileSelection.profileOverrides ? { profileOverrides: profileSelection.profileOverrides } : {}),
281
+ ...(flags.action ? { action: flags.action } : {}),
282
+ pubkey: keypair.publicKeyPem,
283
+ });
284
+
285
+ return handleApprovalFlow(createResult, keypair.privateKeyPem, flags);
286
+ }
287
+
288
+ async function cmdPoll(args: string[]): Promise<number> {
289
+ const requestId = args[0];
290
+ if (!requestId) {
291
+ throw new Error('Usage: npx auramaxx auth poll <requestId> --secret <secret>');
292
+ }
293
+
294
+ const secret = getFlagValue(args, '--secret');
295
+ if (!secret) {
296
+ throw new Error('--secret is required');
297
+ }
298
+
299
+ const json = args.includes('--json');
300
+ const once = args.includes('--once');
301
+ const timeoutMs = parseIntegerFlag(args, '--timeout-ms', 120_000);
302
+ const intervalMs = parseIntegerFlag(args, '--interval-ms', 3_000);
303
+ const privateKeyFile = getFlagValue(args, '--private-key-file');
304
+ const privateKeyPem = privateKeyFile ? fs.readFileSync(privateKeyFile, 'utf8') : undefined;
305
+
306
+ if (once) {
307
+ const result = await fetchAuthDecisionOnce(serverUrl(), requestId, secret);
308
+ const payload = { httpStatus: result.httpStatus, ...result.payload };
309
+
310
+ if (privateKeyPem && result.payload.status === 'approved' && result.payload.encryptedToken) {
311
+ const token = decryptWithPrivateKey(result.payload.encryptedToken, privateKeyPem);
312
+ if (json) {
313
+ console.log(JSON.stringify({ ...payload, token }, null, 2));
314
+ } else {
315
+ console.log(JSON.stringify(payload, null, 2));
316
+ console.log(`token=${token}`);
317
+ }
318
+ return 0;
319
+ }
320
+
321
+ console.log(JSON.stringify(payload, null, 2));
322
+ return result.payload.status === 'rejected' ? 1 : 0;
323
+ }
324
+
325
+ const { response, attempts, elapsedMs } = await waitForAuthDecision(serverUrl(), requestId, secret, {
326
+ timeoutMs,
327
+ intervalMs,
328
+ onPending: ({ attempt }) => {
329
+ if (attempt === 1 || attempt % 5 === 0) {
330
+ console.log(' pending...');
331
+ }
332
+ },
333
+ });
334
+
335
+ if (json) {
336
+ const out: Record<string, unknown> = {
337
+ requestId,
338
+ status: response.status,
339
+ attempts,
340
+ elapsedMs,
341
+ response,
342
+ };
343
+ if (privateKeyPem && response.status === 'approved' && response.encryptedToken) {
344
+ out.token = decryptWithPrivateKey(response.encryptedToken, privateKeyPem);
345
+ }
346
+ console.log(JSON.stringify(out, null, 2));
347
+ } else {
348
+ console.log(`status=${response.status}`);
349
+ if (response.status === 'approved') {
350
+ if (privateKeyPem && response.encryptedToken) {
351
+ console.log(`token=${decryptWithPrivateKey(response.encryptedToken, privateKeyPem)}`);
352
+ } else {
353
+ console.log('Approved token available (encryptedToken present).');
354
+ }
355
+ }
356
+ }
357
+
358
+ return response.status === 'rejected' ? 1 : 0;
359
+ }
360
+
361
+ async function cmdPending(json: boolean): Promise<number> {
362
+ const res = await fetch(`${serverUrl()}/auth/pending`, {
363
+ signal: AbortSignal.timeout(10_000),
364
+ });
365
+ const data = await res.json().catch(() => ({})) as Record<string, unknown>;
366
+ if (!res.ok) {
367
+ throw new Error(String(data.error || `HTTP ${res.status}`));
368
+ }
369
+
370
+ if (json) {
371
+ console.log(JSON.stringify(data, null, 2));
372
+ return 0;
373
+ }
374
+
375
+ const requests = Array.isArray((data as { requests?: unknown[] }).requests)
376
+ ? (data as { requests: Array<{ id: string; status: string; createdAt: string; metadata?: { agentId?: string } }> }).requests
377
+ : [];
378
+
379
+ if (requests.length === 0) {
380
+ console.log('No pending auth requests.');
381
+ return 0;
382
+ }
383
+
384
+ for (const req of requests) {
385
+ const agentId = typeof req.metadata?.agentId === 'string' ? req.metadata.agentId : 'unknown';
386
+ console.log(`${req.id} agent=${agentId} status=${req.status} createdAt=${req.createdAt}`);
387
+ }
388
+ return 0;
389
+ }
390
+
391
+ async function cmdValidate(args: string[]): Promise<number> {
392
+ const json = args.includes('--json');
393
+ const token = getFlagValue(args, '--token') || args[0] || process.env.AURA_TOKEN;
394
+ if (!token || token.startsWith('--')) {
395
+ throw new Error('validate requires --token <token> (or AURA_TOKEN)');
396
+ }
397
+
398
+ const res = await fetch(`${serverUrl()}/auth/validate`, {
399
+ method: 'POST',
400
+ headers: { 'Content-Type': 'application/json' },
401
+ body: JSON.stringify({ token }),
402
+ signal: AbortSignal.timeout(10_000),
403
+ });
404
+ const data = await res.json().catch(() => ({})) as Record<string, unknown>;
405
+
406
+ if (json) {
407
+ console.log(JSON.stringify(data, null, 2));
408
+ } else {
409
+ console.log(`valid=${String(data.valid ?? false)}`);
410
+ if (typeof data.error === 'string' && data.error) {
411
+ console.log(`error=${data.error}`);
412
+ }
413
+ if (typeof data.tokenHash === 'string') {
414
+ console.log(`tokenHash=${data.tokenHash}`);
415
+ }
416
+ }
417
+
418
+ return data.valid === true ? 0 : 1;
419
+ }
420
+
421
+ async function main(): Promise<void> {
422
+ const args = process.argv.slice(2);
423
+ const subcommand = args[0];
424
+
425
+ if (!subcommand || subcommand === '--help' || subcommand === '-h') {
426
+ showHelp();
427
+ process.exit(0);
428
+ }
429
+
430
+ try {
431
+ let code = 0;
432
+ switch (subcommand) {
433
+ case 'request':
434
+ code = await cmdRequest(args.slice(1));
435
+ break;
436
+ case 'poll':
437
+ code = await cmdPoll(args.slice(1));
438
+ break;
439
+ case 'pending':
440
+ code = await cmdPending(args.includes('--json'));
441
+ break;
442
+ case 'validate':
443
+ code = await cmdValidate(args.slice(1));
444
+ break;
445
+ default:
446
+ throw new Error(`Unknown auth subcommand: ${subcommand}`);
447
+ }
448
+
449
+ process.exit(code);
450
+ } catch (error) {
451
+ console.error(`Auth command failed: ${getErrorMessage(error)}`);
452
+ process.exit(1);
453
+ }
454
+ }
455
+
456
+ if (import.meta.url === `file://${process.argv[1]}`) {
457
+ main().catch((error) => {
458
+ console.error(`Auth command failed: ${getErrorMessage(error)}`);
459
+ process.exit(1);
460
+ });
461
+ }
462
+
463
+ // Exposed for testing only
464
+ export const _testOnly = { parseActionFlag, parseRequestFlags };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * auramaxx cron — Run the cron server standalone
3
+ * Useful for development or running cron separately from the main server.
4
+ */
5
+
6
+ import { findProjectRoot } from '../lib/process';
7
+ import { execFileSync } from 'child_process';
8
+ import path from 'path';
9
+
10
+ const root = findProjectRoot();
11
+ const cronEntry = path.join(root, 'server', 'cron', 'index.ts');
12
+
13
+ console.log('Starting AuraMaxx Cron Server...\n');
14
+
15
+ try {
16
+ execFileSync('npx', ['tsx', cronEntry], {
17
+ cwd: root,
18
+ stdio: 'inherit',
19
+ env: process.env,
20
+ });
21
+ } catch (error: unknown) {
22
+ const exitCode = (error as { status?: number }).status || 1;
23
+ process.exit(exitCode);
24
+ }