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,97 @@
1
+ # AuraWallet Browser Extension
2
+
3
+ A 1Password-style browser extension for AuraWallet. Autofill credentials, browse wallets, and approve agent actions — all from your browser toolbar.
4
+
5
+ ## Features
6
+
7
+ - **🔑 Credential Autofill** — Fill usernames & passwords on any site with Cmd+Shift+L or one click
8
+ - **🌐 Domain Matching** — Automatically surfaces credentials matching the current site (subdomain-aware)
9
+ - **💰 Wallet Browser** — View wallet addresses and copy to clipboard
10
+ - **✅ Action Approval** — Approve or reject pending agent actions with badge count
11
+ - **🔒 Auto-Lock** — Configurable idle timer (default 15 min)
12
+ - **🔐 Scoped Token** — Extension gets a limited `extension:*` token, not full admin access
13
+
14
+ ## Setup
15
+
16
+ ### Prerequisites
17
+
18
+ - AuraWallet server running locally (`npx aurawallet`)
19
+ - Chrome or Chromium-based browser
20
+
21
+ ### Install (Development)
22
+
23
+ ```bash
24
+ cd extension
25
+ npm install
26
+ npm run build
27
+ ```
28
+
29
+ 1. Open `chrome://extensions`
30
+ 2. Enable "Developer mode" (top right)
31
+ 3. Click "Load unpacked"
32
+ 4. Select the `extension/dist` directory
33
+
34
+ ### Usage
35
+
36
+ 1. Click the AuraWallet icon in your toolbar (or press **Cmd+Shift+L**)
37
+ 2. Enter your vault password to unlock
38
+ 3. Browse credentials — domain-matched items appear first
39
+ 4. Click a login credential to autofill, or click non-login items to view details
40
+ 5. Switch tabs to view wallets or pending actions
41
+
42
+ ## Architecture
43
+
44
+ ```
45
+ extension/
46
+ ├── manifest.json # MV3 manifest
47
+ ├── src/
48
+ │ ├── background/
49
+ │ │ └── service-worker.ts # Alarms, health checks, auto-lock
50
+ │ ├── components/
51
+ │ │ ├── App.tsx # Root: offline/locked/unlocked routing
52
+ │ │ ├── UnlockForm.tsx # Password → RSA-encrypted unlock
53
+ │ │ ├── Dashboard.tsx # Tabs: credentials/wallets/actions
54
+ │ │ ├── CredentialDetail.tsx # Field-level view with reveal/copy
55
+ │ │ └── Settings.tsx # Server URL, auto-lock timer
56
+ │ ├── lib/
57
+ │ │ ├── api.ts # Fetch wrapper + token management
58
+ │ │ ├── crypto.ts # RSA-OAEP keypair + encrypt/decrypt
59
+ │ │ └── state.ts # chrome.storage.session state
60
+ │ └── popup/
61
+ │ ├── index.html # Popup entry
62
+ │ ├── main.tsx # Preact render
63
+ │ └── styles.ts # Shared inline styles
64
+ ├── public/icons/ # Extension icons (16/48/128)
65
+ ├── vite.config.ts # Vite + @crxjs/vite-plugin + Preact
66
+ └── package.json
67
+ ```
68
+
69
+ ## Security Model
70
+
71
+ - Password is **RSA-OAEP encrypted** before sending to server (same as web UI)
72
+ - Extension receives a **scoped token** with `extension:*` permissions:
73
+ - `wallet:list` — Read-only wallet access
74
+ - `secret:read` — Read credentials (encrypted to extension's RSA pubkey)
75
+ - `action:read` — List pending actions
76
+ - `action:resolve` — Approve/reject actions
77
+ - Token stored in `chrome.storage.session` (cleared on browser close)
78
+ - RSA keypair stored in `chrome.storage.session` (regenerated each session)
79
+ - Auto-lock clears all session data after configurable idle period
80
+
81
+ ## Server Changes
82
+
83
+ The extension required minimal server changes:
84
+
85
+ 1. **`server/lib/permissions.ts`** — Added `action:read`, `action:resolve` permissions and `extension:*` compound permission
86
+ 2. **`server/routes/actions.ts`** — Changed `requireAdmin` → `requirePermission('action:read'/'action:resolve')` on pending/resolve routes
87
+ 3. **`server/routes/unlock.ts`** — Added `scope: "extension"` parameter to issue scoped tokens with `credentialAccess: { read: ['*'] }`
88
+
89
+ ## Configuration
90
+
91
+ Settings accessible via the ⚙ gear icon:
92
+
93
+ | Setting | Default | Description |
94
+ |---------|---------|-------------|
95
+ | Server URL | `http://localhost:4242` | AuraWallet server address |
96
+ | Auto-lock | 15 minutes | Idle time before auto-locking |
97
+ | Shortcut | Cmd+Shift+L | Open popup (configurable in chrome://extensions/shortcuts) |
package/docs/JOBS.md ADDED
@@ -0,0 +1,33 @@
1
+ # Aura Docs by Job (Start Here)
2
+
3
+ Use this page when you need to get a real job done fast.
4
+
5
+ ## Pick your goal
6
+
7
+ - **I am a developer**
8
+ - [Migrate from `.env` to vault-backed `.aura`](./jobs/migrate-from-dotenv.md)
9
+ - **I run agents locally**
10
+ - [Connect an agent with least privilege](./jobs/connect-agent.md)
11
+ - **I own CI/security**
12
+ - [Secure CI with scoped Aura access](./jobs/secure-ci.md)
13
+ - **I am locked out / recovery mode**
14
+ - [Recover from lockout safely](./jobs/recover-from-lockout.md)
15
+
16
+ ## Contract for every runbook
17
+
18
+ Each guide includes:
19
+ - preflight checks
20
+ - copy/paste commands
21
+ - deterministic success checks
22
+ - known failure signatures + fixes
23
+ - a final `aura doctor` verification step
24
+
25
+ ## Keep these docs trustworthy
26
+
27
+ Run the docs validator before release:
28
+
29
+ ```bash
30
+ npm run docs:validate
31
+ ```
32
+
33
+ This checks job-guide structure and command snippets used in these runbooks.
package/docs/MCP.md ADDED
@@ -0,0 +1,76 @@
1
+ # MCP
2
+
3
+ Aura MCP server exposes wallet + credential APIs to MCP clients over stdio.
4
+
5
+ ## Start
6
+
7
+ ```bash
8
+ npx aurawallet mcp
9
+ ```
10
+
11
+ Auto-configure local IDE MCP files:
12
+
13
+ ```bash
14
+ npx aurawallet mcp --install
15
+ ```
16
+
17
+ ## MCP Resources
18
+
19
+ - `docs://api`
20
+ - `docs://auth`
21
+ - `docs://guide`
22
+ - `docs://setup-guide` (setup-only skill guide)
23
+
24
+ ## Tools currently exposed
25
+
26
+ - `create_vault`
27
+ - `wallet_api`
28
+ - `request_human_action`
29
+
30
+ ## Setup Skill
31
+
32
+ Install the setup-focused skill and ask your agent to onboard via MCP.
33
+
34
+ For local testing before a commit is pushed:
35
+
36
+ ```bash
37
+ TMP_SKILL_DIR="$(mktemp -d /tmp/aurawallet-setup-skill-XXXXXX)"
38
+ cp -R ./skills/aurawallet-setup "$TMP_SKILL_DIR/"
39
+ npx -y skills add "$TMP_SKILL_DIR/aurawallet-setup" --yes
40
+ ```
41
+
42
+ For a pushed GitHub ref (branch or commit):
43
+
44
+ ```bash
45
+ python3 ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-github.py \
46
+ --repo Aura-Industry/aurawallet \
47
+ --path skills/aurawallet-setup \
48
+ --ref <branch-or-commit>
49
+ ```
50
+
51
+ Note: dedicated `get_secret` / `put_secret` wrappers are not currently in `server/mcp/tools.ts`; use `wallet_api` against credential endpoints.
52
+
53
+ ## Credential read flow via MCP
54
+
55
+ 1. Obtain token (`POST /auth` + approval + `GET /auth/:id?secret=...`)
56
+ 2. Create scoped token if needed (`POST /actions/token`)
57
+ 3. Call `POST /credentials/:id/read`
58
+ 4. Decrypt returned `encrypted` payload in your MCP host
59
+
60
+ ## Safety pattern
61
+
62
+ - Start with least privilege (`secret:read`, narrow `credentialAccess.read` scopes)
63
+ - Use `request_human_action` when you hit 403
64
+ - Avoid broad long-lived tokens
65
+
66
+ ## Example call
67
+
68
+ ```json
69
+ {
70
+ "method": "POST",
71
+ "endpoint": "/credentials/cred-123/read",
72
+ "body": {}
73
+ }
74
+ ```
75
+
76
+ See also: [agent auth model](./agent-auth.md).
@@ -0,0 +1,142 @@
1
+ # The `.aura` File Format
2
+
3
+ **Version:** 0.1.0 (Draft)
4
+ **Status:** Draft
5
+ **Date:** 2026-02-16
6
+
7
+ ## 1. Introduction
8
+
9
+ ### 1.1 Why
10
+
11
+ Applications need secrets. Developers pass them via environment variables, typically stored in `.env` files. This creates a problem: `.env` files contain plaintext secrets and must never be committed to version control. Teams share them over Slack, email, or sticky notes. They drift. They leak.
12
+
13
+ The `.aura` format solves this by separating **what a project needs** from **the secrets themselves**. A `.aura` file maps environment variables to credential references in a vault. It contains no secrets — only pointers. It is safe to commit, review, and share.
14
+
15
+ ### 1.2 Design Goals
16
+
17
+ - **Commit-safe.** No secrets, ever.
18
+ - **Simple.** One mapping per line. No templating, no interpolation, no nesting.
19
+ - **Vault-agnostic.** Any secret store can implement resolution.
20
+ - **Familiar.** If you've used `.env`, you already know 90% of `.aura`.
21
+
22
+ ## 2. File Format
23
+
24
+ ### 2.1 General
25
+
26
+ - **Filename:** `.aura` (lowercase, leading dot)
27
+ - **Encoding:** UTF-8
28
+ - **Line endings:** LF or CRLF (implementations MUST accept both)
29
+
30
+ ### 2.2 Grammar
31
+
32
+ ```
33
+ file = *line
34
+ line = blank / comment / mapping
35
+ blank = *WSP NEWLINE
36
+ comment = "#" *CHAR NEWLINE
37
+ mapping = key "=" reference NEWLINE
38
+ key = 1*( ALPHA / DIGIT / "_" )
39
+ reference = [ "@" vault-name "/" ] credential-name "/" field
40
+ vault-name = 1*( ALPHA / DIGIT / "-" / "_" )
41
+ credential-name = 1*( ALPHA / DIGIT / "-" / "_" / "." )
42
+ field = 1*( ALPHA / DIGIT / "-" / "_" / "." )
43
+ ```
44
+
45
+ ### 2.3 Mappings
46
+
47
+ Each mapping is a single line of the form:
48
+
49
+ ```
50
+ ENV_VAR=reference
51
+ ```
52
+
53
+ - **No whitespace** around `=`. `KEY = ref` is invalid.
54
+ - **No quoting.** Values are never quoted.
55
+ - **No multiline values.**
56
+ - **No duplicate keys.** If a key appears more than once, implementations MUST reject the file.
57
+
58
+ ### 2.4 References
59
+
60
+ A reference points to a field within a credential in a vault:
61
+
62
+ | Form | Meaning |
63
+ |------|---------|
64
+ | `credential/field` | Field `field` of credential `credential` in the primary vault |
65
+ | `@vault/credential/field` | Field `field` of credential `credential` in vault `vault` |
66
+
67
+ The **primary vault** is determined by the resolution environment (e.g., a CLI config or SDK default). The `.aura` file itself does not define which vault is primary.
68
+
69
+ ### 2.5 Comments and Blank Lines
70
+
71
+ Lines beginning with `#` (optionally preceded by whitespace) are comments. Blank lines are ignored. Both are preserved for human readability.
72
+
73
+ ## 3. Resolution Algorithm
74
+
75
+ Given a `.aura` file, a resolver MUST:
76
+
77
+ 1. **Parse** the file into an ordered list of `(key, reference)` mappings.
78
+ 2. **For each mapping**, decompose the reference into `(vault, credential, field)`. If no `@vault` prefix, use the primary vault.
79
+ 3. **Resolve** each `(vault, credential, field)` tuple against the vault provider. Obtain the plaintext secret value.
80
+ 4. **Fail loudly** if any credential or field does not exist. Implementations MUST NOT substitute defaults, empty strings, or fallback values. A missing secret is a fatal error.
81
+ 5. **Inject** each `key=resolved_value` pair into the target environment.
82
+
83
+ ### 3.1 Error Handling
84
+
85
+ | Condition | Behavior |
86
+ |-----------|----------|
87
+ | Credential not found | MUST fail with error identifying the missing credential |
88
+ | Field not found | MUST fail with error identifying the credential and missing field |
89
+ | Vault not reachable | MUST fail with connection error |
90
+ | Duplicate key | MUST fail at parse time |
91
+ | Malformed line | MUST fail at parse time with line number |
92
+
93
+ Implementations MUST NOT partially inject. Either all mappings resolve or none do.
94
+
95
+ ## 4. Example
96
+
97
+ ```aura
98
+ # Database
99
+ DATABASE_URL=database-prod/url
100
+ DATABASE_POOL_SIZE=database-prod/pool_size
101
+
102
+ # Payments
103
+ STRIPE_SECRET_KEY=stripe/secret_key
104
+ STRIPE_WEBHOOK_SECRET=stripe/webhook_secret
105
+
106
+ # AWS (staging vault)
107
+ AWS_ACCESS_KEY_ID=@staging/aws/access_key
108
+ AWS_SECRET_ACCESS_KEY=@staging/aws/secret_key
109
+ ```
110
+
111
+ ## 5. Implementing a Resolver
112
+
113
+ Any tool can resolve `.aura` files. A resolver needs:
114
+
115
+ 1. **A parser** — split lines, ignore comments/blanks, extract `(key, reference)` pairs.
116
+ 2. **A vault backend** — given `(vault, credential, field)`, return the secret value. This could be AuraWallet, 1Password, HashiCorp Vault, AWS Secrets Manager, a YAML file — anything.
117
+ 3. **An injector** — set environment variables or write a `.env` file.
118
+
119
+ That's it. The format is intentionally trivial to parse. A working parser is ~30 lines in any language.
120
+
121
+ ### 5.1 Reference CLI
122
+
123
+ The `aura` CLI provides a reference implementation:
124
+
125
+ | Command | Description |
126
+ |---------|-------------|
127
+ | `aura env -- <cmd>` | Resolve `.aura`, inject env vars, run `<cmd>` |
128
+ | `aura env inject` | Resolve `.aura`, write `.env` file |
129
+ | `aura env check` | Verify all referenced credentials exist (no values printed) |
130
+ | `aura env list` | Print mappings without resolving values |
131
+ | `aura init --from-dotenv` | Generate `.aura` from an existing `.env` file |
132
+
133
+ ## 6. Security Considerations
134
+
135
+ - `.aura` files contain **no secrets** and are safe to commit to version control.
136
+ - Resolved `.env` files (output of `aura env inject`) MUST be gitignored.
137
+ - Implementations SHOULD NOT log resolved secret values.
138
+ - Implementations SHOULD clear resolved values from memory after injection when possible.
139
+
140
+ ## 7. MIME Type
141
+
142
+ `text/x-aura` (informational, not registered).
package/docs/SETUP.md ADDED
@@ -0,0 +1,219 @@
1
+ # Setup & First-Time Guide
2
+
3
+ End-to-end walkthrough from zero to an agent with a token executing operations.
4
+
5
+ **Prerequisites:** Node.js 18+
6
+
7
+ ---
8
+
9
+ ## 1. Install & Initialize
10
+
11
+ ```bash
12
+ npx aurawallet init
13
+ ```
14
+
15
+ > **Agents:** The base `init` command is interactive. For agent-driven setup, use `npx aurawallet init --dashboard` — this skips prompts, starts the dashboard, and waits for the human to create the vault in the browser.
16
+
17
+ This will:
18
+ - Create the data directory (`~/.aurawallet/`)
19
+ - Run database migrations
20
+ - Start the wallet server
21
+ - Ask: **Dashboard** or **Terminal** setup?
22
+ - Walk you through vault creation
23
+ - Print your cold wallet address + funding guidance
24
+ - Keep the servers running
25
+
26
+ After init completes, the servers stay running. Press `Ctrl+C` to stop them. To start again later:
27
+
28
+ ```bash
29
+ npx aurawallet start
30
+ ```
31
+
32
+ ### Dashboard Mode (default)
33
+
34
+ Press Enter (or type `1`) at the mode prompt. This opens the dashboard in your browser at `http://localhost:4747/app` where you create your vault with a password. One browser action and you're done.
35
+
36
+ ### Autonomous Mode (agents / CI)
37
+
38
+ For fully non-interactive vault creation — no browser, no prompts:
39
+
40
+ ```bash
41
+ npx aurawallet init --password "your-secure-password"
42
+ ```
43
+
44
+ This creates the vault, prints the seed phrase and admin token to stdout, and keeps the servers running. Store the password securely (e.g. as `AURA_VAULT_PASSWORD`) for future unlocks.
45
+
46
+ Agents using MCP can also call `create_vault` directly — see [MCP.md](./MCP.md).
47
+
48
+ ### Terminal Mode
49
+
50
+ Type `2` at the mode prompt. This walks you through setup entirely in the terminal:
51
+
52
+ 1. **Password** — enter and confirm (min 8 characters, hidden input)
53
+ 2. **Seed phrase** — displayed in a numbered box; confirm you've saved it
54
+ 3. **Anthropic API key** — optional, validates before saving (Enter to skip)
55
+ 4. **Alchemy API key** — optional, same validate-and-save flow (Enter to skip)
56
+ 5. **Telegram** — optional bot token + chat ID, tests the connection (Enter to skip)
57
+ 6. **Summary** — shows what's configured vs skipped
58
+
59
+ Terminal mode is ideal for headless servers, SSH sessions, and power users who prefer not to leave the terminal.
60
+
61
+ ### Verify it's running
62
+
63
+ ```bash
64
+ npx aurawallet status
65
+ # or
66
+ curl -s http://localhost:4242/health
67
+ ```
68
+
69
+ ---
70
+
71
+ ## 3. Unlock the Vault
72
+
73
+ After starting (or after a server restart), the vault is locked. Three ways to unlock:
74
+
75
+ ### Option A: Dashboard (recommended for agent + human collaboration)
76
+
77
+ Open `http://localhost:4747/app` — the dashboard auto-prompts for your password on first load.
78
+
79
+ An agent can tell the human: *"Open http://localhost:4747/app to unlock your vault."*
80
+
81
+ ### Option B: ENV auto-unlock (headless / autonomous agents)
82
+
83
+ ```bash
84
+ VAULT_PASSWORD=yourpassword npx aurawallet start
85
+ ```
86
+
87
+ The vault auto-unlocks on server startup. The password is scrubbed from the process environment after use. The agent then calls `POST /unlock` with the same password **and a caller RSA pubkey** to get its admin token (same flow as the dashboard). Wrong password causes the server to exit with an error.
88
+
89
+ ### Option C: CLI
90
+
91
+ ```bash
92
+ npx aurawallet unlock
93
+ ```
94
+
95
+ Prompts for password in the terminal. Works over SSH.
96
+
97
+ ### Option D: Standalone unlock page (fallback)
98
+
99
+ If the dashboard isn't running (headless mode), the Express server serves a
100
+ self-contained unlock page at `http://localhost:4242/unlock`.
101
+
102
+ ---
103
+
104
+ ## 4. Agent Gets a Token
105
+
106
+ Once the vault is unlocked, an agent requests a token:
107
+
108
+ Generate an RSA keypair in the caller runtime and send the public key on token mint requests.
109
+
110
+ ```bash
111
+ # One-time example (store private key locally in your runtime)
112
+ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out agent-private.pem
113
+ openssl rsa -pubout -in agent-private.pem -out agent-public.pem
114
+
115
+ # 1. Request access (no auth required)
116
+ curl -X POST http://localhost:4242/auth \
117
+ -H "Content-Type: application/json" \
118
+ -d '{
119
+ "agentId": "my-agent",
120
+ "limit": 0.5,
121
+ "permissions": ["trade:all"],
122
+ "ttl": 3600,
123
+ "pubkey": "<contents of agent-public.pem>"
124
+ }'
125
+ # Returns: { "requestId": "...", "secret": "..." }
126
+ ```
127
+
128
+ A human approves the request via:
129
+ - Dashboard UI (`http://localhost:4747/app`)
130
+ - CLI mode (`npm run cli`)
131
+ - Telegram / webhook adapter (if configured)
132
+
133
+ Then the agent polls for its token:
134
+
135
+ ```bash
136
+ # 2. Poll until approved
137
+ curl "http://localhost:4242/auth/<requestId>?secret=<secret>"
138
+ # When approved: { "status": "approved", "token": "eyJ..." }
139
+ ```
140
+
141
+ The agent uses the token for all subsequent requests:
142
+
143
+ ```bash
144
+ curl http://localhost:4242/wallets -H "Authorization: Bearer <token>"
145
+ ```
146
+
147
+ ---
148
+
149
+ ## 5. Agent Starts Working
150
+
151
+ ```bash
152
+ # Create a hot wallet
153
+ curl -X POST http://localhost:4242/wallet/create \
154
+ -H "Authorization: Bearer $TOKEN" \
155
+ -H "Content-Type: application/json" \
156
+ -d '{"tier": "hot", "name": "trading"}'
157
+
158
+ # Fund it from the cold wallet
159
+ curl -X POST http://localhost:4242/fund \
160
+ -H "Authorization: Bearer $TOKEN" \
161
+ -H "Content-Type: application/json" \
162
+ -d '{"to": "0xHOT_ADDRESS", "amount": "0.1"}'
163
+
164
+ # Execute a swap
165
+ curl -X POST http://localhost:4242/swap \
166
+ -H "Authorization: Bearer $TOKEN" \
167
+ -H "Content-Type: application/json" \
168
+ -d '{"from": "0xHOT_ADDRESS", "token": "0xTOKEN", "direction": "buy", "amount": "0.05", "slippage": 1}'
169
+ ```
170
+
171
+ ---
172
+
173
+ ## 6. After Server Restart
174
+
175
+ Server restart is a security feature — all tokens are invalidated (new signing key generated).
176
+
177
+ The recovery flow:
178
+ 1. **Start the server** — `npx aurawallet start` or `npx aurawallet start --headless`
179
+ 2. **Unlock the vault** — Option A, B, or C from step 3
180
+ 3. **Agent re-requests a token** — same flow as step 4
181
+ 4. **Hot wallets and data persist** — only tokens are reset, not wallets or transaction history
182
+
183
+ ---
184
+
185
+ ## 7. Optional Configuration
186
+
187
+ Configure these after init, via the dashboard or API:
188
+
189
+ | Feature | How to Configure |
190
+ |---------|-----------------|
191
+ | Alchemy RPC | `POST /apikeys` or dashboard Settings |
192
+ | Telegram approvals | `POST /adapters` or dashboard Settings — see [ADAPTERS.md](./ADAPTERS.md) |
193
+ | Custom RPC endpoints | Dashboard Settings or `POST /api/workspace/config` with `chainOverrides` |
194
+ | Strategies | Place YAML manifests in `~/.aurawallet/strategies/` — see strategy docs |
195
+
196
+ Agents can check `GET /setup` to see which optional features are configured:
197
+
198
+ ```json
199
+ {
200
+ "hasWallet": true,
201
+ "unlocked": true,
202
+ "address": "0x...",
203
+ "adapters": { "telegram": false, "webhook": false },
204
+ "apiKeys": { "alchemy": true, "anthropic": false },
205
+ "defaultChain": "base"
206
+ }
207
+ ```
208
+
209
+ ---
210
+
211
+ ## 8. MCP Server (Optional)
212
+
213
+ Connect AI agents (Claude Code, Claude Desktop, Cursor, etc.) via MCP:
214
+
215
+ ```bash
216
+ npx aurawallet mcp # starts stdio MCP server
217
+ ```
218
+
219
+ Or configure your IDE to spawn it automatically. See [MCP.md](./MCP.md) for config examples.