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,277 @@
1
+ /**
2
+ * auramaxx apikey — API key management via CLI
3
+ */
4
+
5
+ import {
6
+ bootstrapViaAuthRequest,
7
+ bootstrapViaSocket,
8
+ generateEphemeralKeypair,
9
+ type ProfileIssuanceSelection,
10
+ } from '../../lib/credential-transport';
11
+ import { getErrorMessage } from '../../lib/error';
12
+ import { printHelp } from '../lib/theme';
13
+ import { serverUrl } from '../lib/http';
14
+
15
+ type JsonObject = Record<string, unknown>;
16
+
17
+ function showHelp(): void {
18
+ printHelp('APIKEY', 'npx auramaxx apikey <subcommand> [options]', [
19
+ { name: 'list', desc: 'List configured API keys' },
20
+ { name: 'validate <service> <key>', desc: 'Validate API key with upstream provider' },
21
+ { name: 'set <service> <key>', desc: 'Create or update API key (name defaults to "default")' },
22
+ { name: 'delete <id>', desc: 'Delete API key by id' },
23
+ ], [
24
+ 'Options:',
25
+ ' --name <name> API key name for set (default: default)',
26
+ ' --metadata <json> Metadata object for set',
27
+ ' --token <token> Bearer token (default: AURA_TOKEN or socket fallback)',
28
+ ' --profile <id> /auth fallback profile when socket bootstrap is blocked',
29
+ ' --profile-version <v> /auth fallback profile version',
30
+ ' --profile-overrides <json> Tighten-only profile override JSON',
31
+ ' --json JSON output',
32
+ '',
33
+ 'Examples:',
34
+ ' npx auramaxx apikey list',
35
+ ' npx auramaxx apikey validate alchemy sk_xxx',
36
+ ' npx auramaxx apikey set alchemy sk_xxx --name default',
37
+ ' npx auramaxx apikey delete key_abc123',
38
+ ]);
39
+ }
40
+
41
+ function getFlagValue(args: string[], flag: string): string | undefined {
42
+ const idx = args.indexOf(flag);
43
+ return idx >= 0 ? args[idx + 1] : undefined;
44
+ }
45
+
46
+ function parseProfileSelection(args: string[]): ProfileIssuanceSelection {
47
+ const profile = getFlagValue(args, '--profile');
48
+ const profileVersion = getFlagValue(args, '--profile-version');
49
+ const profileOverridesRaw = getFlagValue(args, '--profile-overrides');
50
+
51
+ let profileOverrides: JsonObject | undefined;
52
+ if (profileOverridesRaw) {
53
+ const parsed = JSON.parse(profileOverridesRaw) as unknown;
54
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
55
+ throw new Error('--profile-overrides must be a JSON object');
56
+ }
57
+ profileOverrides = parsed as JsonObject;
58
+ }
59
+
60
+ return {
61
+ ...(profile ? { profile } : {}),
62
+ ...(profileVersion ? { profileVersion } : {}),
63
+ ...(profileOverrides ? { profileOverrides } : {}),
64
+ };
65
+ }
66
+
67
+ async function resolveBearerToken(args: string[]): Promise<string> {
68
+ const explicit = getFlagValue(args, '--token') || process.env.AURA_TOKEN;
69
+ if (explicit) return explicit;
70
+
71
+ const selection = parseProfileSelection(args);
72
+ const keypair = generateEphemeralKeypair();
73
+
74
+ if (selection.profile) {
75
+ const result = await bootstrapViaAuthRequest(serverUrl(), 'cli-apikey', keypair, {
76
+ ...selection,
77
+ noWait: true,
78
+ onStatus: (message) => console.error(message),
79
+ });
80
+ if (result.approveUrl) {
81
+ console.error(`Approve at: ${result.approveUrl}`);
82
+ }
83
+ console.error(`After approval, re-run with: AURA_TOKEN=<token> npx auramaxx apikey ...`);
84
+ console.error(`Or use: npx auramaxx auth request --profile ${selection.profile} --raw-token`);
85
+ process.exit(1);
86
+ }
87
+
88
+ try {
89
+ return await bootstrapViaSocket('cli-apikey', keypair);
90
+ } catch (socketErr) {
91
+ return bootstrapViaAuthRequest(serverUrl(), 'cli-apikey', keypair, {
92
+ ...selection,
93
+ onStatus: (message) => console.error(message),
94
+ }).catch((authErr) => {
95
+ throw new Error(`${getErrorMessage(socketErr)}\n${getErrorMessage(authErr)}`);
96
+ });
97
+ }
98
+ }
99
+
100
+ async function requestJson(
101
+ path: string,
102
+ token: string,
103
+ opts: { method?: string; body?: unknown } = {},
104
+ ): Promise<Record<string, unknown>> {
105
+ const res = await fetch(`${serverUrl()}${path}`, {
106
+ method: opts.method || (opts.body !== undefined ? 'POST' : 'GET'),
107
+ headers: {
108
+ 'Authorization': `Bearer ${token}`,
109
+ 'Content-Type': 'application/json',
110
+ },
111
+ body: opts.body !== undefined ? JSON.stringify(opts.body) : undefined,
112
+ signal: AbortSignal.timeout(12_000),
113
+ });
114
+
115
+ const data = await res.json().catch(() => ({})) as Record<string, unknown>;
116
+ if (!res.ok) {
117
+ throw new Error(String(data.error || `HTTP ${res.status}`));
118
+ }
119
+ return data;
120
+ }
121
+
122
+ async function cmdList(args: string[]): Promise<number> {
123
+ const json = args.includes('--json');
124
+ const token = await resolveBearerToken(args);
125
+ const data = await requestJson('/apikeys', token);
126
+
127
+ if (json) {
128
+ console.log(JSON.stringify(data, null, 2));
129
+ return 0;
130
+ }
131
+
132
+ const apiKeys = Array.isArray((data as { apiKeys?: unknown[] }).apiKeys)
133
+ ? (data as { apiKeys: Array<{ id: string; service: string; name: string; keyMasked?: string }> }).apiKeys
134
+ : [];
135
+
136
+ if (apiKeys.length === 0) {
137
+ console.log('No API keys configured.');
138
+ return 0;
139
+ }
140
+
141
+ for (const key of apiKeys) {
142
+ console.log(`${key.id} ${key.service}/${key.name} ${key.keyMasked || ''}`.trim());
143
+ }
144
+
145
+ return 0;
146
+ }
147
+
148
+ async function cmdValidate(args: string[]): Promise<number> {
149
+ const service = args[0];
150
+ const key = args[1];
151
+ if (!service || !key) {
152
+ throw new Error('Usage: npx auramaxx apikey validate <service> <key>');
153
+ }
154
+
155
+ const json = args.includes('--json');
156
+ const token = await resolveBearerToken(args);
157
+ const data = await requestJson('/apikeys/validate', token, {
158
+ method: 'POST',
159
+ body: { service, key },
160
+ });
161
+
162
+ if (json) {
163
+ console.log(JSON.stringify(data, null, 2));
164
+ } else {
165
+ const valid = (data as { valid?: unknown }).valid === true;
166
+ console.log(`valid=${valid}`);
167
+ if (!valid && typeof data.error === 'string') {
168
+ console.log(`error=${data.error}`);
169
+ }
170
+ }
171
+
172
+ return (data as { valid?: unknown }).valid === true ? 0 : 1;
173
+ }
174
+
175
+ async function cmdSet(args: string[]): Promise<number> {
176
+ const service = args[0];
177
+ const key = args[1];
178
+ if (!service || !key) {
179
+ throw new Error('Usage: npx auramaxx apikey set <service> <key> [--name <name>]');
180
+ }
181
+
182
+ const name = getFlagValue(args, '--name') || 'default';
183
+ const metadataRaw = getFlagValue(args, '--metadata');
184
+ let metadata: JsonObject | undefined;
185
+ if (metadataRaw) {
186
+ const parsed = JSON.parse(metadataRaw) as unknown;
187
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
188
+ throw new Error('--metadata must be a JSON object');
189
+ }
190
+ metadata = parsed as JsonObject;
191
+ }
192
+
193
+ const json = args.includes('--json');
194
+ const token = await resolveBearerToken(args);
195
+ const data = await requestJson('/apikeys', token, {
196
+ method: 'POST',
197
+ body: {
198
+ service,
199
+ name,
200
+ key,
201
+ ...(metadata ? { metadata } : {}),
202
+ },
203
+ });
204
+
205
+ if (json) {
206
+ console.log(JSON.stringify(data, null, 2));
207
+ } else {
208
+ console.log(`Saved API key ${service}/${name}.`);
209
+ }
210
+
211
+ return 0;
212
+ }
213
+
214
+ async function cmdDelete(args: string[]): Promise<number> {
215
+ const id = args[0];
216
+ if (!id) {
217
+ throw new Error('Usage: npx auramaxx apikey delete <id>');
218
+ }
219
+
220
+ const json = args.includes('--json');
221
+ const token = await resolveBearerToken(args);
222
+ const data = await requestJson(`/apikeys/${encodeURIComponent(id)}`, token, { method: 'DELETE' });
223
+
224
+ if (json) {
225
+ console.log(JSON.stringify(data, null, 2));
226
+ } else {
227
+ console.log(String((data as { message?: unknown }).message || 'Deleted API key.'));
228
+ }
229
+
230
+ return (data as { success?: unknown }).success === false ? 1 : 0;
231
+ }
232
+
233
+ async function main(): Promise<void> {
234
+ const args = process.argv.slice(2);
235
+ const subcommand = args[0];
236
+
237
+ if (!subcommand || subcommand === '--help' || subcommand === '-h') {
238
+ showHelp();
239
+ process.exit(0);
240
+ }
241
+
242
+ try {
243
+ let exitCode = 0;
244
+ switch (subcommand) {
245
+ case 'list':
246
+ exitCode = await cmdList(args.slice(1));
247
+ break;
248
+ case 'validate':
249
+ exitCode = await cmdValidate(args.slice(1));
250
+ break;
251
+ case 'set':
252
+ case 'create':
253
+ case 'upsert':
254
+ exitCode = await cmdSet(args.slice(1));
255
+ break;
256
+ case 'delete':
257
+ case 'del':
258
+ case 'rm':
259
+ exitCode = await cmdDelete(args.slice(1));
260
+ break;
261
+ default:
262
+ throw new Error(`Unknown apikey subcommand: ${subcommand}`);
263
+ }
264
+
265
+ process.exit(exitCode);
266
+ } catch (error) {
267
+ console.error(`API key command failed: ${getErrorMessage(error)}`);
268
+ process.exit(1);
269
+ }
270
+ }
271
+
272
+ if (import.meta.url === `file://${process.argv[1]}`) {
273
+ main().catch((error) => {
274
+ console.error(`API key command failed: ${getErrorMessage(error)}`);
275
+ process.exit(1);
276
+ });
277
+ }
@@ -0,0 +1,204 @@
1
+ /**
2
+ * auramaxx app — Manage installed apps
3
+ *
4
+ * Usage:
5
+ * npx auramaxx app install <source> [--name <id>] [--force]
6
+ * npx auramaxx app remove <id> [--yes]
7
+ * npx auramaxx app list
8
+ * npx auramaxx app update <id>
9
+ */
10
+
11
+ import {
12
+ installApp,
13
+ removeApp,
14
+ listApps,
15
+ updateApp,
16
+ } from '../../lib/app-installer';
17
+ import { promptConfirm } from '../lib/prompt';
18
+ import { getErrorMessage } from '../../lib/error';
19
+
20
+ const args = process.argv.slice(2);
21
+
22
+ function getFlag(name: string): boolean {
23
+ return args.includes(`--${name}`);
24
+ }
25
+
26
+ function getFlagValue(name: string): string | undefined {
27
+ const idx = args.indexOf(`--${name}`);
28
+ if (idx === -1 || idx + 1 >= args.length) return undefined;
29
+ return args[idx + 1];
30
+ }
31
+
32
+ function showHelp() {
33
+ console.log(`
34
+ auramaxx app — Manage installed apps
35
+
36
+ Usage:
37
+ npx auramaxx app install <source> [--name <id>] [--force]
38
+ npx auramaxx app remove <id> [--yes]
39
+ npx auramaxx app list
40
+ npx auramaxx app update <id>
41
+
42
+ Sources:
43
+ Local path ./path/to/app or /absolute/path
44
+ Git repo github.com/user/repo
45
+ Tarball https://example.com/app.tar.gz
46
+ Zip https://example.com/app.zip
47
+ Subdirectory github.com/user/repo#path=apps/my-app
48
+
49
+ Options:
50
+ --name <id> Override the app folder name
51
+ --force Overwrite existing app with same ID
52
+ --yes Skip removal confirmation
53
+
54
+ Examples:
55
+ npx auramaxx app install github.com/user/my-app
56
+ npx auramaxx app install ./my-local-app --name custom-id
57
+ npx auramaxx app list
58
+ npx auramaxx app remove my-app
59
+ npx auramaxx app update my-app
60
+ `);
61
+ }
62
+
63
+ async function main() {
64
+ const subcommand = args[0];
65
+
66
+ if (!subcommand || subcommand === '--help' || subcommand === '-h') {
67
+ showHelp();
68
+ process.exit(0);
69
+ }
70
+
71
+ switch (subcommand) {
72
+ case 'install': {
73
+ const source = args[1];
74
+ if (!source || source.startsWith('--')) {
75
+ console.error(' Error: Missing source argument\n');
76
+ console.error(' Usage: npx auramaxx app install <source> [--name <id>] [--force]');
77
+ process.exit(1);
78
+ }
79
+
80
+ const name = getFlagValue('name');
81
+ const force = getFlag('force');
82
+
83
+ console.log(`\n Installing app from: ${source}`);
84
+ if (name) console.log(` App ID: ${name}`);
85
+ if (force) console.log(` Force: overwrite existing`);
86
+ console.log('');
87
+
88
+ try {
89
+ const result = installApp(source, { name, force });
90
+ console.log(` ┌─────────────────────────────────────────┐`);
91
+ console.log(` │ App installed successfully │`);
92
+ console.log(` ├─────────────────────────────────────────┤`);
93
+ console.log(` │ ID: ${result.id.padEnd(32)}│`);
94
+ console.log(` │ Name: ${result.name.padEnd(32)}│`);
95
+ console.log(` │ Source: ${result.source.type.padEnd(32)}│`);
96
+ console.log(` │ Path: apps/${result.id.padEnd(23)}│`);
97
+ console.log(` └─────────────────────────────────────────┘`);
98
+ console.log('');
99
+ console.log(' App will appear in the App Store under INSTALLED.');
100
+ console.log(' Restart the server or use the dashboard to load it.\n');
101
+ } catch (err) {
102
+ const msg = getErrorMessage(err);
103
+ console.error(` Error: ${msg}\n`);
104
+ process.exit(1);
105
+ }
106
+ break;
107
+ }
108
+
109
+ case 'remove': {
110
+ const id = args[1];
111
+ if (!id || id.startsWith('--')) {
112
+ console.error(' Error: Missing app ID\n');
113
+ console.error(' Usage: npx auramaxx app remove <id> [--yes]');
114
+ process.exit(1);
115
+ }
116
+
117
+ const skipConfirm = getFlag('yes');
118
+
119
+ if (!skipConfirm) {
120
+ const confirmed = await promptConfirm(` Remove app "${id}"?`);
121
+ if (!confirmed) {
122
+ console.log(' Cancelled.\n');
123
+ process.exit(0);
124
+ }
125
+ }
126
+
127
+ try {
128
+ removeApp(id);
129
+ console.log(`\n App "${id}" removed.\n`);
130
+ console.log(' Note: App token will be revoked on next server restart.\n');
131
+ } catch (err) {
132
+ const msg = getErrorMessage(err);
133
+ console.error(` Error: ${msg}\n`);
134
+ process.exit(1);
135
+ }
136
+ break;
137
+ }
138
+
139
+ case 'list': {
140
+ const apps = listApps();
141
+
142
+ if (apps.length === 0) {
143
+ console.log('\n No apps installed.\n');
144
+ console.log(' Install a app:');
145
+ console.log(' npx auramaxx app install <source>\n');
146
+ process.exit(0);
147
+ }
148
+
149
+ console.log(`\n Installed Apps (${apps.length})\n`);
150
+
151
+ for (const w of apps) {
152
+ const sourceLabel = w.source
153
+ ? `${w.source.type} — ${w.source.url}`
154
+ : 'local (no .source.json)';
155
+ const perms = w.permissions.length > 0
156
+ ? w.permissions.join(', ')
157
+ : 'none';
158
+
159
+ console.log(` ┌ ${w.name} (${w.id})`);
160
+ console.log(` │ ${w.description || '(no description)'}`);
161
+ console.log(` │ Permissions: ${perms}`);
162
+ console.log(` │ Source: ${sourceLabel}`);
163
+ if (w.source?.installedAt) {
164
+ console.log(` │ Installed: ${w.source.installedAt}`);
165
+ }
166
+ console.log(` └──`);
167
+ console.log('');
168
+ }
169
+ break;
170
+ }
171
+
172
+ case 'update': {
173
+ const id = args[1];
174
+ if (!id || id.startsWith('--')) {
175
+ console.error(' Error: Missing app ID\n');
176
+ console.error(' Usage: npx auramaxx app update <id>');
177
+ process.exit(1);
178
+ }
179
+
180
+ console.log(`\n Updating app "${id}"...\n`);
181
+
182
+ try {
183
+ const result = updateApp(id);
184
+ console.log(` App "${result.id}" updated from ${result.source.type} source.`);
185
+ console.log(` Restart the server to load changes.\n`);
186
+ } catch (err) {
187
+ const msg = getErrorMessage(err);
188
+ console.error(` Error: ${msg}\n`);
189
+ process.exit(1);
190
+ }
191
+ break;
192
+ }
193
+
194
+ default:
195
+ console.error(` Unknown subcommand: ${subcommand}\n`);
196
+ showHelp();
197
+ process.exit(1);
198
+ }
199
+ }
200
+
201
+ main().catch((error) => {
202
+ console.error('Error:', getErrorMessage(error));
203
+ process.exit(1);
204
+ });