auramaxx 0.0.11 → 0.0.13
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/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +240 -223
- package/.next/app-path-routes-manifest.json +8 -7
- package/.next/build-manifest.json +14 -14
- package/.next/prerender-manifest.json +53 -29
- package/.next/react-loadable-manifest.json +41 -41
- package/.next/routes-manifest.json +6 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +12 -12
- package/.next/server/app/api/[...doc]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent-requests/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/apps/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/apps/manifests/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/apps/static/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/docs/plain/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/events/route.js +1 -19
- package/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/import-from-openclaw/[channel]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/import-from-openclaw/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/import-from-openclaw/validate/[channel]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/restart/route.js +1 -1
- package/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update/route.js +63 -1
- package/.next/server/app/api/update/route.js.nft.json +1 -1
- package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/version/route.js +1 -1
- package/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/workspace/[id]/apps/[wid]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/workspace/[id]/apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/workspace/[id]/export/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/workspace/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/workspace/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/workspace/import/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/workspace/route_client-reference-manifest.js +1 -1
- package/.next/server/app/app-legacy-do-not-use/page.js +1 -1
- package/.next/server/app/app-legacy-do-not-use/page.js.nft.json +1 -1
- package/.next/server/app/app-legacy-do-not-use/page_client-reference-manifest.js +1 -1
- package/.next/server/app/app-legacy-do-not-use.html +1 -1
- package/.next/server/app/app-legacy-do-not-use.rsc +14 -14
- package/.next/server/app/approve/[actionId]/page.js +1 -1
- package/.next/server/app/approve/[actionId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs/[...doc]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/health/page_client-reference-manifest.js +1 -1
- package/.next/server/app/health.html +1 -1
- package/.next/server/app/health.rsc +13 -13
- package/.next/server/app/hello/page_client-reference-manifest.js +1 -1
- package/.next/server/app/hello.html +1 -1
- package/.next/server/app/hello.rsc +14 -14
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +18 -21
- package/.next/server/app/page.js +3 -3
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/.next/server/app/privacy.html +1 -1
- package/.next/server/app/privacy.rsc +13 -13
- package/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/.next/server/app/terms.html +1 -1
- package/.next/server/app/terms.rsc +13 -13
- package/.next/server/app/yo/page.js +2 -0
- package/.next/server/app/yo/page.js.nft.json +1 -0
- package/.next/server/app/yo/page_client-reference-manifest.js +1 -0
- package/.next/server/app/yo.html +1 -0
- package/.next/server/app/yo.meta +7 -0
- package/.next/server/app/yo.rsc +23 -0
- package/.next/server/app-paths-manifest.json +8 -7
- package/.next/server/chunks/2145.js +1 -1
- package/.next/server/chunks/2460.js +1 -1
- package/.next/server/chunks/5246.js +1 -1
- package/.next/server/chunks/5678.js +1 -1
- package/.next/server/chunks/5784.js +1 -1
- package/.next/server/chunks/6086.js +2 -20
- package/.next/server/chunks/{5553.js → 6415.js} +2 -2
- package/.next/server/chunks/7935.js +2 -2
- package/.next/server/functions-config-manifest.json +1 -1
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/server/webpack-runtime.js +1 -1
- package/.next/static/WshFGr6RxGYP6AbWuT9OG/_buildManifest.js +1 -0
- package/.next/static/chunks/1168.aaac1edbb597fe5a.js +1 -0
- package/.next/static/chunks/1255-7999eac54f80a49f.js +1 -0
- package/.next/static/chunks/142-fa9752f53a551f63.js +1 -0
- package/.next/static/chunks/2505.d54ccadc42f4e3d1.js +1 -0
- package/.next/static/chunks/2619-04bc32f026a0d946.js +1 -0
- package/.next/static/chunks/2927.7e00cc878d9a3f52.js +1 -0
- package/.next/static/chunks/3573-1b41d7b8a000d015.js +1 -0
- package/.next/static/chunks/3609.ded5a5306e18af9c.js +1 -0
- package/.next/static/chunks/3667-1db7bd03948e60df.js +1 -0
- package/.next/static/chunks/3826.a73d4a88d8c09030.js +1 -0
- package/.next/static/chunks/{3a91511d-648a2ba3dad7df0c.js → 3a91511d-ba215c0b5dc21ba9.js} +1 -1
- package/.next/static/chunks/4256.48407d9abad5ea33.js +1 -0
- package/.next/static/chunks/4685-7f53bbfc4a9845eb.js +1 -0
- package/.next/static/chunks/4901-ba6a32818662e70a.js +1 -0
- package/.next/static/chunks/4919-7e7cdd5efc9f2110.js +1 -0
- package/.next/static/chunks/4bd1b696-100b9d70ed4e49c1.js +1 -0
- package/.next/static/chunks/5336-233ec7ab3807267c.js +1 -0
- package/.next/static/chunks/5442-b5bb869e832e8967.js +1 -0
- package/.next/static/chunks/6233-97a810aa272af547.js +1 -0
- package/.next/static/chunks/626.a5109d16f9eca1f6.js +1 -0
- package/.next/static/chunks/6872-faea0f088ab2d450.js +1 -0
- package/.next/static/chunks/7338-3ce17a93614f1d77.js +59 -0
- package/.next/static/chunks/7394-4bdb1feefad1a74a.js +1 -0
- package/.next/static/chunks/7616-1129bcb3eee8d315.js +1 -0
- package/.next/static/chunks/786-26deffb41572cbb3.js +1 -0
- package/.next/static/chunks/8273-8e92d34180669ca9.js +1 -0
- package/.next/static/chunks/8357.5dee1e0c4e5bb091.js +1 -0
- package/.next/static/chunks/9062-2bc2d089f9c9c6ba.js +1 -0
- package/.next/static/chunks/9380.f198afbf0c6b5369.js +1 -0
- package/.next/static/chunks/app/_not-found/page-5a8c6a29f762fa58.js +1 -0
- package/.next/static/chunks/app/api/[...doc]/page-f0852f35f0fd1d44.js +1 -0
- package/.next/static/chunks/app/api/agent-requests/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/apps/install/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/apps/manifests/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/apps/static/[...path]/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/docs/plain/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/events/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/import-from-openclaw/[channel]/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/import-from-openclaw/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/import-from-openclaw/validate/[channel]/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/page-cc59bebcc0d2c01d.js +1 -0
- package/.next/static/chunks/app/api/restart/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/update/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/version/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/workspace/[id]/apps/[wid]/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/workspace/[id]/apps/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/workspace/[id]/export/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/workspace/[id]/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/workspace/config/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/workspace/import/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/api/workspace/route-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/app-legacy-do-not-use/page-e5dc864e92d90ca7.js +1 -0
- package/.next/static/chunks/app/approve/[actionId]/page-2acca1f490424f21.js +1 -0
- package/.next/static/chunks/app/docs/[...doc]/page-8e2a2d036caab242.js +1 -0
- package/.next/static/chunks/app/docs/page-acf872a03ff79893.js +1 -0
- package/.next/static/chunks/app/error-66f983b7769dabfa.js +1 -0
- package/.next/static/chunks/app/health/page-c9185854ed9c86d0.js +1 -0
- package/.next/static/chunks/app/hello/page-74c9f4deaa4b03dd.js +1 -0
- package/.next/static/chunks/app/layout-af8d9969c7aeb758.js +1 -0
- package/.next/static/chunks/app/page-16dfcd1c7cc88bcc.js +1 -0
- package/.next/static/chunks/app/privacy/page-8e2d17079355c2cc.js +1 -0
- package/.next/static/chunks/app/share/[token]/page-5dd9b0418eee411f.js +1 -0
- package/.next/static/chunks/app/terms/page-8e2d17079355c2cc.js +1 -0
- package/.next/static/chunks/app/yo/layout-cf84f975aad4c719.js +1 -0
- package/.next/static/chunks/app/yo/page-719dc5f213fdfb30.js +1 -0
- package/.next/static/chunks/framework-a32a2a465584c0bc.js +1 -0
- package/.next/static/chunks/main-0f0f9142f74e7215.js +1 -0
- package/.next/static/chunks/main-app-24f0c92ba10af457.js +1 -0
- package/.next/static/chunks/pages/_app-4b3fb5e477a0267f.js +1 -0
- package/.next/static/chunks/pages/_error-c970d8b55ace1b48.js +1 -0
- package/.next/static/chunks/{webpack-768de8b7d6a7a27a.js → webpack-79ad58260e9b10b4.js} +1 -1
- package/.next/static/css/83cd401584ab787f.css +3 -0
- package/.next/trace +28 -28
- package/.next/types/app/yo/layout.ts +84 -0
- package/.next/types/app/yo/page.ts +84 -0
- package/.next/types/routes.d.ts +4 -2
- package/.next/types/validator.ts +18 -0
- package/bin/auramaxx.js +11 -26
- package/docs/ARCHITECTURE.md +1 -1
- package/docs/AUTH.md +6 -3
- package/docs/CLI.md +2 -0
- package/docs/MCP.md +2 -0
- package/docs/TROUBLESHOOTING.md +24 -0
- package/docs/credentials.md +2 -0
- package/package.json +2 -1
- package/prisma/migrations/20260227214000_update_agent_action_ttl_defaults/migration.sql +19 -0
- package/public/0a167e5e-4f52-4715-ae23-bf63d259a6b1.png +0 -0
- package/public/141ec92c-6780-4b23-838f-9a7bf1e91bb8.png +0 -0
- package/public/3afc4935-92cb-42af-9624-0b1341c12a5e.png +0 -0
- package/public/43947df5-dbcf-4e49-ab8b-41b9162c0410.png +0 -0
- package/public/5aeae9ce-0d38-49ea-8fd1-167892a04a85.png +0 -0
- package/public/660e4ea3-a3a6-4be4-a8ca-2cb74c51dfb5.png +0 -0
- package/public/733f02d7-6b58-4ba6-a5c8-d062cd205e1d.png +0 -0
- package/public/a32d65cb-95b0-4977-be6b-cf69f515afbe.png +0 -0
- package/public/agent1.png +0 -0
- package/public/agent10.png +0 -0
- package/public/agent2.png +0 -0
- package/public/agent3.png +0 -0
- package/public/agent4.png +0 -0
- package/public/agent5.png +0 -0
- package/public/agent6.png +0 -0
- package/public/agent7.png +0 -0
- package/public/agent8.png +0 -0
- package/public/agent9.png +0 -0
- package/public/c4938305-b811-4ccc-91db-94d309734827.png +0 -0
- package/public/f2ca6825-a4f3-4107-815c-51ee740dfc09.png +0 -0
- package/public/llm.txt +2 -0
- package/public/llms.txt +39 -0
- package/public/ss-dark1.png +0 -0
- package/public/ss-dark1.webp +0 -0
- package/public/ss-dark2.png +0 -0
- package/public/ss-dark2.webp +0 -0
- package/public/ss-dark3.png +0 -0
- package/public/ss-dark3.webp +0 -0
- package/public/ss-light1.png +0 -0
- package/public/ss-light1.webp +0 -0
- package/public/ss-light2.png +0 -0
- package/public/ss-light2.webp +0 -0
- package/public/ss-light3.png +0 -0
- package/public/ss-light3.webp +0 -0
- package/shared/agent-profile-schema.ts +81 -0
- package/shared/credential-field-schema.ts +12 -0
- package/skills/auramaxx/SKILL.md +71 -691
- package/src/app/UnlockPageClient.tsx +1939 -0
- package/src/app/api/page.tsx +8 -9
- package/src/app/api/restart/route.ts +2 -18
- package/src/app/api/update/route.ts +104 -51
- package/src/app/approve/[actionId]/page.tsx +4 -1
- package/src/app/docs/DocsPageContent.tsx +3 -3
- package/src/app/globals.css +94 -0
- package/src/app/layout.tsx +1 -0
- package/src/app/page.tsx +25 -1935
- package/src/app/yo/layout.tsx +29 -0
- package/src/app/yo/page.tsx +528 -0
- package/src/components/HumanActionBar.tsx +34 -8
- package/src/components/agent/AgentSidebar.tsx +3 -1
- package/src/components/agent/CredentialAgent.tsx +5 -1
- package/src/components/agent/CredentialDetail.tsx +32 -1
- package/src/components/agent/CredentialForm.tsx +94 -7
- package/src/components/agent/CredentialRow.tsx +8 -1
- package/src/components/agent/credentialFormName.ts +22 -1
- package/src/components/agent/types.ts +2 -2
- package/src/components/design-system/Modal.tsx +14 -1
- package/src/hooks/useUpdateChecker.ts +17 -1
- package/src/lib/pino.ts +77 -8
- package/src/server/cli/commands/actions.ts +1 -1
- package/src/server/cli/commands/agent.ts +110 -65
- package/src/server/cli/commands/approve.ts +1 -1
- package/src/server/cli/commands/auth.ts +81 -20
- package/src/server/cli/commands/start.ts +42 -3
- package/src/server/cli/commands/token.ts +2 -2
- package/src/server/cli/lib/escalation.ts +109 -24
- package/src/server/cli/lib/process.ts +54 -1
- package/src/server/cli/socket.ts +1 -1
- package/src/server/index.ts +2 -0
- package/src/server/lib/agent-profile-records.ts +72 -0
- package/src/server/lib/credential-transport.ts +27 -11
- package/src/server/lib/defaults.ts +3 -3
- package/src/server/lib/escalation-responder.ts +1 -1
- package/src/server/lib/resolve-action.ts +2 -2
- package/src/server/lib/update-check.ts +1 -1
- package/src/server/mcp/server.ts +6 -1
- package/src/server/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/src/server/routes/actions.ts +2 -2
- package/src/server/routes/agent-profiles.ts +82 -0
- package/src/server/routes/auth.ts +39 -4
- package/src/server/routes/credentials.ts +18 -0
- package/src/server/tests/cli/agent-auth.test.ts +20 -39
- package/src/server/tests/cli/agent.test.ts +18 -0
- package/src/server/tests/cli/auth-action-flag.test.ts +3 -2
- package/src/server/tests/cli/bin-entrypoint.test.ts +35 -11
- package/src/server/tests/cli/escalation.test.ts +7 -3
- package/src/server/tests/cli/process.test.ts +3 -3
- package/src/server/tests/cli/socket.test.ts +2 -2
- package/src/server/tests/cli/start-run.test.ts +24 -1
- package/src/server/tests/endpoints/actions.test.ts +2 -2
- package/src/server/tests/endpoints/agent-profiles.test.ts +117 -0
- package/src/server/tests/endpoints/auth.test.ts +34 -0
- package/src/server/tests/lib/credential-transport.test.ts +68 -2
- package/src/server/tests/lib/defaults.test.ts +2 -2
- package/src/server/tests/lib/escalation-responder.test.ts +2 -2
- package/src/server/tests/lib/update-check.test.ts +1 -1
- package/src/server/tests/setup.ts +7 -0
- package/src/server/tsconfig.tsbuildinfo +1 -1
- package/src/server/types.ts +1 -1
- package/.next/static/AcaCjQ4akovHBUnVGPpfN/_buildManifest.js +0 -1
- package/.next/static/chunks/1168.63dbb444a33b1867.js +0 -1
- package/.next/static/chunks/1255-e8718b02724690dd.js +0 -1
- package/.next/static/chunks/142-aeaf7ffa9c53516d.js +0 -1
- package/.next/static/chunks/2505.22aaa333fd65908f.js +0 -1
- package/.next/static/chunks/2619-3c9e02e22d10480a.js +0 -1
- package/.next/static/chunks/2927.e7e9e2a1b8d2dc61.js +0 -1
- package/.next/static/chunks/3573-27e17f4ff2dd86ed.js +0 -1
- package/.next/static/chunks/3609.6f8e0ecd6de9566c.js +0 -1
- package/.next/static/chunks/3667-d6770121629db38b.js +0 -1
- package/.next/static/chunks/3826.7dfe96467cd74e45.js +0 -1
- package/.next/static/chunks/4256.50cb375c979ffd5a.js +0 -1
- package/.next/static/chunks/4685-3f8d92f574366fec.js +0 -1
- package/.next/static/chunks/4901-54c1ac380b7b43bb.js +0 -1
- package/.next/static/chunks/4919-fe6f1553abfc9420.js +0 -1
- package/.next/static/chunks/4bd1b696-f785427dddbba9fb.js +0 -1
- package/.next/static/chunks/5336-bd251f91235f7c11.js +0 -1
- package/.next/static/chunks/5442-be197c885bf12079.js +0 -1
- package/.next/static/chunks/5553-c8b86fe3513fce04.js +0 -59
- package/.next/static/chunks/6233-44e6fe57a552a816.js +0 -1
- package/.next/static/chunks/626.2583673a0386a81b.js +0 -1
- package/.next/static/chunks/6872-6442f2f5cce36ce5.js +0 -1
- package/.next/static/chunks/7411-3ca797c21b722ccd.js +0 -1
- package/.next/static/chunks/7616-b8bd37ce1f735d6f.js +0 -1
- package/.next/static/chunks/786-9ed39f96091b2be4.js +0 -1
- package/.next/static/chunks/8273-922091226ba84a94.js +0 -1
- package/.next/static/chunks/8357.6159472717ff7d11.js +0 -1
- package/.next/static/chunks/9062-3eb1607c96486f88.js +0 -1
- package/.next/static/chunks/9380.93f361baab2eefdf.js +0 -1
- package/.next/static/chunks/app/_not-found/page-c3b87025baf0a9c2.js +0 -1
- package/.next/static/chunks/app/api/[...doc]/page-790c4b33ba1fde4a.js +0 -1
- package/.next/static/chunks/app/api/agent-requests/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/apps/install/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/apps/manifests/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/apps/static/[...path]/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/docs/plain/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/events/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/import-from-openclaw/[channel]/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/import-from-openclaw/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/import-from-openclaw/validate/[channel]/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/page-b53f9aa17a4c5201.js +0 -1
- package/.next/static/chunks/app/api/restart/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/update/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/version/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/workspace/[id]/apps/[wid]/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/workspace/[id]/apps/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/workspace/[id]/export/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/workspace/[id]/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/workspace/config/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/workspace/import/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/api/workspace/route-e83b12cbab2e8707.js +0 -1
- package/.next/static/chunks/app/app-legacy-do-not-use/page-0052191daef60036.js +0 -1
- package/.next/static/chunks/app/approve/[actionId]/page-45cd3b8fa062d5e5.js +0 -1
- package/.next/static/chunks/app/docs/[...doc]/page-632ac406200b66fe.js +0 -1
- package/.next/static/chunks/app/docs/page-b7556394709b43df.js +0 -1
- package/.next/static/chunks/app/error-3d6057da512253d8.js +0 -1
- package/.next/static/chunks/app/health/page-80c985cd72328b74.js +0 -1
- package/.next/static/chunks/app/hello/page-fd71babcd192729b.js +0 -1
- package/.next/static/chunks/app/layout-285c6ef3f16bae63.js +0 -1
- package/.next/static/chunks/app/page-85017185df14c37b.js +0 -1
- package/.next/static/chunks/app/privacy/page-faf36cd0dde6dfa3.js +0 -1
- package/.next/static/chunks/app/share/[token]/page-22d51d6c5a47bb75.js +0 -1
- package/.next/static/chunks/app/terms/page-faf36cd0dde6dfa3.js +0 -1
- package/.next/static/chunks/framework-e60c938074ff7136.js +0 -1
- package/.next/static/chunks/main-447abf206d7ebd2f.js +0 -1
- package/.next/static/chunks/main-app-f63b86bdbf5b7b88.js +0 -1
- package/.next/static/chunks/pages/_app-6c8c2371b16a04b8.js +0 -1
- package/.next/static/chunks/pages/_error-94812ad32cad7365.js +0 -1
- package/.next/static/css/eb25c6452113486f.css +0 -3
- /package/.next/static/{AcaCjQ4akovHBUnVGPpfN → WshFGr6RxGYP6AbWuT9OG}/_ssgManifest.js +0 -0
package/src/server/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"4.0.18","results":[[":tests/send.test.ts",{"duration":162.08154100000002,"failed":false}],[":tests/approve.test.ts",{"duration":257.27824999999996,"failed":false}],[":tests/unlock.test.ts",{"duration":213.61050000000003,"failed":false}],[":tests/setup.test.ts",{"duration":128.30779199999998,"failed":false}],[":tests/e2e.test.ts",{"duration":4431.4337080000005,"failed":false}],[":tests/wallet.test.ts",{"duration":1768.446334,"failed":false}],[":tests/auth.test.ts",{"duration":174.709292,"failed":false}],[":tests/fund.test.ts",{"duration":820.6141660000001,"failed":false}],[":tests/integration/agent-flow.test.ts",{"duration":6743.828291999999,"failed":false}],[":tests/auth/permissions.test.ts",{"duration":6816.817499999999,"failed":false}],[":tests/auth/middleware.test.ts",{"duration":8778.351167,"failed":false}],[":tests/lib/sessions.test.ts",{"duration":74.23900000000003,"failed":false}],[":tests/lib/auth.test.ts",{"duration":4034.0293340000003,"failed":false}],[":tests/endpoints/unlock.test.ts",{"duration":10165.0575,"failed":false}],[":tests/endpoints/wallet.test.ts",{"duration":5727.9845,"failed":false}],[":tests/endpoints/approve.test.ts",{"duration":497.64808300000004,"failed":false}],[":tests/endpoints/fund.test.ts",{"duration":2013.0641249999999,"failed":false}],[":tests/endpoints/send.test.ts",{"duration":2332.635541,"failed":false}],[":tests/endpoints/auth.test.ts",{"duration":1504.765917,"failed":false}],[":tests/endpoints/setup.test.ts",{"duration":4813.639125,"failed":false}],[":tests/lib/uniswap.test.ts",{"duration":16.079540999999978,"failed":false}],[":tests/auth/apikeys.test.ts",{"duration":10818.843125000001,"failed":false}],[":tests/endpoints/wallet-data.test.ts",{"duration":2853.171833,"failed":false}],[":tests/endpoints/swap.test.ts",{"duration":1838.3475829999998,"failed":false}],[":tests/endpoints/token-clearing.test.ts",{"duration":1616.968667,"failed":false}],[":tests/endpoints/rate-limit.test.ts",{"duration":2188.740541,"failed":false}],[":tests/endpoints/solana-swap.test.ts",{"duration":1157.5748750000002,"failed":false}],[":tests/endpoints/solana-wallet.test.ts",{"duration":1507.865292,"failed":false}],[":tests/endpoints/solana-send.test.ts",{"duration":1173.0465,"failed":false}],[":tests/lib/sessions-currency.test.ts",{"duration":73.58470800000009,"failed":false}],[":tests/endpoints/solana-fund.test.ts",{"duration":1653.8131250000001,"failed":false}],[":tests/lib/solana-wallet.test.ts",{"duration":174.42733299999998,"failed":false}],[":tests/lib/address.test.ts",{"duration":5.755332999999993,"failed":false}],[":tests/lib/strategy/sources.test.ts",{"duration":23.964208,"failed":false}],[":tests/lib/strategy/loader.test.ts",{"duration":17.89037499999999,"failed":false}],[":tests/lib/strategy/executor.test.ts",{"duration":11.565082999999987,"failed":false}],[":tests/lib/strategy/state.test.ts",{"duration":7.466542000000004,"failed":false}],[":tests/lib/strategy/hooks.test.ts",{"duration":15.050708000000043,"failed":false}],[":tests/endpoints/widgets.test.ts",{"duration":2127.785625,"failed":false}],[":tests/lib/strategy/message.test.ts",{"duration":113.36770899999999,"failed":false}],[":tests/endpoints/actions.test.ts",{"duration":2437.28775,"failed":false}],[":tests/endpoints/vault.test.ts",{"duration":7419.710874999999,"failed":false}],[":tests/integration/adapter-resolve.test.ts",{"duration":3289.926291,"failed":false}],[":tests/lib/adapters.test.ts",{"duration":30.548833000000002,"failed":false}],[":tests/lib/strategy/tick.test.ts",{"duration":9.147333000000003,"failed":false}],[":tests/lib/relay.test.ts",{"duration":5.544250000000005,"failed":false}],[":tests/lib/ai.test.ts",{"duration":6.900082999999995,"failed":false}],[":tests/endpoints/launch.test.ts",{"duration":47187.855833,"failed":false}],[":tests/widget-installer.test.ts",{"duration":154.704459,"failed":false}],[":tests/mcp/tools.test.ts",{"duration":21.356207999999995,"failed":false}],[":tests/ai-integration/scenarios.test.ts",{"duration":7.4487499999999045,"failed":true}],[":tests/mcp/server.test.ts",{"duration":1557.119667,"failed":false}],[":tests/ai-integration/live.test.ts",{"duration":77572.38508299999,"failed":false}],[":tests/auth/apikeys-validate.test.ts",{"duration":9934.618792,"failed":false}],[":tests/lib/adapters-test.test.ts",{"duration":25042.953416,"failed":false}],[":tests/setup-integration/wizard-flow.test.ts",{"duration":124.21662500000002,"failed":false}],[":tests/setup-integration/adapter-test.test.ts",{"duration":166.0367080000001,"failed":false}],[":tests/setup-integration/edge-cases.test.ts",{"duration":156.02324999999996,"failed":false}],[":tests/setup-integration/apikey-validation.test.ts",{"duration":147.53583400000002,"failed":false}],[":tests/setup-integration/fresh-setup.test.ts",{"duration":107.81912499999999,"failed":false}],[":tests/lib/network.test.ts",{"duration":11.669834000000009,"failed":false}],[":tests/cli/process.test.ts",{"duration":59.628292,"failed":false}],[":tests/cli/init-steps.test.ts",{"duration":6.294458000000006,"failed":false}],[":tests/cli/init-flow.test.ts",{"duration":2318.500792,"failed":false}],[":tests/cli/http.test.ts",{"duration":1592.967,"failed":false}],[":tests/lib/verified-summary.test.ts",{"duration":8.96158299999999,"failed":false}],[":tests/lib/defaults.test.ts",{"duration":64.59245800000008,"failed":false}],[":tests/endpoints/defaults.test.ts",{"duration":5805.779791,"failed":false}],[":tests/lib/adapters-chat.test.ts",{"duration":26.97920800000003,"failed":false}],[":tests/setup-integration/terminal-flow.test.ts",{"duration":248.770042,"failed":false}],[":tests/endpoints/transactions.test.ts",{"duration":1278.940917,"failed":false}],[":tests/cron/scheduler.test.ts",{"duration":12.34683299999999,"failed":false}],[":tests/endpoints/portfolio.test.ts",{"duration":320.170167,"failed":false}],[":tests/cron/native-price.test.ts",{"duration":121.04162500000007,"failed":false}],[":tests/resolve.test.ts",{"duration":17.380083000000013,"failed":false}],[":tests/lib/prices.test.ts",{"duration":108.33045800000014,"failed":false}],[":tests/swap-quote.test.ts",{"duration":998.2507090000001,"failed":false}],[":tests/send-token.test.ts",{"duration":1121.088792,"failed":false}],[":tests/endpoints/price.test.ts",{"duration":44.39891699999998,"failed":false}],[":tests/lib/price.test.ts",{"duration":4.455292,"failed":false}],[":tests/endpoints/token-search.test.ts",{"duration":42.26745800000003,"failed":false}],[":tests/lib/token-search.test.ts",{"duration":66.396958,"failed":false}],[":tests/lib/token-safety.test.ts",{"duration":6.018041999999994,"failed":false}],[":tests/endpoints/token-safety.test.ts",{"duration":49.38241600000015,"failed":false}],[":tests/lib/batch.test.ts",{"duration":5.575999999999993,"failed":false}],[":tests/endpoints/batch.test.ts",{"duration":52.46504199999981,"failed":false}],[":tests/endpoints/token-balance.test.ts",{"duration":31.46470899999997,"failed":false}],[":tests/lib/events-decoder.test.ts",{"duration":6.840040999999985,"failed":false}],[":tests/lib/events-enricher.test.ts",{"duration":5.081083999999976,"failed":false}],[":tests/endpoints/address-transactions.test.ts",{"duration":1025.320584,"failed":false}],[":tests/endpoints/bookmarks.test.ts",{"duration":1507.767958,"failed":false}],[":tests/endpoints/addressbook.test.ts",{"duration":1083.4175410000003,"failed":false}],[":tests/lib/strategy/session-logger.test.ts",{"duration":1529.3755,"failed":false}],[":tests/cron/incoming-scan.test.ts",{"duration":433.4977500000001,"failed":false}],[":tests/lib/auto-unlock.test.ts",{"duration":1244.771083,"failed":false}],[":tests/lib/widget-tokens-tier.test.ts",{"duration":226.36699999999996,"failed":false}],[":tests/cron/strategy-runner.test.ts",{"duration":7.3716249999999945,"failed":false}],[":tests/endpoints/strategy-routes.test.ts",{"duration":11015.5285,"failed":false}],[":tests/endpoints/apps.test.ts",{"duration":20752.29475,"failed":false}],[":tests/lib/events-fetcher.test.ts",{"duration":6.794040999999993,"failed":false}],[":tests/app-installer.test.ts",{"duration":118.27170800000002,"failed":false}],[":tests/lib/app-tokens-tier.test.ts",{"duration":281.489416,"failed":false}],[":tests/setup-integration/onboarding-e2e.test.ts",{"duration":445.7834579999999,"failed":true}],[":tests/cron/orphan-cleanup.test.ts",{"duration":4.551625000000001,"failed":false}],[":tests/lib/strategy/repository.test.ts",{"duration":57.38041700000008,"failed":false}],[":tests/setup-integration/autonomous-agent.test.ts",{"duration":7.406667000000027,"failed":true}],[":tests/lib/websocket-auth.test.ts",{"duration":226.412541,"failed":false}],[":tests/lib/credentials.test.ts",{"duration":7266.676666,"failed":false}],[":tests/lib/credential-access.test.ts",{"duration":3.3359159999999974,"failed":false}],[":tests/lib/credential-scope.test.ts",{"duration":4.443833000000012,"failed":false}],[":tests/endpoints/credential-ops.test.ts",{"duration":2817.0384169999998,"failed":false}],[":tests/endpoints/credentials.test.ts",{"duration":27661.714458000002,"failed":false}],[":tests/lib/credential-transport.test.ts",{"duration":111.40725,"failed":false}],[":tests/lib/credential-vault.test.ts",{"duration":4433.612583,"failed":false}],[":tests/lib/resolve-action.test.ts",{"duration":4.637540999999999,"failed":false}],[":tests/credential-import.test.ts",{"duration":19.880499999999998,"failed":false}],[":tests/endpoints/passkey.test.ts",{"duration":13872.909083,"failed":false}],[":tests/lib/oauth2-refresh.test.ts",{"duration":4.010417000000018,"failed":false}],[":tests/lib/totp.test.ts",{"duration":6.8331249999999955,"failed":false}],[":tests/lib/passkey-credential.test.ts",{"duration":9.731167,"failed":false}],[":tests/cli/env.test.ts",{"duration":8.269082999999995,"failed":false}],[":tests/dotenv-parser.test.ts",{"duration":3.5531249999999943,"failed":false}],[":tests/cli/socket.test.ts",{"duration":166.403791,"failed":false}],[":tests/cli/vault.test.ts",{"duration":5.563457999999997,"failed":false}],[":tests/cli/credential-resolve.test.ts",{"duration":2.7393750000000097,"failed":false}],[":tests/cli/env-check-server-vault.test.ts",{"duration":239.821708,"failed":false}],[":tests/e2e-agent/validation.test.ts",{"duration":7.877207999999996,"failed":false}],[":tests/e2e-agent/artifacts.test.ts",{"duration":2.0207500000000067,"failed":false}],[":tests/e2e-agent/ci-lanes.test.ts",{"duration":1.774208999999999,"failed":false}],[":tests/lib/api-registry/validation.test.ts",{"duration":9.591291999999996,"failed":false}],[":tests/lib/aura-parser.test.ts",{"duration":10.647291999999993,"failed":false}],[":tests/lib/agent-auth/contracts.test.ts",{"duration":8.511083000000013,"failed":false}],[":tests/cli/doctor.test.ts",{"duration":8.598041999999992,"failed":false}],[":tests/endpoints/import.test.ts",{"duration":8341.289541,"failed":false}],[":tests/endpoints/passkey-credentials.test.ts",{"duration":2444.844208,"failed":false}],[":tests/lib/credential-health.test.ts",{"duration":2.7750410000000016,"failed":false}],[":tests/lib/agent-profiles.test.ts",{"duration":4.193041999999991,"failed":false}],[":tests/mcp/profile-policy.test.ts",{"duration":3.3845000000000027,"failed":false}],[":tests/endpoints/profile-parity.test.ts",{"duration":9.213209000000006,"failed":true}],[":tests/lib/profile-parity.test.ts",{"duration":1.7425829999999962,"failed":false}],[":tests/endpoints/credential-access-audit.test.ts",{"duration":1822.636709,"failed":false}],[":tests/lib/project-scope.test.ts",{"duration":7.995249999999999,"failed":false}],[":tests/docs/job-docs-validation.test.ts",{"duration":36.657291999999984,"failed":false}],[":tests/endpoints/credential-shares.test.ts",{"duration":5688.750666,"failed":false}],[":tests/lib/task-lifecycle.test.ts",{"duration":7.928124999999994,"failed":false}],[":tests/endpoints/tasks-lifecycle.test.ts",{"duration":191.46470899999997,"failed":false}],[":tests/cli/local-agent-trust.test.ts",{"duration":2.675040999999993,"failed":false}],[":tests/cli/token.test.ts",{"duration":3.132708000000008,"failed":false}],[":tests/endpoints/heartbeat.test.ts",{"duration":3664.6129579999997,"failed":false}],[":tests/cli/bin-entrypoint.test.ts",{"duration":2359.990709,"failed":false}],[":tests/sandbox/cli.test.ts",{"duration":397.631042,"failed":false}],[":tests/cli/vault-auth.test.ts",{"duration":195.026916,"failed":false}],[":tests/lib/encrypt.test.ts",{"duration":771.629416,"failed":false}],[":tests/cli/vault-share-gist.test.ts",{"duration":14.503625,"failed":false}],[":tests/lib/secret-gist-share.test.ts",{"duration":1.7517500000000013,"failed":false}],[":tests/cli/vault-list-filters.test.ts",{"duration":14.040582999999984,"failed":false}],[":tests/cli/start.test.ts",{"duration":3.580416999999997,"failed":false}],[":tests/cli/wallet.test.ts",{"duration":2.2493750000000006,"failed":false}],[":tests/cli/prompt-select.test.ts",{"duration":4.330207999999999,"failed":false}],[":tests/cli/quickhack.test.ts",{"duration":1.8649159999999938,"failed":false}],[":tests/lib/human-action-summary.test.ts",{"duration":2.176542000000012,"failed":false}],[":tests/pipeline-db/paths.test.ts",{"duration":5.902790999999979,"failed":false}],[":tests/pipeline-db/bootstrap.test.ts",{"duration":39.007125,"failed":false}],[":tests/pipeline-db/snapshot.test.ts",{"duration":29.974833999999987,"failed":false}],[":tests/pipeline-db/dual-write.test.ts",{"duration":60.147583,"failed":false}],[":tests/pipeline-db/importer.test.ts",{"duration":33.614417,"failed":false}],[":tests/pipeline-lifecycle/service.test.ts",{"duration":32.389666000000005,"failed":false}],[":tests/pipeline-lifecycle/taskctl.test.ts",{"duration":2885.294625,"failed":false}],[":tests/pipeline-lifecycle/agent-cron-integration.test.ts",{"duration":28.44970900000004,"failed":false}],[":tests/pipeline-db/cutover-plan.test.ts",{"duration":2.5047919999999806,"failed":false}],[":tests/lib/approval-link.test.ts",{"duration":1.2337500000000006,"failed":false}],[":tests/lib/dont-ask-again-policy.test.ts",{"duration":1.4888329999999996,"failed":false}],[":tests/lib/update-check.test.ts",{"duration":1.395707999999999,"failed":false}],[":tests/lib/auto-execute.test.ts",{"duration":110.71074999999999,"failed":false}],[":tests/lib/auth-action.test.ts",{"duration":2337.040417,"failed":false}],[":tests/cli/auth-action-flag.test.ts",{"duration":3.775750000000002,"failed":false}],[":tests/pipeline-lifecycle/tags.test.ts",{"duration":321.27825,"failed":false}],[":tests/endpoints/nuke.test.ts",{"duration":69.0028749999999,"failed":false}],[":tests/endpoints/apikeys.test.ts",{"duration":11085.063833,"failed":false}],[":tests/endpoints/security.test.ts",{"duration":9164.535417000001,"failed":false}],[":tests/endpoints/dashboard.test.ts",{"duration":103.2655420000001,"failed":false}],[":tests/endpoints/logs.test.ts",{"duration":183.44812500000035,"failed":false}],[":tests/endpoints/views.test.ts",{"duration":17.28716600000007,"failed":false}],[":tests/endpoints/flags.test.ts",{"duration":12.482625000000098,"failed":false}],[":tests/endpoints/lock.test.ts",{"duration":11063.760583,"failed":false}],[":tests/endpoints/backup.test.ts",{"duration":6926.148333000001,"failed":false}],[":tests/auth/approval-permissions-regression.test.ts",{"duration":2430.248833,"failed":false}],[":tests/sandbox/cli-cd-suite.test.ts",{"duration":645.1547089999999,"failed":false}],[":tests/mcp/contract.test.ts",{"duration":150.35933300000002,"failed":false}],[":tests/lib/credential-paths.test.ts",{"duration":3738.6630840000003,"failed":false}],[":tests/runtime-vault-smoke.test.ts",{"duration":1521.938291,"failed":false}],[":tests/cli/taskctl-lock-smoke.test.ts",{"duration":0,"failed":false}],[":tests/cli/start-run.test.ts",{"duration":6.746207999999996,"failed":false}],[":tests/cli/restart-run.test.ts",{"duration":4.258874999999989,"failed":false}],[":tests/endpoints/approve-action.test.ts",{"duration":1142.7778750000002,"failed":false}],[":tests/cli/escalation.test.ts",{"duration":2.6454999999999984,"failed":false}],[":tests/cli/actions-auth.test.ts",{"duration":39.940499999999986,"failed":false}],[":tests/lib/temp-policy.test.ts",{"duration":2.6707080000000047,"failed":false}],[":tests/endpoints/escalation-migration-gate.test.ts",{"duration":11581.330292,"failed":false}],[":tests/lib/escalation-responder.test.ts",{"duration":24.550249999999977,"failed":false}],[":tests/cli/service.test.ts",{"duration":41.465334,"failed":false}],[":tests/cli/init-runtime.test.ts",{"duration":6.7914160000000265,"failed":false}],[":tests/cli/agent.test.ts",{"duration":6.603166000000016,"failed":false}],[":tests/runtime-agent-smoke.test.ts",{"duration":1620.442333,"failed":false}],[":tests/endpoints/agent.test.ts",{"duration":5771.934959,"failed":false}],[":tests/lib/credential-agent.test.ts",{"duration":2955.386458,"failed":false}],[":tests/cli/agent-auth.test.ts",{"duration":518.637167,"failed":false}],[":tests/cli/agent-share-gist.test.ts",{"duration":19.97800000000001,"failed":false}],[":tests/cli/agent-list-filters.test.ts",{"duration":15.258083999999997,"failed":false}],[":tests/cli/env-check-server-agent.test.ts",{"duration":317.471458,"failed":false}],[":tests/lib/import-from-openclaw-paths.test.ts",{"duration":0,"failed":true}]]}
|
|
1
|
+
{"version":"4.0.18","results":[[":tests/send.test.ts",{"duration":162.08154100000002,"failed":false}],[":tests/approve.test.ts",{"duration":257.27824999999996,"failed":false}],[":tests/unlock.test.ts",{"duration":213.61050000000003,"failed":false}],[":tests/setup.test.ts",{"duration":128.30779199999998,"failed":false}],[":tests/e2e.test.ts",{"duration":4341.373875,"failed":false}],[":tests/wallet.test.ts",{"duration":1768.446334,"failed":false}],[":tests/auth.test.ts",{"duration":174.709292,"failed":false}],[":tests/fund.test.ts",{"duration":820.6141660000001,"failed":false}],[":tests/integration/agent-flow.test.ts",{"duration":6350.61575,"failed":false}],[":tests/auth/permissions.test.ts",{"duration":6955.744291999999,"failed":false}],[":tests/auth/middleware.test.ts",{"duration":8667.608209,"failed":false}],[":tests/lib/sessions.test.ts",{"duration":100.3447920000001,"failed":false}],[":tests/lib/auth.test.ts",{"duration":4552.982083,"failed":false}],[":tests/endpoints/unlock.test.ts",{"duration":10486.351083,"failed":false}],[":tests/endpoints/wallet.test.ts",{"duration":4370.477584,"failed":false}],[":tests/endpoints/approve.test.ts",{"duration":497.64808300000004,"failed":false}],[":tests/endpoints/fund.test.ts",{"duration":1897.905,"failed":false}],[":tests/endpoints/send.test.ts",{"duration":2268.8852079999997,"failed":false}],[":tests/endpoints/auth.test.ts",{"duration":1334.914333,"failed":false}],[":tests/endpoints/setup.test.ts",{"duration":5293.225625,"failed":false}],[":tests/lib/uniswap.test.ts",{"duration":21.776292000000012,"failed":false}],[":tests/auth/apikeys.test.ts",{"duration":10995.417958,"failed":false}],[":tests/endpoints/wallet-data.test.ts",{"duration":2099.3379170000003,"failed":false}],[":tests/endpoints/swap.test.ts",{"duration":1653.693583,"failed":false}],[":tests/endpoints/token-clearing.test.ts",{"duration":1247.484042,"failed":false}],[":tests/endpoints/rate-limit.test.ts",{"duration":2154.356209,"failed":false}],[":tests/endpoints/solana-swap.test.ts",{"duration":998.2979999999999,"failed":false}],[":tests/endpoints/solana-wallet.test.ts",{"duration":1363.0256249999998,"failed":false}],[":tests/endpoints/solana-send.test.ts",{"duration":1039.8317080000002,"failed":false}],[":tests/lib/sessions-currency.test.ts",{"duration":56.1837079999998,"failed":false}],[":tests/endpoints/solana-fund.test.ts",{"duration":1418.0586249999997,"failed":false}],[":tests/lib/solana-wallet.test.ts",{"duration":161.13887499999998,"failed":false}],[":tests/lib/address.test.ts",{"duration":3.510084000000006,"failed":false}],[":tests/lib/strategy/sources.test.ts",{"duration":21.01504100000001,"failed":false}],[":tests/lib/strategy/loader.test.ts",{"duration":59.308375,"failed":false}],[":tests/lib/strategy/executor.test.ts",{"duration":7.492707999999993,"failed":false}],[":tests/lib/strategy/state.test.ts",{"duration":6.136792,"failed":false}],[":tests/lib/strategy/hooks.test.ts",{"duration":14.00120800000002,"failed":false}],[":tests/endpoints/widgets.test.ts",{"duration":2127.785625,"failed":false}],[":tests/lib/strategy/message.test.ts",{"duration":127.83229099999997,"failed":false}],[":tests/endpoints/actions.test.ts",{"duration":2396.4307919999997,"failed":false}],[":tests/endpoints/vault.test.ts",{"duration":7419.710874999999,"failed":false}],[":tests/integration/adapter-resolve.test.ts",{"duration":3486.7960000000003,"failed":false}],[":tests/lib/adapters.test.ts",{"duration":38.35904199999999,"failed":false}],[":tests/lib/strategy/tick.test.ts",{"duration":6.34379100000001,"failed":false}],[":tests/lib/relay.test.ts",{"duration":4.984791000000001,"failed":false}],[":tests/lib/ai.test.ts",{"duration":6.82841599999999,"failed":false}],[":tests/endpoints/launch.test.ts",{"duration":35837.233333,"failed":false}],[":tests/widget-installer.test.ts",{"duration":154.704459,"failed":false}],[":tests/mcp/tools.test.ts",{"duration":15.441082999999992,"failed":false}],[":tests/ai-integration/scenarios.test.ts",{"duration":7.4487499999999045,"failed":true}],[":tests/mcp/server.test.ts",{"duration":1333.480375,"failed":false}],[":tests/ai-integration/live.test.ts",{"duration":77572.38508299999,"failed":false}],[":tests/auth/apikeys-validate.test.ts",{"duration":10219.787667,"failed":false}],[":tests/lib/adapters-test.test.ts",{"duration":25429.400542,"failed":false}],[":tests/setup-integration/wizard-flow.test.ts",{"duration":124.21662500000002,"failed":false}],[":tests/setup-integration/adapter-test.test.ts",{"duration":166.0367080000001,"failed":false}],[":tests/setup-integration/edge-cases.test.ts",{"duration":156.02324999999996,"failed":false}],[":tests/setup-integration/apikey-validation.test.ts",{"duration":147.53583400000002,"failed":false}],[":tests/setup-integration/fresh-setup.test.ts",{"duration":107.81912499999999,"failed":false}],[":tests/lib/network.test.ts",{"duration":12.689417000000006,"failed":false}],[":tests/cli/process.test.ts",{"duration":33.650542,"failed":false}],[":tests/cli/init-steps.test.ts",{"duration":4.78708300000001,"failed":false}],[":tests/cli/init-flow.test.ts",{"duration":2517.034083,"failed":false}],[":tests/cli/http.test.ts",{"duration":1563.349083,"failed":false}],[":tests/lib/verified-summary.test.ts",{"duration":8.588290999999998,"failed":false}],[":tests/lib/defaults.test.ts",{"duration":89.18312500000002,"failed":false}],[":tests/endpoints/defaults.test.ts",{"duration":6137.610333,"failed":false}],[":tests/lib/adapters-chat.test.ts",{"duration":28.19304200000002,"failed":false}],[":tests/setup-integration/terminal-flow.test.ts",{"duration":248.770042,"failed":false}],[":tests/endpoints/transactions.test.ts",{"duration":1127.6649169999998,"failed":false}],[":tests/cron/scheduler.test.ts",{"duration":16.875292,"failed":false}],[":tests/endpoints/portfolio.test.ts",{"duration":381.701917,"failed":false}],[":tests/cron/native-price.test.ts",{"duration":58.4565419999999,"failed":false}],[":tests/resolve.test.ts",{"duration":13.15741700000001,"failed":false}],[":tests/lib/prices.test.ts",{"duration":103.56858299999999,"failed":false}],[":tests/swap-quote.test.ts",{"duration":945.5037500000001,"failed":false}],[":tests/send-token.test.ts",{"duration":996.399292,"failed":false}],[":tests/endpoints/price.test.ts",{"duration":61.327583000000004,"failed":false}],[":tests/lib/price.test.ts",{"duration":4.805790999999999,"failed":false}],[":tests/endpoints/token-search.test.ts",{"duration":35.89754199999993,"failed":false}],[":tests/lib/token-search.test.ts",{"duration":65.472708,"failed":false}],[":tests/lib/token-safety.test.ts",{"duration":5.724790999999996,"failed":false}],[":tests/endpoints/token-safety.test.ts",{"duration":41.85649999999987,"failed":false}],[":tests/lib/batch.test.ts",{"duration":11.763874999999999,"failed":false}],[":tests/endpoints/batch.test.ts",{"duration":48.719875,"failed":false}],[":tests/endpoints/token-balance.test.ts",{"duration":29.900082999999995,"failed":false}],[":tests/lib/events-decoder.test.ts",{"duration":4.558958999999987,"failed":false}],[":tests/lib/events-enricher.test.ts",{"duration":4.474500000000035,"failed":false}],[":tests/endpoints/address-transactions.test.ts",{"duration":962.0601669999999,"failed":false}],[":tests/endpoints/bookmarks.test.ts",{"duration":1349.6050840000003,"failed":false}],[":tests/endpoints/addressbook.test.ts",{"duration":995.706459,"failed":false}],[":tests/lib/strategy/session-logger.test.ts",{"duration":1471.763333,"failed":false}],[":tests/cron/incoming-scan.test.ts",{"duration":385.8459999999999,"failed":false}],[":tests/lib/auto-unlock.test.ts",{"duration":1104.2137500000001,"failed":false}],[":tests/lib/widget-tokens-tier.test.ts",{"duration":226.36699999999996,"failed":false}],[":tests/cron/strategy-runner.test.ts",{"duration":6.080332999999996,"failed":false}],[":tests/endpoints/strategy-routes.test.ts",{"duration":11390.736792,"failed":false}],[":tests/endpoints/apps.test.ts",{"duration":21435.455708999998,"failed":false}],[":tests/lib/events-fetcher.test.ts",{"duration":6.5429169999999885,"failed":false}],[":tests/app-installer.test.ts",{"duration":114.05204099999997,"failed":false}],[":tests/lib/app-tokens-tier.test.ts",{"duration":276.60683300000005,"failed":false}],[":tests/setup-integration/onboarding-e2e.test.ts",{"duration":445.7834579999999,"failed":true}],[":tests/cron/orphan-cleanup.test.ts",{"duration":6.764916999999997,"failed":false}],[":tests/lib/strategy/repository.test.ts",{"duration":28.425665999999865,"failed":false}],[":tests/setup-integration/autonomous-agent.test.ts",{"duration":7.406667000000027,"failed":true}],[":tests/lib/websocket-auth.test.ts",{"duration":235.461,"failed":false}],[":tests/lib/credentials.test.ts",{"duration":7320.739874999999,"failed":false}],[":tests/lib/credential-access.test.ts",{"duration":3.4029999999999916,"failed":false}],[":tests/lib/credential-scope.test.ts",{"duration":3.2806659999999965,"failed":false}],[":tests/endpoints/credential-ops.test.ts",{"duration":3004.8909169999997,"failed":false}],[":tests/endpoints/credentials.test.ts",{"duration":27923.241459,"failed":false}],[":tests/lib/credential-transport.test.ts",{"duration":138.75,"failed":false}],[":tests/lib/credential-vault.test.ts",{"duration":4433.612583,"failed":false}],[":tests/lib/resolve-action.test.ts",{"duration":4.514791000000002,"failed":false}],[":tests/credential-import.test.ts",{"duration":19.897791999999995,"failed":false}],[":tests/endpoints/passkey.test.ts",{"duration":14553.136708,"failed":false}],[":tests/lib/oauth2-refresh.test.ts",{"duration":3.752541000000008,"failed":false}],[":tests/lib/totp.test.ts",{"duration":7.506458999999992,"failed":false}],[":tests/lib/passkey-credential.test.ts",{"duration":9.192250000000001,"failed":false}],[":tests/cli/env.test.ts",{"duration":8.821500000000015,"failed":false}],[":tests/dotenv-parser.test.ts",{"duration":3.3828749999999985,"failed":false}],[":tests/cli/socket.test.ts",{"duration":164.548791,"failed":false}],[":tests/cli/vault.test.ts",{"duration":5.563457999999997,"failed":false}],[":tests/cli/credential-resolve.test.ts",{"duration":2.6654999999999944,"failed":false}],[":tests/cli/env-check-server-vault.test.ts",{"duration":239.821708,"failed":false}],[":tests/e2e-agent/validation.test.ts",{"duration":8.998582999999996,"failed":false}],[":tests/e2e-agent/artifacts.test.ts",{"duration":3.1474170000000044,"failed":false}],[":tests/e2e-agent/ci-lanes.test.ts",{"duration":1.272790999999998,"failed":false}],[":tests/lib/api-registry/validation.test.ts",{"duration":5.377708000000013,"failed":false}],[":tests/lib/aura-parser.test.ts",{"duration":10.007750000000001,"failed":false}],[":tests/lib/agent-auth/contracts.test.ts",{"duration":11.581041999999997,"failed":false}],[":tests/cli/doctor.test.ts",{"duration":9.576459,"failed":false}],[":tests/endpoints/import.test.ts",{"duration":8348.137416,"failed":false}],[":tests/endpoints/passkey-credentials.test.ts",{"duration":2573.4603340000003,"failed":false}],[":tests/lib/credential-health.test.ts",{"duration":3.1082080000000047,"failed":false}],[":tests/lib/agent-profiles.test.ts",{"duration":3.3868339999999932,"failed":false}],[":tests/mcp/profile-policy.test.ts",{"duration":3.01100000000001,"failed":false}],[":tests/endpoints/profile-parity.test.ts",{"duration":9.213209000000006,"failed":true}],[":tests/lib/profile-parity.test.ts",{"duration":1.7047079999999966,"failed":false}],[":tests/endpoints/credential-access-audit.test.ts",{"duration":1768.71025,"failed":false}],[":tests/lib/project-scope.test.ts",{"duration":8.761667000000003,"failed":false}],[":tests/docs/job-docs-validation.test.ts",{"duration":33.986999999999995,"failed":false}],[":tests/endpoints/credential-shares.test.ts",{"duration":6208.950334,"failed":false}],[":tests/lib/task-lifecycle.test.ts",{"duration":7.928124999999994,"failed":false}],[":tests/endpoints/tasks-lifecycle.test.ts",{"duration":191.46470899999997,"failed":false}],[":tests/cli/local-agent-trust.test.ts",{"duration":2.7987499999999983,"failed":false}],[":tests/cli/token.test.ts",{"duration":1.4059579999999983,"failed":false}],[":tests/endpoints/heartbeat.test.ts",{"duration":4575.689417,"failed":false}],[":tests/cli/bin-entrypoint.test.ts",{"duration":4248.5371669999995,"failed":false}],[":tests/sandbox/cli.test.ts",{"duration":332.983625,"failed":false}],[":tests/cli/vault-auth.test.ts",{"duration":195.026916,"failed":false}],[":tests/lib/encrypt.test.ts",{"duration":763.462208,"failed":false}],[":tests/cli/vault-share-gist.test.ts",{"duration":14.503625,"failed":false}],[":tests/lib/secret-gist-share.test.ts",{"duration":1.757791999999995,"failed":false}],[":tests/cli/vault-list-filters.test.ts",{"duration":14.040582999999984,"failed":false}],[":tests/cli/start.test.ts",{"duration":1.8407080000000065,"failed":false}],[":tests/cli/wallet.test.ts",{"duration":1.465874999999997,"failed":false}],[":tests/cli/prompt-select.test.ts",{"duration":4.252083999999996,"failed":false}],[":tests/cli/quickhack.test.ts",{"duration":1.982292000000001,"failed":false}],[":tests/lib/human-action-summary.test.ts",{"duration":2.1798750000000098,"failed":false}],[":tests/pipeline-db/paths.test.ts",{"duration":5.902790999999979,"failed":false}],[":tests/pipeline-db/bootstrap.test.ts",{"duration":39.007125,"failed":false}],[":tests/pipeline-db/snapshot.test.ts",{"duration":29.974833999999987,"failed":false}],[":tests/pipeline-db/dual-write.test.ts",{"duration":60.147583,"failed":false}],[":tests/pipeline-db/importer.test.ts",{"duration":33.614417,"failed":false}],[":tests/pipeline-lifecycle/service.test.ts",{"duration":32.389666000000005,"failed":false}],[":tests/pipeline-lifecycle/taskctl.test.ts",{"duration":2885.294625,"failed":false}],[":tests/pipeline-lifecycle/agent-cron-integration.test.ts",{"duration":28.44970900000004,"failed":false}],[":tests/pipeline-db/cutover-plan.test.ts",{"duration":2.5047919999999806,"failed":false}],[":tests/lib/approval-link.test.ts",{"duration":1.0141670000000005,"failed":false}],[":tests/lib/dont-ask-again-policy.test.ts",{"duration":1.2326669999999922,"failed":false}],[":tests/lib/update-check.test.ts",{"duration":1.4486670000000004,"failed":false}],[":tests/lib/auto-execute.test.ts",{"duration":108.225667,"failed":false}],[":tests/lib/auth-action.test.ts",{"duration":1998.647583,"failed":false}],[":tests/cli/auth-action-flag.test.ts",{"duration":3.1158340000000067,"failed":false}],[":tests/pipeline-lifecycle/tags.test.ts",{"duration":321.27825,"failed":false}],[":tests/endpoints/nuke.test.ts",{"duration":69.0028749999999,"failed":false}],[":tests/endpoints/apikeys.test.ts",{"duration":11085.063833,"failed":false}],[":tests/endpoints/security.test.ts",{"duration":9164.535417000001,"failed":false}],[":tests/endpoints/dashboard.test.ts",{"duration":103.2655420000001,"failed":false}],[":tests/endpoints/logs.test.ts",{"duration":183.44812500000035,"failed":false}],[":tests/endpoints/views.test.ts",{"duration":17.28716600000007,"failed":false}],[":tests/endpoints/flags.test.ts",{"duration":12.482625000000098,"failed":false}],[":tests/endpoints/lock.test.ts",{"duration":11063.760583,"failed":false}],[":tests/endpoints/backup.test.ts",{"duration":6926.148333000001,"failed":false}],[":tests/auth/approval-permissions-regression.test.ts",{"duration":2333.866833,"failed":false}],[":tests/sandbox/cli-cd-suite.test.ts",{"duration":578.572375,"failed":false}],[":tests/mcp/contract.test.ts",{"duration":78.60249999999999,"failed":false}],[":tests/lib/credential-paths.test.ts",{"duration":3899.7734170000003,"failed":false}],[":tests/runtime-vault-smoke.test.ts",{"duration":1521.938291,"failed":false}],[":tests/cli/taskctl-lock-smoke.test.ts",{"duration":0,"failed":false}],[":tests/cli/start-run.test.ts",{"duration":6.923584000000005,"failed":false}],[":tests/cli/restart-run.test.ts",{"duration":4.698082999999997,"failed":false}],[":tests/endpoints/approve-action.test.ts",{"duration":1056.1783329999998,"failed":false}],[":tests/cli/escalation.test.ts",{"duration":3.389707999999999,"failed":false}],[":tests/cli/actions-auth.test.ts",{"duration":39.753000000000014,"failed":false}],[":tests/lib/temp-policy.test.ts",{"duration":2.585374999999999,"failed":false}],[":tests/endpoints/escalation-migration-gate.test.ts",{"duration":11955.108208,"failed":false}],[":tests/lib/escalation-responder.test.ts",{"duration":24.61208400000001,"failed":false}],[":tests/cli/service.test.ts",{"duration":38.05449999999999,"failed":false}],[":tests/cli/init-runtime.test.ts",{"duration":4.873333000000002,"failed":false}],[":tests/cli/agent.test.ts",{"duration":7.902833000000001,"failed":false}],[":tests/runtime-agent-smoke.test.ts",{"duration":1154.7805830000002,"failed":false}],[":tests/endpoints/agent.test.ts",{"duration":6459.912458000001,"failed":false}],[":tests/lib/credential-agent.test.ts",{"duration":3084.496541,"failed":false}],[":tests/cli/agent-auth.test.ts",{"duration":528.433583,"failed":false}],[":tests/cli/agent-share-gist.test.ts",{"duration":16.512332999999984,"failed":false}],[":tests/cli/agent-list-filters.test.ts",{"duration":18.725041000000004,"failed":false}],[":tests/cli/env-check-server-agent.test.ts",{"duration":292.08354199999997,"failed":false}],[":tests/lib/import-from-openclaw-paths.test.ts",{"duration":0,"failed":true}],[":tests/endpoints/agent-profiles.test.ts",{"duration":3425.8750000000005,"failed":false}]]}
|
|
@@ -187,7 +187,7 @@ router.post('/', requireWalletAuth, requirePermissionForRoute(ESCALATION_ROUTE_I
|
|
|
187
187
|
}
|
|
188
188
|
const normalizedPubkey = normalizeAgentPubkey(pubkey);
|
|
189
189
|
|
|
190
|
-
const defaultActionTtl = await getDefault<number>('ttl.action',
|
|
190
|
+
const defaultActionTtl = await getDefault<number>('ttl.action', 3600);
|
|
191
191
|
const actionTtl = typeof ttl === 'number' && ttl > 0 ? ttl : defaultActionTtl;
|
|
192
192
|
|
|
193
193
|
// Generate secret for polling (same pattern as POST /auth)
|
|
@@ -405,7 +405,7 @@ router.post('/token', requireWalletAuth, requireAdminForRoute(ESCALATION_ROUTE_I
|
|
|
405
405
|
|
|
406
406
|
const defaultSendLimit = await getDefault<number>('limits.send', 0.1);
|
|
407
407
|
const defaultSwapLimit = await getDefault<number>('limits.swap', 0.1);
|
|
408
|
-
const defaultTtl = await getDefault<number>('ttl.agent',
|
|
408
|
+
const defaultTtl = await getDefault<number>('ttl.agent', 604800);
|
|
409
409
|
|
|
410
410
|
const hasProfile = typeof profile === 'string' && profile.trim().length > 0;
|
|
411
411
|
const hasPermissions = permissions !== undefined;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Request, Response, Router } from 'express';
|
|
2
|
+
import { requireWalletAuth } from '../middleware/auth';
|
|
3
|
+
import { requireAdmin } from '../lib/permissions';
|
|
4
|
+
import { getErrorMessage } from '../lib/error';
|
|
5
|
+
import { normalizeAgentProfileInput } from '../../../shared/agent-profile-schema';
|
|
6
|
+
import {
|
|
7
|
+
deleteAgentProfile,
|
|
8
|
+
getAgentProfile,
|
|
9
|
+
listAgentProfiles,
|
|
10
|
+
upsertAgentProfile,
|
|
11
|
+
} from '../lib/agent-profile-records';
|
|
12
|
+
|
|
13
|
+
const router = Router();
|
|
14
|
+
|
|
15
|
+
router.use(requireWalletAuth, requireAdmin);
|
|
16
|
+
|
|
17
|
+
function normalizeAgentIdParam(value: string): string {
|
|
18
|
+
const decoded = decodeURIComponent(String(value || ''));
|
|
19
|
+
const agentId = decoded.trim();
|
|
20
|
+
if (!agentId) {
|
|
21
|
+
throw new Error('agentId path param is required');
|
|
22
|
+
}
|
|
23
|
+
return agentId;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
router.get('/', (_req: Request, res: Response) => {
|
|
27
|
+
try {
|
|
28
|
+
const profiles = listAgentProfiles();
|
|
29
|
+
res.json({ success: true, profiles });
|
|
30
|
+
} catch (error) {
|
|
31
|
+
res.status(500).json({ success: false, error: getErrorMessage(error) });
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
router.get('/:agentId', (req: Request<{ agentId: string }>, res: Response) => {
|
|
36
|
+
try {
|
|
37
|
+
const agentId = normalizeAgentIdParam(req.params.agentId);
|
|
38
|
+
const profile = getAgentProfile(agentId);
|
|
39
|
+
if (!profile) {
|
|
40
|
+
res.status(404).json({ success: false, error: 'Agent profile not found' });
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
res.json({ success: true, profile });
|
|
44
|
+
} catch (error) {
|
|
45
|
+
res.status(400).json({ success: false, error: getErrorMessage(error) });
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
router.put('/:agentId', (req: Request<{ agentId: string }>, res: Response) => {
|
|
50
|
+
try {
|
|
51
|
+
const agentId = normalizeAgentIdParam(req.params.agentId);
|
|
52
|
+
const body = req.body && typeof req.body === 'object' && !Array.isArray(req.body)
|
|
53
|
+
? req.body as Record<string, unknown>
|
|
54
|
+
: {};
|
|
55
|
+
const bodyAgentIdRaw = body.agentId ?? body.agent_id;
|
|
56
|
+
if (typeof bodyAgentIdRaw === 'string' && bodyAgentIdRaw.trim() && bodyAgentIdRaw.trim() !== agentId) {
|
|
57
|
+
res.status(400).json({ success: false, error: 'body agentId must match path param' });
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const normalized = normalizeAgentProfileInput(body, { fallbackAgentId: agentId });
|
|
61
|
+
const profile = upsertAgentProfile(normalized);
|
|
62
|
+
res.json({ success: true, profile });
|
|
63
|
+
} catch (error) {
|
|
64
|
+
res.status(400).json({ success: false, error: getErrorMessage(error) });
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
router.delete('/:agentId', (req: Request<{ agentId: string }>, res: Response) => {
|
|
69
|
+
try {
|
|
70
|
+
const agentId = normalizeAgentIdParam(req.params.agentId);
|
|
71
|
+
const removed = deleteAgentProfile(agentId);
|
|
72
|
+
if (!removed) {
|
|
73
|
+
res.status(404).json({ success: false, error: 'Agent profile not found' });
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
res.json({ success: true, deleted: true, agentId });
|
|
77
|
+
} catch (error) {
|
|
78
|
+
res.status(400).json({ success: false, error: getErrorMessage(error) });
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
export default router;
|
|
@@ -73,6 +73,34 @@ function buildSessionApprovalContract(input: {
|
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
function materializeRetryCommand(originalCommand: string | undefined, reqId: string): string | undefined {
|
|
77
|
+
const base = String(originalCommand || '').trim();
|
|
78
|
+
if (!base) return undefined;
|
|
79
|
+
let command = base.replace(/<reqId>/g, reqId);
|
|
80
|
+
|
|
81
|
+
command = command
|
|
82
|
+
.replace(/--req-id\s+\S+/g, `--reqId ${reqId}`)
|
|
83
|
+
.replace(/--request-id\s+\S+/g, `--reqId ${reqId}`)
|
|
84
|
+
.replace(/--requestId\s+\S+/g, `--reqId ${reqId}`)
|
|
85
|
+
.replace(/--reqId\s+\S+/g, `--reqId ${reqId}`);
|
|
86
|
+
|
|
87
|
+
if (!/\s--(?:reqId|req-id|requestId|request-id)(?:\s|=|$)/.test(command)) {
|
|
88
|
+
command = `${command} --reqId ${reqId}`;
|
|
89
|
+
}
|
|
90
|
+
return command;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function buildRetryInstructions(base: unknown, retryCommand: string | undefined): string[] {
|
|
94
|
+
const existing = Array.isArray(base)
|
|
95
|
+
? base.filter((entry): entry is string => typeof entry === 'string' && entry.trim().length > 0)
|
|
96
|
+
: [];
|
|
97
|
+
if (!retryCommand) return existing;
|
|
98
|
+
return [
|
|
99
|
+
`Run this exact command now: ${retryCommand}`,
|
|
100
|
+
...existing,
|
|
101
|
+
];
|
|
102
|
+
}
|
|
103
|
+
|
|
76
104
|
function auditApprovalLifecycle(input: {
|
|
77
105
|
requestId: string;
|
|
78
106
|
state:
|
|
@@ -481,6 +509,7 @@ router.get('/:requestId', async (req: Request<{ requestId: string }>, res: Respo
|
|
|
481
509
|
binding?: Record<string, unknown>;
|
|
482
510
|
approveUrl?: string;
|
|
483
511
|
pubkey?: string;
|
|
512
|
+
originalCommand?: string;
|
|
484
513
|
} = {};
|
|
485
514
|
if (request.metadata) {
|
|
486
515
|
try {
|
|
@@ -522,6 +551,8 @@ router.get('/:requestId', async (req: Request<{ requestId: string }>, res: Respo
|
|
|
522
551
|
secret,
|
|
523
552
|
...(typeof metadata.approveUrl === 'string' ? { approveUrl: metadata.approveUrl } : {}),
|
|
524
553
|
});
|
|
554
|
+
const retryCommand = materializeRetryCommand(metadata.originalCommand, requestId);
|
|
555
|
+
const instructions = buildRetryInstructions(contract.flow.instructions, retryCommand);
|
|
525
556
|
|
|
526
557
|
// Return status based on request state
|
|
527
558
|
if (request.status === 'pending') {
|
|
@@ -545,7 +576,8 @@ router.get('/:requestId', async (req: Request<{ requestId: string }>, res: Respo
|
|
|
545
576
|
retryReady: false,
|
|
546
577
|
claimAction: contract.claimAction,
|
|
547
578
|
retryAction: contract.retryAction,
|
|
548
|
-
instructions
|
|
579
|
+
instructions,
|
|
580
|
+
...(retryCommand ? { retryCommand } : {}),
|
|
549
581
|
...((metadata.policyHash || metadata.effectivePolicyHash) ? { policyHash: metadata.policyHash || metadata.effectivePolicyHash } : {}),
|
|
550
582
|
...((metadata.compilerVersion || metadata.effectivePolicyHash) ? { compilerVersion: metadata.compilerVersion || 'profile.v1' } : {}),
|
|
551
583
|
message: 'Waiting for human approval',
|
|
@@ -574,7 +606,8 @@ router.get('/:requestId', async (req: Request<{ requestId: string }>, res: Respo
|
|
|
574
606
|
retryReady: false,
|
|
575
607
|
claimAction: contract.claimAction,
|
|
576
608
|
retryAction: contract.retryAction,
|
|
577
|
-
instructions
|
|
609
|
+
instructions,
|
|
610
|
+
...(retryCommand ? { retryCommand } : {}),
|
|
578
611
|
...((metadata.policyHash || metadata.effectivePolicyHash) ? { policyHash: metadata.policyHash || metadata.effectivePolicyHash } : {}),
|
|
579
612
|
...((metadata.compilerVersion || metadata.effectivePolicyHash) ? { compilerVersion: metadata.compilerVersion || 'profile.v1' } : {}),
|
|
580
613
|
message: 'Request was rejected',
|
|
@@ -626,7 +659,8 @@ router.get('/:requestId', async (req: Request<{ requestId: string }>, res: Respo
|
|
|
626
659
|
retryReady: false,
|
|
627
660
|
claimAction: contract.claimAction,
|
|
628
661
|
retryAction: contract.retryAction,
|
|
629
|
-
instructions
|
|
662
|
+
instructions,
|
|
663
|
+
...(retryCommand ? { retryCommand } : {}),
|
|
630
664
|
...(policyHash ? { policyHash } : {}),
|
|
631
665
|
...(compilerVersion ? { compilerVersion } : {}),
|
|
632
666
|
...(metadata.requestedPolicySource ? { requestedPolicySource: metadata.requestedPolicySource } : {}),
|
|
@@ -672,7 +706,8 @@ router.get('/:requestId', async (req: Request<{ requestId: string }>, res: Respo
|
|
|
672
706
|
retryReady: true,
|
|
673
707
|
claimAction: contract.claimAction,
|
|
674
708
|
retryAction: contract.retryAction,
|
|
675
|
-
instructions
|
|
709
|
+
instructions,
|
|
710
|
+
...(retryCommand ? { retryCommand } : {}),
|
|
676
711
|
...((metadata.policyHash || metadata.effectivePolicyHash) ? { policyHash: metadata.policyHash || metadata.effectivePolicyHash } : {}),
|
|
677
712
|
...((metadata.compilerVersion || metadata.effectivePolicyHash) ? { compilerVersion: metadata.compilerVersion || 'profile.v1' } : {}),
|
|
678
713
|
approvalScope: metadata.approvalScope,
|
|
@@ -61,6 +61,7 @@ const router = Router();
|
|
|
61
61
|
const VALID_CREDENTIAL_TYPES = new Set<CredentialType>([
|
|
62
62
|
'login',
|
|
63
63
|
'card',
|
|
64
|
+
'sso',
|
|
64
65
|
'note',
|
|
65
66
|
'plain_note',
|
|
66
67
|
'hot_wallet',
|
|
@@ -108,6 +109,15 @@ function normalizeName(name: string): string {
|
|
|
108
109
|
return name.trim().normalize('NFKC');
|
|
109
110
|
}
|
|
110
111
|
|
|
112
|
+
function readOriginalCommand(req: Request): string | undefined {
|
|
113
|
+
const value = req.header('x-aura-original-command');
|
|
114
|
+
if (typeof value !== 'string') return undefined;
|
|
115
|
+
const trimmed = value.trim();
|
|
116
|
+
if (!trimmed) return undefined;
|
|
117
|
+
// Keep header storage bounded while preserving full command intent.
|
|
118
|
+
return trimmed.slice(0, 4000);
|
|
119
|
+
}
|
|
120
|
+
|
|
111
121
|
function findSensitiveFieldValue(fields: CredentialField[], key: string): string {
|
|
112
122
|
const field = fields.find((entry) => entry.key === key);
|
|
113
123
|
return typeof field?.value === 'string' ? field.value : '';
|
|
@@ -572,6 +582,7 @@ function buildCredentialOneShotDenyContext(input: {
|
|
|
572
582
|
flowSummary: string;
|
|
573
583
|
finalStep: string;
|
|
574
584
|
retryBehavior: string;
|
|
585
|
+
originalCommand?: string;
|
|
575
586
|
metadata?: Record<string, unknown>;
|
|
576
587
|
eventMetadata?: Record<string, unknown>;
|
|
577
588
|
responseMetadata?: Record<string, unknown>;
|
|
@@ -611,6 +622,7 @@ function buildCredentialOneShotDenyContext(input: {
|
|
|
611
622
|
credentialId: input.credential.id,
|
|
612
623
|
credentialName: input.credential.name,
|
|
613
624
|
credentialAgentId: input.credential.agentId,
|
|
625
|
+
...(input.originalCommand ? { originalCommand: input.originalCommand } : {}),
|
|
614
626
|
...(input.metadata || {}),
|
|
615
627
|
},
|
|
616
628
|
eventMetadata: {
|
|
@@ -1611,6 +1623,7 @@ router.post('/purge', (req: Request, res: Response) => {
|
|
|
1611
1623
|
router.post('/:id/read', async (req: Request<{ id: string }>, res: Response) => {
|
|
1612
1624
|
try {
|
|
1613
1625
|
const auth = req.auth!;
|
|
1626
|
+
const originalCommand = readOriginalCommand(req);
|
|
1614
1627
|
const requestedLocation = parseCredentialLocation(req.query.location, 'active');
|
|
1615
1628
|
if (!requestedLocation) {
|
|
1616
1629
|
res.status(400).json({ success: false, error: 'Invalid location. Expected active, archive, or recently_deleted' });
|
|
@@ -1701,6 +1714,7 @@ router.post('/:id/read', async (req: Request<{ id: string }>, res: Response) =>
|
|
|
1701
1714
|
flowSummary: 'This approval grants a one-shot scoped read token (maxReads=1, short TTL).',
|
|
1702
1715
|
finalStep: 'Retry the original secret read/inject call after claim succeeds.',
|
|
1703
1716
|
retryBehavior: 'Retrying before claim completion will return another approval-required response.',
|
|
1717
|
+
originalCommand,
|
|
1704
1718
|
metadata: {
|
|
1705
1719
|
policyContext: {
|
|
1706
1720
|
readScopes: auth.token.credentialAccess?.read || [],
|
|
@@ -1849,6 +1863,7 @@ router.post('/:id/read', async (req: Request<{ id: string }>, res: Response) =>
|
|
|
1849
1863
|
flowSummary: 'This approval grants a one-shot scoped read token (maxReads=1, short TTL).',
|
|
1850
1864
|
finalStep: 'Retry the original secret read/inject call after claim succeeds.',
|
|
1851
1865
|
retryBehavior: 'Retrying before claim completion will return another approval-required response.',
|
|
1866
|
+
originalCommand,
|
|
1852
1867
|
metadata: {
|
|
1853
1868
|
requestedFields: requestedExcludedFields,
|
|
1854
1869
|
policyContext: {
|
|
@@ -2006,6 +2021,7 @@ router.post('/:id/read', async (req: Request<{ id: string }>, res: Response) =>
|
|
|
2006
2021
|
router.post('/:id/totp', async (req: Request<{ id: string }>, res: Response) => {
|
|
2007
2022
|
try {
|
|
2008
2023
|
const auth = req.auth!;
|
|
2024
|
+
const originalCommand = readOriginalCommand(req);
|
|
2009
2025
|
|
|
2010
2026
|
const credential = getCredential(req.params.id);
|
|
2011
2027
|
if (!credential) {
|
|
@@ -2079,6 +2095,7 @@ router.post('/:id/totp', async (req: Request<{ id: string }>, res: Response) =>
|
|
|
2079
2095
|
flowSummary: 'This approval grants a one-shot scoped TOTP token (maxReads=1, short TTL).',
|
|
2080
2096
|
finalStep: 'Retry the original TOTP request after claim succeeds.',
|
|
2081
2097
|
retryBehavior: 'Retrying before claim completion will return another approval-required response.',
|
|
2098
|
+
originalCommand,
|
|
2082
2099
|
metadata: {
|
|
2083
2100
|
policyContext: {
|
|
2084
2101
|
readScopes: auth.token.credentialAccess?.read || [],
|
|
@@ -2149,6 +2166,7 @@ router.post('/:id/totp', async (req: Request<{ id: string }>, res: Response) =>
|
|
|
2149
2166
|
flowSummary: 'This approval grants a one-shot scoped TOTP token (maxReads=1, short TTL).',
|
|
2150
2167
|
finalStep: 'Retry the original TOTP request after claim succeeds.',
|
|
2151
2168
|
retryBehavior: 'Retrying before claim completion will return another approval-required response.',
|
|
2169
|
+
originalCommand,
|
|
2152
2170
|
});
|
|
2153
2171
|
await respondPermissionDenied({
|
|
2154
2172
|
req,
|
|
@@ -205,7 +205,7 @@ describe('agent CLI auth behavior', () => {
|
|
|
205
205
|
});
|
|
206
206
|
|
|
207
207
|
it('list supports --agent filter by name or id', async () => {
|
|
208
|
-
mocks.bootstrapViaSocket.
|
|
208
|
+
mocks.bootstrapViaSocket.mockResolvedValue('socket-token');
|
|
209
209
|
|
|
210
210
|
vi.spyOn(globalThis, 'fetch').mockImplementation(async (input: RequestInfo | URL, init?: RequestInit) => {
|
|
211
211
|
const url = new URL(typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url);
|
|
@@ -644,6 +644,7 @@ describe('agent CLI auth behavior', () => {
|
|
|
644
644
|
const claimExit = await runAuthCli(['claim', 'req-admin-cli', '--json']);
|
|
645
645
|
expect(claimExit).toBe(0);
|
|
646
646
|
|
|
647
|
+
process.env.AURA_TOKEN = 'session-admin-token';
|
|
647
648
|
const firstReadExit = await runAgentCli(['get', 'github', '--reqId', 'req-admin-cli']);
|
|
648
649
|
expect(firstReadExit).toBe(0);
|
|
649
650
|
|
|
@@ -661,6 +662,7 @@ describe('agent CLI auth behavior', () => {
|
|
|
661
662
|
const reqId = 'req-e2e-cli-claim';
|
|
662
663
|
const secret = 'req-e2e-cli-secret';
|
|
663
664
|
let oneShotReads = 0;
|
|
665
|
+
let originalCommandHeader = '';
|
|
664
666
|
|
|
665
667
|
vi.spyOn(globalThis, 'fetch').mockImplementation(async (input: RequestInfo | URL, init?: RequestInit) => {
|
|
666
668
|
const url = new URL(typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url);
|
|
@@ -694,6 +696,7 @@ describe('agent CLI auth behavior', () => {
|
|
|
694
696
|
if (url.pathname === '/credentials/cred-github/read' && method === 'POST') {
|
|
695
697
|
const headers = init?.headers as Record<string, string>;
|
|
696
698
|
if (headers.Authorization === 'Bearer read-token') {
|
|
699
|
+
originalCommandHeader = headers['X-Aura-Original-Command'] || headers['x-aura-original-command'] || '';
|
|
697
700
|
return new Response(JSON.stringify({
|
|
698
701
|
contractVersion: 'v1',
|
|
699
702
|
error: 'Excluded credential fields require human approval',
|
|
@@ -733,6 +736,7 @@ describe('agent CLI auth behavior', () => {
|
|
|
733
736
|
status: 'approved',
|
|
734
737
|
encryptedToken: 'one-shot-token',
|
|
735
738
|
ttl: 60,
|
|
739
|
+
retryCommand: `npx auramaxx get github --json --reqId ${reqId}`,
|
|
736
740
|
}), { status: 200, headers: { 'Content-Type': 'application/json' } });
|
|
737
741
|
}
|
|
738
742
|
|
|
@@ -786,6 +790,8 @@ describe('agent CLI auth behavior', () => {
|
|
|
786
790
|
const claimPayload = readJsonPayload(claimed);
|
|
787
791
|
expect(claimPayload.claimStatus).toBe('approved');
|
|
788
792
|
expect(claimPayload.retryReady).toBe(true);
|
|
793
|
+
expect(claimPayload.retryCommand).toBe(`npx auramaxx get github --json --reqId ${reqId}`);
|
|
794
|
+
expect(originalCommandHeader).toBe('npx auramaxx get github --json');
|
|
789
795
|
|
|
790
796
|
const retried = await runWithCapture(() => runAgentCli(['get', 'github', '--reqId', reqId, '--json']));
|
|
791
797
|
expect(retried.exitCode).toBe(0);
|
|
@@ -1282,8 +1288,9 @@ describe('agent CLI auth behavior', () => {
|
|
|
1282
1288
|
expect(payload.retryReady).toBe(false);
|
|
1283
1289
|
});
|
|
1284
1290
|
|
|
1285
|
-
it('expired one-shot reqId fails deterministically and
|
|
1291
|
+
it('expired one-shot reqId fails deterministically and does not continue to read', async () => {
|
|
1286
1292
|
process.env.WALLET_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), 'auramaxx-agent-auth-'));
|
|
1293
|
+
process.env.AURA_TOKEN = 'env-token';
|
|
1287
1294
|
putClaimedToken({
|
|
1288
1295
|
reqId: 'req-expired-oneshot',
|
|
1289
1296
|
token: 'claimed-one-shot',
|
|
@@ -1292,11 +1299,6 @@ describe('agent CLI auth behavior', () => {
|
|
|
1292
1299
|
credentialId: 'cred-github',
|
|
1293
1300
|
credentialName: 'github',
|
|
1294
1301
|
});
|
|
1295
|
-
putActiveSessionToken({
|
|
1296
|
-
token: 'session-fallback-token',
|
|
1297
|
-
privateKeyPem: 'mock-private-key',
|
|
1298
|
-
ttlSeconds: 120,
|
|
1299
|
-
});
|
|
1300
1302
|
|
|
1301
1303
|
const realNow = Date.now();
|
|
1302
1304
|
const nowSpy = vi.spyOn(Date, 'now').mockReturnValue(realNow + 121_000);
|
|
@@ -1305,13 +1307,6 @@ describe('agent CLI auth behavior', () => {
|
|
|
1305
1307
|
const url = new URL(typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url);
|
|
1306
1308
|
const method = init?.method || 'GET';
|
|
1307
1309
|
|
|
1308
|
-
if (url.pathname === '/auth/validate' && method === 'POST') {
|
|
1309
|
-
return new Response(JSON.stringify({ valid: true }), {
|
|
1310
|
-
status: 200,
|
|
1311
|
-
headers: { 'Content-Type': 'application/json' },
|
|
1312
|
-
});
|
|
1313
|
-
}
|
|
1314
|
-
|
|
1315
1310
|
if (url.pathname === '/credentials' && method === 'GET' && url.searchParams.get('q') === 'github') {
|
|
1316
1311
|
return new Response(JSON.stringify({
|
|
1317
1312
|
credentials: [{
|
|
@@ -1391,28 +1386,23 @@ describe('agent CLI auth behavior', () => {
|
|
|
1391
1386
|
expect(logSpy).toHaveBeenCalledWith('No credentials found.');
|
|
1392
1387
|
});
|
|
1393
1388
|
|
|
1394
|
-
it('
|
|
1389
|
+
it('ignores stored session token and uses /auth fallback when socket bootstrap fails', async () => {
|
|
1395
1390
|
process.env.WALLET_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), 'auramaxx-agent-auth-'));
|
|
1396
1391
|
putActiveSessionToken({
|
|
1397
1392
|
token: 'stored-session-token',
|
|
1398
1393
|
privateKeyPem: 'mock-private-key',
|
|
1399
1394
|
ttlSeconds: 120,
|
|
1400
1395
|
});
|
|
1396
|
+
mocks.bootstrapViaSocket.mockRejectedValueOnce(new Error('Cannot connect to AuraMaxx: connect ENOENT /tmp/aura-cli.sock'));
|
|
1397
|
+
mocks.bootstrapViaAuthRequest.mockResolvedValueOnce('fallback-token');
|
|
1401
1398
|
|
|
1402
1399
|
const fetchSpy = vi.spyOn(globalThis, 'fetch').mockImplementation(async (input: RequestInfo | URL, init?: RequestInit) => {
|
|
1403
1400
|
const url = new URL(typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url);
|
|
1404
1401
|
const method = init?.method || 'GET';
|
|
1405
1402
|
|
|
1406
|
-
if (url.pathname === '/auth/validate' && method === 'POST') {
|
|
1407
|
-
return new Response(JSON.stringify({ valid: true }), {
|
|
1408
|
-
status: 200,
|
|
1409
|
-
headers: { 'Content-Type': 'application/json' },
|
|
1410
|
-
});
|
|
1411
|
-
}
|
|
1412
|
-
|
|
1413
1403
|
if (url.pathname === '/credentials' && method === 'GET') {
|
|
1414
1404
|
const headers = init?.headers as Record<string, string>;
|
|
1415
|
-
expect(headers.Authorization).toBe('Bearer
|
|
1405
|
+
expect(headers.Authorization).toBe('Bearer fallback-token');
|
|
1416
1406
|
return new Response(JSON.stringify({ credentials: [] }), {
|
|
1417
1407
|
status: 200,
|
|
1418
1408
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -1426,18 +1416,15 @@ describe('agent CLI auth behavior', () => {
|
|
|
1426
1416
|
const exitCode = await runAgentCli(['list']);
|
|
1427
1417
|
|
|
1428
1418
|
expect(exitCode).toBe(0);
|
|
1429
|
-
expect(mocks.bootstrapViaSocket).
|
|
1430
|
-
expect(
|
|
1419
|
+
expect(mocks.bootstrapViaSocket).toHaveBeenCalledTimes(1);
|
|
1420
|
+
expect(mocks.bootstrapViaAuthRequest).toHaveBeenCalledTimes(1);
|
|
1421
|
+
expect(fetchSpy.mock.calls.some(([input]) => String(input).includes('/auth/validate'))).toBe(false);
|
|
1431
1422
|
expect(logSpy).toHaveBeenCalledWith('No credentials found.');
|
|
1432
1423
|
});
|
|
1433
1424
|
|
|
1434
|
-
it('uses delegated read key for
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
token: 'stored-session-token',
|
|
1438
|
-
privateKeyPem: 'stored-session-private-key',
|
|
1439
|
-
ttlSeconds: 120,
|
|
1440
|
-
});
|
|
1425
|
+
it('uses delegated read key for /auth fallback tokens when read token issuance succeeds', async () => {
|
|
1426
|
+
mocks.bootstrapViaSocket.mockRejectedValueOnce(new Error('Cannot connect to AuraMaxx: connect ENOENT /tmp/aura-cli.sock'));
|
|
1427
|
+
mocks.bootstrapViaAuthRequest.mockResolvedValueOnce('fallback-auth-token');
|
|
1441
1428
|
mocks.generateEphemeralKeypair.mockReturnValueOnce({
|
|
1442
1429
|
publicKeyPem: 'ephemeral-public-key',
|
|
1443
1430
|
privateKeyPem: 'ephemeral-private-key',
|
|
@@ -1453,13 +1440,6 @@ describe('agent CLI auth behavior', () => {
|
|
|
1453
1440
|
const url = new URL(typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url);
|
|
1454
1441
|
const method = init?.method || 'GET';
|
|
1455
1442
|
|
|
1456
|
-
if (url.pathname === '/auth/validate' && method === 'POST') {
|
|
1457
|
-
return new Response(JSON.stringify({ valid: true }), {
|
|
1458
|
-
status: 200,
|
|
1459
|
-
headers: { 'Content-Type': 'application/json' },
|
|
1460
|
-
});
|
|
1461
|
-
}
|
|
1462
|
-
|
|
1463
1443
|
if (url.pathname === '/credentials' && method === 'GET' && url.searchParams.get('q') === 'github') {
|
|
1464
1444
|
return new Response(JSON.stringify({
|
|
1465
1445
|
credentials: [{
|
|
@@ -1506,6 +1486,7 @@ describe('agent CLI auth behavior', () => {
|
|
|
1506
1486
|
|
|
1507
1487
|
expect(exitCode).toBe(0);
|
|
1508
1488
|
expect(mocks.createReadToken).toHaveBeenCalledTimes(1);
|
|
1489
|
+
expect(mocks.createReadToken.mock.calls[0]?.[1]).toBe('fallback-auth-token');
|
|
1509
1490
|
expect(logSpy).toHaveBeenCalledWith('enc(gh-secret)');
|
|
1510
1491
|
});
|
|
1511
1492
|
});
|
|
@@ -56,6 +56,24 @@ describe('agent CLI', () => {
|
|
|
56
56
|
expect(result.positional).toEqual(['aws']);
|
|
57
57
|
});
|
|
58
58
|
|
|
59
|
+
it('parses get with --req-id alias', () => {
|
|
60
|
+
const result = parseArgs(['get', 'aws', '--req-id', 'req-123']);
|
|
61
|
+
expect(result.reqId).toBe('req-123');
|
|
62
|
+
expect(result.positional).toEqual(['aws']);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('parses get with --requestId alias', () => {
|
|
66
|
+
const result = parseArgs(['get', 'aws', '--requestId', 'req-123']);
|
|
67
|
+
expect(result.reqId).toBe('req-123');
|
|
68
|
+
expect(result.positional).toEqual(['aws']);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('parses get with --request-id alias', () => {
|
|
72
|
+
const result = parseArgs(['get', 'aws', '--request-id', 'req-123']);
|
|
73
|
+
expect(result.reqId).toBe('req-123');
|
|
74
|
+
expect(result.positional).toEqual(['aws']);
|
|
75
|
+
});
|
|
76
|
+
|
|
59
77
|
it('parses list', () => {
|
|
60
78
|
const result = parseArgs(['list']);
|
|
61
79
|
expect(result.subcommand).toBe('list');
|
|
@@ -94,9 +94,10 @@ describe('CLI auth --action flag parsing', () => {
|
|
|
94
94
|
expect(parsed.noWait).toBe(true);
|
|
95
95
|
});
|
|
96
96
|
|
|
97
|
-
it('
|
|
97
|
+
it('leaves profile/version unset when omitted (resolved later from defaults)', () => {
|
|
98
98
|
const parsed = parseRequestFlags(['--agent-id', 'test-cli']);
|
|
99
|
-
expect(parsed.profile).
|
|
99
|
+
expect(parsed.profile).toBeUndefined();
|
|
100
|
+
expect(parsed.profileVersion).toBeUndefined();
|
|
100
101
|
});
|
|
101
102
|
|
|
102
103
|
it('supports explicit --wait legacy mode', () => {
|