@sapienx/agentos 0.5.7 → 0.5.9

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 (229) hide show
  1. package/bin/agentos.js +113 -2
  2. package/bin/terminal-boot.js +383 -76
  3. package/bundle/.next/BUILD_ID +1 -1
  4. package/bundle/.next/app-path-routes-manifest.json +9 -8
  5. package/bundle/.next/build-manifest.json +3 -3
  6. package/bundle/.next/prerender-manifest.json +3 -3
  7. package/bundle/.next/react-loadable-manifest.json +2 -2
  8. package/bundle/.next/required-server-files.json +1 -1
  9. package/bundle/.next/routes-manifest.json +6 -0
  10. package/bundle/.next/server/app/_global-error/page.js +2 -2
  11. package/bundle/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/bundle/.next/server/app/_global-error.html +1 -1
  13. package/bundle/.next/server/app/_global-error.rsc +1 -1
  14. package/bundle/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/bundle/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/bundle/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/bundle/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/bundle/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/bundle/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/bundle/.next/server/app/_not-found/page.js +2 -2
  21. package/bundle/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  22. package/bundle/.next/server/app/_not-found.html +1 -1
  23. package/bundle/.next/server/app/_not-found.rsc +2 -2
  24. package/bundle/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  25. package/bundle/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  26. package/bundle/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  27. package/bundle/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  28. package/bundle/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  29. package/bundle/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  30. package/bundle/.next/server/app/agents/page.js +2 -2
  31. package/bundle/.next/server/app/agents/page.js.nft.json +1 -1
  32. package/bundle/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  33. package/bundle/.next/server/app/api/agents/[agentId]/chat/route.js +4 -4
  34. package/bundle/.next/server/app/api/agents/[agentId]/chat/route.js.nft.json +1 -1
  35. package/bundle/.next/server/app/api/agents/route.js +1 -1
  36. package/bundle/.next/server/app/api/agents/route.js.nft.json +1 -1
  37. package/bundle/.next/server/app/api/diagnostics/route.js +1 -1
  38. package/bundle/.next/server/app/api/diagnostics/route.js.nft.json +1 -1
  39. package/bundle/.next/server/app/api/files/reveal/route.js +1 -1
  40. package/bundle/.next/server/app/api/gateway/control/route.js +1 -1
  41. package/bundle/.next/server/app/api/gateway/control/route.js.nft.json +1 -1
  42. package/bundle/.next/server/app/api/integrations/[integrationId]/status/route.js +1 -1
  43. package/bundle/.next/server/app/api/mission/route.js +1 -1
  44. package/bundle/.next/server/app/api/mission/route.js.nft.json +1 -1
  45. package/bundle/.next/server/app/api/models/catalog/route.js +2 -2
  46. package/bundle/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
  47. package/bundle/.next/server/app/api/models/providers/route.js +2 -2
  48. package/bundle/.next/server/app/api/models/providers/route.js.nft.json +1 -1
  49. package/bundle/.next/server/app/api/onboarding/models/route.js +3 -3
  50. package/bundle/.next/server/app/api/onboarding/models/route.js.nft.json +1 -1
  51. package/bundle/.next/server/app/api/onboarding/route.js +2 -2
  52. package/bundle/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  53. package/bundle/.next/server/app/api/openclaw/capabilities/route.js +1 -1
  54. package/bundle/.next/server/app/api/openclaw/compatibility-smoke/route.js +1 -0
  55. package/bundle/.next/server/app/api/openclaw/compatibility-smoke/route.js.nft.json +1 -0
  56. package/bundle/.next/server/app/api/openclaw/compatibility-smoke/route_client-reference-manifest.js +1 -0
  57. package/bundle/.next/server/app/api/planner/[planId]/deploy/route.js +2 -2
  58. package/bundle/.next/server/app/api/planner/[planId]/deploy/route.js.nft.json +1 -1
  59. package/bundle/.next/server/app/api/planner/[planId]/document-rewrite/route.js +1 -1
  60. package/bundle/.next/server/app/api/planner/[planId]/document-rewrite/route.js.nft.json +1 -1
  61. package/bundle/.next/server/app/api/planner/[planId]/route.js +1 -1
  62. package/bundle/.next/server/app/api/planner/[planId]/route.js.nft.json +1 -1
  63. package/bundle/.next/server/app/api/planner/[planId]/simulate/route.js +1 -1
  64. package/bundle/.next/server/app/api/planner/[planId]/simulate/route.js.nft.json +1 -1
  65. package/bundle/.next/server/app/api/planner/[planId]/turn/route.js +1 -1
  66. package/bundle/.next/server/app/api/planner/[planId]/turn/route.js.nft.json +1 -1
  67. package/bundle/.next/server/app/api/planner/route.js +1 -1
  68. package/bundle/.next/server/app/api/planner/route.js.nft.json +1 -1
  69. package/bundle/.next/server/app/api/reset/route.js +2 -2
  70. package/bundle/.next/server/app/api/reset/route.js.nft.json +1 -1
  71. package/bundle/.next/server/app/api/runtimes/[runtimeId]/route.js +1 -1
  72. package/bundle/.next/server/app/api/runtimes/[runtimeId]/route.js.nft.json +1 -1
  73. package/bundle/.next/server/app/api/settings/gateway/route.js +1 -1
  74. package/bundle/.next/server/app/api/settings/gateway/route.js.nft.json +1 -1
  75. package/bundle/.next/server/app/api/settings/openclaw-binary/route.js +1 -1
  76. package/bundle/.next/server/app/api/settings/openclaw-binary/route.js.nft.json +1 -1
  77. package/bundle/.next/server/app/api/settings/workspace-root/route.js +1 -1
  78. package/bundle/.next/server/app/api/settings/workspace-root/route.js.nft.json +1 -1
  79. package/bundle/.next/server/app/api/snapshot/route.js +1 -1
  80. package/bundle/.next/server/app/api/snapshot/route.js.nft.json +1 -1
  81. package/bundle/.next/server/app/api/stream/route.js +2 -2
  82. package/bundle/.next/server/app/api/stream/route.js.nft.json +1 -1
  83. package/bundle/.next/server/app/api/system/open-terminal/route.js +1 -1
  84. package/bundle/.next/server/app/api/tasks/[taskId]/abort/route.js +1 -1
  85. package/bundle/.next/server/app/api/tasks/[taskId]/abort/route.js.nft.json +1 -1
  86. package/bundle/.next/server/app/api/tasks/[taskId]/control/route.js +1 -1
  87. package/bundle/.next/server/app/api/tasks/[taskId]/control/route.js.nft.json +1 -1
  88. package/bundle/.next/server/app/api/tasks/[taskId]/stream/route.js +2 -2
  89. package/bundle/.next/server/app/api/tasks/[taskId]/stream/route.js.nft.json +1 -1
  90. package/bundle/.next/server/app/api/update/route.js +2 -2
  91. package/bundle/.next/server/app/api/update/route.js.nft.json +1 -1
  92. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/discovered-groups/route.js +1 -1
  93. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/discovered-groups/route.js.nft.json +1 -1
  94. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/route.js +1 -1
  95. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/route.js.nft.json +1 -1
  96. package/bundle/.next/server/app/api/workspaces/[workspaceId]/edit-draft/route.js +1 -1
  97. package/bundle/.next/server/app/api/workspaces/[workspaceId]/edit-draft/route.js.nft.json +1 -1
  98. package/bundle/.next/server/app/api/workspaces/[workspaceId]/files/route.js +1 -1
  99. package/bundle/.next/server/app/api/workspaces/[workspaceId]/files/route.js.nft.json +1 -1
  100. package/bundle/.next/server/app/api/workspaces/[workspaceId]/surfaces/discovery/route.js +1 -1
  101. package/bundle/.next/server/app/api/workspaces/[workspaceId]/surfaces/discovery/route.js.nft.json +1 -1
  102. package/bundle/.next/server/app/api/workspaces/route.js +2 -2
  103. package/bundle/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  104. package/bundle/.next/server/app/files/page.js +2 -2
  105. package/bundle/.next/server/app/files/page.js.nft.json +1 -1
  106. package/bundle/.next/server/app/files/page_client-reference-manifest.js +1 -1
  107. package/bundle/.next/server/app/integrations/page.js +2 -2
  108. package/bundle/.next/server/app/integrations/page.js.nft.json +1 -1
  109. package/bundle/.next/server/app/integrations/page_client-reference-manifest.js +1 -1
  110. package/bundle/.next/server/app/models/page.js +2 -2
  111. package/bundle/.next/server/app/models/page.js.nft.json +1 -1
  112. package/bundle/.next/server/app/models/page_client-reference-manifest.js +1 -1
  113. package/bundle/.next/server/app/page.js +2 -2
  114. package/bundle/.next/server/app/page.js.nft.json +1 -1
  115. package/bundle/.next/server/app/page_client-reference-manifest.js +1 -1
  116. package/bundle/.next/server/app/settings/page.js +2 -2
  117. package/bundle/.next/server/app/settings/page.js.nft.json +1 -1
  118. package/bundle/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  119. package/bundle/.next/server/app/tasks/page.js +2 -2
  120. package/bundle/.next/server/app/tasks/page.js.nft.json +1 -1
  121. package/bundle/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  122. package/bundle/.next/server/app-paths-manifest.json +9 -8
  123. package/bundle/.next/server/chunks/1718.js +4 -0
  124. package/bundle/.next/server/chunks/4391.js +45 -35
  125. package/bundle/.next/server/chunks/4767.js +1 -4
  126. package/bundle/.next/server/chunks/5151.js +14 -4
  127. package/bundle/.next/server/chunks/6476.js +2 -2
  128. package/bundle/.next/server/chunks/8849.js +1 -1
  129. package/bundle/.next/server/functions-config-manifest.json +1 -0
  130. package/bundle/.next/server/middleware-build-manifest.js +1 -1
  131. package/bundle/.next/server/middleware-react-loadable-manifest.js +1 -1
  132. package/bundle/.next/server/pages/404.html +1 -1
  133. package/bundle/.next/server/pages/500.html +1 -1
  134. package/bundle/.next/server/server-reference-manifest.json +1 -1
  135. package/bundle/.next/static/C5KQaZvAavAtZzYvH3CPw/_buildManifest.js +1 -0
  136. package/bundle/.next/static/chunks/2396-395f5ed99e66819d.js +1 -0
  137. package/bundle/.next/static/chunks/7197.2385ee563e32813a.js +1 -0
  138. package/bundle/.next/static/chunks/7442-b2286cbca8c413fd.js +198 -0
  139. package/bundle/.next/static/chunks/app/_global-error/{page-73422dc4075cbfe0.js → page-8443c62570b9a078.js} +1 -1
  140. package/bundle/.next/static/chunks/app/_not-found/{page-73422dc4075cbfe0.js → page-8443c62570b9a078.js} +1 -1
  141. package/bundle/.next/static/chunks/app/api/agents/[agentId]/chat/{route-73422dc4075cbfe0.js → route-8443c62570b9a078.js} +1 -1
  142. package/bundle/.next/static/chunks/app/api/agents/{route-73422dc4075cbfe0.js → route-8443c62570b9a078.js} +1 -1
  143. package/bundle/.next/static/chunks/app/api/diagnostics/route-8443c62570b9a078.js +1 -0
  144. package/bundle/.next/static/chunks/app/api/files/reveal/route-8443c62570b9a078.js +1 -0
  145. package/bundle/.next/static/chunks/app/api/gateway/control/route-8443c62570b9a078.js +1 -0
  146. package/bundle/.next/static/chunks/app/api/integrations/[integrationId]/status/route-8443c62570b9a078.js +1 -0
  147. package/bundle/.next/static/chunks/app/api/mission/route-8443c62570b9a078.js +1 -0
  148. package/bundle/.next/static/chunks/app/api/models/catalog/route-8443c62570b9a078.js +1 -0
  149. package/bundle/.next/static/chunks/app/api/models/providers/route-8443c62570b9a078.js +1 -0
  150. package/bundle/.next/static/chunks/app/api/onboarding/models/route-8443c62570b9a078.js +1 -0
  151. package/bundle/.next/static/chunks/app/api/onboarding/route-8443c62570b9a078.js +1 -0
  152. package/bundle/.next/static/chunks/app/api/openclaw/capabilities/route-8443c62570b9a078.js +1 -0
  153. package/bundle/.next/static/chunks/app/api/openclaw/compatibility-smoke/route-8443c62570b9a078.js +1 -0
  154. package/bundle/.next/static/chunks/app/api/planner/[planId]/deploy/route-8443c62570b9a078.js +1 -0
  155. package/bundle/.next/static/chunks/app/api/planner/[planId]/document-rewrite/route-8443c62570b9a078.js +1 -0
  156. package/bundle/.next/static/chunks/app/api/planner/[planId]/route-8443c62570b9a078.js +1 -0
  157. package/bundle/.next/static/chunks/app/api/planner/[planId]/simulate/route-8443c62570b9a078.js +1 -0
  158. package/bundle/.next/static/chunks/app/api/planner/[planId]/turn/route-8443c62570b9a078.js +1 -0
  159. package/bundle/.next/static/chunks/app/api/planner/route-8443c62570b9a078.js +1 -0
  160. package/bundle/.next/static/chunks/app/api/reset/route-8443c62570b9a078.js +1 -0
  161. package/bundle/.next/static/chunks/app/api/runtimes/[runtimeId]/route-8443c62570b9a078.js +1 -0
  162. package/bundle/.next/static/chunks/app/api/settings/gateway/route-8443c62570b9a078.js +1 -0
  163. package/bundle/.next/static/chunks/app/api/settings/openclaw-binary/route-8443c62570b9a078.js +1 -0
  164. package/bundle/.next/static/chunks/app/api/settings/workspace-root/route-8443c62570b9a078.js +1 -0
  165. package/bundle/.next/static/chunks/app/api/snapshot/route-8443c62570b9a078.js +1 -0
  166. package/bundle/.next/static/chunks/app/api/stream/route-8443c62570b9a078.js +1 -0
  167. package/bundle/.next/static/chunks/app/api/system/open-terminal/route-8443c62570b9a078.js +1 -0
  168. package/bundle/.next/static/chunks/app/api/tasks/[taskId]/abort/route-8443c62570b9a078.js +1 -0
  169. package/bundle/.next/static/chunks/app/api/tasks/[taskId]/control/route-8443c62570b9a078.js +1 -0
  170. package/bundle/.next/static/chunks/app/api/tasks/[taskId]/stream/route-8443c62570b9a078.js +1 -0
  171. package/bundle/.next/static/chunks/app/api/update/route-8443c62570b9a078.js +1 -0
  172. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/channels/discovered-groups/route-8443c62570b9a078.js +1 -0
  173. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/channels/route-8443c62570b9a078.js +1 -0
  174. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/edit-draft/route-8443c62570b9a078.js +1 -0
  175. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/files/route-8443c62570b9a078.js +1 -0
  176. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/surfaces/discovery/route-8443c62570b9a078.js +1 -0
  177. package/bundle/.next/static/chunks/app/api/workspaces/route-8443c62570b9a078.js +1 -0
  178. package/bundle/.next/static/chunks/app/not-found-8443c62570b9a078.js +1 -0
  179. package/bundle/.next/static/chunks/next/dist/client/components/builtin/app-error-8443c62570b9a078.js +1 -0
  180. package/bundle/.next/static/chunks/next/dist/client/components/builtin/forbidden-8443c62570b9a078.js +1 -0
  181. package/bundle/.next/static/chunks/next/dist/client/components/builtin/unauthorized-8443c62570b9a078.js +1 -0
  182. package/bundle/.next/static/chunks/{webpack-1e021d6850c9ac01.js → webpack-13c3a46c1cdfa6e4.js} +1 -1
  183. package/bundle/.next/static/css/288b13e5308447b9.css +3 -0
  184. package/bundle/server.js +1 -1
  185. package/package.json +1 -1
  186. package/bundle/.next/static/JJw_UWORQdbCo0tnqFq68/_buildManifest.js +0 -1
  187. package/bundle/.next/static/chunks/1994.2c1ce6369c0b31aa.js +0 -1
  188. package/bundle/.next/static/chunks/2396-3a9544c281c618dd.js +0 -1
  189. package/bundle/.next/static/chunks/7442-0da619eb6902ba5b.js +0 -188
  190. package/bundle/.next/static/chunks/app/api/diagnostics/route-73422dc4075cbfe0.js +0 -1
  191. package/bundle/.next/static/chunks/app/api/files/reveal/route-73422dc4075cbfe0.js +0 -1
  192. package/bundle/.next/static/chunks/app/api/gateway/control/route-73422dc4075cbfe0.js +0 -1
  193. package/bundle/.next/static/chunks/app/api/integrations/[integrationId]/status/route-73422dc4075cbfe0.js +0 -1
  194. package/bundle/.next/static/chunks/app/api/mission/route-73422dc4075cbfe0.js +0 -1
  195. package/bundle/.next/static/chunks/app/api/models/catalog/route-73422dc4075cbfe0.js +0 -1
  196. package/bundle/.next/static/chunks/app/api/models/providers/route-73422dc4075cbfe0.js +0 -1
  197. package/bundle/.next/static/chunks/app/api/onboarding/models/route-73422dc4075cbfe0.js +0 -1
  198. package/bundle/.next/static/chunks/app/api/onboarding/route-73422dc4075cbfe0.js +0 -1
  199. package/bundle/.next/static/chunks/app/api/openclaw/capabilities/route-73422dc4075cbfe0.js +0 -1
  200. package/bundle/.next/static/chunks/app/api/planner/[planId]/deploy/route-73422dc4075cbfe0.js +0 -1
  201. package/bundle/.next/static/chunks/app/api/planner/[planId]/document-rewrite/route-73422dc4075cbfe0.js +0 -1
  202. package/bundle/.next/static/chunks/app/api/planner/[planId]/route-73422dc4075cbfe0.js +0 -1
  203. package/bundle/.next/static/chunks/app/api/planner/[planId]/simulate/route-73422dc4075cbfe0.js +0 -1
  204. package/bundle/.next/static/chunks/app/api/planner/[planId]/turn/route-73422dc4075cbfe0.js +0 -1
  205. package/bundle/.next/static/chunks/app/api/planner/route-73422dc4075cbfe0.js +0 -1
  206. package/bundle/.next/static/chunks/app/api/reset/route-73422dc4075cbfe0.js +0 -1
  207. package/bundle/.next/static/chunks/app/api/runtimes/[runtimeId]/route-73422dc4075cbfe0.js +0 -1
  208. package/bundle/.next/static/chunks/app/api/settings/gateway/route-73422dc4075cbfe0.js +0 -1
  209. package/bundle/.next/static/chunks/app/api/settings/openclaw-binary/route-73422dc4075cbfe0.js +0 -1
  210. package/bundle/.next/static/chunks/app/api/settings/workspace-root/route-73422dc4075cbfe0.js +0 -1
  211. package/bundle/.next/static/chunks/app/api/snapshot/route-73422dc4075cbfe0.js +0 -1
  212. package/bundle/.next/static/chunks/app/api/stream/route-73422dc4075cbfe0.js +0 -1
  213. package/bundle/.next/static/chunks/app/api/system/open-terminal/route-73422dc4075cbfe0.js +0 -1
  214. package/bundle/.next/static/chunks/app/api/tasks/[taskId]/abort/route-73422dc4075cbfe0.js +0 -1
  215. package/bundle/.next/static/chunks/app/api/tasks/[taskId]/control/route-73422dc4075cbfe0.js +0 -1
  216. package/bundle/.next/static/chunks/app/api/tasks/[taskId]/stream/route-73422dc4075cbfe0.js +0 -1
  217. package/bundle/.next/static/chunks/app/api/update/route-73422dc4075cbfe0.js +0 -1
  218. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/channels/discovered-groups/route-73422dc4075cbfe0.js +0 -1
  219. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/channels/route-73422dc4075cbfe0.js +0 -1
  220. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/edit-draft/route-73422dc4075cbfe0.js +0 -1
  221. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/files/route-73422dc4075cbfe0.js +0 -1
  222. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/surfaces/discovery/route-73422dc4075cbfe0.js +0 -1
  223. package/bundle/.next/static/chunks/app/api/workspaces/route-73422dc4075cbfe0.js +0 -1
  224. package/bundle/.next/static/chunks/app/not-found-73422dc4075cbfe0.js +0 -1
  225. package/bundle/.next/static/chunks/next/dist/client/components/builtin/app-error-73422dc4075cbfe0.js +0 -1
  226. package/bundle/.next/static/chunks/next/dist/client/components/builtin/forbidden-73422dc4075cbfe0.js +0 -1
  227. package/bundle/.next/static/chunks/next/dist/client/components/builtin/unauthorized-73422dc4075cbfe0.js +0 -1
  228. package/bundle/.next/static/css/6de56db1be7d3d06.css +0 -3
  229. /package/bundle/.next/static/{JJw_UWORQdbCo0tnqFq68 → C5KQaZvAavAtZzYvH3CPw}/_ssgManifest.js +0 -0
@@ -1,39 +1,64 @@
1
1
  import readline from "node:readline";
2
2
 
3
- export const AGENTOS_BOOT_HEADER = ` █████╗ ██████╗ ███████╗███╗ ██╗████████╗ ██████╗ ███████╗
4
- ██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝██╔═══██╗██╔════╝
5
- ███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ██║ ██║███████╗
6
- ██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ██║ ██║╚════██║
7
- ██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ╚██████╔╝███████║
8
- ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═════╝ ╚══════╝`;
3
+ const LARGE_AGENT_WORDMARK = [
4
+ " █████╗ ██████╗ ███████╗███╗ ██╗████████╗",
5
+ "██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝",
6
+ "███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ",
7
+ "██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ",
8
+ "██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ",
9
+ "╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ "
10
+ ];
11
+
12
+ const LARGE_OS_WORDMARK = [
13
+ " ██████╗ ███████╗",
14
+ "██╔═══██╗██╔════╝",
15
+ "██║ ██║███████╗",
16
+ "██║ ██║╚════██║",
17
+ "╚██████╔╝███████║",
18
+ " ╚═════╝ ╚══════╝"
19
+ ];
20
+
21
+ export const AGENTOS_BOOT_HEADER = LARGE_AGENT_WORDMARK
22
+ .map((line, index) => `${line} ${LARGE_OS_WORDMARK[index]}`)
23
+ .join("\n");
9
24
 
10
25
  export const TERMINAL_THEME = {
11
- primaryCyan: "#36D7E8",
12
- softCyan: "#8BE9FD",
26
+ neonRed: "#FF1744",
27
+ softRed: "#FF5A6D",
28
+ deepRed: "#6E0A17",
13
29
  successGreen: "#39D353",
14
- warningAmber: "#D7BA2F",
15
- dangerRed: "#FF5C5C",
30
+ warningAmber: "#FFD166",
31
+ dangerRed: "#FF3B3B",
16
32
  mutedGray: "#8B949E",
17
33
  textWhite: "#F0F6FC",
18
- dividerGray: "#30363D"
34
+ brightWhite: "#FFFFFF",
35
+ dividerGray: "#4A121B"
19
36
  };
20
37
 
21
- const BOOT_TAGLINE = "Built on OpenClaw · Human operating layer for AI agents";
22
- const COMPACT_HEADER = "AgentOS · Built on OpenClaw";
38
+ const HEADER_TITLE = "AGENTOS CONTROL ROOM";
39
+ const BOOT_PRIMARY_LINE = "Built on OpenClaw";
40
+ const BOOT_SECONDARY_LINE = "Human operating layer for AI agents";
41
+ const BOOT_TAGLINE = `${BOOT_PRIMARY_LINE} · ${BOOT_SECONDARY_LINE}`;
23
42
  const MEDIUM_HEADER_MIN_COLUMNS = 48;
24
43
  const LARGE_HEADER_MIN_COLUMNS = 82;
25
- const MEDIUM_WORDMARK = [
26
- "▄▀█ █▀▀ █▀▀ █▄░█ ▀█▀ █▀█ █▀",
27
- "█▀█ █▄█ ██▄ █░▀█ █ █▄█ ▄█"
44
+ const DASHBOARD_MIN_COLUMNS = 56;
45
+ const PANEL_MAX_COLUMNS = 80;
46
+ const MEDIUM_AGENT_WORDMARK = [
47
+ "▄▀█ █▀▀ █▀▀ █▄░█ ▀█▀",
48
+ "█▀█ █▄█ ██▄ █░▀█ █ "
49
+ ];
50
+ const MEDIUM_OS_WORDMARK = [
51
+ " █▀█ █▀",
52
+ " █▄█ ▄█"
28
53
  ];
29
54
 
30
55
  const STATE_META = {
31
- checking: { label: "CHECKING", color: "primary", symbol: "…", ascii: "..." },
56
+ checking: { label: "CHECKING", color: "brand", symbol: "…", ascii: "..." },
32
57
  waiting: { label: "WAITING", color: "muted", symbol: "…", ascii: "..." },
33
- loading: { label: "LOADING", color: "primary", symbol: "…", ascii: "..." },
34
- starting: { label: "STARTING", color: "primary", symbol: "…", ascii: "..." },
35
- resolving: { label: "RESOLVING", color: "primary", symbol: "…", ascii: "..." },
36
- preparing: { label: "PREPARING", color: "primary", symbol: "…", ascii: "..." },
58
+ loading: { label: "LOADING", color: "brand", symbol: "…", ascii: "..." },
59
+ starting: { label: "STARTING", color: "brand", symbol: "…", ascii: "..." },
60
+ resolving: { label: "RESOLVING", color: "brand", symbol: "…", ascii: "..." },
61
+ preparing: { label: "PREPARING", color: "brand", symbol: "…", ascii: "..." },
37
62
  connected: { label: "CONNECTED", color: "success", symbol: "✓", ascii: "OK" },
38
63
  active: { label: "ACTIVE", color: "success", symbol: "✓", ascii: "OK" },
39
64
  ready: { label: "READY", color: "success", symbol: "✓", ascii: "OK" },
@@ -44,6 +69,7 @@ const STATE_META = {
44
69
  failed: { label: "FAILED", color: "danger", symbol: "✕", ascii: "x" },
45
70
  unreachable: { label: "UNREACHABLE", color: "danger", symbol: "✕", ascii: "x" },
46
71
  broken: { label: "BROKEN", color: "danger", symbol: "✕", ascii: "x" },
72
+ error: { label: "ERROR", color: "danger", symbol: "✕", ascii: "x" },
47
73
  disabled: { label: "DISABLED", color: "muted", symbol: "–", ascii: "-" },
48
74
  skipped: { label: "SKIPPED", color: "muted", symbol: "–", ascii: "-" },
49
75
  inactive: { label: "INACTIVE", color: "muted", symbol: "–", ascii: "-" },
@@ -65,17 +91,17 @@ const STATUS_ROWS = [
65
91
  ];
66
92
 
67
93
  const UNICODE_FRAMES = [
68
- "Workspace ▣──◆──▢ Agent ▢────▣ Channel",
69
- "Workspace ▣────▣ Agent ▢──◆──▢ Channel",
70
- "Workspace ▢────▣ Agent ▣──◆──▢ Channel",
71
- "Workspace ▢──◆──▢ Agent ▣────▣ Channel"
94
+ "OpenClaw Gateway ▰▱▱ AgentOS Runtime ▱▱▱ Local UI",
95
+ "OpenClaw Gateway ▰▰▱ AgentOS Runtime ▰▱▱ Local UI",
96
+ "OpenClaw Gateway ▰▰▰ AgentOS Runtime ▰▰▱ Local UI",
97
+ "OpenClaw Gateway ▰▰▰ AgentOS Runtime ▰▰▰ Local UI"
72
98
  ];
73
99
 
74
100
  const ASCII_FRAMES = [
75
- "Workspace [#]--<>--[ ] Agent [ ]----[#] Channel",
76
- "Workspace [#]----[#] Agent [ ]--<>--[ ] Channel",
77
- "Workspace [ ]----[#] Agent [#]--<>--[ ] Channel",
78
- "Workspace [ ]--<>--[ ] Agent [#]----[#] Channel"
101
+ "OpenClaw Gateway [#--] AgentOS Runtime [---] Local UI",
102
+ "OpenClaw Gateway [##-] AgentOS Runtime [#--] Local UI",
103
+ "OpenClaw Gateway [###] AgentOS Runtime [##-] Local UI",
104
+ "OpenClaw Gateway [###] AgentOS Runtime [###] Local UI"
79
105
  ];
80
106
 
81
107
  export function createTerminalBoot(options = {}) {
@@ -155,7 +181,8 @@ export function renderBootFrame(options = {}) {
155
181
  color,
156
182
  columns,
157
183
  compact,
158
- large
184
+ large,
185
+ unicode
159
186
  }));
160
187
 
161
188
  lines.push("");
@@ -188,7 +215,8 @@ export function renderStatusDashboard(options = {}) {
188
215
  color,
189
216
  columns,
190
217
  compact: !unicode || columns < MEDIUM_HEADER_MIN_COLUMNS,
191
- large: unicode && columns >= LARGE_HEADER_MIN_COLUMNS
218
+ large: unicode && columns >= LARGE_HEADER_MIN_COLUMNS,
219
+ unicode
192
220
  }));
193
221
  lines.push("");
194
222
  }
@@ -203,7 +231,12 @@ export function renderStatusDashboard(options = {}) {
203
231
 
204
232
  if (options.finalInfo) {
205
233
  lines.push("");
206
- lines.push(color.bold(color.success(`AgentOS ready · ${options.finalInfo}`)));
234
+ lines.push(...renderReadyBlock({
235
+ color,
236
+ columns,
237
+ finalInfo: options.finalInfo,
238
+ unicode
239
+ }));
207
240
  } else if (options.footer) {
208
241
  lines.push("");
209
242
  lines.push(color.muted(options.footer));
@@ -223,7 +256,7 @@ export function renderDoctorReport(options = {}) {
223
256
 
224
257
  lines.push(color.bold(color.primary(options.title || "AGENTOS DOCTOR")));
225
258
  lines.push(color.muted(truncate(options.subtitle || BOOT_TAGLINE, columns)));
226
- lines.push(color.divider(divider(columns)));
259
+ lines.push(color.divider(divider(columns, unicode)));
227
260
  lines.push(...formatStatusRows(rows, {
228
261
  color,
229
262
  columns,
@@ -231,7 +264,7 @@ export function renderDoctorReport(options = {}) {
231
264
  }));
232
265
 
233
266
  if (options.footer) {
234
- lines.push(color.divider(divider(columns)));
267
+ lines.push(color.divider(divider(columns, unicode)));
235
268
  lines.push(color.muted(truncate(options.footer, columns)));
236
269
  }
237
270
 
@@ -420,13 +453,62 @@ function normalizeRows(rows = []) {
420
453
 
421
454
  function renderStatusSection(options) {
422
455
  const title = options.title || "SYSTEM CHECK";
456
+ const columns = normalizeColumns(options.columns);
457
+
458
+ if (columns < DASHBOARD_MIN_COLUMNS) {
459
+ return renderCompactStatusSection({
460
+ ...options,
461
+ title,
462
+ columns
463
+ });
464
+ }
465
+
466
+ const width = panelWidth(columns);
467
+ const innerWidth = width - 4;
468
+ const rows = options.rows;
469
+ const labelWidth = Math.min(23, Math.max(17, ...rows.map((row) => row.label.length)));
470
+ const badgeWidth = 15;
471
+ const detailWidth = Math.max(8, innerWidth - labelWidth - badgeWidth - 4);
423
472
  const lines = [
424
- options.color.bold(options.color.text(title)),
425
- options.color.divider(divider(options.columns))
473
+ renderBorder({
474
+ color: options.color,
475
+ title,
476
+ unicode: options.unicode,
477
+ width,
478
+ edge: "top"
479
+ }),
480
+ boxLine(formatDashboardHeader({
481
+ badgeWidth,
482
+ color: options.color,
483
+ detailWidth,
484
+ labelWidth
485
+ }), {
486
+ color: options.color,
487
+ unicode: options.unicode,
488
+ width
489
+ }),
490
+ renderBorder({
491
+ color: options.color,
492
+ unicode: options.unicode,
493
+ width,
494
+ edge: "middle"
495
+ })
426
496
  ];
427
497
 
428
- lines.push(...formatStatusRows(options.rows, options));
429
- lines.push(options.color.divider(divider(options.columns)));
498
+ lines.push(...rows.map((row) => formatDashboardRow(row, {
499
+ badgeWidth,
500
+ color: options.color,
501
+ detailWidth,
502
+ labelWidth,
503
+ unicode: options.unicode,
504
+ width
505
+ })));
506
+ lines.push(renderBorder({
507
+ color: options.color,
508
+ unicode: options.unicode,
509
+ width,
510
+ edge: "bottom"
511
+ }));
430
512
 
431
513
  return lines;
432
514
  }
@@ -461,18 +543,16 @@ function formatStatusRow(row, options) {
461
543
  }
462
544
 
463
545
  function renderMediumHeader(options) {
464
- const available = Math.max(0, options.columns - 4);
546
+ return MEDIUM_AGENT_WORDMARK.map((line, index) => {
547
+ const agent = options.color.bold(options.color.text(line));
548
+ const os = options.color.bold(options.color.brand(MEDIUM_OS_WORDMARK[index]));
465
549
 
466
- return [
467
- ...MEDIUM_WORDMARK.map((line) => ` ${options.color.bold(options.color.primary(line))}`),
468
- ` ${options.color.muted(truncate(BOOT_TAGLINE, available))}`,
469
- ` ${options.color.divider(divider(Math.min(available, 72)))}`
470
- ];
550
+ return `${options.color.dim(options.color.brand("▌"))} ${agent}${os}`;
551
+ });
471
552
  }
472
553
 
473
554
  function renderCompleteFrame(options) {
474
555
  const lines = [""];
475
- const message = options.finalInfo ? `AgentOS ready · ${options.finalInfo}` : "AgentOS ready";
476
556
 
477
557
  lines.push(...renderHeaderLines(options));
478
558
  lines.push("");
@@ -484,64 +564,108 @@ function renderCompleteFrame(options) {
484
564
  unicode: options.unicode
485
565
  }));
486
566
  lines.push("");
487
- lines.push(options.color.bold(options.color.success(message)));
567
+ lines.push(...renderReadyBlock({
568
+ color: options.color,
569
+ columns: options.columns,
570
+ finalInfo: options.finalInfo,
571
+ unicode: options.unicode
572
+ }));
488
573
 
489
574
  return lines.join("\n");
490
575
  }
491
576
 
492
577
  function renderHeaderLines(options) {
493
- if (options.compact) {
494
- return [
495
- options.color.bold(options.color.primary(COMPACT_HEADER)),
496
- options.color.divider(divider(options.columns))
497
- ];
578
+ const width = panelWidth(options.columns);
579
+ const lines = [
580
+ renderBorder({
581
+ color: options.color,
582
+ title: HEADER_TITLE,
583
+ unicode: options.unicode,
584
+ width,
585
+ edge: "top"
586
+ })
587
+ ];
588
+ const logoLines = options.compact
589
+ ? [formatCompactHeader(options.color)]
590
+ : options.large
591
+ ? renderLargeHeader(options)
592
+ : renderMediumHeader(options);
593
+
594
+ for (const line of logoLines) {
595
+ lines.push(boxLine(line, {
596
+ color: options.color,
597
+ unicode: options.unicode,
598
+ width
599
+ }));
498
600
  }
499
601
 
500
- if (options.large) {
501
- return [
502
- ...AGENTOS_BOOT_HEADER.split("\n").map((line, index) => options.color.gradient(line, index)),
503
- options.color.muted(BOOT_TAGLINE),
504
- options.color.divider(divider(options.columns))
505
- ];
506
- }
602
+ lines.push(boxLine("", {
603
+ color: options.color,
604
+ unicode: options.unicode,
605
+ width
606
+ }));
607
+ lines.push(boxLine(options.color.text(BOOT_PRIMARY_LINE), {
608
+ color: options.color,
609
+ unicode: options.unicode,
610
+ width
611
+ }));
612
+ lines.push(boxLine(options.color.muted(BOOT_SECONDARY_LINE), {
613
+ color: options.color,
614
+ unicode: options.unicode,
615
+ width
616
+ }));
617
+ lines.push(renderBorder({
618
+ color: options.color,
619
+ unicode: options.unicode,
620
+ width,
621
+ edge: "bottom"
622
+ }));
507
623
 
508
- return renderMediumHeader(options);
624
+ return lines;
509
625
  }
510
626
 
511
627
  function createColor(enabled) {
512
- const wrap = (code, value) => enabled ? `\u001B[${code}m${value}\u001B[0m` : value;
628
+ const ansi = (codes, value) => enabled ? `\u001B[${codes}m${value}\u001B[0m` : value;
629
+ const rgbCode = (value) => {
630
+ const [red, green, blue] = parseHex(value);
631
+ return `38;2;${red};${green};${blue}`;
632
+ };
513
633
  const hex = (value, text) => {
514
634
  if (!enabled) {
515
635
  return text;
516
636
  }
517
637
 
518
- const [red, green, blue] = parseHex(value);
519
- return `\u001B[38;2;${red};${green};${blue}m${text}\u001B[0m`;
638
+ return ansi(rgbCode(value), text);
520
639
  };
521
640
 
522
641
  return {
523
- bold: (value) => wrap("1", value),
524
- dim: (value) => wrap("2", value),
525
- primary: (value) => hex(TERMINAL_THEME.primaryCyan, value),
526
- soft: (value) => hex(TERMINAL_THEME.softCyan, value),
642
+ bold: (value) => ansi("1", value),
643
+ dim: (value) => ansi("2", value),
644
+ underline: (value) => ansi("4", value),
645
+ brand: (value) => hex(TERMINAL_THEME.neonRed, value),
646
+ accent: (value) => hex(TERMINAL_THEME.softRed, value),
647
+ primary: (value) => hex(TERMINAL_THEME.neonRed, value),
648
+ soft: (value) => hex(TERMINAL_THEME.softRed, value),
527
649
  success: (value) => hex(TERMINAL_THEME.successGreen, value),
528
650
  warning: (value) => hex(TERMINAL_THEME.warningAmber, value),
529
651
  danger: (value) => hex(TERMINAL_THEME.dangerRed, value),
530
652
  muted: (value) => hex(TERMINAL_THEME.mutedGray, value),
531
653
  text: (value) => hex(TERMINAL_THEME.textWhite, value),
654
+ bright: (value) => hex(TERMINAL_THEME.brightWhite, value),
532
655
  divider: (value) => hex(TERMINAL_THEME.dividerGray, value),
533
- cyan: (value) => hex(TERMINAL_THEME.primaryCyan, value),
656
+ url: (value) => enabled ? ansi(`4;${rgbCode(TERMINAL_THEME.brightWhite)}`, value) : value,
657
+ cyan: (value) => hex(TERMINAL_THEME.neonRed, value),
534
658
  green: (value) => hex(TERMINAL_THEME.successGreen, value),
535
659
  yellow: (value) => hex(TERMINAL_THEME.warningAmber, value),
536
660
  red: (value) => hex(TERMINAL_THEME.dangerRed, value),
537
661
  gradient: (value, index) => {
538
662
  const palette = [
539
- TERMINAL_THEME.softCyan,
540
- TERMINAL_THEME.primaryCyan,
541
- TERMINAL_THEME.softCyan,
542
- TERMINAL_THEME.primaryCyan,
543
- TERMINAL_THEME.softCyan,
544
- TERMINAL_THEME.primaryCyan
663
+ TERMINAL_THEME.textWhite,
664
+ TERMINAL_THEME.textWhite,
665
+ TERMINAL_THEME.textWhite,
666
+ TERMINAL_THEME.textWhite,
667
+ TERMINAL_THEME.neonRed,
668
+ TERMINAL_THEME.neonRed
545
669
  ];
546
670
  return hex(palette[index % palette.length], value);
547
671
  }
@@ -558,14 +682,183 @@ function formatDetail(value, color) {
558
682
  }
559
683
 
560
684
  if (/^https?:\/\//i.test(value)) {
561
- return color.soft(value);
685
+ return color.url(value);
562
686
  }
563
687
 
564
688
  return color.text(value);
565
689
  }
566
690
 
567
- function divider(columns) {
568
- return "─".repeat(Math.max(24, Math.min(normalizeColumns(columns), 96)));
691
+ function renderCompactStatusSection(options) {
692
+ const width = panelWidth(options.columns);
693
+ const lines = [
694
+ options.color.bold(options.color.brand(options.title)),
695
+ options.color.divider(divider(width, options.unicode))
696
+ ];
697
+
698
+ for (const row of options.rows) {
699
+ const badge = formatStatusBadge(row.state || "pending", {
700
+ color: options.color,
701
+ unicode: options.unicode,
702
+ width: 0
703
+ }).trimEnd();
704
+ const detail = row.message || row.detail || "";
705
+
706
+ lines.push(`${options.color.text(truncate(row.label, Math.max(8, width - 18)))} ${badge}`);
707
+
708
+ if (detail) {
709
+ lines.push(` ${formatDetail(truncate(String(detail), Math.max(8, width - 2)), options.color)}`);
710
+ }
711
+ }
712
+
713
+ lines.push(options.color.divider(divider(width, options.unicode)));
714
+
715
+ return lines;
716
+ }
717
+
718
+ function formatDashboardHeader(options) {
719
+ return [
720
+ options.color.muted("SUBSYSTEM".padEnd(options.labelWidth)),
721
+ options.color.muted("STATUS".padEnd(options.badgeWidth)),
722
+ options.color.muted("DETAIL".padEnd(options.detailWidth))
723
+ ].join(" ");
724
+ }
725
+
726
+ function formatDashboardRow(row, options) {
727
+ const state = row.state || "pending";
728
+ const detail = row.message || row.detail || "";
729
+ const label = options.color.text(truncate(row.label, options.labelWidth).padEnd(options.labelWidth));
730
+ const badge = formatStatusBadge(state, {
731
+ color: options.color,
732
+ unicode: options.unicode,
733
+ width: options.badgeWidth
734
+ });
735
+ const detailText = truncate(String(detail), options.detailWidth);
736
+ const formattedDetail = formatDetail(detailText, options.color);
737
+ const content = `${label} ${badge} ${formattedDetail}`;
738
+
739
+ return boxLine(content, {
740
+ color: options.color,
741
+ unicode: options.unicode,
742
+ width: options.width
743
+ });
744
+ }
745
+
746
+ function renderLargeHeader(options) {
747
+ return LARGE_AGENT_WORDMARK.map((line, index) => {
748
+ const agent = options.color.bold(options.color.text(line));
749
+ const os = options.color.bold(options.color.brand(LARGE_OS_WORDMARK[index]));
750
+
751
+ return `${options.color.dim(options.color.brand("▌"))} ${agent} ${os}`;
752
+ });
753
+ }
754
+
755
+ function formatCompactHeader(color) {
756
+ return `${color.bold(color.text("Agent"))}${color.bold(color.brand("OS"))}`;
757
+ }
758
+
759
+ function renderReadyBlock(options) {
760
+ const width = panelWidth(options.columns);
761
+ const readyLine = options.color.bold(options.color.success("✓ AgentOS ready"));
762
+ const localUiLine = options.finalInfo
763
+ ? `${options.color.text("Local UI:")} ${formatDetail(options.finalInfo, options.color)}`
764
+ : "";
765
+
766
+ if (width < DASHBOARD_MIN_COLUMNS) {
767
+ return localUiLine ? [readyLine, localUiLine] : [readyLine];
768
+ }
769
+
770
+ const lines = [
771
+ renderBorder({
772
+ color: options.color,
773
+ title: "READY",
774
+ unicode: options.unicode,
775
+ width,
776
+ edge: "top"
777
+ }),
778
+ boxLine(readyLine, {
779
+ color: options.color,
780
+ unicode: options.unicode,
781
+ width
782
+ })
783
+ ];
784
+
785
+ if (localUiLine) {
786
+ lines.push(boxLine(localUiLine, {
787
+ color: options.color,
788
+ unicode: options.unicode,
789
+ width
790
+ }));
791
+ }
792
+
793
+ lines.push(renderBorder({
794
+ color: options.color,
795
+ unicode: options.unicode,
796
+ width,
797
+ edge: "bottom"
798
+ }));
799
+
800
+ return lines;
801
+ }
802
+
803
+ function renderBorder(options) {
804
+ const chars = boxChars(options.unicode);
805
+ const left = options.edge === "bottom" ? chars.bottomLeft : options.edge === "middle" ? chars.middleLeft : chars.topLeft;
806
+ const right = options.edge === "bottom" ? chars.bottomRight : options.edge === "middle" ? chars.middleRight : chars.topRight;
807
+ const horizontal = options.edge === "middle" ? chars.middle : chars.horizontal;
808
+ const innerWidth = Math.max(0, options.width - 2);
809
+
810
+ if (options.title && options.edge === "top") {
811
+ const title = ` ${options.title} `;
812
+ const safeTitle = truncate(title, Math.max(0, innerWidth - 2));
813
+ const remaining = Math.max(0, innerWidth - safeTitle.length - 1);
814
+
815
+ return options.color.brand(`${left}${horizontal}${safeTitle}${horizontal.repeat(remaining)}${right}`);
816
+ }
817
+
818
+ const paintBorder = options.edge === "middle" ? options.color.accent : options.color.brand;
819
+
820
+ return paintBorder(`${left}${horizontal.repeat(innerWidth)}${right}`);
821
+ }
822
+
823
+ function boxLine(value, options) {
824
+ const chars = boxChars(options.unicode);
825
+ const innerWidth = Math.max(0, options.width - 4);
826
+ const safeValue = stripAnsi(value).length > innerWidth ? truncate(stripAnsi(value), innerWidth) : value;
827
+ const padded = padAnsi(safeValue, innerWidth);
828
+
829
+ return `${options.color.brand(chars.vertical)} ${padded} ${options.color.brand(chars.vertical)}`;
830
+ }
831
+
832
+ function boxChars(unicode) {
833
+ if (!unicode) {
834
+ return {
835
+ topLeft: "+",
836
+ topRight: "+",
837
+ bottomLeft: "+",
838
+ bottomRight: "+",
839
+ middleLeft: "+",
840
+ middleRight: "+",
841
+ horizontal: "-",
842
+ middle: "-",
843
+ vertical: "|"
844
+ };
845
+ }
846
+
847
+ return {
848
+ topLeft: "┌",
849
+ topRight: "┐",
850
+ bottomLeft: "└",
851
+ bottomRight: "┘",
852
+ middleLeft: "├",
853
+ middleRight: "┤",
854
+ horizontal: "─",
855
+ middle: "─",
856
+ vertical: "│"
857
+ };
858
+ }
859
+
860
+ function divider(columns, unicode = true) {
861
+ return (unicode ? "─" : "-").repeat(Math.max(24, Math.min(normalizeColumns(columns), PANEL_MAX_COLUMNS)));
569
862
  }
570
863
 
571
864
  function parseHex(value) {
@@ -596,6 +889,20 @@ function normalizeColumns(columns) {
596
889
  return typeof columns === "number" && Number.isFinite(columns) && columns > 0 ? columns : 80;
597
890
  }
598
891
 
892
+ function panelWidth(columns) {
893
+ return Math.max(24, Math.min(normalizeColumns(columns), PANEL_MAX_COLUMNS));
894
+ }
895
+
896
+ function padAnsi(value, width) {
897
+ const visibleLength = stripAnsi(value).length;
898
+
899
+ if (visibleLength >= width) {
900
+ return value;
901
+ }
902
+
903
+ return `${value}${" ".repeat(width - visibleLength)}`;
904
+ }
905
+
599
906
  function countTerminalLines(value, columns) {
600
907
  const normalized = value.endsWith("\n") ? value.slice(0, -1) : value;
601
908
 
@@ -1 +1 @@
1
- JJw_UWORQdbCo0tnqFq68
1
+ C5KQaZvAavAtZzYvH3CPw
@@ -4,12 +4,13 @@
4
4
  "/api/openclaw/capabilities/route": "/api/openclaw/capabilities",
5
5
  "/api/diagnostics/route": "/api/diagnostics",
6
6
  "/api/agents/route": "/api/agents",
7
- "/api/files/reveal/route": "/api/files/reveal",
8
- "/api/mission/route": "/api/mission",
9
7
  "/api/gateway/control/route": "/api/gateway/control",
8
+ "/api/agents/[agentId]/chat/route": "/api/agents/[agentId]/chat",
9
+ "/api/mission/route": "/api/mission",
10
+ "/api/files/reveal/route": "/api/files/reveal",
10
11
  "/api/integrations/[integrationId]/status/route": "/api/integrations/[integrationId]/status",
11
12
  "/api/models/catalog/route": "/api/models/catalog",
12
- "/api/agents/[agentId]/chat/route": "/api/agents/[agentId]/chat",
13
+ "/api/openclaw/compatibility-smoke/route": "/api/openclaw/compatibility-smoke",
13
14
  "/api/planner/[planId]/deploy/route": "/api/planner/[planId]/deploy",
14
15
  "/api/planner/[planId]/document-rewrite/route": "/api/planner/[planId]/document-rewrite",
15
16
  "/api/planner/[planId]/route": "/api/planner/[planId]",
@@ -18,25 +19,25 @@
18
19
  "/api/planner/route": "/api/planner",
19
20
  "/api/reset/route": "/api/reset",
20
21
  "/api/runtimes/[runtimeId]/route": "/api/runtimes/[runtimeId]",
21
- "/api/models/providers/route": "/api/models/providers",
22
22
  "/api/settings/gateway/route": "/api/settings/gateway",
23
23
  "/api/settings/openclaw-binary/route": "/api/settings/openclaw-binary",
24
24
  "/api/settings/workspace-root/route": "/api/settings/workspace-root",
25
- "/api/onboarding/models/route": "/api/onboarding/models",
26
25
  "/api/snapshot/route": "/api/snapshot",
27
- "/api/stream/route": "/api/stream",
26
+ "/api/onboarding/models/route": "/api/onboarding/models",
28
27
  "/api/system/open-terminal/route": "/api/system/open-terminal",
28
+ "/api/stream/route": "/api/stream",
29
29
  "/api/tasks/[taskId]/abort/route": "/api/tasks/[taskId]/abort",
30
30
  "/api/tasks/[taskId]/control/route": "/api/tasks/[taskId]/control",
31
+ "/api/models/providers/route": "/api/models/providers",
31
32
  "/api/workspaces/[workspaceId]/channels/discovered-groups/route": "/api/workspaces/[workspaceId]/channels/discovered-groups",
32
33
  "/api/tasks/[taskId]/stream/route": "/api/tasks/[taskId]/stream",
33
- "/api/onboarding/route": "/api/onboarding",
34
34
  "/api/workspaces/[workspaceId]/edit-draft/route": "/api/workspaces/[workspaceId]/edit-draft",
35
35
  "/api/workspaces/[workspaceId]/files/route": "/api/workspaces/[workspaceId]/files",
36
36
  "/api/workspaces/[workspaceId]/surfaces/discovery/route": "/api/workspaces/[workspaceId]/surfaces/discovery",
37
37
  "/api/workspaces/[workspaceId]/channels/route": "/api/workspaces/[workspaceId]/channels",
38
- "/api/update/route": "/api/update",
39
38
  "/api/workspaces/route": "/api/workspaces",
39
+ "/api/update/route": "/api/update",
40
+ "/api/onboarding/route": "/api/onboarding",
40
41
  "/agents/page": "/agents",
41
42
  "/files/page": "/files",
42
43
  "/integrations/page": "/integrations",
@@ -4,11 +4,11 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/JJw_UWORQdbCo0tnqFq68/_buildManifest.js",
8
- "static/JJw_UWORQdbCo0tnqFq68/_ssgManifest.js"
7
+ "static/C5KQaZvAavAtZzYvH3CPw/_buildManifest.js",
8
+ "static/C5KQaZvAavAtZzYvH3CPw/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [
11
- "static/chunks/webpack-1e021d6850c9ac01.js",
11
+ "static/chunks/webpack-13c3a46c1cdfa6e4.js",
12
12
  "static/chunks/f6503f1c-1272160a304f8b44.js",
13
13
  "static/chunks/4424-805347abcfa4dab9.js",
14
14
  "static/chunks/main-app-70892a7dc1723083.js"