@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.
- package/LICENSE +21 -0
- package/README.md +143 -0
- package/admin-out/404.html +1 -0
- package/admin-out/_next/static/IBP_mwBDf-cPwZSZZGpi8/_buildManifest.js +1 -0
- package/admin-out/_next/static/IBP_mwBDf-cPwZSZZGpi8/_ssgManifest.js +1 -0
- package/admin-out/_next/static/chunks/1d2d5650-810a3ca1ae20cab5.js +18 -0
- package/admin-out/_next/static/chunks/200.3b8f8a74f005a134.js +1 -0
- package/admin-out/_next/static/chunks/220.3dc41cd6269b88e6.js +1 -0
- package/admin-out/_next/static/chunks/298-d6b224b569da4de0.js +1 -0
- package/admin-out/_next/static/chunks/304eda7d.b1ee7f523653e027.js +1 -0
- package/admin-out/_next/static/chunks/330.3b784cf0dcd69163.js +1 -0
- package/admin-out/_next/static/chunks/442.f4302087bddb1ec1.js +1 -0
- package/admin-out/_next/static/chunks/443.d1b289781793f8de.js +25 -0
- package/admin-out/_next/static/chunks/503-7c6d9935df6e0cea.js +1 -0
- package/admin-out/_next/static/chunks/533.5f2d4bfe3d076095.js +1 -0
- package/admin-out/_next/static/chunks/579.a2718ddd395a2f3a.js +1 -0
- package/admin-out/_next/static/chunks/635-3dd0043ed0520b9d.js +1 -0
- package/admin-out/_next/static/chunks/65.859665ba6717967a.js +1 -0
- package/admin-out/_next/static/chunks/661.a4fe93f3f2a5e871.js +1 -0
- package/admin-out/_next/static/chunks/688.4e014ac6cfc7e152.js +1 -0
- package/admin-out/_next/static/chunks/868.0c95dfe283400a00.js +1 -0
- package/admin-out/_next/static/chunks/app/_not-found/page-8e35399c8fd5016d.js +1 -0
- package/admin-out/_next/static/chunks/app/layout-58f773336e6fce61.js +1 -0
- package/admin-out/_next/static/chunks/app/page-cc8043335282d745.js +1 -0
- package/admin-out/_next/static/chunks/db534642.09d3c650ff587175.js +1 -0
- package/admin-out/_next/static/chunks/fb4ec4d6-3fa44f69484f91b9.js +1 -0
- package/admin-out/_next/static/chunks/framework-c3031ae54a63fe16.js +1 -0
- package/admin-out/_next/static/chunks/main-14b48e3c2588354f.js +1 -0
- package/admin-out/_next/static/chunks/main-app-483b436873410ddc.js +1 -0
- package/admin-out/_next/static/chunks/pages/_app-b2fc6e5f920d1b1a.js +1 -0
- package/admin-out/_next/static/chunks/pages/_error-f3696a8f3d67d150.js +1 -0
- package/admin-out/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/admin-out/_next/static/chunks/webpack-8bd7ef88a6527feb.js +1 -0
- package/admin-out/_next/static/css/659eccb5db697b76.css +1 -0
- package/admin-out/_next/static/css/8fce4e1a54dac12a.css +3 -0
- package/admin-out/_next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
- package/admin-out/_next/static/media/21350d82a1f187e9-s.woff2 +0 -0
- package/admin-out/_next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
- package/admin-out/_next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
- package/admin-out/_next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
- package/admin-out/_next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
- package/admin-out/_next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
- package/admin-out/favicon.ico +0 -0
- package/admin-out/icon.svg +18 -0
- package/admin-out/index.html +1 -0
- package/admin-out/index.txt +23 -0
- package/admin-out/monaco/vs/_commonjsHelpers-CT9FvmAN.js +1 -0
- package/admin-out/monaco/vs/abap-D-t0cyap.js +1 -0
- package/admin-out/monaco/vs/apex-CcIm7xu6.js +1 -0
- package/admin-out/monaco/vs/assets/css.worker-HnVq6Ewq.js +93 -0
- package/admin-out/monaco/vs/assets/editor.worker-Be8ye1pW.js +26 -0
- package/admin-out/monaco/vs/assets/html.worker-B51mlPHg.js +470 -0
- package/admin-out/monaco/vs/assets/json.worker-DKiEKt88.js +58 -0
- package/admin-out/monaco/vs/assets/ts.worker-CMbG-7ft.js +67731 -0
- package/admin-out/monaco/vs/azcli-BA0tQDCg.js +1 -0
- package/admin-out/monaco/vs/basic-languages/monaco.contribution.js +1 -0
- package/admin-out/monaco/vs/bat-C397hTD6.js +1 -0
- package/admin-out/monaco/vs/bicep-DF5aW17k.js +2 -0
- package/admin-out/monaco/vs/cameligo-plsz8qhj.js +1 -0
- package/admin-out/monaco/vs/clojure-Y2auQMzK.js +1 -0
- package/admin-out/monaco/vs/coffee-Bu45yuWE.js +1 -0
- package/admin-out/monaco/vs/cpp-CkKPQIni.js +1 -0
- package/admin-out/monaco/vs/csharp-CX28MZyh.js +1 -0
- package/admin-out/monaco/vs/csp-D8uWnyxW.js +1 -0
- package/admin-out/monaco/vs/css-CaeNmE3S.js +3 -0
- package/admin-out/monaco/vs/cssMode-CjiAH6dQ.js +1 -0
- package/admin-out/monaco/vs/cypher-DVThT8BS.js +1 -0
- package/admin-out/monaco/vs/dart-CmGfCvrO.js +1 -0
- package/admin-out/monaco/vs/dockerfile-CZqqYdch.js +1 -0
- package/admin-out/monaco/vs/ecl-30fUercY.js +1 -0
- package/admin-out/monaco/vs/editor/editor.main.css +1 -0
- package/admin-out/monaco/vs/editor/editor.main.js +5 -0
- package/admin-out/monaco/vs/editor.api-CalNCsUg.js +903 -0
- package/admin-out/monaco/vs/elixir-xjPaIfzF.js +1 -0
- package/admin-out/monaco/vs/flow9-DqtmStfK.js +1 -0
- package/admin-out/monaco/vs/freemarker2-Cz_sV6Md.js +3 -0
- package/admin-out/monaco/vs/fsharp-BOMdg4U1.js +1 -0
- package/admin-out/monaco/vs/go-D_hbi-Jt.js +1 -0
- package/admin-out/monaco/vs/graphql-CKUU4kLG.js +1 -0
- package/admin-out/monaco/vs/handlebars-OwglfO-1.js +1 -0
- package/admin-out/monaco/vs/hcl-DTaboeZW.js +1 -0
- package/admin-out/monaco/vs/html-Pa1xEWsY.js +1 -0
- package/admin-out/monaco/vs/htmlMode-Bz67EXwp.js +1 -0
- package/admin-out/monaco/vs/ini-CsNwO04R.js +1 -0
- package/admin-out/monaco/vs/java-CI4ZMsH9.js +1 -0
- package/admin-out/monaco/vs/javascript-PczUCGdz.js +1 -0
- package/admin-out/monaco/vs/jsonMode-DULH5oaX.js +7 -0
- package/admin-out/monaco/vs/julia-BwzEvaQw.js +1 -0
- package/admin-out/monaco/vs/kotlin-IUYPiTV8.js +1 -0
- package/admin-out/monaco/vs/language/css/monaco.contribution.js +1 -0
- package/admin-out/monaco/vs/language/html/monaco.contribution.js +1 -0
- package/admin-out/monaco/vs/language/json/monaco.contribution.js +1 -0
- package/admin-out/monaco/vs/language/typescript/monaco.contribution.js +1 -0
- package/admin-out/monaco/vs/less-C0eDYdqa.js +2 -0
- package/admin-out/monaco/vs/lexon-iON-Kj97.js +1 -0
- package/admin-out/monaco/vs/liquid-DqKjdPGy.js +1 -0
- package/admin-out/monaco/vs/loader.js +1368 -0
- package/admin-out/monaco/vs/lspLanguageFeatures-kM9O9rjY.js +4 -0
- package/admin-out/monaco/vs/lua-DtygF91M.js +1 -0
- package/admin-out/monaco/vs/m3-CsR4AuFi.js +1 -0
- package/admin-out/monaco/vs/markdown-C_rD0bIw.js +1 -0
- package/admin-out/monaco/vs/mdx-DEWtB1K5.js +1 -0
- package/admin-out/monaco/vs/mips-CiYP61RB.js +1 -0
- package/admin-out/monaco/vs/monaco.contribution-D2OdxNBt.js +1 -0
- package/admin-out/monaco/vs/monaco.contribution-DO3azKX8.js +1 -0
- package/admin-out/monaco/vs/monaco.contribution-EcChJV6a.js +1 -0
- package/admin-out/monaco/vs/monaco.contribution-qLAYrEOP.js +1 -0
- package/admin-out/monaco/vs/msdax-C38-sJlp.js +1 -0
- package/admin-out/monaco/vs/mysql-CdtbpvbG.js +1 -0
- package/admin-out/monaco/vs/nls.messages-loader.js +1 -0
- package/admin-out/monaco/vs/nls.messages.cs.js.js +17 -0
- package/admin-out/monaco/vs/nls.messages.de.js.js +17 -0
- package/admin-out/monaco/vs/nls.messages.es.js.js +17 -0
- package/admin-out/monaco/vs/nls.messages.fr.js.js +15 -0
- package/admin-out/monaco/vs/nls.messages.it.js.js +15 -0
- package/admin-out/monaco/vs/nls.messages.ja.js.js +17 -0
- package/admin-out/monaco/vs/nls.messages.js.js +10 -0
- package/admin-out/monaco/vs/nls.messages.ko.js.js +25 -0
- package/admin-out/monaco/vs/nls.messages.pl.js.js +17 -0
- package/admin-out/monaco/vs/nls.messages.pt-br.js.js +6 -0
- package/admin-out/monaco/vs/nls.messages.ru.js.js +17 -0
- package/admin-out/monaco/vs/nls.messages.tr.js.js +15 -0
- package/admin-out/monaco/vs/nls.messages.zh-cn.js.js +17 -0
- package/admin-out/monaco/vs/nls.messages.zh-tw.js.js +15 -0
- package/admin-out/monaco/vs/objective-c-CntZFaHX.js +1 -0
- package/admin-out/monaco/vs/pascal-r6kuqfl_.js +1 -0
- package/admin-out/monaco/vs/pascaligo-BiXoTmXh.js +1 -0
- package/admin-out/monaco/vs/perl-DABw_TcH.js +1 -0
- package/admin-out/monaco/vs/pgsql-me_jFXeX.js +1 -0
- package/admin-out/monaco/vs/php-D_kh-9LK.js +1 -0
- package/admin-out/monaco/vs/pla-VfZjczW0.js +1 -0
- package/admin-out/monaco/vs/postiats-BBSzz8Pk.js +1 -0
- package/admin-out/monaco/vs/powerquery-Dt-g_2cc.js +1 -0
- package/admin-out/monaco/vs/powershell-B-7ap1zc.js +1 -0
- package/admin-out/monaco/vs/protobuf-BmtuEB1A.js +2 -0
- package/admin-out/monaco/vs/pug-BRpRNeEb.js +1 -0
- package/admin-out/monaco/vs/python-Cr0UkIbn.js +1 -0
- package/admin-out/monaco/vs/qsharp-BzsFaUU9.js +1 -0
- package/admin-out/monaco/vs/r-f8dDdrp4.js +1 -0
- package/admin-out/monaco/vs/razor-BYAHOTkz.js +1 -0
- package/admin-out/monaco/vs/redis-fvZQY4PI.js +1 -0
- package/admin-out/monaco/vs/redshift-45Et0LQi.js +1 -0
- package/admin-out/monaco/vs/restructuredtext-C7UUFKFD.js +1 -0
- package/admin-out/monaco/vs/ruby-CZO8zYTz.js +1 -0
- package/admin-out/monaco/vs/rust-Bfetafyc.js +1 -0
- package/admin-out/monaco/vs/sb-3GYllVck.js +1 -0
- package/admin-out/monaco/vs/scala-foMgrKo1.js +1 -0
- package/admin-out/monaco/vs/scheme-CHdMtr7p.js +1 -0
- package/admin-out/monaco/vs/scss-C1cmLt9V.js +3 -0
- package/admin-out/monaco/vs/shell-ClXCKCEW.js +1 -0
- package/admin-out/monaco/vs/solidity-MZ6ExpPy.js +1 -0
- package/admin-out/monaco/vs/sophia-DWkuSsPQ.js +1 -0
- package/admin-out/monaco/vs/sparql-AUGFYSyk.js +1 -0
- package/admin-out/monaco/vs/sql-32GpJSV2.js +1 -0
- package/admin-out/monaco/vs/st-CuDFIVZ_.js +1 -0
- package/admin-out/monaco/vs/swift-n-2HociN.js +3 -0
- package/admin-out/monaco/vs/systemverilog-Ch4vA8Yt.js +1 -0
- package/admin-out/monaco/vs/tcl-D74tq1nH.js +1 -0
- package/admin-out/monaco/vs/tsMode-CZz1Umrk.js +11 -0
- package/admin-out/monaco/vs/twig-C6taOxMV.js +1 -0
- package/admin-out/monaco/vs/typescript-DfOrAzoV.js +1 -0
- package/admin-out/monaco/vs/typespec-D-PIh9Xw.js +1 -0
- package/admin-out/monaco/vs/vb-Dyb2648j.js +1 -0
- package/admin-out/monaco/vs/wgsl-BhLXMOR0.js +298 -0
- package/admin-out/monaco/vs/workers-DcJshg-q.js +1 -0
- package/admin-out/monaco/vs/xml-CdsdnY8S.js +1 -0
- package/admin-out/monaco/vs/yaml-DYGvmE88.js +1 -0
- package/bin/halo.js +9 -0
- package/bundled-docs/design/agent.md +145 -0
- package/bundled-docs/design/architecture.md +270 -0
- package/bundled-docs/design/background-dispatch.md +151 -0
- package/bundled-docs/design/command.md +58 -0
- package/bundled-docs/design/cron.md +88 -0
- package/bundled-docs/design/evolution.md +383 -0
- package/bundled-docs/design/express-self.md +145 -0
- package/bundled-docs/design/feishu.md +224 -0
- package/bundled-docs/design/halo-city.md +112 -0
- package/bundled-docs/design/prompt-system.md +411 -0
- package/bundled-docs/design/session.md +321 -0
- package/bundled-docs/design/slack.md +212 -0
- package/bundled-docs/design/storage.md +578 -0
- package/bundled-docs/design/telegram.md +161 -0
- package/bundled-docs/design/web.md +222 -0
- package/bundled-docs/design/wechat.md +146 -0
- package/bundled-docs/design/ws.md +144 -0
- package/bundled-docs/dev/acp-adapter.md +337 -0
- package/bundled-docs/dev/add-channel.md +376 -0
- package/bundled-docs/dev/add-model-provider.md +386 -0
- package/bundled-docs/dev/api.md +686 -0
- package/bundled-docs/dev/deploy.md +198 -0
- package/bundled-docs/dev/desktop-packaging.md +327 -0
- package/bundled-docs/dev/env.md +158 -0
- package/bundled-docs/dev/logging.md +85 -0
- package/bundled-docs/dev/previews.md +225 -0
- package/bundled-docs/dev/tools.md +331 -0
- package/bundled-docs/guide/README.md +29 -0
- package/bundled-docs/guide/agents.md +264 -0
- package/bundled-docs/guide/channels/README.md +62 -0
- package/bundled-docs/guide/channels/acp.md +150 -0
- package/bundled-docs/guide/channels/feishu.md +154 -0
- package/bundled-docs/guide/channels/slack.md +156 -0
- package/bundled-docs/guide/channels/telegram.md +112 -0
- package/bundled-docs/guide/channels/web.md +149 -0
- package/bundled-docs/guide/channels/wechat.md +110 -0
- package/bundled-docs/guide/chat.md +112 -0
- package/bundled-docs/guide/cli.md +197 -0
- package/bundled-docs/guide/getting-started.md +93 -0
- package/bundled-docs/guide/secrets-and-credentials.md +161 -0
- package/bundled-docs/guide/sessions.md +104 -0
- package/bundled-docs/guide/skills.md +302 -0
- package/bundled-docs/guide/testing-agents-and-skills.md +136 -0
- package/bundled-docs/guide/workspace.md +131 -0
- package/bundled-docs/plans/cron-tasks.md +362 -0
- package/bundled-docs/plans/design-suggestions.md +203 -0
- package/bundled-docs/plans/issue-session-deep-nesting.md +208 -0
- package/bundled-docs/plans/launch-plan.md +111 -0
- package/bundled-docs/plans/md-and-agent-refactor.md +197 -0
- package/bundled-docs/plans/remote-mac-worker.md +196 -0
- package/bundled-docs/plans/roadmap.md +40 -0
- package/bundled-docs/plans/self-evolution.md +1379 -0
- package/bundled-docs/plans/todo.md +32 -0
- package/bundled-docs/plans/weixin-channel.md +255 -0
- package/bundled-docs/requirements/agent.md +92 -0
- package/bundled-docs/requirements/chat.md +81 -0
- package/bundled-docs/requirements/command.md +130 -0
- package/bundled-docs/requirements/editor.md +82 -0
- package/bundled-docs/requirements/explorer.md +89 -0
- package/bundled-docs/requirements/overview.md +62 -0
- package/bundled-docs/requirements/session.md +73 -0
- package/bundled-docs/requirements/settings.md +224 -0
- package/bundled-docs/requirements/skill.md +125 -0
- package/bundled-docs/requirements/source-control.md +82 -0
- package/bundled-docs/requirements/terminal.md +118 -0
- package/bundled-docs/requirements/workspace.md +80 -0
- package/bundled-docs/test/docs-seeding.md +101 -0
- package/bundled-docs/test/session.md +374 -0
- package/dist/index.js +26750 -0
- package/package.json +67 -0
- package/templates/INSTRUCTIONS.md +25 -0
- package/templates/agents/__apply_agent__/AGENT.md +229 -0
- package/templates/agents/__apply_agent__/agent.yaml +30 -0
- package/templates/agents/__evo_agent__/AGENT.md +323 -0
- package/templates/agents/__evo_agent__/agent.yaml +29 -0
- package/templates/agents/__score__/AGENT.md +177 -0
- package/templates/agents/__score__/agent.yaml +29 -0
- package/templates/agents/deep-executor/AGENT.md +60 -0
- package/templates/agents/deep-executor/agent.yaml +25 -0
- package/templates/agents/default/AGENT.md +38 -0
- package/templates/agents/default/agent.yaml +51 -0
- package/templates/agents/executor/AGENT.md +38 -0
- package/templates/agents/executor/agent.yaml +25 -0
- package/templates/aliases.yaml +26 -0
- package/templates/canvas/self.html +660 -0
- package/templates/config.yaml +69 -0
- package/templates/models/anthropic.yaml +47 -0
- package/templates/models/aws-bedrock-claude-invoke.yaml +156 -0
- package/templates/models/aws-bedrock-mantle.yaml +89 -0
- package/templates/models/deepseek.yaml +62 -0
- package/templates/models/doubao.yaml +137 -0
- package/templates/models/hunyuan.yaml +56 -0
- package/templates/models/kimi.yaml +41 -0
- package/templates/models/mimo-token-plan-china.yaml +61 -0
- package/templates/models/minimax.yaml +80 -0
- package/templates/models/openai.yaml +51 -0
- package/templates/models/qwen.yaml +78 -0
- package/templates/optional-skills/tavily-web-search/SKILL.md +91 -0
- package/templates/optional-skills/tavily-web-search/config.yaml +10 -0
- package/templates/prompts/all/TOOL_GUIDELINES.md +35 -0
- package/templates/prompts/all/TOOL_SHELL.md +4 -0
- package/templates/prompts/all/TOOL_SHELL.windows.md +7 -0
- package/templates/prompts/bootstrap/BOOTSTRAP.md +26 -0
- package/templates/prompts/root/WORKSPACE_MEMORY.md +11 -0
- package/templates/schema.sql +30 -0
- package/templates/skills/acp/SKILL.md +236 -0
- package/templates/skills/acp/templates/SKILL.md.tmpl +74 -0
- package/templates/skills/acp/templates/ask.py +176 -0
- package/templates/skills/acp/templates/config.yaml.tmpl +33 -0
- package/templates/skills/agent/SKILL.md +128 -0
- package/templates/skills/aws-knowledge/SKILL.md +82 -0
- package/templates/skills/aws-knowledge/scripts/aws_kb.py +61 -0
- package/templates/skills/cron/SKILL.md +217 -0
- package/templates/skills/cron/manage-cron.py +434 -0
- package/templates/skills/halo/SKILL.md +98 -0
- package/templates/skills/nova-web-search/SKILL.md +65 -0
- package/templates/skills/self/SKILL.md +139 -0
- package/templates/skills/send-file/SKILL.md +28 -0
- package/templates/skills/send-file/feishu.md +16 -0
- package/templates/skills/send-file/slack.md +7 -0
- package/templates/skills/send-file/telegram.md +9 -0
- package/templates/skills/send-file/web.md +6 -0
- package/templates/skills/send-file/wechat.md +8 -0
- package/templates/skills/skill/SKILL.md +131 -0
- package/templates/skills/workspace/SKILL.md +28 -0
- package/templates/skills/workspace/setup-tidy.md +265 -0
- package/templates/skills/workspace/share.md +187 -0
- 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: []
|