@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
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
id: mimo-token-plan-china
|
|
2
|
+
displayName: Mimo Token Plan (China)
|
|
3
|
+
displayName_zh: Mimo Token Plan(中国)
|
|
4
|
+
description: Mimo Token Plan — Xiaomi's Anthropic-compatible gateway for MiMo models in China. Supports 1M context window.
|
|
5
|
+
description_zh: Mimo Token Plan — 小米中国区 Anthropic 兼容网关,支持 MiMo 模型,1M 上下文窗口。
|
|
6
|
+
defaultEndpoint: https://token-plan-cn.xiaomimimo.com/anthropic
|
|
7
|
+
defaultModelId: mimo-v2.5
|
|
8
|
+
endpointPresets:
|
|
9
|
+
- https://token-plan-cn.xiaomimimo.com/anthropic
|
|
10
|
+
|
|
11
|
+
secrets:
|
|
12
|
+
- key: api_key
|
|
13
|
+
description: Mimo Token Plan API Key. Format starts with tp-.
|
|
14
|
+
description_zh: Mimo Token Plan API Key,tp- 开头
|
|
15
|
+
default: <<MIMO_API_KEY>>
|
|
16
|
+
secret: true
|
|
17
|
+
|
|
18
|
+
models:
|
|
19
|
+
- id: mimo-v2.5-pro
|
|
20
|
+
displayName: MiMo v2.5 Pro
|
|
21
|
+
maxOutputTokens: 131072
|
|
22
|
+
capabilities:
|
|
23
|
+
image: false
|
|
24
|
+
video: false
|
|
25
|
+
audio: false
|
|
26
|
+
promptCaching:
|
|
27
|
+
default: 1h
|
|
28
|
+
ttlPresets:
|
|
29
|
+
- { value: 5m, label: 5min }
|
|
30
|
+
- { value: 1h, label: 1hour }
|
|
31
|
+
thinking:
|
|
32
|
+
mode: adaptive
|
|
33
|
+
defaultEnabled: true
|
|
34
|
+
default: high
|
|
35
|
+
effortPresets:
|
|
36
|
+
- { value: low, label: Low }
|
|
37
|
+
- { value: medium, label: Medium }
|
|
38
|
+
- { value: high, label: High }
|
|
39
|
+
- { value: max, label: Max }
|
|
40
|
+
|
|
41
|
+
- id: mimo-v2.5
|
|
42
|
+
displayName: MiMo v2.5
|
|
43
|
+
maxOutputTokens: 131072
|
|
44
|
+
capabilities:
|
|
45
|
+
image: true
|
|
46
|
+
video: false
|
|
47
|
+
audio: false
|
|
48
|
+
promptCaching:
|
|
49
|
+
default: 1h
|
|
50
|
+
ttlPresets:
|
|
51
|
+
- { value: 5m, label: 5min }
|
|
52
|
+
- { value: 1h, label: 1hour }
|
|
53
|
+
thinking:
|
|
54
|
+
mode: adaptive
|
|
55
|
+
defaultEnabled: true
|
|
56
|
+
default: high
|
|
57
|
+
effortPresets:
|
|
58
|
+
- { value: low, label: Low }
|
|
59
|
+
- { value: medium, label: Medium }
|
|
60
|
+
- { value: high, label: High }
|
|
61
|
+
- { value: max, label: Max }
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
id: minimax
|
|
2
|
+
displayName: MiniMax
|
|
3
|
+
displayName_zh: MiniMax
|
|
4
|
+
description: MiniMax M2.7 family via the Anthropic-compatible Messages API
|
|
5
|
+
description_zh: MiniMax M2.7 系列,通过 Anthropic 兼容的 Messages API 调用
|
|
6
|
+
defaultEndpoint: https://api.minimaxi.com/anthropic
|
|
7
|
+
defaultModelId: MiniMax-M2.7
|
|
8
|
+
|
|
9
|
+
secrets:
|
|
10
|
+
- key: api_key
|
|
11
|
+
description: MiniMax API Key. Get from https://platform.minimaxi.com/user-center/basic-information/interface-key
|
|
12
|
+
description_zh: MiniMax API Key。从 https://platform.minimaxi.com/user-center/basic-information/interface-key 获取
|
|
13
|
+
default: <<MINIMAX_API_KEY>>
|
|
14
|
+
secret: true
|
|
15
|
+
|
|
16
|
+
# Capability notes for MiniMax M2.7 family — verified against
|
|
17
|
+
# platform.minimaxi.com/docs/api-reference/text-anthropic-api on 2026-05-26
|
|
18
|
+
# plus live probes against MiniMax-M2.7:
|
|
19
|
+
# - image / video / audio: documented as not supported
|
|
20
|
+
# - thinking: forced on — `thinking:{type:'disabled'}` and omitting the
|
|
21
|
+
# field both still produce thinking blocks; only budget_tokens influences
|
|
22
|
+
# output. So we don't expose an off toggle.
|
|
23
|
+
# - cache_control: both models support caching. Doc says TTL is 5min,
|
|
24
|
+
# refreshing automatically on each hit. cache_control:{type:'ephemeral'}
|
|
25
|
+
# is the only shape — no longer-TTL knob exposed by MiniMax.
|
|
26
|
+
# - MiniMax-M2.7-highspeed: turn 1 reports cache_creation_input_tokens=N,
|
|
27
|
+
# turn 2 reports cache_read_input_tokens=N. Standard Anthropic shape.
|
|
28
|
+
# - MiniMax-M2.7: turn 1 reports cache_creation=0 (write happens
|
|
29
|
+
# implicitly without surfacing the count); turn 2 still reports
|
|
30
|
+
# cache_read_input_tokens=N. Read badge will appear after the first
|
|
31
|
+
# repeat, but the "write" badge never shows on M2.7 — quirk of
|
|
32
|
+
# MiniMax's reporting, not a Halo bug. Verified 2026-05-26.
|
|
33
|
+
# Cache is per-model (no cross-model sharing observed).
|
|
34
|
+
# - effort presets: pure Halo-side abstraction. `low` (1024 budget) was
|
|
35
|
+
# observed to truncate the run with stop=max_tokens before any thinking
|
|
36
|
+
# completes — leaving it out of the preset list. medium/high are safe.
|
|
37
|
+
models:
|
|
38
|
+
- id: MiniMax-M2.7
|
|
39
|
+
displayName: MiniMax M2.7
|
|
40
|
+
maxOutputTokens: 16384
|
|
41
|
+
capabilities:
|
|
42
|
+
image: false
|
|
43
|
+
video: false
|
|
44
|
+
audio: false
|
|
45
|
+
promptCaching:
|
|
46
|
+
default: 5m
|
|
47
|
+
ttlPresets:
|
|
48
|
+
- { value: 5m, label: 5min }
|
|
49
|
+
thinking:
|
|
50
|
+
# MiniMax thinking is always-on — there's no off switch. We still
|
|
51
|
+
# surface a Thinking control because budget_tokens shapes output
|
|
52
|
+
# length / latency. `effortPresets` are pure Halo-side labels;
|
|
53
|
+
# minimax-agent.ts maps them via effortToBudget() before sending.
|
|
54
|
+
mode: manual
|
|
55
|
+
defaultEnabled: true
|
|
56
|
+
default: medium
|
|
57
|
+
defaultBudgetTokens: 8192
|
|
58
|
+
effortPresets:
|
|
59
|
+
- { value: medium, label: Medium }
|
|
60
|
+
- { value: high, label: High }
|
|
61
|
+
|
|
62
|
+
- id: MiniMax-M2.7-highspeed
|
|
63
|
+
displayName: MiniMax M2.7 Highspeed
|
|
64
|
+
maxOutputTokens: 16384
|
|
65
|
+
capabilities:
|
|
66
|
+
image: false
|
|
67
|
+
video: false
|
|
68
|
+
audio: false
|
|
69
|
+
promptCaching:
|
|
70
|
+
default: 5m
|
|
71
|
+
ttlPresets:
|
|
72
|
+
- { value: 5m, label: 5min }
|
|
73
|
+
thinking:
|
|
74
|
+
mode: manual
|
|
75
|
+
defaultEnabled: true
|
|
76
|
+
default: medium
|
|
77
|
+
defaultBudgetTokens: 8192
|
|
78
|
+
effortPresets:
|
|
79
|
+
- { value: medium, label: Medium }
|
|
80
|
+
- { value: high, label: High }
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
id: openai
|
|
2
|
+
displayName: OpenAI (Generic)
|
|
3
|
+
displayName_zh: OpenAI(通用)
|
|
4
|
+
description: Generic OpenAI-compatible chat completions. Use for native OpenAI or any third-party OpenAI-compatible gateway. Capabilities are exposed openly — the user is expected to know what their endpoint supports.
|
|
5
|
+
description_zh: 通用 OpenAI 兼容协议。可用于原生 OpenAI 或任何第三方 OpenAI 兼容网关。能力字段开放给用户自选——由用户对端点能力自行负责。
|
|
6
|
+
defaultEndpoint: https://api.openai.com/v1
|
|
7
|
+
defaultModelId: gpt-4o
|
|
8
|
+
endpointPresets:
|
|
9
|
+
- https://api.openai.com/v1
|
|
10
|
+
|
|
11
|
+
secrets:
|
|
12
|
+
- key: api_key
|
|
13
|
+
description: API key for the chosen OpenAI-compatible endpoint. Format depends on provider (sk-... for OpenAI, ark-... for Volcengine, etc.)
|
|
14
|
+
description_zh: 所选 OpenAI 兼容端点的 API Key。前缀格式因厂商而异(OpenAI 是 sk-、火山方舟是 ark- 等)
|
|
15
|
+
default: <<OPENAI_API_KEY>>
|
|
16
|
+
secret: true
|
|
17
|
+
|
|
18
|
+
# This provider is a "user-fills-everything" placeholder. The single
|
|
19
|
+
# placeholder model below exists so the registry has something to render
|
|
20
|
+
# in the form's model dropdown — replace its id/endpoint with whatever
|
|
21
|
+
# you actually want to call. capabilities here are deliberately
|
|
22
|
+
# permissive (image/video/audio all true, full thinking + caching
|
|
23
|
+
# presets) so the form doesn't lock anything; if your real endpoint
|
|
24
|
+
# doesn't support, e.g., audio, just don't send audio.
|
|
25
|
+
#
|
|
26
|
+
# Custom model ids (anything not listed under `models:`) are treated as
|
|
27
|
+
# fully-permissive in the admin form — the user can flip image/video/
|
|
28
|
+
# audio toggles, pick caching TTL, and set thinking effort or budget.
|
|
29
|
+
models:
|
|
30
|
+
- id: gpt-4o
|
|
31
|
+
displayName: GPT-4o (placeholder)
|
|
32
|
+
maxOutputTokens: 16384
|
|
33
|
+
capabilities:
|
|
34
|
+
image: true
|
|
35
|
+
video: true
|
|
36
|
+
audio: true
|
|
37
|
+
promptCaching:
|
|
38
|
+
default: 5m
|
|
39
|
+
ttlPresets:
|
|
40
|
+
- { value: 5m, label: 5min }
|
|
41
|
+
- { value: 1h, label: 1hour }
|
|
42
|
+
thinking:
|
|
43
|
+
mode: manual
|
|
44
|
+
defaultEnabled: false
|
|
45
|
+
default: medium
|
|
46
|
+
defaultBudgetTokens: 8192
|
|
47
|
+
effortPresets:
|
|
48
|
+
- { value: low, label: Low }
|
|
49
|
+
- { value: medium, label: Medium }
|
|
50
|
+
- { value: high, label: High }
|
|
51
|
+
- { value: max, label: Max }
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
id: qwen
|
|
2
|
+
displayName: Qwen (Aliyun)
|
|
3
|
+
displayName_zh: 通义千问(阿里云)
|
|
4
|
+
description: Qwen3 family on Aliyun Bailian via the Anthropic-compatible Messages API
|
|
5
|
+
description_zh: 阿里云百炼通义千问,通过 Anthropic 兼容的 Messages API 调用
|
|
6
|
+
defaultEndpoint: https://dashscope.aliyuncs.com/apps/anthropic
|
|
7
|
+
defaultModelId: qwen3.7-max
|
|
8
|
+
endpointPresets:
|
|
9
|
+
- https://dashscope.aliyuncs.com/apps/anthropic # Beijing
|
|
10
|
+
- https://dashscope-intl.aliyuncs.com/apps/anthropic # Singapore
|
|
11
|
+
- https://dashscope-us.aliyuncs.com/apps/anthropic # Virginia
|
|
12
|
+
|
|
13
|
+
secrets:
|
|
14
|
+
- key: api_key
|
|
15
|
+
description: Aliyun Bailian (DashScope) API Key. Get from https://bailian.console.aliyun.com
|
|
16
|
+
description_zh: 阿里云百炼 API Key。从 https://bailian.console.aliyun.com 获取
|
|
17
|
+
default: <<DASHSCOPE_API_KEY>>
|
|
18
|
+
secret: true
|
|
19
|
+
|
|
20
|
+
# Capability notes for Qwen — verified end-to-end on 2026-05-26 against
|
|
21
|
+
# help.aliyun.com/zh/model-studio/anthropic-api-messages plus live probes:
|
|
22
|
+
# - cache_control: ephemeral (5min default per doc) — verified by sending
|
|
23
|
+
# same long system twice; turn1 reports cache_creation_input_tokens=N,
|
|
24
|
+
# turn2 reports cache_read_input_tokens=N. Standard Anthropic shape.
|
|
25
|
+
# Doc only mentions 5m; no 1h variant — qwen-agent.ts deliberately
|
|
26
|
+
# omits the `ttl` attribute.
|
|
27
|
+
# - thinking: honored both ways. type=enabled emits a thinking block,
|
|
28
|
+
# type=disabled really suppresses it (unlike MiniMax which forces it on).
|
|
29
|
+
# - image: probed live — qwen3.6-plus correctly identified colors (works
|
|
30
|
+
# despite docs saying a vision-specific model is required);
|
|
31
|
+
# qwen3.7-max returned `Unexpected item type in content` (not
|
|
32
|
+
# supported). So image:false on max, image:true on plus.
|
|
33
|
+
# - effort presets: pure Halo-side abstraction. Same effort→budget
|
|
34
|
+
# table as bedrock-agent.ts via qwen-agent.ts's effortToBudget().
|
|
35
|
+
# - temperature range: doc says [0, 2) instead of Anthropic's [0, 1] —
|
|
36
|
+
# doesn't affect Halo since we don't expose temperature in the form.
|
|
37
|
+
models:
|
|
38
|
+
- id: qwen3.7-max
|
|
39
|
+
displayName: Qwen3.7 Max
|
|
40
|
+
maxOutputTokens: 16384
|
|
41
|
+
capabilities:
|
|
42
|
+
image: false
|
|
43
|
+
video: false
|
|
44
|
+
audio: false
|
|
45
|
+
promptCaching:
|
|
46
|
+
default: 5m
|
|
47
|
+
ttlPresets:
|
|
48
|
+
- { value: 5m, label: 5min }
|
|
49
|
+
thinking:
|
|
50
|
+
# Anthropic legacy/manual shape: thinking:{type:'enabled', budget_tokens:N}.
|
|
51
|
+
# qwen-agent.ts maps effort labels via effortToBudget().
|
|
52
|
+
mode: manual
|
|
53
|
+
defaultEnabled: true
|
|
54
|
+
default: medium
|
|
55
|
+
defaultBudgetTokens: 8192
|
|
56
|
+
effortPresets:
|
|
57
|
+
- { value: medium, label: Medium }
|
|
58
|
+
- { value: high, label: High }
|
|
59
|
+
|
|
60
|
+
- id: qwen3.6-plus
|
|
61
|
+
displayName: Qwen3.6 Plus
|
|
62
|
+
maxOutputTokens: 16384
|
|
63
|
+
capabilities:
|
|
64
|
+
image: true
|
|
65
|
+
video: false
|
|
66
|
+
audio: false
|
|
67
|
+
promptCaching:
|
|
68
|
+
default: 5m
|
|
69
|
+
ttlPresets:
|
|
70
|
+
- { value: 5m, label: 5min }
|
|
71
|
+
thinking:
|
|
72
|
+
mode: manual
|
|
73
|
+
defaultEnabled: true
|
|
74
|
+
default: medium
|
|
75
|
+
defaultBudgetTokens: 8192
|
|
76
|
+
effortPresets:
|
|
77
|
+
- { value: medium, label: Medium }
|
|
78
|
+
- { value: high, label: High }
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Tavily Web Search
|
|
3
|
+
description: Real-time web search using Tavily Search API. Use this skill when the user asks about current events, news, latest updates, prices, or any real-time information that requires up-to-date web results.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Tavily Web Search
|
|
7
|
+
|
|
8
|
+
Perform real-time web search via [Tavily Search API](https://docs.tavily.com/documentation/api-reference/endpoint/search). Returns structured results with content snippets and source URLs.
|
|
9
|
+
|
|
10
|
+
## How to Use
|
|
11
|
+
|
|
12
|
+
Call `shell_exec` with the command below. Only change the query string in `-d`; keep `{{params.api_key}}` exactly as-is (the system substitutes it at runtime).
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
curl -s -X POST https://api.tavily.com/search \
|
|
16
|
+
-H "Content-Type: application/json" \
|
|
17
|
+
-H "Authorization: Bearer {{params.api_key}}" \
|
|
18
|
+
-d '{"query":"your natural language query here","max_results":5,"include_answer":true}' \
|
|
19
|
+
| python3 -c "
|
|
20
|
+
import sys,json
|
|
21
|
+
r=json.load(sys.stdin)
|
|
22
|
+
if r.get('answer'): print('Answer:',r['answer'],'\n')
|
|
23
|
+
for x in r.get('results',[]):
|
|
24
|
+
print(f\"- [{x['title']}]({x['url']})\")
|
|
25
|
+
print(f\" {x['content'][:300]}\n\")
|
|
26
|
+
"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
For news queries, add `"topic":"news"` to `-d`. For deeper search, use `"search_depth":"advanced"` (costs 2 credits instead of 1).
|
|
30
|
+
|
|
31
|
+
## Query Formulation
|
|
32
|
+
|
|
33
|
+
Use **natural language questions**.
|
|
34
|
+
|
|
35
|
+
### Language choice — important
|
|
36
|
+
|
|
37
|
+
Tavily's index is dominated by English-language sources for international topics. Pick the query language by topic, not by the user's input language:
|
|
38
|
+
|
|
39
|
+
| Topic | Use English query | Use Chinese query |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| International sports / celebrities (e.g. Lionel Messi, Taylor Swift) | ✅ | ❌ Chinese hits niche aggregators only |
|
|
42
|
+
| International tech / products / pricing (e.g. iPhone, RTX 5080) | ✅ | ❌ |
|
|
43
|
+
| Global news / politics / finance | ✅ (or both) | Often weak |
|
|
44
|
+
| Domestic Chinese topics (A 股, 国内政策, 中文媒体) | ❌ | ✅ |
|
|
45
|
+
| Chinese tech ecosystem (e.g. 字节跳动, 小米) | Either | ✅ |
|
|
46
|
+
|
|
47
|
+
If the user asks in Chinese about an international topic, **translate the entity to its English form first**: 「梅西最新消息」→ `"Lionel Messi latest news"`. Don't pass `"梅西最新消息"` directly to the API for non-Chinese topics — you'll mostly miss ESPN / Bleacher Report / Reuters etc.
|
|
48
|
+
|
|
49
|
+
### Time-sensitive queries: prefer `time_range`, not year keywords
|
|
50
|
+
|
|
51
|
+
Don't bake the year into the query string. Two reasons:
|
|
52
|
+
1. You may be wrong about the current year. (The skill itself doesn't see today's date.)
|
|
53
|
+
2. The index is fresher than your knowledge cutoff — pinning a year filters out the most relevant recent results.
|
|
54
|
+
|
|
55
|
+
**Use `time_range` instead**: add `"time_range":"day" | "week" | "month" | "year"` to `-d`. For breaking news, `"week"` is usually right; for a monthly review, `"month"`.
|
|
56
|
+
|
|
57
|
+
If the user explicitly anchors to a past year ("how was Apple's 2023?"), then a year keyword is correct.
|
|
58
|
+
|
|
59
|
+
### Templates
|
|
60
|
+
|
|
61
|
+
| User Intent | Query template |
|
|
62
|
+
|---|---|
|
|
63
|
+
| Latest news on a person/product | `"<English entity name> latest news"` + `time_range: "week"` |
|
|
64
|
+
| Current product/pricing/specs | `"Tell me about <X>, including specs, price, and latest updates."` |
|
|
65
|
+
| Domestic Chinese news | `"<中文实体> 最新动态"` + `time_range: "week"` |
|
|
66
|
+
| General reference question | `"Search for information about X."` |
|
|
67
|
+
|
|
68
|
+
**Examples**:
|
|
69
|
+
- ✅ `"Lionel Messi latest news"` + `time_range: "week"`
|
|
70
|
+
- ✅ `"梅西最新动态"` (only if specifically targeting Chinese-language sources)
|
|
71
|
+
- ❌ `"梅西最新新闻 2025"` — wrong language for international topic *and* hard-coded year
|
|
72
|
+
- ❌ `"Messi news"` — too terse, no recency hint
|
|
73
|
+
|
|
74
|
+
## Optional Parameters
|
|
75
|
+
|
|
76
|
+
Add these fields to the JSON body as needed:
|
|
77
|
+
|
|
78
|
+
| Parameter | Default | Description |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| `max_results` | 5 | Number of results (1–20) |
|
|
81
|
+
| `include_answer` | false | AI-generated summary answer (`true`, `"basic"`, or `"advanced"`) |
|
|
82
|
+
| `search_depth` | `"basic"` | `"basic"` / `"advanced"` (2 credits, higher relevance) |
|
|
83
|
+
| `topic` | `"general"` | `"news"` for time-sensitive queries |
|
|
84
|
+
| `time_range` | null | `"day"`, `"week"`, `"month"`, `"year"` |
|
|
85
|
+
| `include_raw_content` | false | Full page content (`true`, `"markdown"`, `"text"`) |
|
|
86
|
+
| `include_domains` | [] | Restrict to specific domains |
|
|
87
|
+
| `exclude_domains` | [] | Exclude specific domains |
|
|
88
|
+
|
|
89
|
+
## Requirements
|
|
90
|
+
|
|
91
|
+
- API key configured at `tavily-web-search.params.api_key` in `~/.halo/secrets/settings.yaml`, or set env var `TAVILY_API_KEY`. Set it from the Settings page → Skills → Tavily Web Search.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
displayName_zh: Tavily 联网搜索
|
|
2
|
+
description: Real-time web search via Tavily Search API.
|
|
3
|
+
description_zh: 通过 Tavily 搜索 API 进行实时联网搜索。
|
|
4
|
+
|
|
5
|
+
params:
|
|
6
|
+
- key: api_key
|
|
7
|
+
description: Tavily Search API Key. Get one at https://app.tavily.com.
|
|
8
|
+
description_zh: Tavily 搜索 API Key。从 https://app.tavily.com 获取。
|
|
9
|
+
default: <<TAVILY_API_KEY>>
|
|
10
|
+
secret: true
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
## Tool Usage Guidelines
|
|
2
|
+
|
|
3
|
+
### Tool Choice
|
|
4
|
+
|
|
5
|
+
Default priority:
|
|
6
|
+
- **Search content** → `grep` over shelling out (`grep` / `rg` / `find` in `shell_exec`)
|
|
7
|
+
- **Find files by name/pattern** → `glob` over `file_list` walking
|
|
8
|
+
- **Edit a file** → `file_edit` (targeted) over `file_write` (only for new files or full rewrites)
|
|
9
|
+
- **Read a large file** → `grep` first to locate the section, then `file_read` with `offset`/`limit`
|
|
10
|
+
|
|
11
|
+
Worked examples (query → tool):
|
|
12
|
+
- "Rename function `foo` everywhere" → `grep` for callers across the repo, then `file_edit` each hit.
|
|
13
|
+
- "Where does config X get loaded?" → `grep` the symbol, not a directory walk.
|
|
14
|
+
- "List all yaml under `.halo/agents`" → `glob({ pattern: "**/*.yaml", path: ".halo/agents" })`.
|
|
15
|
+
- "Find TODOs in the API layer" → `grep({ pattern: "TODO", path: "src/api", include: "*.ts" })`.
|
|
16
|
+
|
|
17
|
+
### glob / grep — narrow the scope first
|
|
18
|
+
Both walk every file under their `path`. Pick the narrowest `path` that contains what you want, and use `include` (grep) or a specific pattern (glob) to filter further. Unsure where a file is? `file_list` a likely parent first to figure out the right subdirectory, then `glob` inside it.
|
|
19
|
+
|
|
20
|
+
### Output
|
|
21
|
+
- Don't dump whole files — grep or summarize
|
|
22
|
+
- For >100 lines, focus on errors, stack traces, status codes
|
|
23
|
+
|
|
24
|
+
### When a Tool Fails
|
|
25
|
+
- Read the error, don't blind-retry
|
|
26
|
+
- After 2 same-approach failures, change approach
|
|
27
|
+
- Common causes: wrong path (use `glob` to verify), stale content (re-read), `file_edit` mismatch (re-read first to copy `old_string` exactly)
|
|
28
|
+
|
|
29
|
+
### file_edit staleness — re-read between edits to the same file
|
|
30
|
+
After any successful `file_edit`, your earlier `file_read` of that file is **stale**. Don't reach for `old_string` from memory or from an old read; the bytes have shifted. Re-read the relevant range, then build the next `old_string` from that fresh read. The same applies after any external change to a file (another agent, a build step, a shell command).
|
|
31
|
+
|
|
32
|
+
### Execution
|
|
33
|
+
- If asked to do something, do it — don't just describe
|
|
34
|
+
- Text-only reply when tools fit the task = incomplete
|
|
35
|
+
- Report concrete results (files changed, commands run, output seen), not "done"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
### Shell
|
|
2
|
+
- `shell_exec` runs via the system shell (bash/sh) and has unrestricted access — install missing tools yourself (`apt`, `pip`/`pip3`, `npm`, `brew`, etc.). Missing tools / libraries are install problems, not refusal triggers — provision your own runtime (ffmpeg / pandoc / imagemagick for media, the right packages for ML/data work).
|
|
3
|
+
- Chain with `&&`; check exit status before continuing
|
|
4
|
+
- Unix conventions apply: `~/` for home, `/tmp` for scratch, forward-slash paths, `python3` for Python
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
### Shell (Windows)
|
|
2
|
+
- Running on **Windows** — `shell_exec` runs commands through `cmd.exe`, not bash. Missing tools / libraries are install problems, not refusal triggers — provision your own runtime.
|
|
3
|
+
- Use Windows commands, not unix ones: `dir` (not `ls`), `type` (not `cat`), `findstr` (not `grep`), `del` (not `rm`), `copy`/`xcopy` (not `cp`), `move` (not `mv`), `mkdir` works but `mkdir -p` does not.
|
|
4
|
+
- Chain commands with `&&`; check `%ERRORLEVEL%` before continuing. (Prefer the `grep`/`glob`/`file_*` tools over shelling out — they're cross-platform.)
|
|
5
|
+
- **Paths**: home is `%USERPROFILE%` (not `~/`); scratch dir is `%TEMP%` (not `/tmp`). Backslash `\` is the separator, though forward slashes usually work inside quoted strings — prefer forward slashes for cross-platform tools.
|
|
6
|
+
- **Python**: the interpreter is usually `python` (sometimes the `py` launcher), not `python3`. When a skill's docs show `python3 …`, run `python …` instead.
|
|
7
|
+
- **Skill scripts**: some built-in skills ship `.py` helpers (e.g. cron, workspace, acp) and assume unix. If `python` isn't found, install Python first; the workspace skill's `stage.py` additionally needs `pip install pyyaml`. Skip any `chmod +x` step — it's a no-op on Windows.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## First Conversation — Getting to Know You
|
|
2
|
+
|
|
3
|
+
No user profile exists yet. Before doing anything else, have a brief, warm getting-to-know-you exchange:
|
|
4
|
+
|
|
5
|
+
1. Greet the user naturally
|
|
6
|
+
2. Ask what they'd like to call you (your name as the AI)
|
|
7
|
+
3. Ask how you should address them (their name or nickname)
|
|
8
|
+
4. Ask about their preferred communication style — casual/formal, humor level, language preference, or anything else that matters to them
|
|
9
|
+
|
|
10
|
+
Keep it natural and conversational — 2-3 exchanges, not a form. The 4 items above are topics, not a questionnaire; weave them in as the conversation flows, don't ask them one by one. Adapt to whatever language the user responds in.
|
|
11
|
+
|
|
12
|
+
After collecting enough info, use `file_write` to create `~/.halo/global/USER.md` (global user profile, shared across all projects):
|
|
13
|
+
|
|
14
|
+
```markdown
|
|
15
|
+
---
|
|
16
|
+
user_name: [their name]
|
|
17
|
+
ai_name: [the name they chose for you]
|
|
18
|
+
lang: [preferred language, e.g. zh-CN, en]
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Communication Style
|
|
22
|
+
|
|
23
|
+
[Their preferences — humor, formality, etc.]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Once USER.md is saved, naturally transition to helping with whatever the user needs. Do not mention this bootstrap process explicitly — just be friendly and curious.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## Workspace Long-Term Memory
|
|
2
|
+
|
|
3
|
+
Each workspace has a `.halo/` directory whose persistent files outlive any single session — this is how the workspace remembers across conversations:
|
|
4
|
+
|
|
5
|
+
| File | Purpose | When to write |
|
|
6
|
+
|------|---------|---------------|
|
|
7
|
+
| `.halo/INSTRUCTIONS.md` | Project conventions | When writing normative rules |
|
|
8
|
+
| `.halo/INDEX.md` | Project documentation index | After project changes — remind the user to sync |
|
|
9
|
+
| `.halo/memory/YYYY-MM-DD.md` | Past work worth keeping | When something should outlive this session |
|
|
10
|
+
|
|
11
|
+
**New workspace has no INDEX.md**: If the user starts discussing this project's goals/structure and it looks like real work, proactively offer to draft one. Don't ask for casual browsing.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
2
|
+
id TEXT PRIMARY KEY,
|
|
3
|
+
title TEXT NOT NULL DEFAULT '',
|
|
4
|
+
messages TEXT NOT NULL,
|
|
5
|
+
message_count INTEGER NOT NULL DEFAULT 0,
|
|
6
|
+
created_at INTEGER NOT NULL,
|
|
7
|
+
updated_at INTEGER NOT NULL
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
CREATE TABLE IF NOT EXISTS agent_sessions (
|
|
11
|
+
id TEXT PRIMARY KEY,
|
|
12
|
+
parent_id TEXT,
|
|
13
|
+
agent_id TEXT NOT NULL,
|
|
14
|
+
agent_name TEXT NOT NULL DEFAULT '',
|
|
15
|
+
description TEXT NOT NULL DEFAULT '',
|
|
16
|
+
working_dir TEXT,
|
|
17
|
+
access_level TEXT,
|
|
18
|
+
created_at INTEGER NOT NULL,
|
|
19
|
+
updated_at INTEGER NOT NULL,
|
|
20
|
+
stopped_at INTEGER,
|
|
21
|
+
archived_at INTEGER
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
CREATE TABLE IF NOT EXISTS disabled_items (
|
|
25
|
+
item_type TEXT NOT NULL CHECK(item_type IN ('agent', 'skill')),
|
|
26
|
+
item_id TEXT NOT NULL,
|
|
27
|
+
scope TEXT NOT NULL CHECK(scope IN ('global', 'workspace')),
|
|
28
|
+
disabled_at INTEGER NOT NULL,
|
|
29
|
+
PRIMARY KEY (item_type, item_id, scope)
|
|
30
|
+
);
|