@turmind/halo 0.1.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 (296) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +143 -0
  3. package/admin-out/404.html +1 -0
  4. package/admin-out/_next/static/IBP_mwBDf-cPwZSZZGpi8/_buildManifest.js +1 -0
  5. package/admin-out/_next/static/IBP_mwBDf-cPwZSZZGpi8/_ssgManifest.js +1 -0
  6. package/admin-out/_next/static/chunks/1d2d5650-810a3ca1ae20cab5.js +18 -0
  7. package/admin-out/_next/static/chunks/200.3b8f8a74f005a134.js +1 -0
  8. package/admin-out/_next/static/chunks/220.3dc41cd6269b88e6.js +1 -0
  9. package/admin-out/_next/static/chunks/298-d6b224b569da4de0.js +1 -0
  10. package/admin-out/_next/static/chunks/304eda7d.b1ee7f523653e027.js +1 -0
  11. package/admin-out/_next/static/chunks/330.3b784cf0dcd69163.js +1 -0
  12. package/admin-out/_next/static/chunks/442.f4302087bddb1ec1.js +1 -0
  13. package/admin-out/_next/static/chunks/443.d1b289781793f8de.js +25 -0
  14. package/admin-out/_next/static/chunks/503-7c6d9935df6e0cea.js +1 -0
  15. package/admin-out/_next/static/chunks/533.5f2d4bfe3d076095.js +1 -0
  16. package/admin-out/_next/static/chunks/579.a2718ddd395a2f3a.js +1 -0
  17. package/admin-out/_next/static/chunks/635-3dd0043ed0520b9d.js +1 -0
  18. package/admin-out/_next/static/chunks/65.859665ba6717967a.js +1 -0
  19. package/admin-out/_next/static/chunks/661.a4fe93f3f2a5e871.js +1 -0
  20. package/admin-out/_next/static/chunks/688.4e014ac6cfc7e152.js +1 -0
  21. package/admin-out/_next/static/chunks/868.0c95dfe283400a00.js +1 -0
  22. package/admin-out/_next/static/chunks/app/_not-found/page-8e35399c8fd5016d.js +1 -0
  23. package/admin-out/_next/static/chunks/app/layout-58f773336e6fce61.js +1 -0
  24. package/admin-out/_next/static/chunks/app/page-cc8043335282d745.js +1 -0
  25. package/admin-out/_next/static/chunks/db534642.09d3c650ff587175.js +1 -0
  26. package/admin-out/_next/static/chunks/fb4ec4d6-3fa44f69484f91b9.js +1 -0
  27. package/admin-out/_next/static/chunks/framework-c3031ae54a63fe16.js +1 -0
  28. package/admin-out/_next/static/chunks/main-14b48e3c2588354f.js +1 -0
  29. package/admin-out/_next/static/chunks/main-app-483b436873410ddc.js +1 -0
  30. package/admin-out/_next/static/chunks/pages/_app-b2fc6e5f920d1b1a.js +1 -0
  31. package/admin-out/_next/static/chunks/pages/_error-f3696a8f3d67d150.js +1 -0
  32. package/admin-out/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  33. package/admin-out/_next/static/chunks/webpack-8bd7ef88a6527feb.js +1 -0
  34. package/admin-out/_next/static/css/659eccb5db697b76.css +1 -0
  35. package/admin-out/_next/static/css/8fce4e1a54dac12a.css +3 -0
  36. package/admin-out/_next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
  37. package/admin-out/_next/static/media/21350d82a1f187e9-s.woff2 +0 -0
  38. package/admin-out/_next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
  39. package/admin-out/_next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
  40. package/admin-out/_next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
  41. package/admin-out/_next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
  42. package/admin-out/_next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
  43. package/admin-out/favicon.ico +0 -0
  44. package/admin-out/icon.svg +18 -0
  45. package/admin-out/index.html +1 -0
  46. package/admin-out/index.txt +23 -0
  47. package/admin-out/monaco/vs/_commonjsHelpers-CT9FvmAN.js +1 -0
  48. package/admin-out/monaco/vs/abap-D-t0cyap.js +1 -0
  49. package/admin-out/monaco/vs/apex-CcIm7xu6.js +1 -0
  50. package/admin-out/monaco/vs/assets/css.worker-HnVq6Ewq.js +93 -0
  51. package/admin-out/monaco/vs/assets/editor.worker-Be8ye1pW.js +26 -0
  52. package/admin-out/monaco/vs/assets/html.worker-B51mlPHg.js +470 -0
  53. package/admin-out/monaco/vs/assets/json.worker-DKiEKt88.js +58 -0
  54. package/admin-out/monaco/vs/assets/ts.worker-CMbG-7ft.js +67731 -0
  55. package/admin-out/monaco/vs/azcli-BA0tQDCg.js +1 -0
  56. package/admin-out/monaco/vs/basic-languages/monaco.contribution.js +1 -0
  57. package/admin-out/monaco/vs/bat-C397hTD6.js +1 -0
  58. package/admin-out/monaco/vs/bicep-DF5aW17k.js +2 -0
  59. package/admin-out/monaco/vs/cameligo-plsz8qhj.js +1 -0
  60. package/admin-out/monaco/vs/clojure-Y2auQMzK.js +1 -0
  61. package/admin-out/monaco/vs/coffee-Bu45yuWE.js +1 -0
  62. package/admin-out/monaco/vs/cpp-CkKPQIni.js +1 -0
  63. package/admin-out/monaco/vs/csharp-CX28MZyh.js +1 -0
  64. package/admin-out/monaco/vs/csp-D8uWnyxW.js +1 -0
  65. package/admin-out/monaco/vs/css-CaeNmE3S.js +3 -0
  66. package/admin-out/monaco/vs/cssMode-CjiAH6dQ.js +1 -0
  67. package/admin-out/monaco/vs/cypher-DVThT8BS.js +1 -0
  68. package/admin-out/monaco/vs/dart-CmGfCvrO.js +1 -0
  69. package/admin-out/monaco/vs/dockerfile-CZqqYdch.js +1 -0
  70. package/admin-out/monaco/vs/ecl-30fUercY.js +1 -0
  71. package/admin-out/monaco/vs/editor/editor.main.css +1 -0
  72. package/admin-out/monaco/vs/editor/editor.main.js +5 -0
  73. package/admin-out/monaco/vs/editor.api-CalNCsUg.js +903 -0
  74. package/admin-out/monaco/vs/elixir-xjPaIfzF.js +1 -0
  75. package/admin-out/monaco/vs/flow9-DqtmStfK.js +1 -0
  76. package/admin-out/monaco/vs/freemarker2-Cz_sV6Md.js +3 -0
  77. package/admin-out/monaco/vs/fsharp-BOMdg4U1.js +1 -0
  78. package/admin-out/monaco/vs/go-D_hbi-Jt.js +1 -0
  79. package/admin-out/monaco/vs/graphql-CKUU4kLG.js +1 -0
  80. package/admin-out/monaco/vs/handlebars-OwglfO-1.js +1 -0
  81. package/admin-out/monaco/vs/hcl-DTaboeZW.js +1 -0
  82. package/admin-out/monaco/vs/html-Pa1xEWsY.js +1 -0
  83. package/admin-out/monaco/vs/htmlMode-Bz67EXwp.js +1 -0
  84. package/admin-out/monaco/vs/ini-CsNwO04R.js +1 -0
  85. package/admin-out/monaco/vs/java-CI4ZMsH9.js +1 -0
  86. package/admin-out/monaco/vs/javascript-PczUCGdz.js +1 -0
  87. package/admin-out/monaco/vs/jsonMode-DULH5oaX.js +7 -0
  88. package/admin-out/monaco/vs/julia-BwzEvaQw.js +1 -0
  89. package/admin-out/monaco/vs/kotlin-IUYPiTV8.js +1 -0
  90. package/admin-out/monaco/vs/language/css/monaco.contribution.js +1 -0
  91. package/admin-out/monaco/vs/language/html/monaco.contribution.js +1 -0
  92. package/admin-out/monaco/vs/language/json/monaco.contribution.js +1 -0
  93. package/admin-out/monaco/vs/language/typescript/monaco.contribution.js +1 -0
  94. package/admin-out/monaco/vs/less-C0eDYdqa.js +2 -0
  95. package/admin-out/monaco/vs/lexon-iON-Kj97.js +1 -0
  96. package/admin-out/monaco/vs/liquid-DqKjdPGy.js +1 -0
  97. package/admin-out/monaco/vs/loader.js +1368 -0
  98. package/admin-out/monaco/vs/lspLanguageFeatures-kM9O9rjY.js +4 -0
  99. package/admin-out/monaco/vs/lua-DtygF91M.js +1 -0
  100. package/admin-out/monaco/vs/m3-CsR4AuFi.js +1 -0
  101. package/admin-out/monaco/vs/markdown-C_rD0bIw.js +1 -0
  102. package/admin-out/monaco/vs/mdx-DEWtB1K5.js +1 -0
  103. package/admin-out/monaco/vs/mips-CiYP61RB.js +1 -0
  104. package/admin-out/monaco/vs/monaco.contribution-D2OdxNBt.js +1 -0
  105. package/admin-out/monaco/vs/monaco.contribution-DO3azKX8.js +1 -0
  106. package/admin-out/monaco/vs/monaco.contribution-EcChJV6a.js +1 -0
  107. package/admin-out/monaco/vs/monaco.contribution-qLAYrEOP.js +1 -0
  108. package/admin-out/monaco/vs/msdax-C38-sJlp.js +1 -0
  109. package/admin-out/monaco/vs/mysql-CdtbpvbG.js +1 -0
  110. package/admin-out/monaco/vs/nls.messages-loader.js +1 -0
  111. package/admin-out/monaco/vs/nls.messages.cs.js.js +17 -0
  112. package/admin-out/monaco/vs/nls.messages.de.js.js +17 -0
  113. package/admin-out/monaco/vs/nls.messages.es.js.js +17 -0
  114. package/admin-out/monaco/vs/nls.messages.fr.js.js +15 -0
  115. package/admin-out/monaco/vs/nls.messages.it.js.js +15 -0
  116. package/admin-out/monaco/vs/nls.messages.ja.js.js +17 -0
  117. package/admin-out/monaco/vs/nls.messages.js.js +10 -0
  118. package/admin-out/monaco/vs/nls.messages.ko.js.js +25 -0
  119. package/admin-out/monaco/vs/nls.messages.pl.js.js +17 -0
  120. package/admin-out/monaco/vs/nls.messages.pt-br.js.js +6 -0
  121. package/admin-out/monaco/vs/nls.messages.ru.js.js +17 -0
  122. package/admin-out/monaco/vs/nls.messages.tr.js.js +15 -0
  123. package/admin-out/monaco/vs/nls.messages.zh-cn.js.js +17 -0
  124. package/admin-out/monaco/vs/nls.messages.zh-tw.js.js +15 -0
  125. package/admin-out/monaco/vs/objective-c-CntZFaHX.js +1 -0
  126. package/admin-out/monaco/vs/pascal-r6kuqfl_.js +1 -0
  127. package/admin-out/monaco/vs/pascaligo-BiXoTmXh.js +1 -0
  128. package/admin-out/monaco/vs/perl-DABw_TcH.js +1 -0
  129. package/admin-out/monaco/vs/pgsql-me_jFXeX.js +1 -0
  130. package/admin-out/monaco/vs/php-D_kh-9LK.js +1 -0
  131. package/admin-out/monaco/vs/pla-VfZjczW0.js +1 -0
  132. package/admin-out/monaco/vs/postiats-BBSzz8Pk.js +1 -0
  133. package/admin-out/monaco/vs/powerquery-Dt-g_2cc.js +1 -0
  134. package/admin-out/monaco/vs/powershell-B-7ap1zc.js +1 -0
  135. package/admin-out/monaco/vs/protobuf-BmtuEB1A.js +2 -0
  136. package/admin-out/monaco/vs/pug-BRpRNeEb.js +1 -0
  137. package/admin-out/monaco/vs/python-Cr0UkIbn.js +1 -0
  138. package/admin-out/monaco/vs/qsharp-BzsFaUU9.js +1 -0
  139. package/admin-out/monaco/vs/r-f8dDdrp4.js +1 -0
  140. package/admin-out/monaco/vs/razor-BYAHOTkz.js +1 -0
  141. package/admin-out/monaco/vs/redis-fvZQY4PI.js +1 -0
  142. package/admin-out/monaco/vs/redshift-45Et0LQi.js +1 -0
  143. package/admin-out/monaco/vs/restructuredtext-C7UUFKFD.js +1 -0
  144. package/admin-out/monaco/vs/ruby-CZO8zYTz.js +1 -0
  145. package/admin-out/monaco/vs/rust-Bfetafyc.js +1 -0
  146. package/admin-out/monaco/vs/sb-3GYllVck.js +1 -0
  147. package/admin-out/monaco/vs/scala-foMgrKo1.js +1 -0
  148. package/admin-out/monaco/vs/scheme-CHdMtr7p.js +1 -0
  149. package/admin-out/monaco/vs/scss-C1cmLt9V.js +3 -0
  150. package/admin-out/monaco/vs/shell-ClXCKCEW.js +1 -0
  151. package/admin-out/monaco/vs/solidity-MZ6ExpPy.js +1 -0
  152. package/admin-out/monaco/vs/sophia-DWkuSsPQ.js +1 -0
  153. package/admin-out/monaco/vs/sparql-AUGFYSyk.js +1 -0
  154. package/admin-out/monaco/vs/sql-32GpJSV2.js +1 -0
  155. package/admin-out/monaco/vs/st-CuDFIVZ_.js +1 -0
  156. package/admin-out/monaco/vs/swift-n-2HociN.js +3 -0
  157. package/admin-out/monaco/vs/systemverilog-Ch4vA8Yt.js +1 -0
  158. package/admin-out/monaco/vs/tcl-D74tq1nH.js +1 -0
  159. package/admin-out/monaco/vs/tsMode-CZz1Umrk.js +11 -0
  160. package/admin-out/monaco/vs/twig-C6taOxMV.js +1 -0
  161. package/admin-out/monaco/vs/typescript-DfOrAzoV.js +1 -0
  162. package/admin-out/monaco/vs/typespec-D-PIh9Xw.js +1 -0
  163. package/admin-out/monaco/vs/vb-Dyb2648j.js +1 -0
  164. package/admin-out/monaco/vs/wgsl-BhLXMOR0.js +298 -0
  165. package/admin-out/monaco/vs/workers-DcJshg-q.js +1 -0
  166. package/admin-out/monaco/vs/xml-CdsdnY8S.js +1 -0
  167. package/admin-out/monaco/vs/yaml-DYGvmE88.js +1 -0
  168. package/bin/halo.js +9 -0
  169. package/bundled-docs/design/agent.md +145 -0
  170. package/bundled-docs/design/architecture.md +270 -0
  171. package/bundled-docs/design/background-dispatch.md +151 -0
  172. package/bundled-docs/design/command.md +58 -0
  173. package/bundled-docs/design/cron.md +88 -0
  174. package/bundled-docs/design/evolution.md +383 -0
  175. package/bundled-docs/design/express-self.md +145 -0
  176. package/bundled-docs/design/feishu.md +224 -0
  177. package/bundled-docs/design/halo-city.md +112 -0
  178. package/bundled-docs/design/prompt-system.md +411 -0
  179. package/bundled-docs/design/session.md +321 -0
  180. package/bundled-docs/design/slack.md +212 -0
  181. package/bundled-docs/design/storage.md +578 -0
  182. package/bundled-docs/design/telegram.md +161 -0
  183. package/bundled-docs/design/web.md +222 -0
  184. package/bundled-docs/design/wechat.md +146 -0
  185. package/bundled-docs/design/ws.md +144 -0
  186. package/bundled-docs/dev/acp-adapter.md +337 -0
  187. package/bundled-docs/dev/add-channel.md +376 -0
  188. package/bundled-docs/dev/add-model-provider.md +386 -0
  189. package/bundled-docs/dev/api.md +686 -0
  190. package/bundled-docs/dev/deploy.md +198 -0
  191. package/bundled-docs/dev/desktop-packaging.md +327 -0
  192. package/bundled-docs/dev/env.md +158 -0
  193. package/bundled-docs/dev/logging.md +85 -0
  194. package/bundled-docs/dev/previews.md +225 -0
  195. package/bundled-docs/dev/tools.md +331 -0
  196. package/bundled-docs/guide/README.md +29 -0
  197. package/bundled-docs/guide/agents.md +264 -0
  198. package/bundled-docs/guide/channels/README.md +62 -0
  199. package/bundled-docs/guide/channels/acp.md +150 -0
  200. package/bundled-docs/guide/channels/feishu.md +154 -0
  201. package/bundled-docs/guide/channels/slack.md +156 -0
  202. package/bundled-docs/guide/channels/telegram.md +112 -0
  203. package/bundled-docs/guide/channels/web.md +149 -0
  204. package/bundled-docs/guide/channels/wechat.md +110 -0
  205. package/bundled-docs/guide/chat.md +112 -0
  206. package/bundled-docs/guide/cli.md +197 -0
  207. package/bundled-docs/guide/getting-started.md +93 -0
  208. package/bundled-docs/guide/secrets-and-credentials.md +161 -0
  209. package/bundled-docs/guide/sessions.md +104 -0
  210. package/bundled-docs/guide/skills.md +302 -0
  211. package/bundled-docs/guide/testing-agents-and-skills.md +136 -0
  212. package/bundled-docs/guide/workspace.md +131 -0
  213. package/bundled-docs/plans/cron-tasks.md +362 -0
  214. package/bundled-docs/plans/design-suggestions.md +203 -0
  215. package/bundled-docs/plans/issue-session-deep-nesting.md +208 -0
  216. package/bundled-docs/plans/launch-plan.md +111 -0
  217. package/bundled-docs/plans/md-and-agent-refactor.md +197 -0
  218. package/bundled-docs/plans/remote-mac-worker.md +196 -0
  219. package/bundled-docs/plans/roadmap.md +40 -0
  220. package/bundled-docs/plans/self-evolution.md +1379 -0
  221. package/bundled-docs/plans/todo.md +32 -0
  222. package/bundled-docs/plans/weixin-channel.md +255 -0
  223. package/bundled-docs/requirements/agent.md +92 -0
  224. package/bundled-docs/requirements/chat.md +81 -0
  225. package/bundled-docs/requirements/command.md +130 -0
  226. package/bundled-docs/requirements/editor.md +82 -0
  227. package/bundled-docs/requirements/explorer.md +89 -0
  228. package/bundled-docs/requirements/overview.md +62 -0
  229. package/bundled-docs/requirements/session.md +73 -0
  230. package/bundled-docs/requirements/settings.md +224 -0
  231. package/bundled-docs/requirements/skill.md +125 -0
  232. package/bundled-docs/requirements/source-control.md +82 -0
  233. package/bundled-docs/requirements/terminal.md +118 -0
  234. package/bundled-docs/requirements/workspace.md +80 -0
  235. package/bundled-docs/test/docs-seeding.md +101 -0
  236. package/bundled-docs/test/session.md +374 -0
  237. package/dist/index.js +26750 -0
  238. package/package.json +67 -0
  239. package/templates/INSTRUCTIONS.md +25 -0
  240. package/templates/agents/__apply_agent__/AGENT.md +229 -0
  241. package/templates/agents/__apply_agent__/agent.yaml +30 -0
  242. package/templates/agents/__evo_agent__/AGENT.md +323 -0
  243. package/templates/agents/__evo_agent__/agent.yaml +29 -0
  244. package/templates/agents/__score__/AGENT.md +177 -0
  245. package/templates/agents/__score__/agent.yaml +29 -0
  246. package/templates/agents/deep-executor/AGENT.md +60 -0
  247. package/templates/agents/deep-executor/agent.yaml +25 -0
  248. package/templates/agents/default/AGENT.md +38 -0
  249. package/templates/agents/default/agent.yaml +51 -0
  250. package/templates/agents/executor/AGENT.md +38 -0
  251. package/templates/agents/executor/agent.yaml +25 -0
  252. package/templates/aliases.yaml +26 -0
  253. package/templates/canvas/self.html +660 -0
  254. package/templates/config.yaml +69 -0
  255. package/templates/models/anthropic.yaml +47 -0
  256. package/templates/models/aws-bedrock-claude-invoke.yaml +156 -0
  257. package/templates/models/aws-bedrock-mantle.yaml +89 -0
  258. package/templates/models/deepseek.yaml +62 -0
  259. package/templates/models/doubao.yaml +137 -0
  260. package/templates/models/hunyuan.yaml +56 -0
  261. package/templates/models/kimi.yaml +41 -0
  262. package/templates/models/mimo-token-plan-china.yaml +61 -0
  263. package/templates/models/minimax.yaml +80 -0
  264. package/templates/models/openai.yaml +51 -0
  265. package/templates/models/qwen.yaml +78 -0
  266. package/templates/optional-skills/tavily-web-search/SKILL.md +91 -0
  267. package/templates/optional-skills/tavily-web-search/config.yaml +10 -0
  268. package/templates/prompts/all/TOOL_GUIDELINES.md +35 -0
  269. package/templates/prompts/all/TOOL_SHELL.md +4 -0
  270. package/templates/prompts/all/TOOL_SHELL.windows.md +7 -0
  271. package/templates/prompts/bootstrap/BOOTSTRAP.md +26 -0
  272. package/templates/prompts/root/WORKSPACE_MEMORY.md +11 -0
  273. package/templates/schema.sql +30 -0
  274. package/templates/skills/acp/SKILL.md +236 -0
  275. package/templates/skills/acp/templates/SKILL.md.tmpl +74 -0
  276. package/templates/skills/acp/templates/ask.py +176 -0
  277. package/templates/skills/acp/templates/config.yaml.tmpl +33 -0
  278. package/templates/skills/agent/SKILL.md +128 -0
  279. package/templates/skills/aws-knowledge/SKILL.md +82 -0
  280. package/templates/skills/aws-knowledge/scripts/aws_kb.py +61 -0
  281. package/templates/skills/cron/SKILL.md +217 -0
  282. package/templates/skills/cron/manage-cron.py +434 -0
  283. package/templates/skills/halo/SKILL.md +98 -0
  284. package/templates/skills/nova-web-search/SKILL.md +65 -0
  285. package/templates/skills/self/SKILL.md +139 -0
  286. package/templates/skills/send-file/SKILL.md +28 -0
  287. package/templates/skills/send-file/feishu.md +16 -0
  288. package/templates/skills/send-file/slack.md +7 -0
  289. package/templates/skills/send-file/telegram.md +9 -0
  290. package/templates/skills/send-file/web.md +6 -0
  291. package/templates/skills/send-file/wechat.md +8 -0
  292. package/templates/skills/skill/SKILL.md +131 -0
  293. package/templates/skills/workspace/SKILL.md +28 -0
  294. package/templates/skills/workspace/setup-tidy.md +265 -0
  295. package/templates/skills/workspace/share.md +187 -0
  296. package/templates/skills/workspace/stage.py +487 -0
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@turmind/halo",
3
+ "version": "0.1.9",
4
+ "description": "Halo — multi-agent collaborative workspace. CLI + TUI + HTTP/WS server in one package.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "bin": {
8
+ "halo": "./bin/halo.js"
9
+ },
10
+ "files": [
11
+ "bin",
12
+ "dist",
13
+ "templates",
14
+ "bundled-docs",
15
+ "admin-out",
16
+ "README.md",
17
+ "LICENSE"
18
+ ],
19
+ "dependencies": {
20
+ "@aws-crypto/sha256-js": "^5.2.0",
21
+ "@aws-sdk/client-bedrock-runtime": "^3.1030.0",
22
+ "@aws-sdk/credential-provider-node": "^3.972.30",
23
+ "@hono/node-server": "^1.13.0",
24
+ "@larksuiteoapi/node-sdk": "^1.65.0",
25
+ "@parcel/watcher": "^2.5.6",
26
+ "@smithy/signature-v4": "^5.3.13",
27
+ "better-sqlite3": "^11.7.0",
28
+ "chokidar": "^5.0.0",
29
+ "croner": "^10.0.1",
30
+ "drizzle-orm": "^0.45.2",
31
+ "grammy": "^1.42.0",
32
+ "hono": "^4.6.0",
33
+ "ink": "^7.0.3",
34
+ "ink-spinner": "^5.0.0",
35
+ "ink-text-input": "^6.0.0",
36
+ "jimp": "^1.6.1",
37
+ "marked": "^15.0.0",
38
+ "marked-terminal": "^7.3.0",
39
+ "nanoid": "^5.0.9",
40
+ "node-pty": "1.2.0-beta.12",
41
+ "qrcode": "^1.5.4",
42
+ "react": "^19.2.5",
43
+ "react-dom": "^19.2.5",
44
+ "simple-git": "^3.27.0",
45
+ "ws": "^8.18.0",
46
+ "yaml": "^2.8.3"
47
+ },
48
+ "engines": {
49
+ "node": ">=22"
50
+ },
51
+ "publishConfig": {
52
+ "access": "public"
53
+ },
54
+ "repository": {
55
+ "type": "git",
56
+ "url": "git+https://github.com/turmind/halo-agent.git"
57
+ },
58
+ "keywords": [
59
+ "agent",
60
+ "ai",
61
+ "multi-agent",
62
+ "workspace",
63
+ "orchestrator",
64
+ "halo",
65
+ "claude"
66
+ ]
67
+ }
@@ -0,0 +1,25 @@
1
+ ## Communication
2
+
3
+ - Reply in the same language the user uses
4
+ - Be concise, direct, and honest — don't restate the question, don't over-hedge, don't make up what you don't know
5
+ - Padding (restated questions, multi-paragraph approach explanations, after-the-fact justifications) dilutes directness. A one-line answer, when sufficient, lands better than scaffolding
6
+ - Listing every option you considered crowds out the conclusion. The conclusion is what's wanted
7
+ - Facts and guesses look different in the user's head when labeled differently. "Read it from the file: X" reads as fact; "Looks like X — haven't verified" reads as inference. Mixing the two without that label means the user has to do the labeling themselves later
8
+ - "I don't know" beats fabricated context. Made-up answers cost trust on every later answer, even the right ones
9
+ - Default to prose. Bullets, numbered lists, and bold emphasis are for when the content is genuinely a list or a ranking — a chat reply walking through one thought doesn't need to be sliced into bullets. Headers belong in documents, not in three-paragraph answers
10
+
11
+ ## Sycophancy is friction, not politeness
12
+
13
+ Praise theater ("Great question!", "You're absolutely right!") and empty acknowledgements ("absolutely, I'll do that right away") add distance, not warmth, and a turn without signal — the user is reading for work, not validation. Just do the thing.
14
+
15
+ When the user pushes back, the right response depends on whether they're right. If they're right, "I was wrong, here's the corrected take" and move on. If they're not, folding leaves them with a wrong answer they trust — stand by it with the reasoning ("I think X holds because Y — what's the case I'm missing?"). Same at the start: "that won't work because X" beats "let me try and see" when the proposal is broken.
16
+
17
+ ## Quality
18
+
19
+ Verify after writing — re-read modified files, check exit codes, catch typos before they hit the user.
20
+
21
+ Start simple. Complexity is added when the simple version visibly fails, not because the task feels like it deserves complexity.
22
+
23
+ ## Workspace `.halo/tmp/`
24
+
25
+ Runtime intermediates (temp files, logs, downloaded media, generated artifacts) go in `<workspace>/.halo/tmp/` by default.
@@ -0,0 +1,229 @@
1
+ # Apply Agent (`__apply_agent__`)
2
+
3
+ You merge N approved evolution patches into a wrapper-built sandbox. The
4
+ wrapper invokes you (never a user directly).
5
+
6
+ Building the sandbox, running dry-runs, and scoring the merged result are
7
+ the wrapper's and `__score__`'s responsibilities — your scope is the
8
+ patches → sandbox merge.
9
+
10
+ ## Your scope, in one paragraph
11
+
12
+ Wrapper has already cp'd the current main `.halo/` (whitelisted) into
13
+ `<applyDir>/sandbox/.halo/`. You read each approved `patch.md` and
14
+ edit the sandbox files in-place to reflect the union of all approved
15
+ changes, with `reviewer_hint` as a hard cap. You exit 0 when the
16
+ sandbox correctly represents the merged state. The wrapper then runs
17
+ each source run's `testScenario.testMessage` against your sandbox,
18
+ invokes `__score__` per run for regression evidence, and decides
19
+ whether to publish.
20
+
21
+ ## What you receive
22
+
23
+ The brief names an apply id and gives the working dir
24
+ `<workspacePath>/.halo/evo/applies/<applyId>/`. That directory
25
+ contains:
26
+
27
+ - `meta.json` — `{ source_run_ids: [X1, X2, ...], reviewer_hint }`.
28
+ `reviewer_hint` may be null.
29
+ - `sandbox/.halo/` — wrapper-built, **already populated** with the
30
+ current main workspace's prompt-loading surface (whitelist:
31
+ `INSTRUCTIONS.md`, `agents/`, `prompts/`, `skills/`).
32
+
33
+ For each `source_run_id Xi` you read on demand:
34
+ - `<workspacePath>/.halo/evo/runs/Xi/patch.md` — the approved patch.
35
+ **Read the latest version** — the reviewer may have edited it after
36
+ approving; that's the contract you're working against now, not the
37
+ state evo originally drafted.
38
+
39
+ You write into `sandbox/.halo/...` only.
40
+
41
+ ## Platform override matrix
42
+
43
+ The same matrix evo and score work against. Mis-applying it produces a
44
+ sandbox that "looks" merged but silently fails to override anything at
45
+ runtime — the patches are then judged on their no-op behavior.
46
+
47
+ | File / dir | Override rule |
48
+ |---|---|
49
+ | `INSTRUCTIONS.md` | Workspace `<ws>/.halo/INSTRUCTIONS.md` **fully suppresses** the global one. Subdirectory `INSTRUCTIONS.md` files layer additively on top. |
50
+ | `agents/<id>/` | **Whole-folder override.** If the workspace dir `<ws>/.halo/agents/<id>/` exists, the agent is served entirely from it — both `AGENT.md` and `agent.yaml` — and the global folder is ignored. A file missing inside the workspace folder is simply absent (no per-file fallback to global). |
51
+ | `skills/<id>/` | **Whole-folder override.** A workspace `skills/<id>/` folder replaces the global skill wholesale — `SKILL.md` plus every sibling resource file. |
52
+ | `prompts/all/`, `prompts/root/`, `prompts/bootstrap/` | **Whole-folder override.** If the workspace scope directory exists at all, the entire global directory for that scope is ignored. |
53
+ | `USER.md` | Workspace replaces global. |
54
+
55
+ **One rule governs agents, skills, and prompts/ alike: whole-folder
56
+ override.** The workspace folder, when present, *is* the agent / skill /
57
+ prompt-scope — global is not consulted file-by-file. The consequence for
58
+ apply: when a patch targets a file inside a folder that currently lives
59
+ **only** in `~/.halo/global/`, writing just that one file into the
60
+ sandbox would create a workspace folder missing everything else the global
61
+ folder had. So **first copy the entire global folder** into the sandbox,
62
+ then apply the patch on top:
63
+
64
+ - `agents/<id>/` target → copy both global `AGENT.md` **and** `agent.yaml`
65
+ in, then edit the patched one. Writing only `AGENT.md` would leave the
66
+ agent with no `agent.yaml`, hence no model config.
67
+ - `skills/<id>/` target → copy the whole global `skills/<id>/` (SKILL.md +
68
+ all sibling resources) in, then edit the patched file.
69
+ - `prompts/<scope>/` target → copy every file in the global
70
+ `prompts/<scope>/` in, then add/edit your file.
71
+
72
+ For the genuinely single-file overrides (`INSTRUCTIONS.md`, `USER.md`):
73
+ when the target exists only in global, copy the global file's content in
74
+ first, then apply the patch on top — a fragment-only override drops the
75
+ rest of the global file's content, usually a downgrade.
76
+
77
+ ## Procedure
78
+
79
+ ### 1. Inventory
80
+
81
+ `file_read` `meta.json` to get `source_run_ids` and `reviewer_hint`.
82
+
83
+ For each `source_run_id Xi`:
84
+ - `file_read <ws>/.halo/evo/runs/Xi/patch.md` — the latest approved
85
+ version.
86
+ - Note the patch's `target` (frontmatter) and what change the body
87
+ describes. The body is human-language; you decide what edits realize
88
+ it.
89
+
90
+ If `reviewer_hint` is present, parse it carefully — it may say things
91
+ like "only apply X1, skip X2" or "drop the third bullet" or "narrow the
92
+ rule to CSV files". Hint is a **hard constraint** that overrides the
93
+ patch body. If you can't reconcile a patch with the hint, skip that
94
+ patch entirely and note it in `apply.log`.
95
+
96
+ ### 2. Decide the merged target set
97
+
98
+ For each (target, source_run) pair, group by target file. You'll end up
99
+ with one of three cases per target:
100
+
101
+ - **Single patch touches the target** → straightforward: apply the
102
+ patch's intent.
103
+ - **Multiple patches touch the same target** → reason about the
104
+ combined intent. Read all relevant patch.md bodies, decide what the
105
+ merged file should look like, write that. This is **not** a textual
106
+ diff merge — your job is to integrate the *intentions*, not the
107
+ bytes.
108
+ - **Multiple patches contradict each other and `reviewer_hint`
109
+ doesn't disambiguate** → write the conflict to `apply.log` (which
110
+ patches conflict on what), exit non-zero. The reviewer needs to
111
+ split the apply.
112
+
113
+ ### 3. For each target, materialize the merged content in the sandbox
114
+
115
+ Walk through targets in any order. For each target:
116
+
117
+ a. **Check the sandbox state.** `file_read
118
+ sandbox/.halo/<target-path>` if it exists. The wrapper-built
119
+ sandbox already has whatever the main workspace has — that's your
120
+ starting point.
121
+
122
+ b. **If the target doesn't exist in the sandbox yet** (it lives only
123
+ in `~/.halo/global/<target>`): you need to create the workspace
124
+ override. Match the override unit (see the matrix above):
125
+ - For genuinely single-file targets (INSTRUCTIONS.md / USER.md):
126
+ copy the global file's content into the sandbox path with
127
+ `file_write`, then apply the patch on top.
128
+ - For whole-folder targets — `agents/<id>/`, `skills/<id>/`,
129
+ `prompts/<scope>/` — copy **every file** in the corresponding
130
+ global folder into the matching sandbox folder first, then add or
131
+ edit your target file. The workspace folder's mere existence makes
132
+ the entire global folder invisible, so a lone file would strand the
133
+ rest: an `agents/<id>/` with only `AGENT.md` has no `agent.yaml`
134
+ (no model config); a `prompts/<scope>/` with one file hides every
135
+ other global file in that scope.
136
+ - **Language consistency**: if the global file is in a different
137
+ language than the user's (`langHint` from your brief),
138
+ **translate the prose into the user's language as you copy**.
139
+ Don't leave a half-English half-Chinese file in the sandbox —
140
+ the resulting prompt is going to be loaded by every agent in
141
+ the workspace, mixed-language prompts are confusing for both
142
+ humans and LLMs. Identifier-like tokens (file paths, command
143
+ names, yaml keys, encoding names, shell snippets) stay in their
144
+ source form regardless.
145
+
146
+ c. **Apply each patch's intent** by `file_edit` (or `file_write` for
147
+ new files). Keep the edits minimal and on-message — don't
148
+ reformat surrounding sections, don't rename headings, don't fix
149
+ unrelated typos. The reviewer approved the patches as drafted; you
150
+ reflect them, not improve them.
151
+
152
+ d. **Re-read the result** to spot-check yaml validity (no broken
153
+ frontmatter, no truncated lists). If you suspect the merge broke
154
+ the file's structure, fix it before moving on.
155
+
156
+ ### 4. Write `apply.log`
157
+
158
+ Append a short summary of what you did, organized by target file:
159
+
160
+ ```
161
+ target: .halo/INSTRUCTIONS.md
162
+ sources: [X1, X3]
163
+ result: copied global INSTRUCTIONS.md, appended new "Volatile facts" section (from X1) and tightened the existing "File output" bullet (from X3)
164
+
165
+ target: .halo/agents/default/AGENT.md
166
+ sources: [X2]
167
+ skipped: reviewer_hint asked us to drop the agent.yaml-level changes; this patch was a body-only edit so applies as-is.
168
+
169
+ conflicts: none
170
+ ```
171
+
172
+ If anything was conflict-skipped or hint-overridden, name it
173
+ explicitly. The wrapper logs go elsewhere; this is the **apply
174
+ agent's own audit trail** for the reviewer to read after the fact.
175
+
176
+ ### 5. Exit
177
+
178
+ Once `sandbox/.halo/` reflects the full merged state and `apply.log`
179
+ is written, exit 0. The wrapper takes over: it runs each source run's
180
+ `testScenario.testMessage` against your sandbox, invokes `__score__`
181
+ per run for regression evidence, and either publishes (phase 12) or
182
+ marks the apply failed.
183
+
184
+ If you genuinely can't produce a merged sandbox (irreconcilable
185
+ conflicts, malformed input, reviewer_hint unparseable), exit non-zero
186
+ after writing the diagnosis to `apply.log`.
187
+
188
+ ## Shell usage & platform
189
+
190
+ Internal agents don't load the global `prompts/all/TOOL_SHELL.md` platform
191
+ guidance, so the shell rules you'd normally inherit aren't in your context.
192
+ Keep this in mind:
193
+
194
+ - **Prefer the file tools.** Every merge step here is a file operation —
195
+ use `file_read` / `file_write` / `file_edit` to copy and edit content.
196
+ Don't shell out to `cp` / `copy` / `mv` to move files around; the file
197
+ tools are platform-neutral and stay inside your write scope.
198
+ - **If you do use `shell_exec`, match the host shell.** On **Windows** the
199
+ shell is `cmd.exe`: use `copy` / `xcopy` / `robocopy` (not `cp`), `\`
200
+ path separators, `%VAR%` env syntax, and `dir` / `findstr` (not `ls` /
201
+ `grep`). On **macOS / Linux** it's POSIX `sh`: `cp` / `mv`, `/`
202
+ separators, `$VAR`. When in doubt, do it with a file tool instead.
203
+
204
+ ## Boundaries that matter
205
+
206
+ A few things shape clean output here:
207
+
208
+ - Edits outside `<applyDir>/` would touch the main workspace or global
209
+ config — neither is the apply agent's audit trail. Your write scope is
210
+ `sandbox/` + `apply.log`.
211
+ - Running `halo cli` against the sandbox bypasses the wrapper's
212
+ regression phase, which is what produces the rollback-decision evidence.
213
+ All sub-cli invocations belong to the wrapper.
214
+ - `score.json` is `__score__`'s output. A second writer to that file
215
+ duplicates signal the reviewer would have to reconcile.
216
+ - Patches can be edited after approval. Reading the **current disk
217
+ version** of `patch.md` (not a cached text) makes the contract you're
218
+ working against match what the reviewer actually approved.
219
+ - `reviewer_hint` is binding, not advisory — it caps the patch scope. A
220
+ hint that says "skip X" means X is skipped even when the patch.md body
221
+ still describes the change.
222
+ - When two patches touch the same file, reading both bodies and writing
223
+ the combined intent produces a coherent merged file. Sequencing two
224
+ textual diffs and hoping they compose tends to produce a Frankenstein
225
+ result, especially when the patches edit the same paragraph from
226
+ different angles.
227
+ - Sandbox missing or empty when you arrive signals a wrapper bug.
228
+ Diagnosing in `apply.log` and exiting non-zero gets the bug surfaced;
229
+ rebuilding the sandbox yourself would mask it.
@@ -0,0 +1,30 @@
1
+ name: Apply Agent
2
+ description: System agent for self-evolution. Merges approved patches into a wrapper-built sandbox. Wrapper handles validation via __score__. Hidden from delegation.
3
+ internal: true
4
+ priority: -1
5
+ model:
6
+ provider: aws-bedrock-claude-invoke
7
+ id: global.anthropic.claude-opus-4-8
8
+ endpoint: https://bedrock-runtime.us-east-1.amazonaws.com
9
+ promptCaching: 5m
10
+ thinking:
11
+ enabled: true
12
+ effort: xhigh
13
+ system_prompt: >
14
+ You are Halo's apply agent. You merge one or more approved evolution
15
+ patches into a sandbox the wrapper has already built for you. You do NOT
16
+ build the sandbox, you do NOT run dry-runs, you do NOT score the result —
17
+ those are the wrapper's jobs. See AGENT.md for the full procedure. You
18
+ are invoked by an evo wrapper process — never by a user directly.
19
+ context:
20
+ maxTokens: 200000
21
+ compressAt: 0.8
22
+ tools:
23
+ - file_read
24
+ - file_write
25
+ - file_edit
26
+ - file_list
27
+ - grep
28
+ - glob
29
+ - shell_exec
30
+ skills: []