@turmind/halo 1.6.0 → 1.6.2
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/admin-out/404.html +1 -1
- package/admin-out/_next/static/chunks/58.d26b1c4f14404226.js +1 -0
- package/admin-out/_next/static/chunks/989-ddba0eb72566da23.js +1 -0
- package/admin-out/_next/static/chunks/app/page-1d27029caba48956.js +1 -0
- package/admin-out/_next/static/chunks/webpack-74f577c1b094f942.js +1 -0
- package/admin-out/_next/static/css/3b4dcd0ac6b8eae8.css +1 -0
- package/admin-out/index.html +1 -1
- package/admin-out/index.txt +5 -5
- package/bundled-docs/design/agent.md +6 -4
- package/bundled-docs/design/canvas-extensions.md +30 -4
- package/bundled-docs/design/cron.md +24 -11
- package/bundled-docs/design/prompt-system.md +10 -5
- package/bundled-docs/design/session.md +4 -1
- package/bundled-docs/design/storage.md +36 -11
- package/bundled-docs/design/ws.md +7 -5
- package/bundled-docs/dev/add-model-provider.md +17 -11
- package/bundled-docs/dev/api.md +25 -12
- package/bundled-docs/dev/deploy.md +3 -0
- package/bundled-docs/dev/desktop-packaging.md +11 -5
- package/bundled-docs/dev/env.md +1 -1
- package/bundled-docs/dev/previews.md +26 -0
- package/bundled-docs/guide/agents.md +6 -6
- package/bundled-docs/guide/cli.md +5 -4
- package/bundled-docs/guide/skills.md +12 -6
- package/bundled-docs/guide/workspace.md +1 -1
- package/bundled-docs/requirements/agent.md +5 -0
- package/bundled-docs/requirements/chat.md +9 -5
- package/bundled-docs/requirements/command.md +4 -0
- package/bundled-docs/requirements/editor.md +20 -6
- package/bundled-docs/requirements/session.md +1 -1
- package/bundled-docs/requirements/skill.md +15 -9
- package/dist/index.js +2332 -1348
- package/package.json +1 -1
- package/templates/models/anthropic.yaml +109 -13
- package/templates/models/aws-bedrock-claude-invoke.yaml +39 -13
- package/templates/models/aws-bedrock-mantle.yaml +60 -28
- package/templates/models/aws-bedrock-openai.yaml +52 -29
- package/templates/models/deepseek.yaml +19 -10
- package/templates/models/doubao.yaml +72 -20
- package/templates/models/hunyuan.yaml +79 -15
- package/templates/models/kimi.yaml +63 -3
- package/templates/models/mimo-token-plan-china.yaml +9 -1
- package/templates/models/minimax.yaml +9 -3
- package/templates/models/openai.yaml +120 -17
- package/templates/models/qwen.yaml +103 -6
- package/templates/models/zhipu.yaml +9 -1
- package/templates/schema.sql +1 -1
- package/templates/skills/cron/SKILL.md +40 -3
- package/templates/skills/cron/manage-cron.py +140 -15
- package/templates/skills/skill/SKILL.md +22 -11
- package/templates/skills/workspace/share.md +5 -2
- package/templates/skills/workspace/stage.py +51 -14
- package/admin-out/_next/static/chunks/220.7566bc89f3d98993.js +0 -1
- package/admin-out/_next/static/chunks/989-a7f752480eaaa2dc.js +0 -1
- package/admin-out/_next/static/chunks/app/page-8173112f256bc483.js +0 -1
- package/admin-out/_next/static/chunks/webpack-dc73047e0279979b.js +0 -1
- package/admin-out/_next/static/css/981c9e5610ce535a.css +0 -1
- /package/admin-out/_next/static/{_F_Fkyh9PainUNY82EEjY → VgAe62AuGEiYrF4JQ7WQe}/_buildManifest.js +0 -0
- /package/admin-out/_next/static/{_F_Fkyh9PainUNY82EEjY → VgAe62AuGEiYrF4JQ7WQe}/_ssgManifest.js +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
id: kimi
|
|
2
2
|
runtime: kimi
|
|
3
|
-
revision:
|
|
3
|
+
revision: 2026101004
|
|
4
4
|
displayName: Kimi (Moonshot AI)
|
|
5
5
|
displayName_zh: Kimi(月之暗面)
|
|
6
|
-
description: Kimi K3 / K2.6 via OpenAI-compatible chat completions API
|
|
7
|
-
description_zh: Kimi K3 / K2.6,通过 OpenAI 兼容的 chat completions API 调用
|
|
6
|
+
description: Kimi K3 / K2.7 Code / K2.6 via OpenAI-compatible chat completions API
|
|
7
|
+
description_zh: Kimi K3 / K2.7 Code / K2.6,通过 OpenAI 兼容的 chat completions API 调用
|
|
8
8
|
defaultEndpoint: https://api.moonshot.cn/v1
|
|
9
9
|
|
|
10
10
|
secrets:
|
|
@@ -30,6 +30,8 @@ models:
|
|
|
30
30
|
# Official default output cap; the model can go up to 1M but we don't max out.
|
|
31
31
|
maxOutputTokens: 131072
|
|
32
32
|
contextWindow: 272000
|
|
33
|
+
maxContextWindow: 1000000
|
|
34
|
+
compressAt: 0.9
|
|
33
35
|
capabilities:
|
|
34
36
|
# K3 itself also supports video input, but Halo has no video upload
|
|
35
37
|
# path yet — keep video:false until one exists. Image input is
|
|
@@ -53,10 +55,68 @@ models:
|
|
|
53
55
|
effortPresets:
|
|
54
56
|
- { value: max, label: Max }
|
|
55
57
|
|
|
58
|
+
- id: kimi-k2.7-code
|
|
59
|
+
displayName: Kimi K2.7 Code
|
|
60
|
+
# Official quickstart: 256K context, max_tokens default 32768.
|
|
61
|
+
maxOutputTokens: 32768
|
|
62
|
+
contextWindow: 262144
|
|
63
|
+
maxContextWindow: 262144
|
|
64
|
+
compressAt: 0.9
|
|
65
|
+
capabilities:
|
|
66
|
+
# Live probe 2026-10-10: named a red 64×64 PNG correctly (base64 data URL).
|
|
67
|
+
# Video input exists upstream but Halo has no video path (see K3).
|
|
68
|
+
image: true
|
|
69
|
+
video: false
|
|
70
|
+
audio: false
|
|
71
|
+
promptCaching:
|
|
72
|
+
# Automatic (prompt_cache_key hint) — probe: turn 2 cached 5376/5622.
|
|
73
|
+
default: 5m
|
|
74
|
+
ttlPresets:
|
|
75
|
+
- { value: 5m, label: 5min }
|
|
76
|
+
thinking:
|
|
77
|
+
# Thinking is MANDATORY: thinking:{type:'disabled'} → 400 "only
|
|
78
|
+
# type=enabled is allowed for this model". kimi-agent's K2.x branch only
|
|
79
|
+
# sends `disabled` for effort 'disabled', so toggling Off in the form
|
|
80
|
+
# just omits the field and the model still thinks.
|
|
81
|
+
defaultEnabled: true
|
|
82
|
+
default: medium
|
|
83
|
+
effortPresets:
|
|
84
|
+
- { value: medium, label: On }
|
|
85
|
+
|
|
86
|
+
- id: kimi-k2.7-code-highspeed
|
|
87
|
+
displayName: Kimi K2.7 Code (highspeed)
|
|
88
|
+
# Same model as kimi-k2.7-code at ~5-6x output speed (official quickstart:
|
|
89
|
+
# "与 Kimi K2.7 Code 是同一个模型", 256K context, no non-thinking mode;
|
|
90
|
+
# capacity "偶有波动"). /v1/models: context_length 262144, image in.
|
|
91
|
+
maxOutputTokens: 32768
|
|
92
|
+
contextWindow: 262144
|
|
93
|
+
maxContextWindow: 262144
|
|
94
|
+
compressAt: 0.9
|
|
95
|
+
capabilities:
|
|
96
|
+
# Live probe 2026-10-10: red 64×64 PNG → "Red"; tool call → tool_calls;
|
|
97
|
+
# max_tokens 32768 OK. Video: no Halo path (see K3).
|
|
98
|
+
image: true
|
|
99
|
+
video: false
|
|
100
|
+
audio: false
|
|
101
|
+
promptCaching:
|
|
102
|
+
# Automatic (prompt_cache_key hint) — probe: turn 2 cached 7016/7016.
|
|
103
|
+
default: 5m
|
|
104
|
+
ttlPresets:
|
|
105
|
+
- { value: 5m, label: 5min }
|
|
106
|
+
thinking:
|
|
107
|
+
# MANDATORY, as on kimi-k2.7-code: thinking:{type:'disabled'} → 400
|
|
108
|
+
# "only type=enabled is allowed for this model".
|
|
109
|
+
defaultEnabled: true
|
|
110
|
+
default: medium
|
|
111
|
+
effortPresets:
|
|
112
|
+
- { value: medium, label: On }
|
|
113
|
+
|
|
56
114
|
- id: kimi-k2.6
|
|
57
115
|
displayName: Kimi K2.6
|
|
58
116
|
maxOutputTokens: 32768
|
|
59
117
|
contextWindow: 262144
|
|
118
|
+
maxContextWindow: 262144
|
|
119
|
+
compressAt: 0.9
|
|
60
120
|
capabilities:
|
|
61
121
|
# Verified 2026-05-27 via live probes: kimi-k2.6 returns "prepare
|
|
62
122
|
# image failed" on image_url blocks despite past docs claiming
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: mimo-token-plan-china
|
|
2
2
|
runtime: anthropic-messages
|
|
3
|
-
revision:
|
|
3
|
+
revision: 2026101002
|
|
4
4
|
displayName: Xiaomi MiMo
|
|
5
5
|
displayName_zh: 小米 MiMo
|
|
6
6
|
description: Xiaomi MiMo via its Anthropic-compatible gateway — Token Plan (China / Singapore / Europe clusters) or pay-as-you-go. Supports 1M context window.
|
|
@@ -40,6 +40,8 @@ models:
|
|
|
40
40
|
displayName: MiMo v2.6 Pro
|
|
41
41
|
maxOutputTokens: 131072
|
|
42
42
|
contextWindow: 272000
|
|
43
|
+
maxContextWindow: 1000000
|
|
44
|
+
compressAt: 0.9
|
|
43
45
|
capabilities:
|
|
44
46
|
image: true
|
|
45
47
|
video: false
|
|
@@ -63,6 +65,8 @@ models:
|
|
|
63
65
|
displayName: MiMo v2.6 Flash
|
|
64
66
|
maxOutputTokens: 131072
|
|
65
67
|
contextWindow: 272000
|
|
68
|
+
maxContextWindow: 1000000
|
|
69
|
+
compressAt: 0.9
|
|
66
70
|
capabilities:
|
|
67
71
|
image: true
|
|
68
72
|
video: false
|
|
@@ -87,6 +91,8 @@ models:
|
|
|
87
91
|
displayName: MiMo v2.5 Pro (deprecated 2026-10-21)
|
|
88
92
|
maxOutputTokens: 131072
|
|
89
93
|
contextWindow: 272000
|
|
94
|
+
maxContextWindow: 1000000
|
|
95
|
+
compressAt: 0.9
|
|
90
96
|
capabilities:
|
|
91
97
|
image: false
|
|
92
98
|
video: false
|
|
@@ -110,6 +116,8 @@ models:
|
|
|
110
116
|
displayName: MiMo v2.5 (deprecated 2026-10-21)
|
|
111
117
|
maxOutputTokens: 131072
|
|
112
118
|
contextWindow: 272000
|
|
119
|
+
maxContextWindow: 1000000
|
|
120
|
+
compressAt: 0.9
|
|
113
121
|
capabilities:
|
|
114
122
|
image: true
|
|
115
123
|
video: false
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: minimax
|
|
2
2
|
runtime: minimax
|
|
3
|
-
revision:
|
|
3
|
+
revision: 2026101002
|
|
4
4
|
displayName: MiniMax
|
|
5
5
|
displayName_zh: MiniMax
|
|
6
6
|
description: MiniMax M3 / M2.7 family via the Anthropic-compatible Messages API
|
|
@@ -43,6 +43,8 @@ models:
|
|
|
43
43
|
# Official recommended value; hard cap is 524288 but we don't max out.
|
|
44
44
|
maxOutputTokens: 131072
|
|
45
45
|
contextWindow: 272000
|
|
46
|
+
maxContextWindow: 1000000
|
|
47
|
+
compressAt: 0.9
|
|
46
48
|
capabilities:
|
|
47
49
|
# M3 also supports video input, but Halo has no video upload path yet —
|
|
48
50
|
# keep video:false until one exists. Image rides the Anthropic-compatible
|
|
@@ -71,6 +73,8 @@ models:
|
|
|
71
73
|
displayName: MiniMax M2.7
|
|
72
74
|
maxOutputTokens: 16384
|
|
73
75
|
contextWindow: 204800
|
|
76
|
+
maxContextWindow: 204800
|
|
77
|
+
compressAt: 0.9
|
|
74
78
|
capabilities:
|
|
75
79
|
image: false
|
|
76
80
|
video: false
|
|
@@ -86,7 +90,7 @@ models:
|
|
|
86
90
|
# minimax-agent.ts maps them via effortToBudget() before sending.
|
|
87
91
|
mode: manual
|
|
88
92
|
defaultEnabled: true
|
|
89
|
-
default:
|
|
93
|
+
default: high
|
|
90
94
|
defaultBudgetTokens: 8192
|
|
91
95
|
effortPresets:
|
|
92
96
|
- { value: medium, label: Medium }
|
|
@@ -96,6 +100,8 @@ models:
|
|
|
96
100
|
displayName: MiniMax M2.7 Highspeed
|
|
97
101
|
maxOutputTokens: 16384
|
|
98
102
|
contextWindow: 204800
|
|
103
|
+
maxContextWindow: 204800
|
|
104
|
+
compressAt: 0.9
|
|
99
105
|
capabilities:
|
|
100
106
|
image: false
|
|
101
107
|
video: false
|
|
@@ -107,7 +113,7 @@ models:
|
|
|
107
113
|
thinking:
|
|
108
114
|
mode: manual
|
|
109
115
|
defaultEnabled: true
|
|
110
|
-
default:
|
|
116
|
+
default: high
|
|
111
117
|
defaultBudgetTokens: 8192
|
|
112
118
|
effortPresets:
|
|
113
119
|
- { value: medium, label: Medium }
|
|
@@ -1,51 +1,154 @@
|
|
|
1
1
|
id: openai
|
|
2
2
|
runtime: openai-chat
|
|
3
|
-
revision:
|
|
3
|
+
revision: 2026101005
|
|
4
4
|
displayName: OpenAI (Generic)
|
|
5
5
|
displayName_zh: OpenAI(通用)
|
|
6
6
|
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.
|
|
7
7
|
description_zh: 通用 OpenAI 兼容协议。可用于原生 OpenAI 或任何第三方 OpenAI 兼容网关。能力字段开放给用户自选——由用户对端点能力自行负责。
|
|
8
|
-
defaultEndpoint: https://api.openai
|
|
9
|
-
defaultModelId: gpt-
|
|
8
|
+
defaultEndpoint: https://bedrock-mantle.us-east-1.api.aws/openai/v1
|
|
9
|
+
defaultModelId: openai.gpt-5.5
|
|
10
10
|
endpointPresets:
|
|
11
|
+
- https://bedrock-mantle.us-east-1.api.aws/openai/v1
|
|
12
|
+
- https://bedrock-mantle.us-west-2.api.aws/openai/v1
|
|
11
13
|
- https://api.openai.com/v1
|
|
12
14
|
|
|
13
15
|
secrets:
|
|
14
16
|
- key: api_key
|
|
15
|
-
description: API key
|
|
16
|
-
description_zh:
|
|
17
|
+
description: API key of the chosen endpoint, sent as a Bearer token — e.g. a Bedrock API key for the Bedrock Mantle presets, or the key your OpenAI-compatible gateway issued (sk-... for OpenAI, ark-... for Volcengine, etc.).
|
|
18
|
+
description_zh: 所选端点的 API Key(以 Bearer 令牌发送)——例如 Bedrock Mantle 端点用 Bedrock API Key,其他 OpenAI 兼容网关用该网关签发的 Key(OpenAI 是 sk-、火山方舟是 ark- 等)。
|
|
17
19
|
default: <<OPENAI_API_KEY>>
|
|
18
20
|
secret: true
|
|
19
21
|
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
# doesn't support, e.g., audio, just don't send audio.
|
|
22
|
+
# Placeholder provider — point it at any OpenAI-compatible endpoint and type
|
|
23
|
+
# the model id that endpoint serves. Custom model ids (anything not listed
|
|
24
|
+
# under `models:`) are treated as fully-permissive in the admin form — the
|
|
25
|
+
# user can flip image/video/audio toggles, pick caching TTL, and set thinking
|
|
26
|
+
# effort or budget. The models census skips this provider; new GPT models are
|
|
27
|
+
# tracked through the aws-bedrock-* providers.
|
|
27
28
|
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
29
|
+
# The listed models (bar the legacy placeholder at the end) are callable out of
|
|
30
|
+
# the box with a Bedrock API key — the default endpoint is Mantle us-east-1:
|
|
31
|
+
# Amazon Bedrock's bedrock-mantle endpoint serves Chat Completions (Bearer
|
|
32
|
+
# auth — what OpenAIAgent sends; the runtime appends /chat/completions).
|
|
33
|
+
# The path prefix is per model: GPT-5.x lives under /openai/v1, gpt-oss under
|
|
34
|
+
# /v1; the wrong one 400s "model ... isn't supported on this route".
|
|
35
|
+
# Source: docs.aws.amazon.com/bedrock/latest/userguide/inference-chat-completions.html
|
|
36
|
+
# and each model card's Programmatic Access table.
|
|
37
|
+
#
|
|
38
|
+
# GPT on Mantle Chat Completions /openai/v1, in-Region (live GET /v1/models
|
|
39
|
+
# 2026-10-10, matches the models-region-compatibility.html bedrock-mantle
|
|
40
|
+
# column), probed through OpenAIAgent 2026-10-10:
|
|
41
|
+
#
|
|
42
|
+
# us-east-1 us-west-2 via OpenAIAgent
|
|
43
|
+
# gpt-6.1-sol ✓ - 400 (max_tokens)
|
|
44
|
+
# gpt-6-sol / luna ✓ - 400 (max_tokens)
|
|
45
|
+
# gpt-6-astra ✓ ✓ 400 (max_tokens)
|
|
46
|
+
# gpt-5.6-sol ✓ - 400 (max_tokens)
|
|
47
|
+
# gpt-5.6-terra/luna ✓ ✓ 400 (max_tokens)
|
|
48
|
+
# gpt-5.5 ✓ - OK
|
|
49
|
+
# gpt-5.4 ✓ ✓ OK
|
|
50
|
+
#
|
|
51
|
+
# GPT-6.x / 5.6 reject `max_tokens` ("Unsupported parameter ... not supported
|
|
52
|
+
# with this model"; they take max_completion_tokens), which OpenAIAgent always
|
|
53
|
+
# sends — use them through aws-bedrock-mantle / aws-bedrock-openai (Responses
|
|
54
|
+
# API) instead. Each model below carries its own `endpoints:`.
|
|
55
|
+
#
|
|
56
|
+
# Capability notes (Mantle Chat Completions):
|
|
57
|
+
# - promptCaching: automatic (cached_tokens come back, nothing to send, TTL
|
|
58
|
+
# undisclosed) — the single 5m preset is a form hint only.
|
|
59
|
+
# - thinking: reasoning_effort. The validation error lists none / minimal /
|
|
60
|
+
# low / medium / high / xhigh / max, but `max` 400s "not supported with
|
|
61
|
+
# this model" on both models, so the presets stop at xhigh. Reasoning
|
|
62
|
+
# tokens are counted (xhigh 1.4–2x low on the same prompt) but the reply
|
|
63
|
+
# carries no reasoning text, so no thinking is shown in the UI.
|
|
64
|
+
# - verbosity: not declared — OpenAIAgent doesn't send it.
|
|
31
65
|
models:
|
|
66
|
+
# Live-probed 2026-10-10 through OpenAIAgent on us-east-1: tool call →
|
|
67
|
+
# result → reply OK; us-west-2 → 404 "does not exist". Red PNG → "Red".
|
|
68
|
+
# Model card: 1,050,000 context / 128,000 output (max_tokens 128001 is
|
|
69
|
+
# accepted too, so the cap is the card's figure, not a probe). Long-context
|
|
70
|
+
# rates apply to the whole request past 272K input — hence contextWindow
|
|
71
|
+
# 272000; maxContextWindow is the real limit.
|
|
72
|
+
- id: openai.gpt-5.5
|
|
73
|
+
displayName: GPT-5.5 (Bedrock Mantle)
|
|
74
|
+
endpoints:
|
|
75
|
+
- https://bedrock-mantle.us-east-1.api.aws/openai/v1
|
|
76
|
+
maxOutputTokens: 128000
|
|
77
|
+
contextWindow: 272000
|
|
78
|
+
maxContextWindow: 1050000
|
|
79
|
+
compressAt: 0.9
|
|
80
|
+
capabilities:
|
|
81
|
+
image: true
|
|
82
|
+
video: false
|
|
83
|
+
audio: false
|
|
84
|
+
promptCaching:
|
|
85
|
+
default: 5m
|
|
86
|
+
ttlPresets:
|
|
87
|
+
- { value: 5m, label: 5min }
|
|
88
|
+
thinking:
|
|
89
|
+
mode: adaptive
|
|
90
|
+
defaultEnabled: true
|
|
91
|
+
default: xhigh
|
|
92
|
+
effortPresets:
|
|
93
|
+
- { value: low, label: Low }
|
|
94
|
+
- { value: medium, label: Medium }
|
|
95
|
+
- { value: high, label: High }
|
|
96
|
+
- { value: xhigh, label: XHigh }
|
|
97
|
+
|
|
98
|
+
# Same surface as GPT-5.5 (probe and model card: 1,050,000 / 128,000), and
|
|
99
|
+
# the only GPT-5 that OpenAIAgent can drive on us-west-2 — tool round-trip
|
|
100
|
+
# OK on both regions 2026-10-10.
|
|
101
|
+
- id: openai.gpt-5.4
|
|
102
|
+
displayName: GPT-5.4 (Bedrock Mantle)
|
|
103
|
+
endpoints:
|
|
104
|
+
- https://bedrock-mantle.us-east-1.api.aws/openai/v1
|
|
105
|
+
- https://bedrock-mantle.us-west-2.api.aws/openai/v1
|
|
106
|
+
maxOutputTokens: 128000
|
|
107
|
+
contextWindow: 272000
|
|
108
|
+
maxContextWindow: 1050000
|
|
109
|
+
compressAt: 0.9
|
|
110
|
+
capabilities:
|
|
111
|
+
image: true
|
|
112
|
+
video: false
|
|
113
|
+
audio: false
|
|
114
|
+
promptCaching:
|
|
115
|
+
default: 5m
|
|
116
|
+
ttlPresets:
|
|
117
|
+
- { value: 5m, label: 5min }
|
|
118
|
+
thinking:
|
|
119
|
+
mode: adaptive
|
|
120
|
+
defaultEnabled: true
|
|
121
|
+
default: xhigh
|
|
122
|
+
effortPresets:
|
|
123
|
+
- { value: low, label: Low }
|
|
124
|
+
- { value: medium, label: Medium }
|
|
125
|
+
- { value: high, label: High }
|
|
126
|
+
- { value: xhigh, label: XHigh }
|
|
127
|
+
|
|
128
|
+
# Legacy placeholder (pre-1.6.1): the default model before the Bedrock Mantle
|
|
129
|
+
# entries above, kept so agents created on it still resolve their caps and
|
|
130
|
+
# context. Official API only.
|
|
32
131
|
- id: gpt-4o
|
|
33
132
|
displayName: GPT-4o (placeholder)
|
|
133
|
+
endpoints:
|
|
134
|
+
- https://api.openai.com/v1
|
|
34
135
|
maxOutputTokens: 16384
|
|
35
136
|
contextWindow: 128000
|
|
137
|
+
maxContextWindow: 128000
|
|
138
|
+
compressAt: 0.9
|
|
36
139
|
capabilities:
|
|
37
140
|
image: true
|
|
38
141
|
video: true
|
|
39
142
|
audio: true
|
|
40
143
|
promptCaching:
|
|
41
|
-
default:
|
|
144
|
+
default: 1h
|
|
42
145
|
ttlPresets:
|
|
43
146
|
- { value: 5m, label: 5min }
|
|
44
147
|
- { value: 1h, label: 1hour }
|
|
45
148
|
thinking:
|
|
46
149
|
mode: manual
|
|
47
150
|
defaultEnabled: false
|
|
48
|
-
default:
|
|
151
|
+
default: high
|
|
49
152
|
defaultBudgetTokens: 8192
|
|
50
153
|
effortPresets:
|
|
51
154
|
- { value: low, label: Low }
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
id: qwen
|
|
2
2
|
runtime: qwen
|
|
3
|
-
revision:
|
|
3
|
+
revision: 2026101101
|
|
4
4
|
displayName: Qwen (Aliyun)
|
|
5
5
|
displayName_zh: 通义千问(阿里云)
|
|
6
6
|
description: Qwen3 family on Aliyun Bailian via the Anthropic-compatible Messages API
|
|
7
7
|
description_zh: 阿里云百炼通义千问,通过 Anthropic 兼容的 Messages API 调用
|
|
8
8
|
defaultEndpoint: https://dashscope.aliyuncs.com/apps/anthropic
|
|
9
|
-
defaultModelId: qwen3.
|
|
9
|
+
defaultModelId: qwen3.8-max
|
|
10
10
|
endpointPresets:
|
|
11
11
|
- https://dashscope.aliyuncs.com/apps/anthropic # Beijing
|
|
12
12
|
- https://dashscope-intl.aliyuncs.com/apps/anthropic # Singapore
|
|
@@ -32,15 +32,110 @@ secrets:
|
|
|
32
32
|
# despite docs saying a vision-specific model is required);
|
|
33
33
|
# qwen3.7-max returned `Unexpected item type in content` (not
|
|
34
34
|
# supported). So image:false on max, image:true on plus.
|
|
35
|
-
# - effort presets: pure Halo-side
|
|
36
|
-
# table as bedrock-agent.ts via
|
|
35
|
+
# - effort presets on the manual (3.7 / 3.6) models: pure Halo-side
|
|
36
|
+
# abstraction. Same effort→budget table as bedrock-agent.ts via
|
|
37
|
+
# qwen-agent.ts's effortToBudget().
|
|
37
38
|
# - temperature range: doc says [0, 2) instead of Anthropic's [0, 1] —
|
|
38
39
|
# doesn't affect Halo since we don't expose temperature in the form.
|
|
40
|
+
# 2026-10-10 census (help.aliyun.com/zh/model-studio/anthropic-api-messages +
|
|
41
|
+
# the text-generation model guide, both list 3.8-max / 3.8-flash / 3.7-plus as
|
|
42
|
+
# current, 1M context): live-probed on the Anthropic endpoint — manual
|
|
43
|
+
# thinking.budget_tokens still accepted (the doc marks it "即将废弃" in favour
|
|
44
|
+
# of output_config.effort — see 2026-10-11 below), thinking
|
|
45
|
+
# disabled honored, tool_use OK, image OK, cache_control ephemeral hit on
|
|
46
|
+
# turn 2. `ttl: '1h'` is accepted but the entry is still written as
|
|
47
|
+
# ephemeral_5m, so 5m stays the only TTL preset. Max output isn't published
|
|
48
|
+
# per model on these pages — maxOutputTokens stays 16384. 3.7-max / 3.6-plus
|
|
49
|
+
# are not on the deprecation page, kept below the new generation.
|
|
50
|
+
# 2026-10-11 (help.aliyun.com/zh/model-studio/anthropic-api-messages,
|
|
51
|
+
# `output_config.effort`): the doc lists effort values for qwen3.8-max /
|
|
52
|
+
# qwen3.8-flash only — xhigh (default) / medium / low, with max and high
|
|
53
|
+
# folded onto xhigh by the API. So 3.8 is `mode: adaptive`: qwen-agent sends
|
|
54
|
+
# thinking:{type:'enabled'} + output_config.effort. An agent.yaml that already
|
|
55
|
+
# carries an explicit budget_tokens keeps sending it (still accepted). For 3.8
|
|
56
|
+
# the same doc says max_tokens caps reply + thinking together. The 3.7 / 3.6
|
|
57
|
+
# models have no documented effort values → they stay `mode: manual`
|
|
58
|
+
# (budget_tokens). Thinking-field omitted = thinking on for every model here,
|
|
59
|
+
# so off is always sent as type:'disabled'.
|
|
39
60
|
models:
|
|
61
|
+
- id: qwen3.8-max
|
|
62
|
+
displayName: Qwen3.8 Max
|
|
63
|
+
maxOutputTokens: 16384
|
|
64
|
+
contextWindow: 272000
|
|
65
|
+
maxContextWindow: 1000000
|
|
66
|
+
compressAt: 0.9
|
|
67
|
+
capabilities:
|
|
68
|
+
# Live probe 2026-10-10: named a red 64×64 PNG correctly (3.7-max could not).
|
|
69
|
+
image: true
|
|
70
|
+
video: false
|
|
71
|
+
audio: false
|
|
72
|
+
promptCaching:
|
|
73
|
+
default: 5m
|
|
74
|
+
ttlPresets:
|
|
75
|
+
- { value: 5m, label: 5min }
|
|
76
|
+
thinking:
|
|
77
|
+
mode: adaptive
|
|
78
|
+
defaultEnabled: true
|
|
79
|
+
default: xhigh
|
|
80
|
+
effortPresets:
|
|
81
|
+
- { value: low, label: Low }
|
|
82
|
+
- { value: medium, label: Medium }
|
|
83
|
+
- { value: xhigh, label: XHigh }
|
|
84
|
+
|
|
85
|
+
- id: qwen3.7-plus
|
|
86
|
+
displayName: Qwen3.7 Plus
|
|
87
|
+
maxOutputTokens: 16384
|
|
88
|
+
contextWindow: 272000
|
|
89
|
+
maxContextWindow: 1000000
|
|
90
|
+
compressAt: 0.9
|
|
91
|
+
capabilities:
|
|
92
|
+
# Live probe 2026-10-10: named a red 64×64 PNG correctly.
|
|
93
|
+
image: true
|
|
94
|
+
video: false
|
|
95
|
+
audio: false
|
|
96
|
+
promptCaching:
|
|
97
|
+
default: 5m
|
|
98
|
+
ttlPresets:
|
|
99
|
+
- { value: 5m, label: 5min }
|
|
100
|
+
thinking:
|
|
101
|
+
mode: manual
|
|
102
|
+
defaultEnabled: true
|
|
103
|
+
default: high
|
|
104
|
+
defaultBudgetTokens: 8192
|
|
105
|
+
effortPresets:
|
|
106
|
+
- { value: medium, label: Medium }
|
|
107
|
+
- { value: high, label: High }
|
|
108
|
+
|
|
109
|
+
- id: qwen3.8-flash
|
|
110
|
+
displayName: Qwen3.8 Flash
|
|
111
|
+
maxOutputTokens: 16384
|
|
112
|
+
contextWindow: 272000
|
|
113
|
+
maxContextWindow: 1000000
|
|
114
|
+
compressAt: 0.9
|
|
115
|
+
capabilities:
|
|
116
|
+
# Live probe 2026-10-10: named a red 64×64 PNG correctly.
|
|
117
|
+
image: true
|
|
118
|
+
video: false
|
|
119
|
+
audio: false
|
|
120
|
+
promptCaching:
|
|
121
|
+
default: 5m
|
|
122
|
+
ttlPresets:
|
|
123
|
+
- { value: 5m, label: 5min }
|
|
124
|
+
thinking:
|
|
125
|
+
mode: adaptive
|
|
126
|
+
defaultEnabled: true
|
|
127
|
+
default: xhigh
|
|
128
|
+
effortPresets:
|
|
129
|
+
- { value: low, label: Low }
|
|
130
|
+
- { value: medium, label: Medium }
|
|
131
|
+
- { value: xhigh, label: XHigh }
|
|
132
|
+
|
|
40
133
|
- id: qwen3.7-max
|
|
41
134
|
displayName: Qwen3.7 Max
|
|
42
135
|
maxOutputTokens: 16384
|
|
43
136
|
contextWindow: 272000
|
|
137
|
+
maxContextWindow: 1000000
|
|
138
|
+
compressAt: 0.9
|
|
44
139
|
capabilities:
|
|
45
140
|
image: false
|
|
46
141
|
video: false
|
|
@@ -54,7 +149,7 @@ models:
|
|
|
54
149
|
# qwen-agent.ts maps effort labels via effortToBudget().
|
|
55
150
|
mode: manual
|
|
56
151
|
defaultEnabled: true
|
|
57
|
-
default:
|
|
152
|
+
default: high
|
|
58
153
|
defaultBudgetTokens: 8192
|
|
59
154
|
effortPresets:
|
|
60
155
|
- { value: medium, label: Medium }
|
|
@@ -64,6 +159,8 @@ models:
|
|
|
64
159
|
displayName: Qwen3.6 Plus
|
|
65
160
|
maxOutputTokens: 16384
|
|
66
161
|
contextWindow: 272000
|
|
162
|
+
maxContextWindow: 1000000
|
|
163
|
+
compressAt: 0.9
|
|
67
164
|
capabilities:
|
|
68
165
|
image: true
|
|
69
166
|
video: false
|
|
@@ -75,7 +172,7 @@ models:
|
|
|
75
172
|
thinking:
|
|
76
173
|
mode: manual
|
|
77
174
|
defaultEnabled: true
|
|
78
|
-
default:
|
|
175
|
+
default: high
|
|
79
176
|
defaultBudgetTokens: 8192
|
|
80
177
|
effortPresets:
|
|
81
178
|
- { value: medium, label: Medium }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: zhipu
|
|
2
2
|
runtime: zhipu
|
|
3
|
-
revision:
|
|
3
|
+
revision: 2026101002
|
|
4
4
|
displayName: Zhipu AI (GLM)
|
|
5
5
|
displayName_zh: 智谱 AI(GLM)
|
|
6
6
|
description: Zhipu GLM-5.x family on open.bigmodel.cn, OpenAI-compatible chat completions
|
|
@@ -38,6 +38,8 @@ models:
|
|
|
38
38
|
displayName: GLM-5.3
|
|
39
39
|
maxOutputTokens: 131072
|
|
40
40
|
contextWindow: 272000
|
|
41
|
+
maxContextWindow: 1000000
|
|
42
|
+
compressAt: 0.9
|
|
41
43
|
capabilities:
|
|
42
44
|
image: false
|
|
43
45
|
video: false
|
|
@@ -59,6 +61,8 @@ models:
|
|
|
59
61
|
displayName: GLM-5.3 Flash
|
|
60
62
|
maxOutputTokens: 131072
|
|
61
63
|
contextWindow: 272000
|
|
64
|
+
maxContextWindow: 1000000
|
|
65
|
+
compressAt: 0.9
|
|
62
66
|
capabilities:
|
|
63
67
|
image: true
|
|
64
68
|
video: false
|
|
@@ -79,6 +83,8 @@ models:
|
|
|
79
83
|
displayName: GLM-5.3 FlashX
|
|
80
84
|
maxOutputTokens: 131072
|
|
81
85
|
contextWindow: 272000
|
|
86
|
+
maxContextWindow: 1000000
|
|
87
|
+
compressAt: 0.9
|
|
82
88
|
capabilities:
|
|
83
89
|
image: true
|
|
84
90
|
video: false
|
|
@@ -99,6 +105,8 @@ models:
|
|
|
99
105
|
displayName: GLM-5.2
|
|
100
106
|
maxOutputTokens: 131072
|
|
101
107
|
contextWindow: 272000
|
|
108
|
+
maxContextWindow: 1000000
|
|
109
|
+
compressAt: 0.9
|
|
102
110
|
capabilities:
|
|
103
111
|
image: false
|
|
104
112
|
video: false
|
package/templates/schema.sql
CHANGED
|
@@ -25,7 +25,7 @@ CREATE TABLE IF NOT EXISTS agent_sessions (
|
|
|
25
25
|
CREATE TABLE IF NOT EXISTS disabled_items (
|
|
26
26
|
item_type TEXT NOT NULL CHECK(item_type IN ('agent', 'skill')),
|
|
27
27
|
item_id TEXT NOT NULL,
|
|
28
|
-
scope TEXT NOT NULL CHECK(scope IN ('global', 'workspace')),
|
|
28
|
+
scope TEXT NOT NULL CHECK(scope IN ('global', 'workspace', 'extension')),
|
|
29
29
|
disabled_at INTEGER NOT NULL,
|
|
30
30
|
PRIMARY KEY (item_type, item_id, scope)
|
|
31
31
|
);
|
|
@@ -61,6 +61,8 @@ Sensible defaults if user didn't say:
|
|
|
61
61
|
| label | summarize from prompt + schedule |
|
|
62
62
|
| timeout | leave unset (3600s) — see `--timeout-sec` below |
|
|
63
63
|
| session | leave unset (the job's own session) — see `--session` below |
|
|
64
|
+
| folder | leave unset (workspace root) — see `--dir` below |
|
|
65
|
+
| stateless | off (one session that accumulates) — see `--stateless` below |
|
|
64
66
|
| prompt | pass the user's task as-is — the runner prepends an "unattended run, don't ask questions" notice to every fire, so don't add one yourself |
|
|
65
67
|
|
|
66
68
|
### 2. Translate the schedule
|
|
@@ -77,7 +79,8 @@ Sensible defaults if user didn't say:
|
|
|
77
79
|
|
|
78
80
|
**One-shot (at-mode)** — pass `--run-at` instead of `--schedule`. The job
|
|
79
81
|
fires once at that instant and auto-disables. Useful for "remind me at 3pm
|
|
80
|
-
today" or "send the report next Monday morning".
|
|
82
|
+
today" or "send the report next Monday morning". On `update`, passing one
|
|
83
|
+
of the two switches the job's mode and clears the other; never pass both.
|
|
81
84
|
|
|
82
85
|
| Spoken | Flag |
|
|
83
86
|
|-----------------------------------|-------------------------------------------|
|
|
@@ -100,8 +103,8 @@ job accumulates its own session (same id as the job; older jobs keep the
|
|
|
100
103
|
Pass `--session <rootSessionId>`
|
|
101
104
|
only when the user wants the runs to continue a specific conversation (the
|
|
102
105
|
agent then sees that session's history). Rules the user should hear once:
|
|
103
|
-
- the session keeps **its own agent and access level** — `--agent`
|
|
104
|
-
|
|
106
|
+
- the session keeps **its own agent and access level** — `--agent` must
|
|
107
|
+
match an existing session's agent (the helper refuses otherwise);
|
|
105
108
|
- a fire is **skipped** while a turn is already running in that session;
|
|
106
109
|
- if the user chats in that session while a run is in flight, one of the two
|
|
107
110
|
turns may be missing from its history afterwards.
|
|
@@ -112,6 +115,29 @@ pass `--session ""` to go back to the job's own session (for an older job
|
|
|
112
115
|
pinned to `cron-cron-…` that starts a fresh session — leave it alone unless
|
|
113
116
|
the user asks).
|
|
114
117
|
|
|
118
|
+
**Agent of a stateful job** — once the job's session exists (after its
|
|
119
|
+
first run, or a picked existing session), the job's agent is fixed to that
|
|
120
|
+
session's: `update --agent` to a different one is refused with
|
|
121
|
+
`session <id> already runs agent <A>; …`. To change it, either delete that
|
|
122
|
+
session (admin → Sessions) or switch the job to `--stateless on`. Tell the
|
|
123
|
+
user which; don't pick for them.
|
|
124
|
+
|
|
125
|
+
**Stateless (`--stateless`, optional)** — a **new session every run**
|
|
126
|
+
(`cron-<id>-<suffix>`), so nothing carries over between runs. Use it for
|
|
127
|
+
tasks that don't need memory ("每天抓一次行情发给我", a fixed report).
|
|
128
|
+
Excludes `--session`. On `update`: `--stateless on` / `--stateless off`
|
|
129
|
+
(clear `--session ""` first if one is set). Old per-run sessions are kept and
|
|
130
|
+
stay reviewable in the Sessions tab. `get` / `list` show
|
|
131
|
+
`effective_session_id: null` for a stateless job.
|
|
132
|
+
|
|
133
|
+
**Folder (`--dir`, optional)** — the run focuses on a workspace sub-folder:
|
|
134
|
+
its `.halo/INSTRUCTIONS.md` chain joins the prompt and the prompt names the
|
|
135
|
+
working directory (file / shell paths still start at the workspace root).
|
|
136
|
+
Relative to the workspace or absolute; must be an existing directory inside
|
|
137
|
+
it. Applies on every run, including runs that resume the job's session. On
|
|
138
|
+
`update`, `--dir ""` goes back to the workspace root. A folder deleted later
|
|
139
|
+
makes each run fail with `folder not found: …`.
|
|
140
|
+
|
|
115
141
|
**Active window (`--active-from` / `--active-until`, optional, recurring
|
|
116
142
|
jobs only)** — the schedule fires only inside `[from, until)`; fires outside
|
|
117
143
|
it are skipped silently (no run recorded). "Run now" ignores the window.
|
|
@@ -220,6 +246,17 @@ shell_exec: python3 ~/.halo/global/skills/cron/manage-cron.py update <id> \
|
|
|
220
246
|
--schedule "0 10 * * 1"
|
|
221
247
|
```
|
|
222
248
|
|
|
249
|
+
**Stateless job focused on a sub-folder:**
|
|
250
|
+
```bash
|
|
251
|
+
shell_exec: python3 ~/.halo/global/skills/cron/manage-cron.py create \
|
|
252
|
+
--label "Daily market snapshot" \
|
|
253
|
+
--workspace /home/ubuntu/sa-agent \
|
|
254
|
+
--dir reports/market \
|
|
255
|
+
--stateless \
|
|
256
|
+
--prompt "Fetch today's index closes and write the summary." \
|
|
257
|
+
--schedule "0 16 * * 1-5"
|
|
258
|
+
```
|
|
259
|
+
|
|
223
260
|
**Pause / unpause (no end date in mind):**
|
|
224
261
|
```bash
|
|
225
262
|
shell_exec: python3 ~/.halo/global/skills/cron/manage-cron.py disable <id>
|