hive-am 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/CHANGELOG.md +100 -1
  2. package/README.md +9 -1
  3. package/package.json +13 -2
  4. package/server/dist/api.js +42 -762
  5. package/server/dist/connections/channel-skill.js +13 -1
  6. package/server/dist/connections/files.js +45 -1
  7. package/server/dist/connections/manager.js +41 -3
  8. package/server/dist/connections/outbound.js +2 -1
  9. package/server/dist/connections/prompt.js +4 -0
  10. package/server/dist/connections/router.js +3 -2
  11. package/server/dist/connections/store.js +4 -43
  12. package/server/dist/connections/telegram.js +43 -3
  13. package/server/dist/cron.js +2 -1
  14. package/server/dist/db/json.js +16 -0
  15. package/server/dist/db/migrations.js +199 -0
  16. package/server/dist/db.js +98 -196
  17. package/server/dist/errors.js +11 -0
  18. package/server/dist/git/browse.js +99 -0
  19. package/server/dist/git/ops.js +136 -19
  20. package/server/dist/git/repo.js +2 -1
  21. package/server/dist/history/claude.js +21 -21
  22. package/server/dist/history/index.js +17 -9
  23. package/server/dist/history/kiro.js +17 -12
  24. package/server/dist/history/lines.js +12 -0
  25. package/server/dist/history/opencode.js +18 -1
  26. package/server/dist/http/body.js +46 -0
  27. package/server/dist/http/errors.js +21 -0
  28. package/server/dist/http/guards.js +44 -0
  29. package/server/dist/http/router.js +24 -0
  30. package/server/dist/http/routes/agents.js +124 -0
  31. package/server/dist/http/routes/channel.js +16 -0
  32. package/server/dist/http/routes/colonies.js +9 -0
  33. package/server/dist/http/routes/connections.js +36 -0
  34. package/server/dist/http/routes/fs.js +22 -0
  35. package/server/dist/http/routes/git.js +90 -0
  36. package/server/dist/http/routes/meta.js +11 -0
  37. package/server/dist/http/routes/notebook.js +34 -0
  38. package/server/dist/http/routes/orchestration.js +32 -0
  39. package/server/dist/http/routes/resources.js +68 -0
  40. package/server/dist/http/routes/schedules.js +40 -0
  41. package/server/dist/http/routes/skills.js +47 -0
  42. package/server/dist/http/routes/terminals.js +18 -0
  43. package/server/dist/http/routes/types.js +36 -0
  44. package/server/dist/http/validate.js +65 -0
  45. package/server/dist/index.js +67 -5
  46. package/server/dist/instructions.js +8 -2
  47. package/server/dist/objects/agent.js +49 -0
  48. package/server/dist/objects/database.js +451 -0
  49. package/server/dist/objects/db-history.js +79 -0
  50. package/server/dist/objects/docker-info.js +75 -0
  51. package/server/dist/objects/docker.js +285 -0
  52. package/server/dist/objects/driver-props.js +196 -0
  53. package/server/dist/objects/exec.js +16 -0
  54. package/server/dist/objects/http-history.js +44 -0
  55. package/server/dist/objects/http-script.js +644 -0
  56. package/server/dist/objects/http.js +735 -0
  57. package/server/dist/objects/index.js +445 -0
  58. package/server/dist/objects/model.js +250 -0
  59. package/server/dist/objects/runner.js +211 -0
  60. package/server/dist/objects/stats.js +106 -0
  61. package/server/dist/objects/store.js +115 -0
  62. package/server/dist/objects/supervisor.js +111 -0
  63. package/server/dist/objects/templates.js +67 -0
  64. package/server/dist/providers/claude.js +3 -13
  65. package/server/dist/providers/index.js +7 -1
  66. package/server/dist/providers/kiro.js +2 -5
  67. package/server/dist/providers/opencode-server.js +45 -0
  68. package/server/dist/providers/opencode.js +52 -9
  69. package/server/dist/providers/preamble.js +2 -0
  70. package/server/dist/providers/spawn.js +31 -3
  71. package/server/dist/runtime.js +8 -6
  72. package/server/dist/schedules.js +2 -21
  73. package/server/dist/seed.js +15 -11
  74. package/server/dist/services/agents.js +90 -0
  75. package/server/dist/services/colonies.js +38 -0
  76. package/server/dist/services/connections.js +76 -0
  77. package/server/dist/services/notebook.js +22 -0
  78. package/server/dist/services/providers.js +27 -0
  79. package/server/dist/services/schedules.js +18 -0
  80. package/server/dist/sessions-summary.js +51 -0
  81. package/server/dist/skills/defaults.js +37 -0
  82. package/server/dist/skills/notebook.js +3 -8
  83. package/server/dist/terminals.js +185 -0
  84. package/server/dist/wake.js +13 -16
  85. package/server/dist/watch.js +2 -8
  86. package/server/mcp/dispatch.mjs +70 -1
  87. package/web/.next/BUILD_ID +1 -1
  88. package/web/.next/app-build-manifest.json +146 -94
  89. package/web/.next/app-path-routes-manifest.json +6 -4
  90. package/web/.next/build-manifest.json +14 -14
  91. package/web/.next/prerender-manifest.json +67 -43
  92. package/web/.next/react-loadable-manifest.json +26 -1
  93. package/web/.next/required-server-files.json +13 -1
  94. package/web/.next/routes-manifest.json +26 -0
  95. package/web/.next/server/app/_not-found/page.js +2 -2
  96. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  97. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/_not-found.html +1 -1
  99. package/web/.next/server/app/_not-found.rsc +12 -11
  100. package/web/.next/server/app/agents/[id]/page.js +4 -4
  101. package/web/.next/server/app/agents/[id]/page.js.nft.json +1 -1
  102. package/web/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/agents/page.js +2 -2
  104. package/web/.next/server/app/agents/page.js.nft.json +1 -1
  105. package/web/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/agents.html +1 -1
  107. package/web/.next/server/app/agents.rsc +14 -13
  108. package/web/.next/server/app/connections/page.js +2 -2
  109. package/web/.next/server/app/connections/page.js.nft.json +1 -1
  110. package/web/.next/server/app/connections/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/app/connections.html +1 -1
  112. package/web/.next/server/app/connections.rsc +14 -13
  113. package/web/.next/server/app/index.html +1 -1
  114. package/web/.next/server/app/index.rsc +14 -13
  115. package/web/.next/server/app/page.js +2 -2
  116. package/web/.next/server/app/page.js.nft.json +1 -1
  117. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  118. package/web/.next/server/app/relations/page.js +2 -2
  119. package/web/.next/server/app/relations/page.js.nft.json +1 -1
  120. package/web/.next/server/app/relations/page_client-reference-manifest.js +1 -1
  121. package/web/.next/server/app/relations.html +1 -1
  122. package/web/.next/server/app/relations.rsc +14 -13
  123. package/web/.next/server/app/resources/[id]/page.js +2 -0
  124. package/web/.next/server/app/resources/[id]/page.js.nft.json +1 -0
  125. package/web/.next/server/app/resources/[id]/page_client-reference-manifest.js +1 -0
  126. package/web/.next/server/app/resources/page.js +2 -0
  127. package/web/.next/server/app/resources/page.js.nft.json +1 -0
  128. package/web/.next/server/app/resources/page_client-reference-manifest.js +1 -0
  129. package/web/.next/server/app/resources.html +1 -0
  130. package/web/.next/server/app/resources.meta +15 -0
  131. package/web/.next/server/app/resources.rsc +25 -0
  132. package/web/.next/server/app/schedules/page.js +2 -2
  133. package/web/.next/server/app/schedules/page.js.nft.json +1 -1
  134. package/web/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
  135. package/web/.next/server/app/schedules.html +1 -1
  136. package/web/.next/server/app/schedules.rsc +14 -13
  137. package/web/.next/server/app/sessions/page.js +2 -2
  138. package/web/.next/server/app/sessions/page.js.nft.json +1 -1
  139. package/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  140. package/web/.next/server/app/sessions.html +1 -1
  141. package/web/.next/server/app/sessions.rsc +14 -13
  142. package/web/.next/server/app/skills/page.js +2 -2
  143. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  144. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  145. package/web/.next/server/app/skills.html +1 -1
  146. package/web/.next/server/app/skills.rsc +14 -13
  147. package/web/.next/server/app/types/page.js +2 -2
  148. package/web/.next/server/app/types/page.js.nft.json +1 -1
  149. package/web/.next/server/app/types/page_client-reference-manifest.js +1 -1
  150. package/web/.next/server/app/types.html +1 -1
  151. package/web/.next/server/app/types.rsc +14 -13
  152. package/web/.next/server/app-paths-manifest.json +6 -4
  153. package/web/.next/server/chunks/143.js +1 -1
  154. package/web/.next/server/chunks/274.js +1 -0
  155. package/web/.next/server/chunks/306.js +1 -0
  156. package/web/.next/server/chunks/423.js +1 -0
  157. package/web/.next/server/chunks/505.js +6 -0
  158. package/web/.next/server/chunks/555.js +1 -0
  159. package/web/.next/server/chunks/612.js +1 -0
  160. package/web/.next/server/chunks/638.js +1 -0
  161. package/web/.next/server/chunks/692.js +18 -0
  162. package/web/.next/server/chunks/716.js +2 -0
  163. package/web/.next/server/chunks/790.js +11 -0
  164. package/web/.next/server/chunks/802.js +1 -0
  165. package/web/.next/server/chunks/890.js +1 -1
  166. package/web/.next/server/chunks/919.js +1 -0
  167. package/web/.next/server/chunks/950.js +6 -0
  168. package/web/.next/server/middleware-build-manifest.js +1 -1
  169. package/web/.next/server/middleware-react-loadable-manifest.js +1 -1
  170. package/web/.next/server/next-font-manifest.js +1 -1
  171. package/web/.next/server/next-font-manifest.json +1 -1
  172. package/web/.next/server/pages/404.html +1 -1
  173. package/web/.next/server/pages/500.html +1 -1
  174. package/web/.next/server/server-reference-manifest.json +1 -1
  175. package/web/.next/static/Bz7onClw1BajMUCwqpU8o/_buildManifest.js +1 -0
  176. package/web/.next/static/chunks/0937d497-114a2a3de515565e.js +1 -0
  177. package/web/.next/static/chunks/176-aeaf907a6ea5627d.js +1 -0
  178. package/web/.next/static/chunks/291-efae53ea5f7ee92d.js +1 -0
  179. package/web/.next/static/chunks/2b9ff8ee-969e65cc354b2150.js +1 -0
  180. package/web/.next/static/chunks/30-9adcbe92b15a6815.js +1 -0
  181. package/web/.next/static/chunks/316-26da9cc233ba7557.js +1 -0
  182. package/web/.next/static/chunks/350-56599dc3bf06066d.js +1 -0
  183. package/web/.next/static/chunks/486-13e08542f3a1cbac.js +1 -0
  184. package/web/.next/static/chunks/491-6b4e6201f5110dff.js +1 -0
  185. package/web/.next/static/chunks/517-ccaf8cc5c733cbd8.js +1 -0
  186. package/web/.next/static/chunks/545.bfbd92b7632c09de.js +1 -0
  187. package/web/.next/static/chunks/{805-d946ebedb7e85f73.js → 562-7c2e33d838e869bf.js} +1 -1
  188. package/web/.next/static/chunks/581-3ad5c4343dad3f50.js +1 -0
  189. package/web/.next/static/chunks/586-f7017d585a84738d.js +1 -0
  190. package/web/.next/static/chunks/657.b4c39e676c3e20dc.js +1 -0
  191. package/web/.next/static/chunks/701.6abcaf5e60463eef.js +6 -0
  192. package/web/.next/static/chunks/705-c7e75806f77b880c.js +1 -0
  193. package/web/.next/static/chunks/706-fa2be0f10ffebe6a.js +1 -0
  194. package/web/.next/static/chunks/837-33c7480524f48577.js +1 -0
  195. package/web/.next/static/chunks/839-4aefe6e71be6e1ef.js +1 -0
  196. package/web/.next/static/chunks/844-fe55292e0701f436.js +1 -0
  197. package/web/.next/static/chunks/89-b194fcffe5120c44.js +1 -0
  198. package/web/.next/static/chunks/97.594543c2196de524.js +1 -0
  199. package/web/.next/static/chunks/app/_not-found/page-238a7b80bda6b4ae.js +1 -0
  200. package/web/.next/static/chunks/app/agents/[id]/page-3faf40800981a736.js +1 -0
  201. package/web/.next/static/chunks/app/agents/page-f4c4c80f955f3967.js +1 -0
  202. package/web/.next/static/chunks/app/connections/page-0936beaf02d863c6.js +1 -0
  203. package/web/.next/static/chunks/app/layout-99620746d028dda8.js +1 -0
  204. package/web/.next/static/chunks/app/page-a7f292117b7d76bf.js +1 -0
  205. package/web/.next/static/chunks/app/relations/page-fba25393c8688714.js +1 -0
  206. package/web/.next/static/chunks/app/resources/[id]/page-d110d89bb8b5fca7.js +1 -0
  207. package/web/.next/static/chunks/app/resources/page-bbd0b450d3f3131d.js +1 -0
  208. package/web/.next/static/chunks/app/schedules/page-a1124397fc760413.js +1 -0
  209. package/web/.next/static/chunks/app/sessions/page-0e322811b0cde724.js +1 -0
  210. package/web/.next/static/chunks/app/skills/page-22ea0ef89d9f7a13.js +1 -0
  211. package/web/.next/static/chunks/app/types/page-18c4e1db2724d41d.js +1 -0
  212. package/web/.next/static/chunks/fcafe1ac.366e4950d3b0d4b7.js +18 -0
  213. package/web/.next/static/chunks/framework-bbac72adbbe2d328.js +1 -0
  214. package/web/.next/static/chunks/main-app-6086068e5fb5eacd.js +1 -0
  215. package/web/.next/static/chunks/main-c15f3fee674e0303.js +1 -0
  216. package/web/.next/static/chunks/pages/_app-d1670a2c6ce392fc.js +1 -0
  217. package/web/.next/static/chunks/pages/_error-95aac014d202fa7a.js +1 -0
  218. package/web/.next/static/chunks/webpack-ef515e41a83a16ac.js +1 -0
  219. package/web/.next/static/css/945795da867f5250.css +1 -0
  220. package/web/.next/static/css/b7a03c62468f4263.css +1 -0
  221. package/web/.next/trace +29 -23
  222. package/web/.next/types/app/resources/[id]/page.ts +84 -0
  223. package/web/.next/types/app/resources/page.ts +84 -0
  224. package/web/.next/types/routes.d.ts +6 -2
  225. package/web/.next/types/validator.ts +18 -0
  226. package/web/next.config.mjs +4 -0
  227. package/web/.next/server/chunks/247.js +0 -1
  228. package/web/.next/server/chunks/484.js +0 -11
  229. package/web/.next/server/chunks/851.js +0 -1
  230. package/web/.next/server/chunks/932.js +0 -2
  231. package/web/.next/static/_z2hBOHhwiR5ytdI_8alh/_buildManifest.js +0 -1
  232. package/web/.next/static/chunks/0937d497-44abb0f9355ace92.js +0 -1
  233. package/web/.next/static/chunks/2b9ff8ee-c3b61ac1e608c57d.js +0 -1
  234. package/web/.next/static/chunks/463-6ae35cdefdc59169.js +0 -1
  235. package/web/.next/static/chunks/493-50d2adf9fd5ec680.js +0 -1
  236. package/web/.next/static/chunks/517-eb26c72f6059aa26.js +0 -1
  237. package/web/.next/static/chunks/589-8bf536f331de4269.js +0 -1
  238. package/web/.next/static/chunks/657.f1e03b7b65eba1d9.js +0 -1
  239. package/web/.next/static/chunks/687-3a4205f51be38602.js +0 -1
  240. package/web/.next/static/chunks/837-fd7623601dc78ed8.js +0 -1
  241. package/web/.next/static/chunks/850-318f32484989dd59.js +0 -1
  242. package/web/.next/static/chunks/89-ace2e1aa63babfdf.js +0 -1
  243. package/web/.next/static/chunks/951-e250b541b67da7ce.js +0 -1
  244. package/web/.next/static/chunks/app/_not-found/page-bbd54d7b9a55d7ae.js +0 -1
  245. package/web/.next/static/chunks/app/agents/[id]/page-a8b7a43d2c18483f.js +0 -1
  246. package/web/.next/static/chunks/app/agents/page-e9b17f1c3439ef98.js +0 -1
  247. package/web/.next/static/chunks/app/connections/page-477f36fcd5b13d78.js +0 -1
  248. package/web/.next/static/chunks/app/layout-a2d38e3de5911b1b.js +0 -1
  249. package/web/.next/static/chunks/app/page-6fc87fc5a128a204.js +0 -1
  250. package/web/.next/static/chunks/app/relations/page-0355a93a8eb67989.js +0 -1
  251. package/web/.next/static/chunks/app/schedules/page-39befd15b3b20586.js +0 -1
  252. package/web/.next/static/chunks/app/sessions/page-beae9a74a07d69e0.js +0 -1
  253. package/web/.next/static/chunks/app/skills/page-4f839ac913e26d32.js +0 -1
  254. package/web/.next/static/chunks/app/types/page-4f6b99af3232f861.js +0 -1
  255. package/web/.next/static/chunks/framework-0e68884e76d9a8d3.js +0 -1
  256. package/web/.next/static/chunks/main-app-d6f73ccd41f325c5.js +0 -1
  257. package/web/.next/static/chunks/main-cd22509db15764e2.js +0 -1
  258. package/web/.next/static/chunks/pages/_app-0f75d689c738a6fc.js +0 -1
  259. package/web/.next/static/chunks/pages/_error-d481f6d49fb4455d.js +0 -1
  260. package/web/.next/static/chunks/webpack-d40de72e52f65f79.js +0 -1
  261. package/web/.next/static/css/da22f0402b1c40ae.css +0 -1
  262. /package/web/.next/static/{_z2hBOHhwiR5ytdI_8alh → Bz7onClw1BajMUCwqpU8o}/_ssgManifest.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,103 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.2.1] - 2026-10-13
10
+
11
+ ### Added
12
+
13
+ - OpenCode 2.x: when a turn fails (for example a full conversation) the error offers **Compact conversation**. Other versions only suggest starting a new conversation.
14
+ - Terminals: selecting text copies it, and Ctrl+Shift+C copies too (Ctrl+C only copies while text is selected).
15
+
16
+ ### Fixed
17
+
18
+ - Minimizing the terminal panel no longer breaks the scroll of a full screen program (OpenCode, Claude Code): the terminals stay mounted, and the server remembers the screen and mouse modes a program switched on so a reload restores them.
19
+ - A turn that failed (conversation full, provider blocked, timeout) no longer looks like it is still running: the timer stops, "Stop" goes away and the composer sends normally. The error now says what to do.
20
+ - OpenCode failures now show their real reason ("Go usage limit exceeded", insufficient funds, blocked response) instead of "opencode exited with code 1".
21
+ - OpenCode 1.x works again: the flags `opencode run` accepts are read from its help and unsupported ones (`--standalone`, `--server`) are not passed.
22
+ - A new conversation no longer shows "Show earlier messages" with the count of the previous one.
23
+ - The tokens per turn chart in the stats panel was drawn downwards.
24
+
25
+ ## [1.2.0] - 2026-10-13
26
+
27
+ ### Added
28
+
29
+ - **User manual** in English and Spanish (`docs/manual`): fourteen chapters per language, from the first steps to resources, the git explorer, terminals, permissions and troubleshooting, with screenshots of every screen. The README links it.
30
+ - Interface accessibility: **dialogs and drawers** share one mechanism (the rest of the page is inert while one is open, only the topmost reacts to Esc, focus is trapped and given back, `data-autofocus` picks the first control), **tabs** have ARIA roles and arrow keys, **toasts** announce errors as alerts, can be closed, pause under the pointer and never repeat, the chat is a `role="log"`, table rows that open something work with the keyboard, form labels are tied to their fields, and the contrast of muted and success text meets 4.5:1.
31
+ - Theme and language are applied **before the first paint** (no flash of the light theme with a saved dark one), and the theme button reports its state.
32
+ - Colony and agents: one **New** menu (agent, colony, resource), statistics that link to their lists, a *Recent* feed with links to the agent and the session that updates from the WebSocket, **arrow keys to move** colonies and free hexagons, a skeleton while loading and an **error banner with Retry** when the API does not answer (instead of an empty colony). The agent list keeps its search and filters and scrolls sideways on a phone.
33
+ - Chat and sessions: a **Jump to latest** button when you scroll away from the end (the chat follows the reply by itself until you scroll away yourself), an unsent **draft per agent** that survives switching agent or reloading, the agent's settings panel and tab in the URL (`?tab=`), and Sessions open from a link (`?session=`) and show the same blocks as the chat (tool calls and thinking included). Resources keep their open tab in the URL too.
34
+ - **Confirmations and unsaved-change guards**: recreating a resource, clearing an HTTP history, forgetting an HTTP session, switching skill, and closing a drawer or leaving the tab with changes not saved now ask first.
35
+ - **Schema versioning**: the database records its version (`PRAGMA user_version`) and applies idempotent migrations, each in a transaction, from one place (`db/migrations.ts`); a database from any earlier build opens without losing a row.
36
+ - A **request body limit**: 2 MiB for JSON and about 135 MB for chat attachments; above that the answer is 413 and the connection is closed. Invalid bodies (not an object) and malformed URLs answer 400.
37
+ - **Orderly shutdown**: Ctrl+C or a service stop closes the server, the WebSockets, the terminals, the channel connections and the database (5 s at most); a taken port gives a clear message. Servers and containers kept as resources keep running.
38
+ - Settings that can be changed with environment variables: `HIVE_AM_KILL_GRACE_MS` (grace before a CLI is killed), `HIVE_AM_TELEGRAM_TIMEOUT_MS` and `HIVE_AM_WAKE_RETRY_MS`.
39
+ - New test scripts that need no model: migrations, runtime recovery, shared provider code, Telegram timeouts, connection lifecycle and the HTTP core (21 `test-*.ts` in all).
40
+ - Connections: agents can **react to messages** with an emoji (`channel_react`) instead of writing, only with the emoji the platform allows (on Telegram its fixed list; the tool lists the valid ones when one is refused). The "Chat channels" skill explains when to react and which emoji to use; existing libraries get the section added once.
41
+ - Agents, types and connections: the **model** field is now a selector: it shows the model in use (or "CLI default"), opens a searchable list of what the CLI offers and still accepts any model id typed by hand.
42
+ - Chat: **send files and pictures to an agent**: paste a picture or a copied file (Ctrl+V, ⌘V on a Mac), drop files on the text box or use the clip. Pictures show as previews and appear as thumbnails in the conversation; other files show as a chip that downloads. Up to 5 per message, 20 MB each, saved in the agent's inbox (with a note of where, so the agent opens them with its file tools); a picture is recognised by its bytes, anything else keeps its name and is never run.
43
+ - Colony map: **drag** a colony (by its name) or a free agent / resource to place it where you want (kept in this browser, with a button to put everything back), and **zoom** (− / +, Ctrl/⌘ + wheel).
44
+ - Database resources: **driver properties** (a table of the options the Node driver of the engine really takes — `charset`, `application_name`, `search_path`, `appName`, `instanceName`, `foreign_keys`, `timeout`… — each with its description in English and Spanish and the right control, and none that could override what hive-am decides), **SSL files** (CA, client certificate and key) with a clear error when one is missing, and a **connection URL** that fills the form (`postgresql://…?sslmode=require`, `mysql://`, `mssql://`, `sqlite:///`). The creation drawer is redesigned: engine tiles, URL, connection with its test, safety and an *Advanced* section; the name can stay empty. `GET /api/object-db/props`.
45
+ - **Database resources** (MySQL / MariaDB, PostgreSQL, SQLite and SQL Server): create one with a connection that can be tested before saving (the password stays on the server), see its state (version and latency), write and run queries in an editor with the file explorer's themes (Ctrl/⌘+Enter, a selection runs alone), browse databases, tables, views and columns, copy or download a result as CSV/JSON, save queries and keep a history. A result is cut at 1000 rows without reading the rest, a slow query is stopped (SQLite runs in a process of its own that is killed at the timeout), and by default only reads are accepted — checked in the text and, where the engine allows it, by the connection itself. It has its own card on the colony map, settings and tests (`scripts/test-object-database.ts`, with real servers). Needs `mysql2`, `pg`, `pg-cursor` and `mssql`. The SQL editor **suggests** tables, schemas, columns (by table or alias) and keywords and has a **Format** button (Alt+Shift+F); picking a query from the History or the saved ones **adds** it at the end of the editor instead of replacing what was written; saved queries can be renamed, replaced and deleted from the History tab; password fields have an **eye** to show what is typed.
46
+ - Colony map: clicking an agent or a resource opens a card beside its hex with its details and actions (open chat, settings, change colony, delete; for resources start/stop/restart, terminal, logs, who looks after it, *Create manager agent* / *Add manager agent*). It follows the hex when the canvas scrolls, closes with Esc, the X or a click outside, and becomes a sheet at the bottom on narrow screens. The links of orchestrators, clusters and managers (agent ↔ resource) are drawn only for what is under the cursor or selected, and tags on the hexagons say who is connected (⚙ the manager of a resource, ⚙ N what an agent looks after).
47
+ - Docker logs are read from the end of the file (25 ms on a 200 MB log) and the containers hive-am creates get a default log limit (10 MB x 3). The server settings explain that restarts and health checks only work while hive-am runs.
48
+ - App templates for Docker resources: when creating one, **From a template** offers Redis, Valkey, PostgreSQL, MariaDB, MySQL, MongoDB, RabbitMQ, MinIO, Nginx, Mailpit and Adminer; you fill a few values (version, ports, user, password — each password starts random) and hive-am writes the compose file under its data folder (`stacks/`) and creates the resource (it is not started: the first run downloads the images). Values are checked before anything is written. API: `GET /api/object-templates`, `POST /api/objects/from-template`.
49
+ - Per service of a compose project (and for a container): **Inspect** (how it runs, variables with secrets hidden until shown, ports, mounts, networks, health checks), a **shell** inside it, **create again** (`--force-recreate`) and **build again** (`--build`); and **create again** / **build again** for the whole Docker resource. API: `GET /api/objects/:id/inspect?service=`, `POST /api/objects/:id/service` with `recreate` / `rebuild`, `POST /api/objects/:id/action` with `recreate` / `rebuild`, and terminals take a `service`.
50
+ - Compose projects and clusters in the style of Docker Desktop: a compose resource lists its services with state, image, ports that open in the browser, CPU and memory, and start / stop / restart / logs for each service on its own (`POST /api/objects/:id/service`); a cluster shows its members as a tree (state, what each runs, CPU and memory, the services of a compose member under it) with the same actions and the start order.
51
+ - The `.http` file editor of the HTTP runner is the code explorer’s editor: syntax highlighting for `.http` / `.rest` files (also in the explorer), line numbers, the same themes (Hive, GitLab, Solarized, Monokai, Dracula), visible whitespace and tab width, and the theme picker next to the editor (one setting for both places). The suggestions keep working on top of it.
52
+ - Run an HTTP file with data: a CSV (names in the first line) or a JSON array of objects; the file runs once per row with the columns as variables for that row, and a table shows how each request went in each row (up to 200 rows; the values are forgotten at the end).
53
+ - HTTP answers can be filtered (text, or a JSONPath such as `$.items[*].id`, `$..id`, `$.a[?(@.price > 10)]`), and the requests of a file (or all of them) can be exported as Markdown documentation (with an example answer taken from the history) or as a Postman v2.1 collection. API: `GET /api/objects/:id/http/docs?format=markdown|postman&file=`.
54
+ - HTTP requests without code: an **Authentication** tab (Bearer, Basic, API key; for one request or all of a file) writes the header the request needs, and **Checks** in the Tests tab (status, time, header, JSON value, text) are saved in the file as a response handler and reported on each run. Handlers can read `response.time` and `response.text`.
55
+ - HTTP history that lasts: the last 100 runs of each HTTP resource are kept on disk (request, answer, tests), so they survive a restart; and **compare** any run with the previous one of the same request, or with another, as status, time, size, changed headers and a line diff of the answer. API: `GET|DELETE /api/objects/:id/http/history`.
56
+ - Suggestions while editing a `.http` file: variables inside `{{ }}` (with their value), answers of named requests and generated values, methods at the start of a request, header names and the values of Content-Type / Accept, and `# @name`. Ctrl+Space opens them, arrows and Enter or Tab accept.
57
+ - New HTTP requests from the screen: a **+** next to the environment opens a form (file, name, method, URL, headers, body) or takes a pasted **cURL** command, and adds the request to an existing `.http` file or to a new one (`POST /api/objects/:id/http/file` creates files, never over an existing one). `Authorization: Basic user password` is sent encoded.
58
+ - HTTP requests can be copied as cURL, wget, HTTPie, PowerShell, JavaScript (fetch), Node (axios), Python, Go, PHP, Java, C#, Ruby, Rust or a raw HTTP message, with the values in effect now (what has no value stays as `{{name}}`; credential headers can be hidden). API: `GET /api/objects/:id/http/export`.
59
+ - HTTP **History** tab (replaces the Session panel): every run (request, status, time, tests, answer as a tree), plus the values and remembered answers the session keeps, with the option to set or forget them.
60
+ - HTTP runner that shows real values: a **Variables** tab per file and per request (current value, where it comes from — session, `@` in the file, env file, hive-am, answer of another request, generated, missing —, what it hides, and how many times it is used), the request **as it will be sent** (secrets masked, missing values marked), the `.http` file as text with a ▶ per request and `{{variables}}` that show their value on hover (with editing and saving), JSON answers as a foldable tree that copies references (`{{login.response.body.$.token}}`), and remembered answers in the Session panel with their data. A value can be set for the session from any of them. The selected environment (env files, then hive-am's) wins over an `@name` line of the file; the value of the session wins over everything.
61
+ - Chaining HTTP requests: response handlers (`> {% … %}`) keep values for the next requests (`client.global.set`) and check the answer (`client.test` / `client.assert`), requests with a name can be used by the next ones (`{{login.response.body.token}}`), and a session per HTTP resource (values and answers, visible and editable) lasts until hive-am stops. Handlers run in a small safe interpreter, not as JavaScript: no `require`, `process`, loops or prototypes. The runner shows tests, console, what was kept, a request that needs another one's answer offers to run it first, and running a file can stop at the first failure.
62
+ - Suggestions in the resource forms: images and containers from Docker (read-only), the services of a compose file as chips to pick (and a project name from the folder), and, for HTTP variables, the names the requests use (with a panel that shows which ones still have no value).
63
+ - Resources screen: **Resources** in the rail opens a screen like an agent's, with a collapsible list at the left and, for each resource, tabs: Summary (state, uptime, CPU and memory with history, Docker network and disk, details, latest output), Logs on a whole screen (search, only matches, follow, wrap, text size, pause, copy, download, error and warning colours, per-member colours for clusters) and Settings in place (unsaved-changes bar, save and restart, delete). The Colony map links to it.
64
+ - HTTP requests as a screen: pick the `.http` file you want, see its requests, run one or the whole file; and **Variables** of its own per environment (for when there is no env file; env files win), with **secrets** that are hidden once saved and never returned by the API (stored unencrypted on this machine).
65
+ - Keeping servers healthy: restart after a failure or always, with a growing wait and a limit (then it says it gave up); health checks (HTTP, port, command) that mark it unhealthy and can restart it; stop timeout; log rotation while it runs. Docker containers: memory, CPU, network, log size and stop timeout (the container is created again when one of them changes).
66
+ - Terminals: a bottom panel (Ctrl+`) with real shells (a pty each, kept by the server, replayed when a page attaches) and the logs of resources in tabs; from an agent, a server resource or a container. Only this machine can reach them (loopback host and origin), `HIVE_AM_TERMINALS=0` turns them off, `node-pty` is an optional dependency.
67
+ - HTTP-requests resources: a folder of `.http` / `.rest` files with environments (`http-client.env.json` and the private one), file and generated variables, bodies from a file and a runner to send the requests and read the answers; nothing is sent while a variable is missing, and credentials are hidden in the echoed request.
68
+ - Cluster resources: group servers and containers of a colony to start them in order, stop them in reverse, see one state and read their logs together with the name of each member; a table of members with one-by-one actions and a start order you can change.
69
+ - Agents that look after resources: the "Colony resources" skill gives an agent `object_list`, `object_logs` and `object_action` (start, stop, restart) for the servers, containers and clusters it looks after; read-only agents cannot act, an agent cannot create or change resources, and the log says who asked. A resource has **one manager agent**, chosen by searching: in the resource's form (creating and editing), from its card on the colony map (*Create manager agent* / *Add manager agent*) and from the agent's form (*Resources it looks after*, which takes several). With a manager only that agent looks after it (any colony); with none, the agents of its colony that have the skill do. An agent without the skill gets it when chosen.
70
+ - Colony resources: servers (a command hive-am keeps running, with its own process group and log file, found again after a restart) and Docker (a container hive-am creates, a compose project, or an existing container that is never removed) as hexagons on the Colony map, with state, start / stop / restart and live logs. API under `/api/objects`; changes only from the local app.
71
+ - Git explorer: a Compare tab (two branches, tags or commits: files, commits in between and diffs, pictures before and after), history search by message, author or content, by branch or tag, and by hash; history of a single file; "View at…" to read a file as it was at any ref; search inside the files; creating a branch from a tag (without switching) and deleting local branches; `/` and `Alt+1…5` shortcuts and the last open file remembered per agent.
72
+ - Tags in the git explorer: a Tags tab lists the repository's tags; each one can be browsed read-only (its files as they were at that tag, with Markdown preview, and the changes of its commit). The working folder is never touched.
73
+
74
+ ### Changed
75
+
76
+ - Agent settings: the panel of an agent is now a **drawer over the page** (dimmed background, Escape and focus handled like the New agent and New colony panels) instead of a fixed side panel that covered the header and the message box of the chat. It opens with the Settings button or with `?tab=config|notebook|sessions` in the address, closing it with unsaved changes asks first, and reading or resuming a session closes it so the chat is in view.
77
+ - Markdown (chat, sessions, skill preview, changes preview): headings with a visible hierarchy, quotes with a bar, tables that scroll instead of overflowing, tidier lists and task lists.
78
+ - **Code structure, same behaviour**: `api.ts` is now a small facade over `http/` (router, errors, one local-only guard, body reading, validation and one file of routes per domain) and `services/` (agents, colonies, connections, notebook, schedules, providers); domain errors share one base (`DomainError`) that maps to a status in a single place, so a refused action is a 400 on every route; providers and history readers are registered behind an interface and share their JSON-line, text and process helpers; the database caches its prepared statements and creating or updating an agent, a type or a colony is one transaction. Routes and responses are the same. Pinning Origin/Host on every route is still pending (a `TODO(security)` in `api.ts`).
79
+ - **Frontend building blocks**: dialogs, confirmations, tabs, empty states, banners, search boxes, checkbox rows and the workspace header (whose secondary actions fold into a menu when it is narrow) are shared components; the interface keeps its state in narrow store hooks (a streamed token no longer re-renders the navigation or the colony), and polling, saved preferences, unsaved-change guards, drag-resizable widths and URL state are hooks. Styles use tokens for layers, font sizes and meaning colours, and there is one dark block instead of two.
80
+ - The HTTP and database resource screens are split into smaller parts (the HTTP runner keeps its state in one hook and each pane is its own component) and share one list-and-detail layout.
81
+ - The git explorer is split into smaller parts (tabs, file tree, viewer, preview, history, branches, commit and discard confirmations), and its file tree supports the keyboard and screen readers.
82
+ - The path picker shows loading and errors, and dates and times follow the app's language.
83
+ - The two example skills `concise-reports` and `careful-reviewer` are no longer created, and are removed on start where they are still as they were made.
84
+ - One path picker for every folder or file field (agent, colony and server folders, the compose file, Docker volumes), including a file mode.
85
+ - Your messages in the web chat (and in Sessions) are no longer inverted bubbles: light with a thin border in the light theme and dark in the dark theme.
86
+ - Tooltips: every `title` in the interface now shows a styled tooltip (after a short pause, or on keyboard focus) instead of the browser's own, in both themes. Icon-only elements keep the text as their accessible name.
87
+ - Git explorer, less crowded: one toolbar row (Fetch, Pull and Push are icons with a tooltip and their counts), icon tabs where only the open one shows its name, a single filter row (name/content toggle and a "changes only" button) and a two-row file header with the secondary actions as icons.
88
+ - Sessions screen: a sidebar like the Skills one, a transcript that opens on its latest 100 messages (with a button for earlier ones) and long messages folded behind "show all".
89
+ - The sessions list no longer reads every conversation to answer: sizes and costs are cached by conversation fingerprint and filled in the background, so the list appears at once even with very long sessions.
90
+ - Thinner scrollbars with no track, tinted with the theme colour and darker while hovered, in light and dark themes.
91
+ - The test scripts refuse to run against the real data folder: `HIVE_AM_HOME` must point to a temporary one.
92
+
93
+ ### Fixed
94
+
95
+ - Pressing Esc in a confirmation opened over a panel (deleting a colony, a connection or a type) also closed the panel and lost what you were editing, and the panel was not dimmed behind the confirmation. Only the topmost layer reacts to Esc now.
96
+ - Schedules: the list stops refreshing while the tab is hidden, a server that does not answer shows one notice instead of one every 10 seconds, and opening the history of a schedule no longer reloads it on every refresh.
97
+ - Skills: **Discard** on a skill that already existed did nothing; it now brings back the saved text.
98
+ - An agent no longer stays "running" when the preparation of its turn fails.
99
+ - A wake-up whose delivery failed no longer stays orphaned: it is retried 12 times and then dropped.
100
+ - Starting the same connection twice no longer leaves an adapter polling with no owner.
101
+ - Telegram calls, uploads and downloads have a timeout, so a half-open connection no longer hangs a conversation.
102
+ - A CLI that ignores the stop request is killed after a grace period, and a Docker command killed by a signal or by its output limit counts as a failure.
103
+ - Deleting a skill or a type that fails now shows an error, and a failed API load shows a retry instead of empty lists.
104
+ - The WebSocket uses `wss:` when the page is https and ignores a malformed frame.
105
+
9
106
  ## [1.1.0] - 2026-10-10
10
107
 
11
108
  ### Added
@@ -52,6 +149,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
52
149
  - Complete documentation in English and Spanish.
53
150
  - npm package with the `hive-am` command.
54
151
 
55
- [Unreleased]: https://github.com/hughcbscrt/hive-am/compare/v1.1.0...HEAD
152
+ [Unreleased]: https://github.com/hughcbscrt/hive-am/compare/v1.2.1...HEAD
153
+ [1.2.1]: https://github.com/hughcbscrt/hive-am/compare/v1.2.0...v1.2.1
154
+ [1.2.0]: https://github.com/hughcbscrt/hive-am/compare/v1.1.0...v1.2.0
56
155
  [1.1.0]: https://github.com/hughcbscrt/hive-am/compare/v1.0.0...v1.1.0
57
156
  [1.0.0]: https://github.com/hughcbscrt/hive-am/releases/tag/v1.0.0
package/README.md CHANGED
@@ -34,12 +34,14 @@ have installed; it does not replace them and it never copies your conversations
34
34
  - **Real sessions.** An agent stores only a pointer (`provider`, `session_id`, `cwd`). The transcript lives in the CLI's own store and is read back from there. After a restart every agent resumes its real session.
35
35
  - **Orchestration.** An orchestrator delegates to the workers connected to it on the Relations canvas. Every delegation runs in a fresh native session of the worker, and the rule is enforced on the server, not just requested.
36
36
  - **Colonies.** Group agents on a honeycomb map and lend them defaults: working folder, permissions, skills and a shared prompt. Each agent can opt out per field.
37
- - **Skills.** Nine skills ship with hive-am (all ordinary: edit or delete them). Assign them to an agent, a type or a colony, and choose per assignment whether they are **always** in the instructions or loaded **on demand** with a `skill_read` tool. Searchable picker with token weights.
37
+ - **Skills.** Ten skills ship with hive-am (all ordinary: edit or delete them). Assign them to an agent, a type or a colony, and choose per assignment whether they are **always** in the instructions or loaded **on demand** with a `skill_read` tool. Searchable picker with token weights.
38
38
  - **Notebook.** An agent can keep a persistent notebook of what it learns (no credentials, no duplicates, every note with its source). You can read and edit it from the agent's settings.
39
39
  - **Telegram.** Link a bot to an agent: private chats, groups and topics, one shared session across all of them. In groups the agent can listen to everything and speak only when it adds something; people can mute it per thread and bring it back.
40
40
  - **Files and images.** People send documents and photos to the agent; the agent sends files back. An optional image model can describe pictures for models that cannot see them.
41
41
  - **Permissions that hold.** *Read-only*, *Edit files* and *Full access* are enforced by the CLI itself in all three providers.
42
42
  - **Changes explorer.** A Git tab per agent: file tree with highlighting, diff viewer, history, commit, pull, push and branches.
43
+ - **Resources.** Servers, Docker containers, HTTP requests (`.http` files) and clusters that group them live in a colony as hexagons: start, stop, read logs, run requests; agents can look after them.
44
+ - **Terminals.** A bottom panel (Ctrl+`) with real shells and object logs, reachable only from this machine.
43
45
  - **Local and private.** The server binds to `127.0.0.1`. Data lives in `~/.hive-am/`.
44
46
 
45
47
  ## Providers
@@ -117,6 +119,10 @@ checked on the server. The bot token is stored in `~/.hive-am/hive-am.db` and ne
117
119
  - `mcp/dispatch.mjs`: the `hive` MCP server: `list_agents` and `dispatch` for orchestrators, `channel_*` for connections, `notebook_*` and `skill_read`.
118
120
  - `web/`: Next.js 15 UI. Colony (honeycomb), Agents, the agent workspace (chat, changes, settings, notebook, sessions), Relations canvas, Types, Skills, Connections and Sessions.
119
121
 
122
+ ## User manual
123
+
124
+ A step by step guide with screenshots, from installing hive-am to running resources and reviewing changes: **[English](docs/manual/en/README.md)** · **[Español](docs/manual/es/README.md)**.
125
+
120
126
  ## Documentation
121
127
 
122
128
  Full documentation in English and Spanish: **[English](docs/reference/en/README.md)** · **[Español](docs/reference/es/README.md)**.
@@ -131,6 +137,8 @@ Full documentation in English and Spanish: **[English](docs/reference/en/README.
131
137
  | Orchestration and relations | [docs/09](docs/reference/en/09-orchestration-and-relations.md) |
132
138
  | Changes explorer (git) | [docs/13](docs/reference/en/13-changes-explorer-git.md) |
133
139
  | External connections | [docs/14](docs/reference/en/14-external-connections.md) |
140
+ | Colony resources (servers, Docker) | [docs/15](docs/reference/en/15-colony-resources.md) |
141
+ | Terminals | [docs/16](docs/reference/en/16-terminals.md) |
134
142
  | Operation and troubleshooting | [docs/12](docs/reference/en/12-operations-and-troubleshooting.md) |
135
143
 
136
144
  ## Known limits
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hive-am",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "description": "A colony of coding agents: orchestrators and subagents over Claude Code, OpenCode and Kiro, with real session resume, a browser UI and Telegram.",
5
5
  "keywords": [
6
6
  "ai-agents",
@@ -53,7 +53,14 @@
53
53
  ],
54
54
  "dependencies": {
55
55
  "better-sqlite3": "^12.11.1",
56
+ "mssql": "^12.7.4",
57
+ "mysql2": "^3.24.5",
58
+ "pg": "^8.23.1",
59
+ "pg-cursor": "^2.22.1",
56
60
  "ws": "^8.21.3",
61
+ "@xterm/addon-fit": "^0.11.0",
62
+ "@xterm/addon-web-links": "^0.12.0",
63
+ "@xterm/xterm": "^6.0.0",
57
64
  "@xyflow/react": "^12.3.0",
58
65
  "highlight.js": "^11.12.0",
59
66
  "lucide-react": "^0.468.0",
@@ -61,6 +68,10 @@
61
68
  "react": "^19.0.0",
62
69
  "react-dom": "^19.0.0",
63
70
  "react-markdown": "^10.1.0",
64
- "remark-gfm": "^4.0.1"
71
+ "remark-gfm": "^4.0.1",
72
+ "sql-formatter": "^15.9.0"
73
+ },
74
+ "optionalDependencies": {
75
+ "@homebridge/node-pty-prebuilt-multiarch": "^0.14.1"
65
76
  }
66
77
  }