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.
Files changed (342) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +240 -223
  3. package/.next/app-path-routes-manifest.json +8 -7
  4. package/.next/build-manifest.json +14 -14
  5. package/.next/prerender-manifest.json +53 -29
  6. package/.next/react-loadable-manifest.json +41 -41
  7. package/.next/routes-manifest.json +6 -0
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_not-found.html +1 -1
  10. package/.next/server/app/_not-found.rsc +12 -12
  11. package/.next/server/app/api/[...doc]/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/agent-requests/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/apps/install/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/apps/manifests/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/apps/static/[...path]/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/docs/plain/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/events/route.js +1 -19
  18. package/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/import-from-openclaw/[channel]/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/import-from-openclaw/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/import-from-openclaw/validate/[channel]/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/restart/route.js +1 -1
  24. package/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/update/route.js +63 -1
  26. package/.next/server/app/api/update/route.js.nft.json +1 -1
  27. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/version/route.js +1 -1
  29. package/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/workspace/[id]/apps/[wid]/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/workspace/[id]/apps/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/workspace/[id]/export/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/workspace/[id]/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/workspace/config/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/workspace/import/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/workspace/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/app-legacy-do-not-use/page.js +1 -1
  38. package/.next/server/app/app-legacy-do-not-use/page.js.nft.json +1 -1
  39. package/.next/server/app/app-legacy-do-not-use/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/app-legacy-do-not-use.html +1 -1
  41. package/.next/server/app/app-legacy-do-not-use.rsc +14 -14
  42. package/.next/server/app/approve/[actionId]/page.js +1 -1
  43. package/.next/server/app/approve/[actionId]/page_client-reference-manifest.js +1 -1
  44. package/.next/server/app/docs/[...doc]/page_client-reference-manifest.js +1 -1
  45. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  46. package/.next/server/app/health/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/health.html +1 -1
  48. package/.next/server/app/health.rsc +13 -13
  49. package/.next/server/app/hello/page_client-reference-manifest.js +1 -1
  50. package/.next/server/app/hello.html +1 -1
  51. package/.next/server/app/hello.rsc +14 -14
  52. package/.next/server/app/index.html +1 -1
  53. package/.next/server/app/index.rsc +18 -21
  54. package/.next/server/app/page.js +3 -3
  55. package/.next/server/app/page.js.nft.json +1 -1
  56. package/.next/server/app/page_client-reference-manifest.js +1 -1
  57. package/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  58. package/.next/server/app/privacy.html +1 -1
  59. package/.next/server/app/privacy.rsc +13 -13
  60. package/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
  61. package/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  62. package/.next/server/app/terms.html +1 -1
  63. package/.next/server/app/terms.rsc +13 -13
  64. package/.next/server/app/yo/page.js +2 -0
  65. package/.next/server/app/yo/page.js.nft.json +1 -0
  66. package/.next/server/app/yo/page_client-reference-manifest.js +1 -0
  67. package/.next/server/app/yo.html +1 -0
  68. package/.next/server/app/yo.meta +7 -0
  69. package/.next/server/app/yo.rsc +23 -0
  70. package/.next/server/app-paths-manifest.json +8 -7
  71. package/.next/server/chunks/2145.js +1 -1
  72. package/.next/server/chunks/2460.js +1 -1
  73. package/.next/server/chunks/5246.js +1 -1
  74. package/.next/server/chunks/5678.js +1 -1
  75. package/.next/server/chunks/5784.js +1 -1
  76. package/.next/server/chunks/6086.js +2 -20
  77. package/.next/server/chunks/{5553.js → 6415.js} +2 -2
  78. package/.next/server/chunks/7935.js +2 -2
  79. package/.next/server/functions-config-manifest.json +1 -1
  80. package/.next/server/instrumentation.js +1 -1
  81. package/.next/server/middleware-build-manifest.js +1 -1
  82. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  83. package/.next/server/pages/404.html +1 -1
  84. package/.next/server/pages/500.html +1 -1
  85. package/.next/server/server-reference-manifest.json +1 -1
  86. package/.next/server/webpack-runtime.js +1 -1
  87. package/.next/static/WshFGr6RxGYP6AbWuT9OG/_buildManifest.js +1 -0
  88. package/.next/static/chunks/1168.aaac1edbb597fe5a.js +1 -0
  89. package/.next/static/chunks/1255-7999eac54f80a49f.js +1 -0
  90. package/.next/static/chunks/142-fa9752f53a551f63.js +1 -0
  91. package/.next/static/chunks/2505.d54ccadc42f4e3d1.js +1 -0
  92. package/.next/static/chunks/2619-04bc32f026a0d946.js +1 -0
  93. package/.next/static/chunks/2927.7e00cc878d9a3f52.js +1 -0
  94. package/.next/static/chunks/3573-1b41d7b8a000d015.js +1 -0
  95. package/.next/static/chunks/3609.ded5a5306e18af9c.js +1 -0
  96. package/.next/static/chunks/3667-1db7bd03948e60df.js +1 -0
  97. package/.next/static/chunks/3826.a73d4a88d8c09030.js +1 -0
  98. package/.next/static/chunks/{3a91511d-648a2ba3dad7df0c.js → 3a91511d-ba215c0b5dc21ba9.js} +1 -1
  99. package/.next/static/chunks/4256.48407d9abad5ea33.js +1 -0
  100. package/.next/static/chunks/4685-7f53bbfc4a9845eb.js +1 -0
  101. package/.next/static/chunks/4901-ba6a32818662e70a.js +1 -0
  102. package/.next/static/chunks/4919-7e7cdd5efc9f2110.js +1 -0
  103. package/.next/static/chunks/4bd1b696-100b9d70ed4e49c1.js +1 -0
  104. package/.next/static/chunks/5336-233ec7ab3807267c.js +1 -0
  105. package/.next/static/chunks/5442-b5bb869e832e8967.js +1 -0
  106. package/.next/static/chunks/6233-97a810aa272af547.js +1 -0
  107. package/.next/static/chunks/626.a5109d16f9eca1f6.js +1 -0
  108. package/.next/static/chunks/6872-faea0f088ab2d450.js +1 -0
  109. package/.next/static/chunks/7338-3ce17a93614f1d77.js +59 -0
  110. package/.next/static/chunks/7394-4bdb1feefad1a74a.js +1 -0
  111. package/.next/static/chunks/7616-1129bcb3eee8d315.js +1 -0
  112. package/.next/static/chunks/786-26deffb41572cbb3.js +1 -0
  113. package/.next/static/chunks/8273-8e92d34180669ca9.js +1 -0
  114. package/.next/static/chunks/8357.5dee1e0c4e5bb091.js +1 -0
  115. package/.next/static/chunks/9062-2bc2d089f9c9c6ba.js +1 -0
  116. package/.next/static/chunks/9380.f198afbf0c6b5369.js +1 -0
  117. package/.next/static/chunks/app/_not-found/page-5a8c6a29f762fa58.js +1 -0
  118. package/.next/static/chunks/app/api/[...doc]/page-f0852f35f0fd1d44.js +1 -0
  119. package/.next/static/chunks/app/api/agent-requests/route-cf84f975aad4c719.js +1 -0
  120. package/.next/static/chunks/app/api/apps/install/route-cf84f975aad4c719.js +1 -0
  121. package/.next/static/chunks/app/api/apps/manifests/route-cf84f975aad4c719.js +1 -0
  122. package/.next/static/chunks/app/api/apps/static/[...path]/route-cf84f975aad4c719.js +1 -0
  123. package/.next/static/chunks/app/api/docs/plain/route-cf84f975aad4c719.js +1 -0
  124. package/.next/static/chunks/app/api/events/route-cf84f975aad4c719.js +1 -0
  125. package/.next/static/chunks/app/api/import-from-openclaw/[channel]/route-cf84f975aad4c719.js +1 -0
  126. package/.next/static/chunks/app/api/import-from-openclaw/route-cf84f975aad4c719.js +1 -0
  127. package/.next/static/chunks/app/api/import-from-openclaw/validate/[channel]/route-cf84f975aad4c719.js +1 -0
  128. package/.next/static/chunks/app/api/page-cc59bebcc0d2c01d.js +1 -0
  129. package/.next/static/chunks/app/api/restart/route-cf84f975aad4c719.js +1 -0
  130. package/.next/static/chunks/app/api/update/route-cf84f975aad4c719.js +1 -0
  131. package/.next/static/chunks/app/api/version/route-cf84f975aad4c719.js +1 -0
  132. package/.next/static/chunks/app/api/workspace/[id]/apps/[wid]/route-cf84f975aad4c719.js +1 -0
  133. package/.next/static/chunks/app/api/workspace/[id]/apps/route-cf84f975aad4c719.js +1 -0
  134. package/.next/static/chunks/app/api/workspace/[id]/export/route-cf84f975aad4c719.js +1 -0
  135. package/.next/static/chunks/app/api/workspace/[id]/route-cf84f975aad4c719.js +1 -0
  136. package/.next/static/chunks/app/api/workspace/config/route-cf84f975aad4c719.js +1 -0
  137. package/.next/static/chunks/app/api/workspace/import/route-cf84f975aad4c719.js +1 -0
  138. package/.next/static/chunks/app/api/workspace/route-cf84f975aad4c719.js +1 -0
  139. package/.next/static/chunks/app/app-legacy-do-not-use/page-e5dc864e92d90ca7.js +1 -0
  140. package/.next/static/chunks/app/approve/[actionId]/page-2acca1f490424f21.js +1 -0
  141. package/.next/static/chunks/app/docs/[...doc]/page-8e2a2d036caab242.js +1 -0
  142. package/.next/static/chunks/app/docs/page-acf872a03ff79893.js +1 -0
  143. package/.next/static/chunks/app/error-66f983b7769dabfa.js +1 -0
  144. package/.next/static/chunks/app/health/page-c9185854ed9c86d0.js +1 -0
  145. package/.next/static/chunks/app/hello/page-74c9f4deaa4b03dd.js +1 -0
  146. package/.next/static/chunks/app/layout-af8d9969c7aeb758.js +1 -0
  147. package/.next/static/chunks/app/page-16dfcd1c7cc88bcc.js +1 -0
  148. package/.next/static/chunks/app/privacy/page-8e2d17079355c2cc.js +1 -0
  149. package/.next/static/chunks/app/share/[token]/page-5dd9b0418eee411f.js +1 -0
  150. package/.next/static/chunks/app/terms/page-8e2d17079355c2cc.js +1 -0
  151. package/.next/static/chunks/app/yo/layout-cf84f975aad4c719.js +1 -0
  152. package/.next/static/chunks/app/yo/page-719dc5f213fdfb30.js +1 -0
  153. package/.next/static/chunks/framework-a32a2a465584c0bc.js +1 -0
  154. package/.next/static/chunks/main-0f0f9142f74e7215.js +1 -0
  155. package/.next/static/chunks/main-app-24f0c92ba10af457.js +1 -0
  156. package/.next/static/chunks/pages/_app-4b3fb5e477a0267f.js +1 -0
  157. package/.next/static/chunks/pages/_error-c970d8b55ace1b48.js +1 -0
  158. package/.next/static/chunks/{webpack-768de8b7d6a7a27a.js → webpack-79ad58260e9b10b4.js} +1 -1
  159. package/.next/static/css/83cd401584ab787f.css +3 -0
  160. package/.next/trace +28 -28
  161. package/.next/types/app/yo/layout.ts +84 -0
  162. package/.next/types/app/yo/page.ts +84 -0
  163. package/.next/types/routes.d.ts +4 -2
  164. package/.next/types/validator.ts +18 -0
  165. package/bin/auramaxx.js +11 -26
  166. package/docs/ARCHITECTURE.md +1 -1
  167. package/docs/AUTH.md +6 -3
  168. package/docs/CLI.md +2 -0
  169. package/docs/MCP.md +2 -0
  170. package/docs/TROUBLESHOOTING.md +24 -0
  171. package/docs/credentials.md +2 -0
  172. package/package.json +2 -1
  173. package/prisma/migrations/20260227214000_update_agent_action_ttl_defaults/migration.sql +19 -0
  174. package/public/0a167e5e-4f52-4715-ae23-bf63d259a6b1.png +0 -0
  175. package/public/141ec92c-6780-4b23-838f-9a7bf1e91bb8.png +0 -0
  176. package/public/3afc4935-92cb-42af-9624-0b1341c12a5e.png +0 -0
  177. package/public/43947df5-dbcf-4e49-ab8b-41b9162c0410.png +0 -0
  178. package/public/5aeae9ce-0d38-49ea-8fd1-167892a04a85.png +0 -0
  179. package/public/660e4ea3-a3a6-4be4-a8ca-2cb74c51dfb5.png +0 -0
  180. package/public/733f02d7-6b58-4ba6-a5c8-d062cd205e1d.png +0 -0
  181. package/public/a32d65cb-95b0-4977-be6b-cf69f515afbe.png +0 -0
  182. package/public/agent1.png +0 -0
  183. package/public/agent10.png +0 -0
  184. package/public/agent2.png +0 -0
  185. package/public/agent3.png +0 -0
  186. package/public/agent4.png +0 -0
  187. package/public/agent5.png +0 -0
  188. package/public/agent6.png +0 -0
  189. package/public/agent7.png +0 -0
  190. package/public/agent8.png +0 -0
  191. package/public/agent9.png +0 -0
  192. package/public/c4938305-b811-4ccc-91db-94d309734827.png +0 -0
  193. package/public/f2ca6825-a4f3-4107-815c-51ee740dfc09.png +0 -0
  194. package/public/llm.txt +2 -0
  195. package/public/llms.txt +39 -0
  196. package/public/ss-dark1.png +0 -0
  197. package/public/ss-dark1.webp +0 -0
  198. package/public/ss-dark2.png +0 -0
  199. package/public/ss-dark2.webp +0 -0
  200. package/public/ss-dark3.png +0 -0
  201. package/public/ss-dark3.webp +0 -0
  202. package/public/ss-light1.png +0 -0
  203. package/public/ss-light1.webp +0 -0
  204. package/public/ss-light2.png +0 -0
  205. package/public/ss-light2.webp +0 -0
  206. package/public/ss-light3.png +0 -0
  207. package/public/ss-light3.webp +0 -0
  208. package/shared/agent-profile-schema.ts +81 -0
  209. package/shared/credential-field-schema.ts +12 -0
  210. package/skills/auramaxx/SKILL.md +71 -691
  211. package/src/app/UnlockPageClient.tsx +1939 -0
  212. package/src/app/api/page.tsx +8 -9
  213. package/src/app/api/restart/route.ts +2 -18
  214. package/src/app/api/update/route.ts +104 -51
  215. package/src/app/approve/[actionId]/page.tsx +4 -1
  216. package/src/app/docs/DocsPageContent.tsx +3 -3
  217. package/src/app/globals.css +94 -0
  218. package/src/app/layout.tsx +1 -0
  219. package/src/app/page.tsx +25 -1935
  220. package/src/app/yo/layout.tsx +29 -0
  221. package/src/app/yo/page.tsx +528 -0
  222. package/src/components/HumanActionBar.tsx +34 -8
  223. package/src/components/agent/AgentSidebar.tsx +3 -1
  224. package/src/components/agent/CredentialAgent.tsx +5 -1
  225. package/src/components/agent/CredentialDetail.tsx +32 -1
  226. package/src/components/agent/CredentialForm.tsx +94 -7
  227. package/src/components/agent/CredentialRow.tsx +8 -1
  228. package/src/components/agent/credentialFormName.ts +22 -1
  229. package/src/components/agent/types.ts +2 -2
  230. package/src/components/design-system/Modal.tsx +14 -1
  231. package/src/hooks/useUpdateChecker.ts +17 -1
  232. package/src/lib/pino.ts +77 -8
  233. package/src/server/cli/commands/actions.ts +1 -1
  234. package/src/server/cli/commands/agent.ts +110 -65
  235. package/src/server/cli/commands/approve.ts +1 -1
  236. package/src/server/cli/commands/auth.ts +81 -20
  237. package/src/server/cli/commands/start.ts +42 -3
  238. package/src/server/cli/commands/token.ts +2 -2
  239. package/src/server/cli/lib/escalation.ts +109 -24
  240. package/src/server/cli/lib/process.ts +54 -1
  241. package/src/server/cli/socket.ts +1 -1
  242. package/src/server/index.ts +2 -0
  243. package/src/server/lib/agent-profile-records.ts +72 -0
  244. package/src/server/lib/credential-transport.ts +27 -11
  245. package/src/server/lib/defaults.ts +3 -3
  246. package/src/server/lib/escalation-responder.ts +1 -1
  247. package/src/server/lib/resolve-action.ts +2 -2
  248. package/src/server/lib/update-check.ts +1 -1
  249. package/src/server/mcp/server.ts +6 -1
  250. package/src/server/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  251. package/src/server/routes/actions.ts +2 -2
  252. package/src/server/routes/agent-profiles.ts +82 -0
  253. package/src/server/routes/auth.ts +39 -4
  254. package/src/server/routes/credentials.ts +18 -0
  255. package/src/server/tests/cli/agent-auth.test.ts +20 -39
  256. package/src/server/tests/cli/agent.test.ts +18 -0
  257. package/src/server/tests/cli/auth-action-flag.test.ts +3 -2
  258. package/src/server/tests/cli/bin-entrypoint.test.ts +35 -11
  259. package/src/server/tests/cli/escalation.test.ts +7 -3
  260. package/src/server/tests/cli/process.test.ts +3 -3
  261. package/src/server/tests/cli/socket.test.ts +2 -2
  262. package/src/server/tests/cli/start-run.test.ts +24 -1
  263. package/src/server/tests/endpoints/actions.test.ts +2 -2
  264. package/src/server/tests/endpoints/agent-profiles.test.ts +117 -0
  265. package/src/server/tests/endpoints/auth.test.ts +34 -0
  266. package/src/server/tests/lib/credential-transport.test.ts +68 -2
  267. package/src/server/tests/lib/defaults.test.ts +2 -2
  268. package/src/server/tests/lib/escalation-responder.test.ts +2 -2
  269. package/src/server/tests/lib/update-check.test.ts +1 -1
  270. package/src/server/tests/setup.ts +7 -0
  271. package/src/server/tsconfig.tsbuildinfo +1 -1
  272. package/src/server/types.ts +1 -1
  273. package/.next/static/AcaCjQ4akovHBUnVGPpfN/_buildManifest.js +0 -1
  274. package/.next/static/chunks/1168.63dbb444a33b1867.js +0 -1
  275. package/.next/static/chunks/1255-e8718b02724690dd.js +0 -1
  276. package/.next/static/chunks/142-aeaf7ffa9c53516d.js +0 -1
  277. package/.next/static/chunks/2505.22aaa333fd65908f.js +0 -1
  278. package/.next/static/chunks/2619-3c9e02e22d10480a.js +0 -1
  279. package/.next/static/chunks/2927.e7e9e2a1b8d2dc61.js +0 -1
  280. package/.next/static/chunks/3573-27e17f4ff2dd86ed.js +0 -1
  281. package/.next/static/chunks/3609.6f8e0ecd6de9566c.js +0 -1
  282. package/.next/static/chunks/3667-d6770121629db38b.js +0 -1
  283. package/.next/static/chunks/3826.7dfe96467cd74e45.js +0 -1
  284. package/.next/static/chunks/4256.50cb375c979ffd5a.js +0 -1
  285. package/.next/static/chunks/4685-3f8d92f574366fec.js +0 -1
  286. package/.next/static/chunks/4901-54c1ac380b7b43bb.js +0 -1
  287. package/.next/static/chunks/4919-fe6f1553abfc9420.js +0 -1
  288. package/.next/static/chunks/4bd1b696-f785427dddbba9fb.js +0 -1
  289. package/.next/static/chunks/5336-bd251f91235f7c11.js +0 -1
  290. package/.next/static/chunks/5442-be197c885bf12079.js +0 -1
  291. package/.next/static/chunks/5553-c8b86fe3513fce04.js +0 -59
  292. package/.next/static/chunks/6233-44e6fe57a552a816.js +0 -1
  293. package/.next/static/chunks/626.2583673a0386a81b.js +0 -1
  294. package/.next/static/chunks/6872-6442f2f5cce36ce5.js +0 -1
  295. package/.next/static/chunks/7411-3ca797c21b722ccd.js +0 -1
  296. package/.next/static/chunks/7616-b8bd37ce1f735d6f.js +0 -1
  297. package/.next/static/chunks/786-9ed39f96091b2be4.js +0 -1
  298. package/.next/static/chunks/8273-922091226ba84a94.js +0 -1
  299. package/.next/static/chunks/8357.6159472717ff7d11.js +0 -1
  300. package/.next/static/chunks/9062-3eb1607c96486f88.js +0 -1
  301. package/.next/static/chunks/9380.93f361baab2eefdf.js +0 -1
  302. package/.next/static/chunks/app/_not-found/page-c3b87025baf0a9c2.js +0 -1
  303. package/.next/static/chunks/app/api/[...doc]/page-790c4b33ba1fde4a.js +0 -1
  304. package/.next/static/chunks/app/api/agent-requests/route-e83b12cbab2e8707.js +0 -1
  305. package/.next/static/chunks/app/api/apps/install/route-e83b12cbab2e8707.js +0 -1
  306. package/.next/static/chunks/app/api/apps/manifests/route-e83b12cbab2e8707.js +0 -1
  307. package/.next/static/chunks/app/api/apps/static/[...path]/route-e83b12cbab2e8707.js +0 -1
  308. package/.next/static/chunks/app/api/docs/plain/route-e83b12cbab2e8707.js +0 -1
  309. package/.next/static/chunks/app/api/events/route-e83b12cbab2e8707.js +0 -1
  310. package/.next/static/chunks/app/api/import-from-openclaw/[channel]/route-e83b12cbab2e8707.js +0 -1
  311. package/.next/static/chunks/app/api/import-from-openclaw/route-e83b12cbab2e8707.js +0 -1
  312. package/.next/static/chunks/app/api/import-from-openclaw/validate/[channel]/route-e83b12cbab2e8707.js +0 -1
  313. package/.next/static/chunks/app/api/page-b53f9aa17a4c5201.js +0 -1
  314. package/.next/static/chunks/app/api/restart/route-e83b12cbab2e8707.js +0 -1
  315. package/.next/static/chunks/app/api/update/route-e83b12cbab2e8707.js +0 -1
  316. package/.next/static/chunks/app/api/version/route-e83b12cbab2e8707.js +0 -1
  317. package/.next/static/chunks/app/api/workspace/[id]/apps/[wid]/route-e83b12cbab2e8707.js +0 -1
  318. package/.next/static/chunks/app/api/workspace/[id]/apps/route-e83b12cbab2e8707.js +0 -1
  319. package/.next/static/chunks/app/api/workspace/[id]/export/route-e83b12cbab2e8707.js +0 -1
  320. package/.next/static/chunks/app/api/workspace/[id]/route-e83b12cbab2e8707.js +0 -1
  321. package/.next/static/chunks/app/api/workspace/config/route-e83b12cbab2e8707.js +0 -1
  322. package/.next/static/chunks/app/api/workspace/import/route-e83b12cbab2e8707.js +0 -1
  323. package/.next/static/chunks/app/api/workspace/route-e83b12cbab2e8707.js +0 -1
  324. package/.next/static/chunks/app/app-legacy-do-not-use/page-0052191daef60036.js +0 -1
  325. package/.next/static/chunks/app/approve/[actionId]/page-45cd3b8fa062d5e5.js +0 -1
  326. package/.next/static/chunks/app/docs/[...doc]/page-632ac406200b66fe.js +0 -1
  327. package/.next/static/chunks/app/docs/page-b7556394709b43df.js +0 -1
  328. package/.next/static/chunks/app/error-3d6057da512253d8.js +0 -1
  329. package/.next/static/chunks/app/health/page-80c985cd72328b74.js +0 -1
  330. package/.next/static/chunks/app/hello/page-fd71babcd192729b.js +0 -1
  331. package/.next/static/chunks/app/layout-285c6ef3f16bae63.js +0 -1
  332. package/.next/static/chunks/app/page-85017185df14c37b.js +0 -1
  333. package/.next/static/chunks/app/privacy/page-faf36cd0dde6dfa3.js +0 -1
  334. package/.next/static/chunks/app/share/[token]/page-22d51d6c5a47bb75.js +0 -1
  335. package/.next/static/chunks/app/terms/page-faf36cd0dde6dfa3.js +0 -1
  336. package/.next/static/chunks/framework-e60c938074ff7136.js +0 -1
  337. package/.next/static/chunks/main-447abf206d7ebd2f.js +0 -1
  338. package/.next/static/chunks/main-app-f63b86bdbf5b7b88.js +0 -1
  339. package/.next/static/chunks/pages/_app-6c8c2371b16a04b8.js +0 -1
  340. package/.next/static/chunks/pages/_error-94812ad32cad7365.js +0 -1
  341. package/.next/static/css/eb25c6452113486f.css +0 -3
  342. /package/.next/static/{AcaCjQ4akovHBUnVGPpfN → WshFGr6RxGYP6AbWuT9OG}/_ssgManifest.js +0 -0
@@ -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', 600);
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', 3600);
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: contract.flow.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: contract.flow.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: contract.flow.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: contract.flow.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.mockResolvedValueOnce('socket-token');
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 never falls back to session token', async () => {
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('uses stored session token when available and valid', async () => {
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 stored-session-token');
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).not.toHaveBeenCalled();
1430
- expect(fetchSpy.mock.calls.some(([input]) => String(input).endsWith('/auth/validate'))).toBe(true);
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 stored-session reads when read token issuance succeeds', async () => {
1435
- process.env.WALLET_DATA_DIR = fs.mkdtempSync(path.join(os.tmpdir(), 'auramaxx-agent-auth-'));
1436
- putActiveSessionToken({
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('defaults profile to dev when --profile is omitted', () => {
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).toBe('dev');
99
+ expect(parsed.profile).toBeUndefined();
100
+ expect(parsed.profileVersion).toBeUndefined();
100
101
  });
101
102
 
102
103
  it('supports explicit --wait legacy mode', () => {