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.
- package/LICENSE +26 -0
- package/README.md +77 -0
- package/apps/desktop-electron/main.js +428 -0
- package/bin/auramaxx.js +1063 -0
- package/docs/ADAPTERS.md +466 -0
- package/docs/AGENT_SETUP.md +159 -0
- package/docs/API.md +127 -0
- package/docs/APPS.md +199 -0
- package/docs/ARCHITECTURE.md +235 -0
- package/docs/AUTH.md +318 -0
- package/docs/BEST-PRACTICES.md +82 -0
- package/docs/CLI.md +141 -0
- package/docs/DESKTOP_ELECTRON.md +26 -0
- package/docs/DEVELOPING-APPS.md +453 -0
- package/docs/MCP.md +122 -0
- package/docs/PACKAGING_POLICY.md +19 -0
- package/docs/PERMISSION.md +137 -0
- package/docs/PROTOCOL.md +142 -0
- package/docs/README.md +50 -0
- package/docs/SKILLS.md +132 -0
- package/docs/TROUBLESHOOTING.md +376 -0
- package/docs/WORKSPACE.md +673 -0
- package/docs/agent-auth.md +14 -0
- package/docs/api/authentication.md +79 -0
- package/docs/api/secrets/api-keys.md +28 -0
- package/docs/api/secrets/credentials.md +80 -0
- package/docs/api/secrets/sharing.md +48 -0
- package/docs/api/system.md +41 -0
- package/docs/api/wallets/apps-strategies.md +66 -0
- package/docs/api/wallets/core.md +46 -0
- package/docs/api/wallets/data-portfolio.md +42 -0
- package/docs/aura-file.md +48 -0
- package/docs/core-concepts/FEATURES.md +114 -0
- package/docs/credentials.md +120 -0
- package/docs/external/HOW_TO_AURAMAXX/GETTING_SECRETS.md +33 -0
- package/docs/external/HOW_TO_AURAMAXX/README.md +45 -0
- package/docs/external/getting-started.md +10 -0
- package/docs/external/overview.md +19 -0
- package/docs/external/persona-paths.md +7 -0
- package/docs/external/share-secret.md +76 -0
- package/docs/external/why-aura.md +7 -0
- package/docs/security.md +227 -0
- package/docs/templates/RELEASE_NOTES_TEMPLATE.md +22 -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 +28 -0
- package/package.json +167 -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/20260222090000_update_admin_ttl_default/migration.sql +10 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +447 -0
- package/public/logo.webp +0 -0
- package/scripts/add-app.js +245 -0
- package/server/abi/SwapHelper.json +438 -0
- package/server/cli/approval.ts +447 -0
- package/server/cli/commands/actions.ts +474 -0
- package/server/cli/commands/api.ts +220 -0
- package/server/cli/commands/apikey.ts +277 -0
- package/server/cli/commands/app.ts +204 -0
- package/server/cli/commands/auth.ts +464 -0
- package/server/cli/commands/cron.ts +24 -0
- package/server/cli/commands/diary.ts +274 -0
- package/server/cli/commands/doctor.ts +1247 -0
- package/server/cli/commands/env.ts +476 -0
- package/server/cli/commands/experimental.ts +69 -0
- package/server/cli/commands/init.ts +798 -0
- package/server/cli/commands/lock.ts +157 -0
- package/server/cli/commands/mcp.ts +285 -0
- package/server/cli/commands/quickhack.ts +86 -0
- package/server/cli/commands/release-check.ts +231 -0
- package/server/cli/commands/restore.ts +314 -0
- package/server/cli/commands/service.ts +320 -0
- package/server/cli/commands/shell-hook.ts +512 -0
- package/server/cli/commands/skill.ts +216 -0
- package/server/cli/commands/start.ts +139 -0
- package/server/cli/commands/status.ts +59 -0
- package/server/cli/commands/stop.ts +36 -0
- package/server/cli/commands/token.ts +180 -0
- package/server/cli/commands/unlock.ts +50 -0
- package/server/cli/commands/vault.ts +1323 -0
- package/server/cli/commands/wallet.ts +209 -0
- package/server/cli/index.ts +280 -0
- package/server/cli/lib/approval-poll.ts +94 -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 +280 -0
- package/server/cli/lib/dotenv-migrate.ts +116 -0
- package/server/cli/lib/dotenv-parser.ts +146 -0
- package/server/cli/lib/escalation.ts +57 -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/lock-unlock-helper.ts +71 -0
- package/server/cli/lib/process.ts +162 -0
- package/server/cli/lib/prompt.ts +294 -0
- package/server/cli/lib/theme.ts +240 -0
- package/server/cli/socket.ts +579 -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 +420 -0
- package/server/lib/adapters/factory.ts +119 -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 +419 -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 +258 -0
- package/server/lib/app-installer.ts +505 -0
- package/server/lib/app-tokens.ts +247 -0
- package/server/lib/approval-link.ts +27 -0
- package/server/lib/auth.ts +314 -0
- package/server/lib/auto-execute.ts +160 -0
- package/server/lib/batch.ts +242 -0
- package/server/lib/cold.ts +1048 -0
- package/server/lib/config.ts +408 -0
- package/server/lib/credential-access-audit.ts +85 -0
- package/server/lib/credential-access-policy.ts +111 -0
- package/server/lib/credential-health.ts +343 -0
- package/server/lib/credential-import.ts +608 -0
- package/server/lib/credential-scope.ts +102 -0
- package/server/lib/credential-shares.ts +190 -0
- package/server/lib/credential-transport.ts +533 -0
- package/server/lib/credential-vault.ts +77 -0
- package/server/lib/credentials.ts +422 -0
- package/server/lib/crypto.ts +8 -0
- package/server/lib/db.ts +58 -0
- package/server/lib/defaults.ts +386 -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/diary.ts +34 -0
- package/server/lib/dont-ask-again-policy.ts +41 -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 +114 -0
- package/server/lib/error.ts +20 -0
- package/server/lib/events.ts +217 -0
- package/server/lib/feature-flags.ts +93 -0
- package/server/lib/hot.ts +357 -0
- package/server/lib/human-action-summary.ts +80 -0
- package/server/lib/key-fingerprint.ts +28 -0
- package/server/lib/logger.ts +340 -0
- package/server/lib/network.ts +137 -0
- package/server/lib/notifications.ts +230 -0
- package/server/lib/oauth2-refresh.ts +241 -0
- package/server/lib/oursecret.ts +71 -0
- package/server/lib/passkey-credential.ts +360 -0
- package/server/lib/passkey.ts +68 -0
- package/server/lib/permissions.ts +299 -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 +297 -0
- package/server/lib/resolve-action.ts +328 -0
- package/server/lib/resolve.ts +36 -0
- package/server/lib/secret-gist-share.ts +296 -0
- package/server/lib/sessions.ts +634 -0
- package/server/lib/socket-path.ts +56 -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 +159 -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 +237 -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 +84 -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/update-check.ts +35 -0
- package/server/lib/verified-summary.ts +414 -0
- package/server/lib/view-registry.ts +80 -0
- package/server/mcp/profile-policy.ts +30 -0
- package/server/mcp/server.ts +1589 -0
- package/server/mcp/tools.ts +276 -0
- package/server/middleware/auth.ts +119 -0
- package/server/middleware/requestLogger.ts +84 -0
- package/server/routes/actions.ts +539 -0
- package/server/routes/adapters.ts +711 -0
- package/server/routes/addressbook.ts +113 -0
- package/server/routes/ai.ts +34 -0
- package/server/routes/apikeys.ts +343 -0
- package/server/routes/apps.ts +601 -0
- package/server/routes/auth.ts +406 -0
- package/server/routes/backup.ts +404 -0
- package/server/routes/batch.ts +270 -0
- package/server/routes/bookmarks.ts +162 -0
- package/server/routes/credential-shares.ts +380 -0
- package/server/routes/credential-vaults.ts +159 -0
- package/server/routes/credentials.ts +1782 -0
- package/server/routes/dashboard.ts +97 -0
- package/server/routes/defaults.ts +124 -0
- package/server/routes/flags.ts +11 -0
- package/server/routes/fund.ts +225 -0
- package/server/routes/heartbeat.ts +375 -0
- package/server/routes/import.ts +364 -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 +366 -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 +352 -0
- package/server/routes/swap-solana.ts +176 -0
- package/server/routes/swap.ts +356 -0
- package/server/routes/token.ts +247 -0
- package/server/routes/unlock.ts +467 -0
- package/server/routes/views.ts +41 -0
- package/server/routes/wallet-assets.ts +361 -0
- package/server/routes/wallet-transactions.ts +515 -0
- package/server/routes/wallet.ts +709 -0
- package/server/types.ts +146 -0
- package/shared/credential-field-schema.ts +248 -0
- package/skills/auramaxx/HEARTBEAT.md +78 -0
- package/skills/auramaxx/SKILL.md +745 -0
- package/skills/auramaxx/docs/AGENT_SETUP.md +155 -0
- package/skills/auramaxx/docs/API.md +127 -0
- package/skills/auramaxx/docs/AUTH.md +318 -0
- package/skills/auramaxx/docs/CLI.md +130 -0
- package/skills/auramaxx/docs/MCP.md +122 -0
- package/skills/auramaxx/docs/TROUBLESHOOTING.md +357 -0
- package/skills/auramaxx/docs/WORKSPACE.md +673 -0
- package/skills/auramaxx/docs/security.md +227 -0
- package/skills/task-lifecycle/SKILL.md +378 -0
- package/src/app/api/[...doc]/page.tsx +36 -0
- package/src/app/api/agent-requests/route.ts +30 -0
- package/src/app/api/apps/install/route.ts +132 -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/docs/plain/route.ts +74 -0
- package/src/app/api/events/route.ts +92 -0
- package/src/app/api/page.tsx +290 -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 +40 -0
- package/src/app/api/workspace/config/route.ts +121 -0
- package/src/app/api/workspace/import/route.ts +127 -0
- package/src/app/api/workspace/route.ts +116 -0
- package/src/app/app-legacy-do-not-use/page.tsx +2245 -0
- package/src/app/apple-icon.png +0 -0
- package/src/app/approve/[actionId]/page.tsx +409 -0
- package/src/app/docs/DocsPageContent.tsx +269 -0
- package/src/app/docs/[...doc]/page.tsx +41 -0
- package/src/app/docs/page.tsx +38 -0
- package/src/app/favicon.ico +0 -0
- package/src/app/globals.css +819 -0
- package/src/app/health/page.tsx +5 -0
- package/src/app/hello/page.tsx +102 -0
- package/src/app/icon.png +0 -0
- package/src/app/layout.tsx +39 -0
- package/src/app/page.tsx +1964 -0
- package/src/app/privacy/page.tsx +63 -0
- package/src/app/providers.tsx +87 -0
- package/src/app/share/[token]/page.tsx +295 -0
- package/src/app/terms/page.tsx +80 -0
- package/src/components/ChainSelector.tsx +44 -0
- package/src/components/HumanActionBar.tsx +697 -0
- package/src/components/NotificationDrawer.tsx +387 -0
- package/src/components/PasskeyEnrollmentPrompt.tsx +235 -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 +88 -0
- package/src/components/design-system/ChainIndicator.tsx +65 -0
- package/src/components/design-system/ChainSelector.tsx +147 -0
- package/src/components/design-system/ConfirmationModal.tsx +107 -0
- package/src/components/design-system/ConfirmationPopover.tsx +81 -0
- package/src/components/design-system/DownloadButton.tsx +149 -0
- package/src/components/design-system/Drawer.tsx +133 -0
- package/src/components/design-system/FilterDropdown.tsx +183 -0
- package/src/components/design-system/ItemPicker.tsx +157 -0
- package/src/components/design-system/Modal.tsx +296 -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 +65 -0
- package/src/components/design-system/TyvekCollapsibleSection.tsx +55 -0
- package/src/components/design-system/index.ts +14 -0
- package/src/components/docs/ClientSideMarkdown.tsx +51 -0
- package/src/components/docs/DocsSearchBar.tsx +118 -0
- package/src/components/docs/DocsThemeToggle.tsx +38 -0
- package/src/components/docs/PersistentDocGroup.tsx +91 -0
- package/src/components/docs/ShareUrlButton.tsx +33 -0
- package/src/components/docs/SidebarScrollMemory.tsx +56 -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/CreateViewModal.tsx +88 -0
- package/src/components/layout/LeftRail.tsx +114 -0
- package/src/components/layout/TabBar.tsx +284 -0
- package/src/components/layout/WalletSidebar.tsx +1030 -0
- package/src/components/layout/index.ts +6 -0
- package/src/components/marketing/AuraMaxxSpecOverlay.tsx +653 -0
- package/src/components/marketing/DeviceMorphExperience.tsx +216 -0
- package/src/components/vault/ApiKeysConsole.tsx +1272 -0
- package/src/components/vault/AuditConsole.tsx +600 -0
- package/src/components/vault/CredentialDetail.tsx +625 -0
- package/src/components/vault/CredentialEmpty.tsx +55 -0
- package/src/components/vault/CredentialField.tsx +583 -0
- package/src/components/vault/CredentialForm.tsx +1484 -0
- package/src/components/vault/CredentialList.tsx +265 -0
- package/src/components/vault/CredentialRow.tsx +130 -0
- package/src/components/vault/CredentialShareModal.tsx +273 -0
- package/src/components/vault/CredentialVault.tsx +1662 -0
- package/src/components/vault/CredentialWalletWidget.tsx +103 -0
- package/src/components/vault/DocsConsole.tsx +113 -0
- package/src/components/vault/ImportCredentialsModal.tsx +578 -0
- package/src/components/vault/LargeTypeModal.tsx +88 -0
- package/src/components/vault/PasswordGenerator.tsx +232 -0
- package/src/components/vault/TOTPDisplay.tsx +108 -0
- package/src/components/vault/TotpSetupPanel.tsx +198 -0
- package/src/components/vault/VaultSidebar.tsx +881 -0
- package/src/components/vault/credentialFormName.ts +91 -0
- package/src/components/vault/hooks/useVaultKeyboardShortcuts.ts +69 -0
- package/src/components/vault/types.ts +56 -0
- package/src/context/AuthContext.tsx +365 -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 +4 -0
- package/src/hooks/useAgentActions.ts +552 -0
- package/src/hooks/useBalance.ts +103 -0
- package/src/hooks/useBalances.ts +129 -0
- package/src/hooks/useTheme.ts +156 -0
- package/src/instrumentation.ts +12 -0
- package/src/lib/api-docs.ts +154 -0
- package/src/lib/api.ts +474 -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/credential-field-schema.ts +11 -0
- package/src/lib/crypto.ts +112 -0
- package/src/lib/db.ts +21 -0
- package/src/lib/docs.ts +544 -0
- package/src/lib/events.ts +363 -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/totp-import.ts +57 -0
- package/src/lib/vault-crypto.ts +129 -0
- package/src/lib/view-registry.ts +57 -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 +170 -0
- package/tailwind.config.ts +99 -0
- package/tsconfig.json +42 -0
|
@@ -0,0 +1,673 @@
|
|
|
1
|
+
# Workspace API - Agent Control Guide
|
|
2
|
+
|
|
3
|
+
Programmatic control of the AuraMaxx dashboard via WebSocket.
|
|
4
|
+
|
|
5
|
+
## Authentication
|
|
6
|
+
|
|
7
|
+
**Read-only operations** (querying state) work without authentication.
|
|
8
|
+
|
|
9
|
+
**Mutation operations** (creating/updating/deleting workspaces and apps, changing themes) require a valid token with `workspace:modify` permission or admin access (`admin:*`).
|
|
10
|
+
|
|
11
|
+
For authentication details, see [AUTH.md](./AUTH.md).
|
|
12
|
+
|
|
13
|
+
## Quick Start (CLI Script)
|
|
14
|
+
|
|
15
|
+
The easiest way to add apps is via the CLI script:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Set your token (required for mutations)
|
|
19
|
+
export AURA_TOKEN="your-agent-token"
|
|
20
|
+
|
|
21
|
+
# Add an iframe app
|
|
22
|
+
node scripts/add-app.js iframe --url "https://dexscreener.com/base/0x123" --title "Price Chart"
|
|
23
|
+
|
|
24
|
+
# Add a built-in app
|
|
25
|
+
node scripts/add-app.js wallets
|
|
26
|
+
node scripts/add-app.js logs --x 400 --y 100
|
|
27
|
+
|
|
28
|
+
# Add an installed app (from apps/ folder)
|
|
29
|
+
node scripts/add-app.js installed:example-kanban
|
|
30
|
+
|
|
31
|
+
# Specify position and size
|
|
32
|
+
node scripts/add-app.js iframe --url "https://example.com" --x 100 --y 200 --width 600 --height 400
|
|
33
|
+
|
|
34
|
+
# Custom app ID (for multi-instance)
|
|
35
|
+
node scripts/add-app.js iframe --id "my-chart" --url "https://example.com"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Run `node scripts/add-app.js --help` for full usage.
|
|
39
|
+
|
|
40
|
+
> **Note**: Adding apps requires a token with `workspace:modify` permission or admin access. See [AUTH.md](./AUTH.md) for obtaining tokens.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Quick Start (WebSocket)
|
|
45
|
+
|
|
46
|
+
For programmatic control from code:
|
|
47
|
+
|
|
48
|
+
```javascript
|
|
49
|
+
// Connect with authentication token for mutations
|
|
50
|
+
// Token is passed as URL query parameter
|
|
51
|
+
const token = 'your-agent-token'; // From /auth endpoint or admin token from /unlock
|
|
52
|
+
const ws = new WebSocket(`ws://localhost:4748?token=${encodeURIComponent(token)}`);
|
|
53
|
+
|
|
54
|
+
ws.onopen = () => {
|
|
55
|
+
// Add an app (requires workspace:modify permission or admin:*)
|
|
56
|
+
ws.send(JSON.stringify({
|
|
57
|
+
type: 'app:added',
|
|
58
|
+
timestamp: Date.now(),
|
|
59
|
+
source: 'agent',
|
|
60
|
+
data: {
|
|
61
|
+
workspaceId: 'your-workspace-id',
|
|
62
|
+
appType: 'iframe',
|
|
63
|
+
config: { url: 'https://example.com/chart' },
|
|
64
|
+
x: 100, y: 100, width: 400, height: 300
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
ws.onmessage = (event) => {
|
|
70
|
+
const msg = JSON.parse(event.data);
|
|
71
|
+
|
|
72
|
+
// Check for permission errors
|
|
73
|
+
if (msg.type === 'error') {
|
|
74
|
+
console.error('Permission denied:', msg.error);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
console.log('Received:', msg.type, msg.data);
|
|
79
|
+
};
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Without a token**, you can still query state (read-only):
|
|
83
|
+
|
|
84
|
+
```javascript
|
|
85
|
+
const ws = new WebSocket('ws://localhost:4748'); // No token
|
|
86
|
+
|
|
87
|
+
ws.onopen = () => {
|
|
88
|
+
// Query current state (no auth required)
|
|
89
|
+
ws.send(JSON.stringify({
|
|
90
|
+
type: 'workspace:state:request',
|
|
91
|
+
timestamp: Date.now(),
|
|
92
|
+
source: 'agent',
|
|
93
|
+
data: { requestId: 'req-123' }
|
|
94
|
+
}));
|
|
95
|
+
};
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## WebSocket Events
|
|
101
|
+
|
|
102
|
+
### Connection
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
ws://localhost:4748
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
On connect, you'll receive: `{ type: 'connected', timestamp: ... }`
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Query Events (Request/Response)
|
|
113
|
+
|
|
114
|
+
### Get Current State
|
|
115
|
+
|
|
116
|
+
Request the full workspace state:
|
|
117
|
+
|
|
118
|
+
```javascript
|
|
119
|
+
ws.send(JSON.stringify({
|
|
120
|
+
type: 'workspace:state:request',
|
|
121
|
+
timestamp: Date.now(),
|
|
122
|
+
source: 'agent',
|
|
123
|
+
data: {
|
|
124
|
+
requestId: 'req-123', // Your unique ID to match response
|
|
125
|
+
workspaceId: 'optional-id' // Omit for default workspace
|
|
126
|
+
}
|
|
127
|
+
}));
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Response:
|
|
131
|
+
|
|
132
|
+
```javascript
|
|
133
|
+
{
|
|
134
|
+
type: 'workspace:state:response',
|
|
135
|
+
data: {
|
|
136
|
+
requestId: 'req-123',
|
|
137
|
+
workspaces: [
|
|
138
|
+
{ id: 'ws-1', name: 'HOME', slug: 'home', icon: 'Home', isDefault: true, isCloseable: false }
|
|
139
|
+
],
|
|
140
|
+
activeWorkspaceId: 'ws-1',
|
|
141
|
+
apps: [
|
|
142
|
+
{ id: 'w-1', workspaceId: 'ws-1', appType: 'logs', x: 20, y: 20, width: 600, height: 300, zIndex: 10, isVisible: true, isLocked: false }
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Mutation Events
|
|
151
|
+
|
|
152
|
+
> **Authentication Required**: All mutation events require a valid token with `workspace:modify` permission or admin access. Connect with `ws://localhost:4748?token=YOUR_TOKEN`. See [AUTH.md](./AUTH.md) for obtaining tokens.
|
|
153
|
+
|
|
154
|
+
All mutations are broadcast to other connected clients automatically.
|
|
155
|
+
|
|
156
|
+
### Create Workspace
|
|
157
|
+
|
|
158
|
+
```javascript
|
|
159
|
+
ws.send(JSON.stringify({
|
|
160
|
+
type: 'workspace:created',
|
|
161
|
+
timestamp: Date.now(),
|
|
162
|
+
source: 'agent',
|
|
163
|
+
data: {
|
|
164
|
+
id: 'ws-' + Date.now(), // Optional - auto-generated if omitted
|
|
165
|
+
name: 'TRADING',
|
|
166
|
+
slug: 'trading', // Optional - generated from name
|
|
167
|
+
icon: 'TrendingUp', // Lucide icon name
|
|
168
|
+
order: 1, // Tab order
|
|
169
|
+
isDefault: false,
|
|
170
|
+
isCloseable: true
|
|
171
|
+
}
|
|
172
|
+
}));
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Delete Workspace
|
|
176
|
+
|
|
177
|
+
```javascript
|
|
178
|
+
ws.send(JSON.stringify({
|
|
179
|
+
type: 'workspace:deleted',
|
|
180
|
+
timestamp: Date.now(),
|
|
181
|
+
source: 'agent',
|
|
182
|
+
data: { workspaceId: 'ws-123' }
|
|
183
|
+
}));
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Update Workspace
|
|
187
|
+
|
|
188
|
+
```javascript
|
|
189
|
+
ws.send(JSON.stringify({
|
|
190
|
+
type: 'workspace:updated',
|
|
191
|
+
timestamp: Date.now(),
|
|
192
|
+
source: 'agent',
|
|
193
|
+
data: {
|
|
194
|
+
id: 'ws-123',
|
|
195
|
+
name: 'NEW NAME',
|
|
196
|
+
icon: 'Zap'
|
|
197
|
+
}
|
|
198
|
+
}));
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## App Events
|
|
204
|
+
|
|
205
|
+
### Add App
|
|
206
|
+
|
|
207
|
+
```javascript
|
|
208
|
+
ws.send(JSON.stringify({
|
|
209
|
+
type: 'app:added',
|
|
210
|
+
timestamp: Date.now(),
|
|
211
|
+
source: 'agent',
|
|
212
|
+
data: {
|
|
213
|
+
id: 'app-' + Date.now(), // Optional
|
|
214
|
+
workspaceId: 'ws-123', // Required
|
|
215
|
+
appType: 'iframe', // Required - see App Types below
|
|
216
|
+
x: 100, // Position (default: 20)
|
|
217
|
+
y: 100,
|
|
218
|
+
width: 400, // Size (default varies by type)
|
|
219
|
+
height: 300,
|
|
220
|
+
zIndex: 50, // Layering (auto-incremented if omitted)
|
|
221
|
+
isVisible: true,
|
|
222
|
+
isLocked: false,
|
|
223
|
+
config: { // Type-specific config
|
|
224
|
+
url: 'https://example.com'
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}));
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Remove App
|
|
231
|
+
|
|
232
|
+
```javascript
|
|
233
|
+
ws.send(JSON.stringify({
|
|
234
|
+
type: 'app:removed',
|
|
235
|
+
timestamp: Date.now(),
|
|
236
|
+
source: 'agent',
|
|
237
|
+
data: { appId: 'app-123' }
|
|
238
|
+
}));
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Update App
|
|
242
|
+
|
|
243
|
+
Update position, size, visibility, lock state, or config:
|
|
244
|
+
|
|
245
|
+
```javascript
|
|
246
|
+
ws.send(JSON.stringify({
|
|
247
|
+
type: 'app:updated',
|
|
248
|
+
timestamp: Date.now(),
|
|
249
|
+
source: 'agent',
|
|
250
|
+
data: {
|
|
251
|
+
appId: 'app-123',
|
|
252
|
+
x: 200, // Move app
|
|
253
|
+
y: 150,
|
|
254
|
+
width: 500, // Resize
|
|
255
|
+
height: 400,
|
|
256
|
+
isVisible: true, // Show/hide
|
|
257
|
+
isLocked: true, // Prevent dragging
|
|
258
|
+
config: { ... } // Update config
|
|
259
|
+
}
|
|
260
|
+
}));
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## App Types
|
|
266
|
+
|
|
267
|
+
### Singleton vs Multi-Instance
|
|
268
|
+
|
|
269
|
+
Apps are categorized as **singleton** or **multi-instance**:
|
|
270
|
+
|
|
271
|
+
- **Singleton**: Only one instance per workspace. ID = app type. If you try to add a duplicate, it brings the existing one to front.
|
|
272
|
+
- **Multi-instance**: Can have multiple instances with different IDs. Use custom `id` like `wallet:0x123` or `iframe:my-chart`.
|
|
273
|
+
|
|
274
|
+
### Built-in Apps (Singleton)
|
|
275
|
+
|
|
276
|
+
| Type | Description | Default Size |
|
|
277
|
+
|------|-------------|--------------|
|
|
278
|
+
| `logs` | Event log viewer | 600x300 |
|
|
279
|
+
| `send` | Send ETH form | 320x280 |
|
|
280
|
+
| `agentKeys` | Agent keys & approvals | 340x400 |
|
|
281
|
+
| `setup` | Getting started wizard | 420x520 |
|
|
282
|
+
| `transactions` | Transaction history log | 520x400 |
|
|
283
|
+
|
|
284
|
+
### Multi-Instance Apps
|
|
285
|
+
|
|
286
|
+
These app types can be opened multiple times with different IDs:
|
|
287
|
+
|
|
288
|
+
| Type | Description | Default Size |
|
|
289
|
+
|------|-------------|--------------|
|
|
290
|
+
| `token` | Market data for a token | 380x480 |
|
|
291
|
+
| `walletDetail` | Detailed view of a single wallet | 320x380 |
|
|
292
|
+
| `iframe` | Embed external URL | 400x300 |
|
|
293
|
+
| `installed:*` | Installed apps from `apps/` folder | varies |
|
|
294
|
+
|
|
295
|
+
**Custom IDs**: Pass an `id` field to control identity:
|
|
296
|
+
|
|
297
|
+
```javascript
|
|
298
|
+
// Multiple iframe apps with different IDs
|
|
299
|
+
{ id: 'chart-eth', appType: 'iframe', config: { url: '...' } }
|
|
300
|
+
{ id: 'chart-btc', appType: 'iframe', config: { url: '...' } }
|
|
301
|
+
|
|
302
|
+
// Wallet detail apps
|
|
303
|
+
{ id: 'wallet:0x123...', appType: 'walletDetail', config: { address: '0x123...' } }
|
|
304
|
+
|
|
305
|
+
// Installed third-party apps
|
|
306
|
+
{ appType: 'installed:example-kanban', config: { appPath: 'example-kanban', appName: 'Kanban Board' } }
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
If no `id` is provided, one is auto-generated (e.g., `iframe-1738505123456`).
|
|
310
|
+
|
|
311
|
+
> For full details on creating and installing third-party apps, see [docs/APPS.md](./APPS.md).
|
|
312
|
+
|
|
313
|
+
#### IFrame App
|
|
314
|
+
|
|
315
|
+
Embed any URL:
|
|
316
|
+
|
|
317
|
+
```javascript
|
|
318
|
+
{
|
|
319
|
+
appType: 'iframe',
|
|
320
|
+
config: {
|
|
321
|
+
url: 'https://example.com/chart',
|
|
322
|
+
title: 'Price Chart', // Optional
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
> **Security note:** Iframes are sandboxed with `allow-scripts allow-forms` (no `allow-same-origin`). The sandbox policy is not configurable by agents to prevent sandbox escape.
|
|
328
|
+
|
|
329
|
+
#### Installed Apps
|
|
330
|
+
|
|
331
|
+
Third-party apps installed as folders under `apps/`. Each installed app consists of a `app.md` manifest and an `index.html` entry point, rendered inside a sandboxed iframe.
|
|
332
|
+
|
|
333
|
+
```javascript
|
|
334
|
+
{
|
|
335
|
+
appType: 'installed:example-kanban',
|
|
336
|
+
config: {
|
|
337
|
+
appPath: 'example-kanban',
|
|
338
|
+
appName: 'Kanban Board'
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
Installed apps appear in the App Store under the "INSTALLED" tab. For full details on creating, installing, and developing third-party apps (manifest format, SDK API, storage, security model), see [APPS.md](./APPS.md) and [DEVELOPING-APPS.md](./DEVELOPING-APPS.md).
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Strategy Events
|
|
348
|
+
|
|
349
|
+
The strategy engine broadcasts events over the WebSocket as strategies execute.
|
|
350
|
+
|
|
351
|
+
| Event | When | Data |
|
|
352
|
+
|-------|------|------|
|
|
353
|
+
| `strategy:tick` | Tick completes | `strategyId`, `intents` (count), `duration` (ms) |
|
|
354
|
+
| `strategy:enabled` | Strategy enabled | `strategyId` |
|
|
355
|
+
| `strategy:paused` | Strategy paused | `strategyId`, `reason` |
|
|
356
|
+
| `strategy:error` | Hook or action failed | `strategyId`, `error`, `phase` |
|
|
357
|
+
| `strategy:approve` | Intents awaiting approval | `strategyId`, `intents[]` |
|
|
358
|
+
|
|
359
|
+
### Example: strategy:tick
|
|
360
|
+
|
|
361
|
+
```json
|
|
362
|
+
{
|
|
363
|
+
"type": "strategy:tick",
|
|
364
|
+
"timestamp": 1707052800000,
|
|
365
|
+
"source": "express",
|
|
366
|
+
"data": {
|
|
367
|
+
"strategyId": "dca-eth",
|
|
368
|
+
"intents": 2,
|
|
369
|
+
"duration": 145
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### Example: strategy:approve
|
|
375
|
+
|
|
376
|
+
Sent when a strategy produces intents that require human approval before execution.
|
|
377
|
+
|
|
378
|
+
```json
|
|
379
|
+
{
|
|
380
|
+
"type": "strategy:approve",
|
|
381
|
+
"timestamp": 1707052800000,
|
|
382
|
+
"source": "express",
|
|
383
|
+
"data": {
|
|
384
|
+
"strategyId": "dca-eth",
|
|
385
|
+
"intents": [
|
|
386
|
+
{ "id": "approval-123", "action": "swap", "params": { "token": "0x...", "amount": "0.05" } }
|
|
387
|
+
]
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### Example: strategy:error
|
|
393
|
+
|
|
394
|
+
```json
|
|
395
|
+
{
|
|
396
|
+
"type": "strategy:error",
|
|
397
|
+
"timestamp": 1707052800000,
|
|
398
|
+
"source": "express",
|
|
399
|
+
"data": {
|
|
400
|
+
"strategyId": "dca-eth",
|
|
401
|
+
"error": "Hook 'beforeTick' threw: network timeout",
|
|
402
|
+
"phase": "hook"
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## REST API
|
|
410
|
+
|
|
411
|
+
Alternative to WebSocket for simple CRUD operations.
|
|
412
|
+
|
|
413
|
+
### Workspaces
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
# List all workspaces
|
|
417
|
+
GET /api/workspace
|
|
418
|
+
|
|
419
|
+
# Create workspace
|
|
420
|
+
POST /api/workspace
|
|
421
|
+
{ "name": "TRADING", "icon": "TrendingUp" }
|
|
422
|
+
|
|
423
|
+
# Get workspace with apps
|
|
424
|
+
GET /api/workspace/:id
|
|
425
|
+
|
|
426
|
+
# Update workspace
|
|
427
|
+
PATCH /api/workspace/:id
|
|
428
|
+
{ "name": "NEW NAME" }
|
|
429
|
+
|
|
430
|
+
# Delete workspace
|
|
431
|
+
DELETE /api/workspace/:id
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### Apps
|
|
435
|
+
|
|
436
|
+
```bash
|
|
437
|
+
# Add app to workspace
|
|
438
|
+
POST /api/workspace/:id/apps
|
|
439
|
+
{
|
|
440
|
+
"appType": "iframe",
|
|
441
|
+
"config": { "url": "https://example.com" },
|
|
442
|
+
"x": 100, "y": 100
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
# Update app
|
|
446
|
+
PATCH /api/workspace/:id/apps/:wid
|
|
447
|
+
{ "x": 200, "y": 150, "width": 500 }
|
|
448
|
+
|
|
449
|
+
# Remove app
|
|
450
|
+
DELETE /api/workspace/:id/apps/:wid
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
### Export/Import
|
|
454
|
+
|
|
455
|
+
```bash
|
|
456
|
+
# Export workspace as JSON
|
|
457
|
+
GET /api/workspace/:id/export
|
|
458
|
+
|
|
459
|
+
# Import workspace from JSON
|
|
460
|
+
POST /api/workspace/import
|
|
461
|
+
{
|
|
462
|
+
"workspace": { "name": "Imported", "icon": "Download" },
|
|
463
|
+
"apps": [
|
|
464
|
+
{ "appType": "logs", "x": 20, "y": 20 }
|
|
465
|
+
]
|
|
466
|
+
}
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
---
|
|
470
|
+
|
|
471
|
+
## Persistence
|
|
472
|
+
|
|
473
|
+
- All changes auto-save to SQLite database (500ms debounce)
|
|
474
|
+
- Workspaces persist across server restarts
|
|
475
|
+
- Default "HOME" workspace created automatically
|
|
476
|
+
|
|
477
|
+
---
|
|
478
|
+
|
|
479
|
+
## Example: Full Agent Session
|
|
480
|
+
|
|
481
|
+
```javascript
|
|
482
|
+
// Connect with authentication token
|
|
483
|
+
const token = 'your-agent-token'; // Obtained from /auth endpoint
|
|
484
|
+
const ws = new WebSocket(`ws://localhost:4748?token=${encodeURIComponent(token)}`);
|
|
485
|
+
|
|
486
|
+
ws.onopen = async () => {
|
|
487
|
+
// 1. Get current state (no auth required for queries)
|
|
488
|
+
const requestId = 'req-' + Date.now();
|
|
489
|
+
ws.send(JSON.stringify({
|
|
490
|
+
type: 'workspace:state:request',
|
|
491
|
+
timestamp: Date.now(),
|
|
492
|
+
source: 'agent',
|
|
493
|
+
data: { requestId }
|
|
494
|
+
}));
|
|
495
|
+
};
|
|
496
|
+
|
|
497
|
+
ws.onmessage = (event) => {
|
|
498
|
+
const msg = JSON.parse(event.data);
|
|
499
|
+
|
|
500
|
+
if (msg.type === 'workspace:state:response') {
|
|
501
|
+
const workspaceId = msg.data.activeWorkspaceId;
|
|
502
|
+
|
|
503
|
+
// 2. Add a price chart iframe
|
|
504
|
+
ws.send(JSON.stringify({
|
|
505
|
+
type: 'app:added',
|
|
506
|
+
timestamp: Date.now(),
|
|
507
|
+
source: 'agent',
|
|
508
|
+
data: {
|
|
509
|
+
workspaceId,
|
|
510
|
+
appType: 'iframe',
|
|
511
|
+
config: { url: 'https://www.tradingview.com/chart/', title: 'TradingView' },
|
|
512
|
+
x: 400, y: 20, width: 800, height: 500
|
|
513
|
+
}
|
|
514
|
+
}));
|
|
515
|
+
|
|
516
|
+
// 3. Add an installed third-party app
|
|
517
|
+
ws.send(JSON.stringify({
|
|
518
|
+
type: 'app:added',
|
|
519
|
+
timestamp: Date.now(),
|
|
520
|
+
source: 'agent',
|
|
521
|
+
data: {
|
|
522
|
+
workspaceId,
|
|
523
|
+
appType: 'installed:example-kanban',
|
|
524
|
+
config: { appPath: 'example-kanban', appName: 'Kanban Board' },
|
|
525
|
+
x: 20, y: 20, width: 640, height: 560
|
|
526
|
+
}
|
|
527
|
+
}));
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
---
|
|
533
|
+
|
|
534
|
+
## Theme System
|
|
535
|
+
|
|
536
|
+
The dashboard supports light/dark mode and accent color customization via WebSocket events.
|
|
537
|
+
|
|
538
|
+
### Query Current Theme
|
|
539
|
+
|
|
540
|
+
```javascript
|
|
541
|
+
ws.send(JSON.stringify({
|
|
542
|
+
type: 'theme:request',
|
|
543
|
+
timestamp: Date.now(),
|
|
544
|
+
source: 'agent',
|
|
545
|
+
data: { requestId: 'req-123' }
|
|
546
|
+
}));
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
Response:
|
|
550
|
+
|
|
551
|
+
```javascript
|
|
552
|
+
{
|
|
553
|
+
type: 'theme:response',
|
|
554
|
+
data: {
|
|
555
|
+
requestId: 'req-123',
|
|
556
|
+
activeThemeId: 'light',
|
|
557
|
+
accentColor: '#ccff00',
|
|
558
|
+
mode: 'light'
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
### Change Theme Mode (Light/Dark)
|
|
564
|
+
|
|
565
|
+
> **Authentication Required**: Theme changes require `workspace:modify` permission or admin access.
|
|
566
|
+
|
|
567
|
+
```javascript
|
|
568
|
+
ws.send(JSON.stringify({
|
|
569
|
+
type: 'theme:mode:changed',
|
|
570
|
+
timestamp: Date.now(),
|
|
571
|
+
source: 'agent',
|
|
572
|
+
data: { mode: 'dark' } // 'light' or 'dark'
|
|
573
|
+
}));
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
### Change Accent Color
|
|
577
|
+
|
|
578
|
+
```javascript
|
|
579
|
+
ws.send(JSON.stringify({
|
|
580
|
+
type: 'theme:accent:changed',
|
|
581
|
+
timestamp: Date.now(),
|
|
582
|
+
source: 'agent',
|
|
583
|
+
data: { accent: '#ff4d00' } // Any hex color
|
|
584
|
+
}));
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
### Theme-Aware Apps
|
|
588
|
+
|
|
589
|
+
When creating installed apps, use CSS variables for automatic theme support. The host injects theme CSS variables into every app iframe, so your app automatically adapts to light/dark mode and accent color changes.
|
|
590
|
+
|
|
591
|
+
```html
|
|
592
|
+
<!-- In your installed app's index.html -->
|
|
593
|
+
<style>
|
|
594
|
+
body {
|
|
595
|
+
background: var(--color-surface, #fff);
|
|
596
|
+
color: var(--color-text, #0a0a0a);
|
|
597
|
+
border: 1px solid var(--color-border, #d4d4d8);
|
|
598
|
+
padding: 16px;
|
|
599
|
+
font-family: ui-monospace, monospace;
|
|
600
|
+
}
|
|
601
|
+
.label {
|
|
602
|
+
color: var(--color-text-muted, #6b7280);
|
|
603
|
+
font-size: 10px;
|
|
604
|
+
}
|
|
605
|
+
.highlight {
|
|
606
|
+
color: var(--color-accent, #ccff00);
|
|
607
|
+
font-weight: bold;
|
|
608
|
+
}
|
|
609
|
+
</style>
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
> For the full list of injected CSS variables and theming details for installed apps, see [DEVELOPING-APPS.md](./DEVELOPING-APPS.md#theming).
|
|
613
|
+
|
|
614
|
+
### Available CSS Variables
|
|
615
|
+
|
|
616
|
+
**Core Colors:**
|
|
617
|
+
- `--color-accent` - Primary accent color (default: #ccff00)
|
|
618
|
+
- `--color-background` - Page background
|
|
619
|
+
- `--color-background-alt` - Alternate background (e.g., sidebar)
|
|
620
|
+
- `--color-surface` - Card/app background
|
|
621
|
+
- `--color-surface-alt` - Alternate surface
|
|
622
|
+
|
|
623
|
+
**Text:**
|
|
624
|
+
- `--color-text` - Primary text
|
|
625
|
+
- `--color-text-muted` - Secondary text
|
|
626
|
+
- `--color-text-faint` - Tertiary/disabled text
|
|
627
|
+
|
|
628
|
+
**Borders:**
|
|
629
|
+
- `--color-border` - Default border
|
|
630
|
+
- `--color-border-muted` - Subtle border
|
|
631
|
+
- `--color-border-focus` - Focus ring
|
|
632
|
+
|
|
633
|
+
**Semantic:**
|
|
634
|
+
- `--color-warning` - Warning state (#ff4d00)
|
|
635
|
+
- `--color-danger` - Error/danger state (#ef4444)
|
|
636
|
+
- `--color-success` - Success state (#00c853)
|
|
637
|
+
- `--color-info` - Info state (#0047ff)
|
|
638
|
+
|
|
639
|
+
**App Palette:**
|
|
640
|
+
- `--app-{color}-band` - App header band color
|
|
641
|
+
- `--app-{color}-accent` - App border accent
|
|
642
|
+
- `--app-{color}-bg` - App background tint
|
|
643
|
+
- `--app-{color}-text` - App text color
|
|
644
|
+
|
|
645
|
+
Where `{color}` is: `blue`, `orange`, `lime`, `purple`, `gray`, `teal`, `rose`
|
|
646
|
+
|
|
647
|
+
### Theme Events Reference
|
|
648
|
+
|
|
649
|
+
| Event | Direction | Description |
|
|
650
|
+
|-------|-----------|-------------|
|
|
651
|
+
| `theme:request` | Agent → Server | Query current theme state |
|
|
652
|
+
| `theme:response` | Server → Agent | Response with theme data |
|
|
653
|
+
| `theme:mode:changed` | Agent/UI → Server → Broadcast | Toggle light/dark mode |
|
|
654
|
+
| `theme:accent:changed` | Agent/UI → Server → Broadcast | Change accent color |
|
|
655
|
+
| `workspace:theme:updated` | Agent/UI → Server → Broadcast | Per-workspace overrides |
|
|
656
|
+
|
|
657
|
+
### CLI Theme Control
|
|
658
|
+
|
|
659
|
+
Quick theme toggle from command line (requires authentication):
|
|
660
|
+
|
|
661
|
+
```bash
|
|
662
|
+
# Set your token
|
|
663
|
+
TOKEN="your-agent-token"
|
|
664
|
+
|
|
665
|
+
# Switch to dark mode
|
|
666
|
+
node -e "const ws = new (require('ws'))('ws://localhost:4748?token=$TOKEN'); ws.on('open', () => { ws.send(JSON.stringify({type:'theme:mode:changed',timestamp:Date.now(),source:'agent',data:{mode:'dark'}})); setTimeout(() => process.exit(), 500); });"
|
|
667
|
+
|
|
668
|
+
# Switch to light mode
|
|
669
|
+
node -e "const ws = new (require('ws'))('ws://localhost:4748?token=$TOKEN'); ws.on('open', () => { ws.send(JSON.stringify({type:'theme:mode:changed',timestamp:Date.now(),source:'agent',data:{mode:'light'}})); setTimeout(() => process.exit(), 500); });"
|
|
670
|
+
|
|
671
|
+
# Change accent color
|
|
672
|
+
node -e "const ws = new (require('ws'))('ws://localhost:4748?token=$TOKEN'); ws.on('open', () => { ws.send(JSON.stringify({type:'theme:accent:changed',timestamp:Date.now(),source:'agent',data:{accent:'#ff4d00'}})); setTimeout(() => process.exit(), 500); });"
|
|
673
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Agent Auth Model
|
|
2
|
+
|
|
3
|
+
This page is intentionally minimal to avoid duplicating `AUTH.md`.
|
|
4
|
+
|
|
5
|
+
Use these entrypoints:
|
|
6
|
+
|
|
7
|
+
- First secret access path: [GETTING_SECRETS](./external/HOW_TO_AURAMAXX/GETTING_SECRETS.md)
|
|
8
|
+
- Full auth/token model: [AUTH.md](./AUTH.md)
|
|
9
|
+
|
|
10
|
+
Quick summary:
|
|
11
|
+
|
|
12
|
+
1. Agent requests access via `POST /auth` with `pubkey`.
|
|
13
|
+
2. Human approves.
|
|
14
|
+
3. Agent claims token via `GET /auth/:requestId?secret=...`.
|