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.
- package/LICENSE +26 -0
- package/README.md +112 -0
- package/bin/aurawallet.js +121 -0
- package/docs/ADAPTERS.md +467 -0
- package/docs/API.md +2679 -0
- package/docs/APPS.md +198 -0
- package/docs/ARCHITECTURE.md +350 -0
- package/docs/AUTH.md +698 -0
- package/docs/BEST-PRACTICES.md +121 -0
- package/docs/CLI.md +61 -0
- package/docs/DEVELOPING-APPS.md +452 -0
- package/docs/EXTENSION.md +97 -0
- package/docs/JOBS.md +33 -0
- package/docs/MCP.md +76 -0
- package/docs/PROTOCOL.md +142 -0
- package/docs/SETUP.md +219 -0
- package/docs/WORKSPACE.md +672 -0
- package/docs/agent-auth.md +63 -0
- package/docs/aura-file.md +48 -0
- package/docs/credentials.md +53 -0
- package/docs/external/getting-started.md +65 -0
- package/docs/external/overview.md +45 -0
- package/docs/external/use-cases.md +48 -0
- package/docs/external/why-aura.md +35 -0
- package/docs/jobs/connect-agent.md +77 -0
- package/docs/jobs/migrate-from-dotenv.md +79 -0
- package/docs/jobs/recover-from-lockout.md +72 -0
- package/docs/jobs/secure-ci.md +63 -0
- package/docs/oauth2.md +42 -0
- package/docs/passkeys.md +60 -0
- package/docs/security.md +540 -0
- package/docs/specs/aura-open-protocol.md +61 -0
- package/docs/specs/aura-provider-plugin.md +24 -0
- package/docs/specs/aura-registry-model.md +31 -0
- package/docs/specs/fixtures/invalid-bad-key.aura +1 -0
- package/docs/specs/fixtures/invalid-bad-unicode-escape.aura +1 -0
- package/docs/specs/fixtures/invalid-duplicate-key.aura +2 -0
- package/docs/specs/fixtures/valid-basic.aura +4 -0
- package/docs/specs/fixtures/valid-provider-ref.aura +1 -0
- package/docs/specs/fixtures/valid-quoted-escapes.aura +2 -0
- package/docs/templates/RELEASE_NOTES_TEMPLATE.md +22 -0
- package/docs/totp.md +40 -0
- package/docs/wallet/AI.md +508 -0
- package/docs/wallet/DEVELOPING-STRATEGIES.md +713 -0
- package/docs/wallet/README.md +47 -0
- package/docs/wallet/STRATEGY.md +89 -0
- package/next.config.ts +21 -0
- package/package.json +151 -0
- package/postcss.config.mjs +8 -0
- package/prisma/migrations/20260214170000_baseline/migration.sql +511 -0
- package/prisma/migrations/20260216214537_add_passkey_model/migration.sql +18 -0
- package/prisma/migrations/20260217150500_add_credential_access_audit/migration.sql +31 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +447 -0
- package/public/logo-chevron.svg +31 -0
- package/public/logo-concentric.svg +31 -0
- package/public/logo-crosshatch.svg +39 -0
- package/public/logo-dashed.svg +39 -0
- package/public/logo-horizontal.svg +31 -0
- package/public/logo-m56.svg +64 -0
- package/public/logo.webp +0 -0
- package/scripts/add-app.js +245 -0
- package/scripts/init.sh +57 -0
- package/scripts/migrate-apikeys-to-credentials.ts +35 -0
- package/scripts/sandbox-agent-flow.sh +235 -0
- package/scripts/sandbox.sh +175 -0
- package/scripts/validate-job-docs.mjs +125 -0
- package/server/abi/SwapHelper.json +438 -0
- package/server/cli/approval.ts +447 -0
- package/server/cli/commands/app.ts +204 -0
- package/server/cli/commands/cron.ts +24 -0
- package/server/cli/commands/doctor.ts +1007 -0
- package/server/cli/commands/env.ts +456 -0
- package/server/cli/commands/init.ts +752 -0
- package/server/cli/commands/mcp.ts +125 -0
- package/server/cli/commands/restore.ts +314 -0
- package/server/cli/commands/shell-hook.ts +468 -0
- package/server/cli/commands/start.ts +62 -0
- package/server/cli/commands/status.ts +59 -0
- package/server/cli/commands/stop.ts +14 -0
- package/server/cli/commands/token.ts +180 -0
- package/server/cli/commands/unlock.ts +49 -0
- package/server/cli/commands/vault.ts +417 -0
- package/server/cli/index.ts +328 -0
- package/server/cli/lib/aura-parser.ts +64 -0
- package/server/cli/lib/credential-create.ts +74 -0
- package/server/cli/lib/credential-resolve.ts +254 -0
- package/server/cli/lib/dotenv-migrate.ts +116 -0
- package/server/cli/lib/dotenv-parser.ts +146 -0
- package/server/cli/lib/http.ts +91 -0
- package/server/cli/lib/init-steps.ts +76 -0
- package/server/cli/lib/local-agent-trust.ts +45 -0
- package/server/cli/lib/process.ts +136 -0
- package/server/cli/lib/prompt.ts +85 -0
- package/server/cli/lib/theme.ts +240 -0
- package/server/cli/socket.ts +570 -0
- package/server/cli/transport-client.ts +50 -0
- package/server/cron/index.ts +137 -0
- package/server/cron/job.ts +31 -0
- package/server/cron/jobs/balance-sync.ts +436 -0
- package/server/cron/jobs/incoming-scan.ts +506 -0
- package/server/cron/jobs/native-price.ts +70 -0
- package/server/cron/jobs/orphan-cleanup.ts +40 -0
- package/server/cron/jobs/strategy-runner.ts +175 -0
- package/server/cron/scheduler.ts +125 -0
- package/server/index.ts +406 -0
- package/server/lib/adapters/factory.ts +110 -0
- package/server/lib/adapters/index.ts +19 -0
- package/server/lib/adapters/router.ts +297 -0
- package/server/lib/adapters/telegram.ts +645 -0
- package/server/lib/adapters/types.ts +89 -0
- package/server/lib/adapters/webhook.ts +95 -0
- package/server/lib/address.ts +49 -0
- package/server/lib/agent-auth/contracts.ts +1194 -0
- package/server/lib/agent-profiles.ts +328 -0
- package/server/lib/ai.ts +285 -0
- package/server/lib/api-registry/contracts.ts +86 -0
- package/server/lib/api-registry/validation.ts +172 -0
- package/server/lib/apikey-migration.ts +189 -0
- package/server/lib/app-installer.ts +505 -0
- package/server/lib/app-tokens.ts +247 -0
- package/server/lib/auth.ts +314 -0
- package/server/lib/batch.ts +242 -0
- package/server/lib/cold.ts +874 -0
- package/server/lib/config.ts +381 -0
- package/server/lib/credential-access-audit.ts +85 -0
- package/server/lib/credential-access-policy.ts +110 -0
- package/server/lib/credential-health.ts +343 -0
- package/server/lib/credential-import.ts +487 -0
- package/server/lib/credential-scope.ts +87 -0
- package/server/lib/credential-shares.ts +190 -0
- package/server/lib/credential-transport.ts +342 -0
- package/server/lib/credential-vault.ts +77 -0
- package/server/lib/credentials.ts +333 -0
- package/server/lib/crypto.ts +8 -0
- package/server/lib/db.ts +15 -0
- package/server/lib/defaults.ts +366 -0
- package/server/lib/dex/index.ts +80 -0
- package/server/lib/dex/relay.ts +235 -0
- package/server/lib/dex/types.ts +59 -0
- package/server/lib/dex/uniswap.ts +370 -0
- package/server/lib/e2e-agent/artifacts.ts +36 -0
- package/server/lib/e2e-agent/contracts.ts +112 -0
- package/server/lib/e2e-agent/validation.ts +135 -0
- package/server/lib/encrypt.ts +128 -0
- package/server/lib/error.ts +20 -0
- package/server/lib/events.ts +205 -0
- package/server/lib/hot.ts +357 -0
- package/server/lib/key-fingerprint.ts +28 -0
- package/server/lib/logger.ts +331 -0
- package/server/lib/network.ts +137 -0
- package/server/lib/notifications.ts +219 -0
- package/server/lib/oauth2-refresh.ts +241 -0
- package/server/lib/oursecret.ts +54 -0
- package/server/lib/passkey-credential.ts +360 -0
- package/server/lib/passkey.ts +68 -0
- package/server/lib/permissions.ts +248 -0
- package/server/lib/pino.ts +24 -0
- package/server/lib/policy-preview.ts +138 -0
- package/server/lib/price.ts +338 -0
- package/server/lib/prices.ts +34 -0
- package/server/lib/project-scope.ts +239 -0
- package/server/lib/resolve-action.ts +427 -0
- package/server/lib/resolve.ts +36 -0
- package/server/lib/sessions.ts +632 -0
- package/server/lib/solana/connection.ts +26 -0
- package/server/lib/solana/jupiter.ts +128 -0
- package/server/lib/solana/transfer.ts +108 -0
- package/server/lib/solana/wallet.ts +136 -0
- package/server/lib/strategy/emits.ts +21 -0
- package/server/lib/strategy/engine.ts +1305 -0
- package/server/lib/strategy/executor.ts +115 -0
- package/server/lib/strategy/hook-context.ts +158 -0
- package/server/lib/strategy/hooks.ts +990 -0
- package/server/lib/strategy/index.ts +28 -0
- package/server/lib/strategy/installer.ts +305 -0
- package/server/lib/strategy/loader.ts +256 -0
- package/server/lib/strategy/message.ts +235 -0
- package/server/lib/strategy/repository.ts +218 -0
- package/server/lib/strategy/session-logger.ts +693 -0
- package/server/lib/strategy/sources.ts +288 -0
- package/server/lib/strategy/state.ts +189 -0
- package/server/lib/strategy/templates.ts +403 -0
- package/server/lib/strategy/tick.ts +404 -0
- package/server/lib/strategy/types.ts +230 -0
- package/server/lib/swap.ts +3 -0
- package/server/lib/temp.ts +86 -0
- package/server/lib/token-metadata.ts +86 -0
- package/server/lib/token-safety.ts +200 -0
- package/server/lib/token-search.ts +444 -0
- package/server/lib/totp.ts +194 -0
- package/server/lib/transactions.ts +123 -0
- package/server/lib/transport.ts +75 -0
- package/server/lib/txhistory/decoder.ts +262 -0
- package/server/lib/txhistory/enricher.ts +652 -0
- package/server/lib/txhistory/index.ts +391 -0
- package/server/lib/txhistory/signatures.ts +59 -0
- package/server/lib/verified-summary.ts +421 -0
- package/server/mcp/profile-policy.ts +30 -0
- package/server/mcp/server.ts +619 -0
- package/server/mcp/tools.ts +523 -0
- package/server/middleware/auth.ts +119 -0
- package/server/middleware/requestLogger.ts +84 -0
- package/server/routes/actions.ts +459 -0
- package/server/routes/adapters.ts +703 -0
- package/server/routes/addressbook.ts +113 -0
- package/server/routes/ai.ts +34 -0
- package/server/routes/apikeys.ts +295 -0
- package/server/routes/apps.ts +601 -0
- package/server/routes/auth.ts +457 -0
- package/server/routes/backup.ts +340 -0
- package/server/routes/batch.ts +270 -0
- package/server/routes/bookmarks.ts +162 -0
- package/server/routes/credential-shares.ts +198 -0
- package/server/routes/credential-vaults.ts +154 -0
- package/server/routes/credentials.ts +1290 -0
- package/server/routes/dashboard.ts +71 -0
- package/server/routes/defaults.ts +124 -0
- package/server/routes/fund.ts +229 -0
- package/server/routes/import.ts +352 -0
- package/server/routes/launch.ts +665 -0
- package/server/routes/lock.ts +54 -0
- package/server/routes/logs.ts +68 -0
- package/server/routes/nuke.ts +111 -0
- package/server/routes/passkey-credentials.ts +99 -0
- package/server/routes/passkey.ts +346 -0
- package/server/routes/portfolio.ts +217 -0
- package/server/routes/price.ts +63 -0
- package/server/routes/resolve.ts +31 -0
- package/server/routes/security.ts +45 -0
- package/server/routes/send-evm.ts +241 -0
- package/server/routes/send-solana.ts +281 -0
- package/server/routes/send.ts +178 -0
- package/server/routes/setup.ts +210 -0
- package/server/routes/strategy.ts +894 -0
- package/server/routes/swap-evm.ts +353 -0
- package/server/routes/swap-solana.ts +177 -0
- package/server/routes/swap.ts +356 -0
- package/server/routes/token.ts +247 -0
- package/server/routes/unlock.ts +403 -0
- package/server/routes/wallet-assets.ts +361 -0
- package/server/routes/wallet-transactions.ts +515 -0
- package/server/routes/wallet.ts +710 -0
- package/server/types.ts +146 -0
- package/skills/aurawallet/SKILL.md +739 -0
- package/skills/aurawallet-setup/SKILL.md +74 -0
- package/skills/security-review/SKILL.md +148 -0
- package/src/app/api/agent-requests/route.ts +30 -0
- package/src/app/api/apps/install/route.ts +126 -0
- package/src/app/api/apps/manifests/route.ts +16 -0
- package/src/app/api/apps/static/[...path]/route.ts +57 -0
- package/src/app/api/events/route.ts +92 -0
- package/src/app/api/page.tsx +212 -0
- package/src/app/api/workspace/[id]/apps/[wid]/route.ts +119 -0
- package/src/app/api/workspace/[id]/apps/route.ts +81 -0
- package/src/app/api/workspace/[id]/export/route.ts +67 -0
- package/src/app/api/workspace/[id]/route.ts +168 -0
- package/src/app/api/workspace/auth.ts +34 -0
- package/src/app/api/workspace/config/route.ts +106 -0
- package/src/app/api/workspace/import/route.ts +127 -0
- package/src/app/api/workspace/route.ts +116 -0
- package/src/app/app/page.tsx +2122 -0
- package/src/app/apple-icon.png +0 -0
- package/src/app/docs/page.tsx +178 -0
- package/src/app/favicon.ico +0 -0
- package/src/app/globals.css +572 -0
- package/src/app/health/page.tsx +5 -0
- package/src/app/hello/page.tsx +15 -0
- package/src/app/icon.png +0 -0
- package/src/app/layout.tsx +34 -0
- package/src/app/page.tsx +986 -0
- package/src/app/providers.tsx +90 -0
- package/src/app/share/[token]/page.tsx +295 -0
- package/src/components/ChainSelector.tsx +144 -0
- package/src/components/HumanActionBar.tsx +695 -0
- package/src/components/NotificationDrawer.tsx +129 -0
- package/src/components/apps/AgentKeysApp.tsx +490 -0
- package/src/components/apps/App.tsx +153 -0
- package/src/components/apps/AppGrid.tsx +15 -0
- package/src/components/apps/DetailedAddressDrawer.tsx +325 -0
- package/src/components/apps/DraggableApp.tsx +562 -0
- package/src/components/apps/IFrameApp.tsx +73 -0
- package/src/components/apps/LogsApp.tsx +360 -0
- package/src/components/apps/SendApp.tsx +394 -0
- package/src/components/apps/SetupWizardApp.tsx +1004 -0
- package/src/components/apps/SystemDefaultsApp.tsx +845 -0
- package/src/components/apps/ThirdPartyApp.tsx +428 -0
- package/src/components/apps/TokenApp.tsx +319 -0
- package/src/components/apps/TransactionsApp.tsx +438 -0
- package/src/components/apps/WalletDetailApp.tsx +1505 -0
- package/src/components/apps/index.ts +13 -0
- package/src/components/design-system/Button.tsx +53 -0
- package/src/components/design-system/ChainIndicator.tsx +65 -0
- package/src/components/design-system/ChainSelector.tsx +137 -0
- package/src/components/design-system/ConfirmationModal.tsx +106 -0
- package/src/components/design-system/ConfirmationPopover.tsx +81 -0
- package/src/components/design-system/Drawer.tsx +123 -0
- package/src/components/design-system/FilterDropdown.tsx +72 -0
- package/src/components/design-system/Modal.tsx +206 -0
- package/src/components/design-system/Popover.tsx +142 -0
- package/src/components/design-system/TextInput.tsx +85 -0
- package/src/components/design-system/Toggle.tsx +58 -0
- package/src/components/design-system/index.ts +11 -0
- package/src/components/docs/DocsThemeToggle.tsx +49 -0
- package/src/components/health/CredentialHealthDashboard.tsx +214 -0
- package/src/components/icons/ChainIcons.tsx +72 -0
- package/src/components/layout/AppStoreDrawer.tsx +369 -0
- package/src/components/layout/ContentArea.tsx +21 -0
- package/src/components/layout/TabBar.tsx +278 -0
- package/src/components/layout/WalletSidebar.tsx +1033 -0
- package/src/components/layout/index.ts +4 -0
- package/src/components/marketing/AuraWalletSpecOverlay.tsx +635 -0
- package/src/components/marketing/DeviceMorphExperience.tsx +216 -0
- package/src/components/vault/ApiKeysConsole.tsx +1080 -0
- package/src/components/vault/AuditConsole.tsx +584 -0
- package/src/components/vault/CredentialDetail.tsx +455 -0
- package/src/components/vault/CredentialEmpty.tsx +55 -0
- package/src/components/vault/CredentialField.tsx +361 -0
- package/src/components/vault/CredentialForm.tsx +1212 -0
- package/src/components/vault/CredentialList.tsx +165 -0
- package/src/components/vault/CredentialRow.tsx +97 -0
- package/src/components/vault/CredentialShareModal.tsx +178 -0
- package/src/components/vault/CredentialVault.tsx +754 -0
- package/src/components/vault/CredentialWalletWidget.tsx +103 -0
- package/src/components/vault/ImportCredentialsModal.tsx +515 -0
- package/src/components/vault/LargeTypeModal.tsx +64 -0
- package/src/components/vault/PasswordGenerator.tsx +224 -0
- package/src/components/vault/TOTPDisplay.tsx +123 -0
- package/src/components/vault/VaultSidebar.tsx +413 -0
- package/src/components/vault/types.ts +54 -0
- package/src/context/AuthContext.tsx +337 -0
- package/src/context/PriceContext.tsx +113 -0
- package/src/context/ThemeContext.tsx +164 -0
- package/src/context/WebSocketContext.tsx +269 -0
- package/src/context/WorkspaceContext.tsx +668 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useAgentActions.ts +368 -0
- package/src/hooks/useBalance.ts +103 -0
- package/src/hooks/useBalances.ts +129 -0
- package/src/instrumentation.ts +12 -0
- package/src/lib/api.ts +449 -0
- package/src/lib/app-loader.ts +148 -0
- package/src/lib/app-registry.ts +178 -0
- package/src/lib/app-sdk.ts +157 -0
- package/src/lib/audit-console-adapter.ts +151 -0
- package/src/lib/auth-client.ts +75 -0
- package/src/lib/config.ts +74 -0
- package/src/lib/crypto.ts +112 -0
- package/src/lib/db.ts +21 -0
- package/src/lib/docs.ts +390 -0
- package/src/lib/events.ts +361 -0
- package/src/lib/pino.ts +24 -0
- package/src/lib/theme-handlers.ts +168 -0
- package/src/lib/theme.ts +351 -0
- package/src/lib/tokenData.ts +378 -0
- package/src/lib/vault-crypto.ts +129 -0
- package/src/lib/websocket-server.ts +302 -0
- package/src/lib/websocket-setup.ts +79 -0
- package/src/lib/wordlist.ts +2050 -0
- package/src/lib/workspace-handlers.ts +285 -0
- package/start.sh +80 -0
- package/tailwind.config.ts +99 -0
- package/tsconfig.json +42 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# sandbox.sh — Launch AuraWallet in a fully isolated temp environment
|
|
4
|
+
#
|
|
5
|
+
# Usage: ./scripts/sandbox.sh [terminal|dashboard|mcp|agent] [init args...]
|
|
6
|
+
#
|
|
7
|
+
# Creates a temp data dir, runs on alternate ports (5242/5747/5748),
|
|
8
|
+
# and cleans up on exit. Your real ~/.aurawallet/ is never touched.
|
|
9
|
+
|
|
10
|
+
set -eo pipefail
|
|
11
|
+
|
|
12
|
+
MODE="${1:-terminal}"
|
|
13
|
+
if [[ "$#" -gt 0 ]]; then
|
|
14
|
+
shift
|
|
15
|
+
fi
|
|
16
|
+
INIT_ARGS=("$@")
|
|
17
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
18
|
+
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
19
|
+
|
|
20
|
+
# Sandbox ports (offset from defaults to avoid conflicts)
|
|
21
|
+
SANDBOX_WALLET_PORT=5242
|
|
22
|
+
SANDBOX_DASHBOARD_PORT=5747
|
|
23
|
+
SANDBOX_WS_PORT=5748
|
|
24
|
+
|
|
25
|
+
# Kill any leftover sandbox processes from a previous run
|
|
26
|
+
echo ""
|
|
27
|
+
echo " Cleaning up stale sandbox processes..."
|
|
28
|
+
for port in $SANDBOX_WALLET_PORT $SANDBOX_DASHBOARD_PORT $SANDBOX_WS_PORT; do
|
|
29
|
+
lsof -ti ":$port" 2>/dev/null | xargs kill 2>/dev/null || true
|
|
30
|
+
done
|
|
31
|
+
sleep 0.5
|
|
32
|
+
|
|
33
|
+
# Create isolated temp directory
|
|
34
|
+
SANDBOX_DIR="$(mktemp -d /tmp/aurawallet-sandbox-XXXXXX)"
|
|
35
|
+
mkdir -p "$SANDBOX_DIR/hot" "$SANDBOX_DIR/pending"
|
|
36
|
+
|
|
37
|
+
echo ""
|
|
38
|
+
echo " AuraWallet Sandbox"
|
|
39
|
+
echo " ──────────────────"
|
|
40
|
+
echo ""
|
|
41
|
+
echo " Mode: $MODE"
|
|
42
|
+
if [[ ${#INIT_ARGS[@]} -gt 0 ]]; then
|
|
43
|
+
echo " Init args: ${INIT_ARGS[*]}"
|
|
44
|
+
fi
|
|
45
|
+
echo " Data dir: $SANDBOX_DIR"
|
|
46
|
+
echo " Wallet: http://127.0.0.1:$SANDBOX_WALLET_PORT"
|
|
47
|
+
echo " Dashboard: http://localhost:$SANDBOX_DASHBOARD_PORT"
|
|
48
|
+
echo " WebSocket: ws://127.0.0.1:$SANDBOX_WS_PORT"
|
|
49
|
+
echo ""
|
|
50
|
+
|
|
51
|
+
cleanup() {
|
|
52
|
+
echo ""
|
|
53
|
+
echo " Cleaning up sandbox..."
|
|
54
|
+
# Kill sandbox port processes
|
|
55
|
+
for port in $SANDBOX_WALLET_PORT $SANDBOX_DASHBOARD_PORT $SANDBOX_WS_PORT; do
|
|
56
|
+
lsof -ti ":$port" 2>/dev/null | xargs kill 2>/dev/null || true
|
|
57
|
+
done
|
|
58
|
+
rm -rf "$SANDBOX_DIR"
|
|
59
|
+
echo " Sandbox removed: $SANDBOX_DIR"
|
|
60
|
+
echo ""
|
|
61
|
+
}
|
|
62
|
+
trap cleanup EXIT
|
|
63
|
+
|
|
64
|
+
# Common env vars for full isolation
|
|
65
|
+
export WALLET_DATA_DIR="$SANDBOX_DIR"
|
|
66
|
+
export DATABASE_URL="file:$SANDBOX_DIR/aurawallet.db"
|
|
67
|
+
export WALLET_SERVER_PORT="$SANDBOX_WALLET_PORT"
|
|
68
|
+
export WALLET_SERVER_URL="http://127.0.0.1:$SANDBOX_WALLET_PORT"
|
|
69
|
+
export WS_PORT="$SANDBOX_WS_PORT"
|
|
70
|
+
export DASHBOARD_PORT="$SANDBOX_DASHBOARD_PORT"
|
|
71
|
+
export BYPASS_RATE_LIMIT="true"
|
|
72
|
+
export SANDBOX_MODE="true"
|
|
73
|
+
|
|
74
|
+
# Run Prisma migrations against the sandbox DB
|
|
75
|
+
echo " Running database migrations..."
|
|
76
|
+
cd "$PROJECT_ROOT"
|
|
77
|
+
npx prisma migrate deploy --schema=prisma/schema.prisma 2>/dev/null || \
|
|
78
|
+
npx prisma migrate dev --name sandbox --schema=prisma/schema.prisma 2>/dev/null
|
|
79
|
+
echo " Database ready"
|
|
80
|
+
echo ""
|
|
81
|
+
|
|
82
|
+
case "$MODE" in
|
|
83
|
+
terminal)
|
|
84
|
+
# Run the full init wizard — it starts its own server
|
|
85
|
+
echo " Starting terminal setup wizard..."
|
|
86
|
+
echo ""
|
|
87
|
+
npx aurawallet init "${INIT_ARGS[@]}"
|
|
88
|
+
;;
|
|
89
|
+
|
|
90
|
+
dashboard)
|
|
91
|
+
# Run the full init wizard — it starts server + dashboard
|
|
92
|
+
echo " Starting dashboard setup wizard..."
|
|
93
|
+
echo ""
|
|
94
|
+
npx aurawallet init "${INIT_ARGS[@]}"
|
|
95
|
+
;;
|
|
96
|
+
|
|
97
|
+
mcp)
|
|
98
|
+
# Start Express server directly (headless, no init wizard)
|
|
99
|
+
echo " Starting wallet server..."
|
|
100
|
+
npx tsx server/index.ts &
|
|
101
|
+
|
|
102
|
+
# Wait for server to be ready
|
|
103
|
+
echo " Waiting for server..."
|
|
104
|
+
for i in $(seq 1 30); do
|
|
105
|
+
if curl -sf "http://127.0.0.1:$SANDBOX_WALLET_PORT/health" >/dev/null 2>&1; then
|
|
106
|
+
echo " Server ready"
|
|
107
|
+
echo ""
|
|
108
|
+
echo " ── MCP Sandbox Instructions ──"
|
|
109
|
+
echo ""
|
|
110
|
+
echo " To test MCP onboarding, run in another terminal:"
|
|
111
|
+
echo ""
|
|
112
|
+
echo " WALLET_SERVER_URL=http://127.0.0.1:$SANDBOX_WALLET_PORT npx aurawallet mcp"
|
|
113
|
+
echo ""
|
|
114
|
+
echo " Or test manually:"
|
|
115
|
+
echo ""
|
|
116
|
+
echo " curl http://127.0.0.1:$SANDBOX_WALLET_PORT/health"
|
|
117
|
+
echo " curl http://127.0.0.1:$SANDBOX_WALLET_PORT/setup"
|
|
118
|
+
echo ""
|
|
119
|
+
echo " Press Ctrl+C to stop and clean up."
|
|
120
|
+
echo ""
|
|
121
|
+
wait
|
|
122
|
+
break
|
|
123
|
+
fi
|
|
124
|
+
sleep 1
|
|
125
|
+
done
|
|
126
|
+
|
|
127
|
+
if ! curl -sf "http://127.0.0.1:$SANDBOX_WALLET_PORT/health" >/dev/null 2>&1; then
|
|
128
|
+
echo " Server failed to start within 30 seconds."
|
|
129
|
+
exit 1
|
|
130
|
+
fi
|
|
131
|
+
;;
|
|
132
|
+
|
|
133
|
+
agent)
|
|
134
|
+
# Start Express server + dashboard for agent-assisted onboarding testing
|
|
135
|
+
echo " Starting wallet server..."
|
|
136
|
+
npx tsx server/index.ts &
|
|
137
|
+
|
|
138
|
+
echo " Waiting for server..."
|
|
139
|
+
for i in $(seq 1 30); do
|
|
140
|
+
if curl -sf "http://127.0.0.1:$SANDBOX_WALLET_PORT/health" >/dev/null 2>&1; then
|
|
141
|
+
break
|
|
142
|
+
fi
|
|
143
|
+
sleep 1
|
|
144
|
+
done
|
|
145
|
+
|
|
146
|
+
if ! curl -sf "http://127.0.0.1:$SANDBOX_WALLET_PORT/health" >/dev/null 2>&1; then
|
|
147
|
+
echo " Server failed to start within 30 seconds."
|
|
148
|
+
exit 1
|
|
149
|
+
fi
|
|
150
|
+
|
|
151
|
+
echo " Server ready"
|
|
152
|
+
echo ""
|
|
153
|
+
echo " Starting dashboard..."
|
|
154
|
+
npx next dev -p $SANDBOX_DASHBOARD_PORT &
|
|
155
|
+
|
|
156
|
+
echo ""
|
|
157
|
+
echo " ── Agent Sandbox Ready ──"
|
|
158
|
+
echo ""
|
|
159
|
+
echo " Dashboard: http://localhost:$SANDBOX_DASHBOARD_PORT"
|
|
160
|
+
echo " Server: http://127.0.0.1:$SANDBOX_WALLET_PORT"
|
|
161
|
+
echo ""
|
|
162
|
+
echo " Open the dashboard to create your vault."
|
|
163
|
+
echo " Connect your agent — it will detect the unconfigured state."
|
|
164
|
+
echo ""
|
|
165
|
+
echo " Press Ctrl+C to stop and clean up."
|
|
166
|
+
echo ""
|
|
167
|
+
wait
|
|
168
|
+
;;
|
|
169
|
+
|
|
170
|
+
*)
|
|
171
|
+
echo " Unknown mode: $MODE"
|
|
172
|
+
echo " Usage: $0 [terminal|dashboard|mcp|agent]"
|
|
173
|
+
exit 1
|
|
174
|
+
;;
|
|
175
|
+
esac
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
|
|
5
|
+
const repoRoot = process.cwd();
|
|
6
|
+
const docsRoot = path.join(repoRoot, 'docs');
|
|
7
|
+
|
|
8
|
+
const guideFiles = [
|
|
9
|
+
'jobs/migrate-from-dotenv.md',
|
|
10
|
+
'jobs/connect-agent.md',
|
|
11
|
+
'jobs/secure-ci.md',
|
|
12
|
+
'jobs/recover-from-lockout.md',
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
const requiredSections = [
|
|
16
|
+
'## Preflight',
|
|
17
|
+
'## Runbook',
|
|
18
|
+
'## Success check',
|
|
19
|
+
'## Failure signatures + fixes',
|
|
20
|
+
'## Final verification (`aura doctor`)',
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
const allowedAurawalletCommands = new Set([
|
|
24
|
+
'init',
|
|
25
|
+
'start',
|
|
26
|
+
'stop',
|
|
27
|
+
'status',
|
|
28
|
+
'unlock',
|
|
29
|
+
'restore',
|
|
30
|
+
'mcp',
|
|
31
|
+
'vault',
|
|
32
|
+
'env',
|
|
33
|
+
'doctor',
|
|
34
|
+
'shell-hook',
|
|
35
|
+
]);
|
|
36
|
+
|
|
37
|
+
const failures = [];
|
|
38
|
+
|
|
39
|
+
function read(file) {
|
|
40
|
+
return fs.readFileSync(path.join(docsRoot, file), 'utf8');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function extractBashBlocks(markdown) {
|
|
44
|
+
const blocks = [];
|
|
45
|
+
const regex = /```bash\n([\s\S]*?)```/g;
|
|
46
|
+
let match;
|
|
47
|
+
while ((match = regex.exec(markdown))) {
|
|
48
|
+
blocks.push(match[1].trim());
|
|
49
|
+
}
|
|
50
|
+
return blocks;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function checkGuide(file) {
|
|
54
|
+
const markdown = read(file);
|
|
55
|
+
|
|
56
|
+
for (const header of requiredSections) {
|
|
57
|
+
if (!markdown.includes(header)) {
|
|
58
|
+
failures.push(`${file}: missing required section "${header}"`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (!markdown.includes('npx aurawallet doctor')) {
|
|
63
|
+
failures.push(`${file}: missing final doctor command`);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const blocks = extractBashBlocks(markdown);
|
|
67
|
+
if (blocks.length === 0) {
|
|
68
|
+
failures.push(`${file}: missing bash command snippets`);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
for (const block of blocks) {
|
|
73
|
+
const lines = block
|
|
74
|
+
.split('\n')
|
|
75
|
+
.map((line) => line.trim())
|
|
76
|
+
.filter(Boolean)
|
|
77
|
+
.filter((line) => !line.startsWith('#'));
|
|
78
|
+
|
|
79
|
+
for (const line of lines) {
|
|
80
|
+
if (line.startsWith('npx aurawallet ') || line === 'npx aurawallet') {
|
|
81
|
+
const [, , cmd = ''] = line.split(/\s+/);
|
|
82
|
+
if (cmd && !allowedAurawalletCommands.has(cmd)) {
|
|
83
|
+
failures.push(`${file}: unsupported command in snippet -> "${line}"`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function checkIndex() {
|
|
91
|
+
const indexPath = path.join(docsRoot, 'JOBS.md');
|
|
92
|
+
if (!fs.existsSync(indexPath)) {
|
|
93
|
+
failures.push('docs/JOBS.md is missing');
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const markdown = fs.readFileSync(indexPath, 'utf8');
|
|
98
|
+
for (const file of guideFiles) {
|
|
99
|
+
const rel = `./${file}`;
|
|
100
|
+
if (!markdown.includes(rel)) {
|
|
101
|
+
failures.push(`docs/JOBS.md: missing link to ${rel}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
for (const file of guideFiles) {
|
|
107
|
+
const absolute = path.join(docsRoot, file);
|
|
108
|
+
if (!fs.existsSync(absolute)) {
|
|
109
|
+
failures.push(`missing required job guide: docs/${file}`);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
checkGuide(file);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
checkIndex();
|
|
116
|
+
|
|
117
|
+
if (failures.length > 0) {
|
|
118
|
+
console.error('Job docs validation failed:\n');
|
|
119
|
+
for (const failure of failures) {
|
|
120
|
+
console.error(`- ${failure}`);
|
|
121
|
+
}
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
console.log(`Job docs validation passed (${guideFiles.length} guides checked).`);
|