@turmind/halo 0.2.5 → 1.0.0
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/README.md +5 -5
- package/admin-out/404.html +1 -1
- package/admin-out/_next/static/chunks/212-e217e00ce6cc2bdc.js +1 -0
- package/admin-out/_next/static/chunks/397-fc5a406d80d46ca7.js +1 -0
- package/admin-out/_next/static/chunks/app/page-635d9668d47a2b9e.js +1 -0
- package/admin-out/_next/static/css/57622245d7724ee0.css +3 -0
- package/admin-out/index.html +1 -1
- package/admin-out/index.txt +5 -5
- package/bundled-docs/design/agent.md +12 -2
- package/bundled-docs/design/cron.md +16 -3
- package/bundled-docs/design/goal-mode.md +141 -0
- package/bundled-docs/design/session.md +25 -0
- package/bundled-docs/design/ws.md +34 -3
- package/bundled-docs/dev/add-model-provider.md +17 -9
- package/bundled-docs/dev/api.md +27 -1
- package/bundled-docs/dev/deploy.md +4 -8
- package/bundled-docs/dev/desktop-packaging.md +20 -0
- package/bundled-docs/dev/env.md +10 -5
- package/bundled-docs/dev/tools.md +60 -4
- package/bundled-docs/guide/cli.md +3 -2
- package/bundled-docs/requirements/chat.md +9 -0
- package/bundled-docs/requirements/command.md +12 -1
- package/dist/index.js +2371 -1254
- package/package.json +1 -1
- package/templates/agents/goal/AGENT.md +165 -0
- package/templates/agents/goal/agent.yaml +34 -0
- package/templates/models/anthropic.yaml +1 -0
- package/templates/models/aws-bedrock-claude-invoke.yaml +7 -0
- package/templates/models/aws-bedrock-mantle.yaml +51 -11
- package/templates/models/deepseek.yaml +2 -0
- package/templates/models/doubao.yaml +4 -0
- package/templates/models/hunyuan.yaml +1 -0
- package/templates/models/kimi.yaml +49 -13
- package/templates/models/mimo-token-plan-china.yaml +2 -0
- package/templates/models/minimax.yaml +37 -5
- package/templates/models/openai.yaml +1 -0
- package/templates/models/qwen.yaml +2 -0
- package/templates/schema.sql +3 -1
- package/admin-out/_next/static/chunks/212-170855bed19f67f3.js +0 -1
- package/admin-out/_next/static/chunks/307-d7a99f9a4a436ec3.js +0 -1
- package/admin-out/_next/static/chunks/app/page-96fce52cfe97cc9b.js +0 -1
- package/admin-out/_next/static/css/6f53bae6f1952300.css +0 -3
- /package/admin-out/_next/static/{P60h_WmaPcXYhIabUg6I2 → gzvax-Lg7K157j0rQJHje}/_buildManifest.js +0 -0
- /package/admin-out/_next/static/{P60h_WmaPcXYhIabUg6I2 → gzvax-Lg7K157j0rQJHje}/_ssgManifest.js +0 -0
package/package.json
CHANGED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# Goal (`goal`)
|
|
2
|
+
|
|
3
|
+
You are the judge + dispatcher of a goal loop. `/goal create` bound you
|
|
4
|
+
to one **worker session** (W). You never do the work yourself — you
|
|
5
|
+
define the contract, dispatch work orders to W, verify its round
|
|
6
|
+
reports with evidence you reproduce yourself, and decide what happens
|
|
7
|
+
next. The platform (not you) counts rounds, enforces caps, and revokes
|
|
8
|
+
your dispatch edge when a guardrail trips.
|
|
9
|
+
|
|
10
|
+
**Always start by calling `goal_context`** — at the beginning of every
|
|
11
|
+
conversation and after any `[goal-mode]` platform nudge. It tells you
|
|
12
|
+
the binding (worker id, goal dir, spec path, caps, status, counters);
|
|
13
|
+
during intake it also embeds `workerRecent` — the worker's recent
|
|
14
|
+
dialogue — for scene seeding.
|
|
15
|
+
|
|
16
|
+
## Your tools
|
|
17
|
+
|
|
18
|
+
- `goal_context` — read the binding + counters. Call first, always.
|
|
19
|
+
- `goal_attach` — the hinge from intake to loop. Once, after the user
|
|
20
|
+
confirms the contract and you've written GOAL_SPEC.md.
|
|
21
|
+
- `goal_decide` — record a delegated decision BEFORE relaying it.
|
|
22
|
+
Capped at 5 per goal; at the cap, park the question to the user.
|
|
23
|
+
- `goal_finish` — final acceptance. Only when your own evidence shows
|
|
24
|
+
every criterion passing.
|
|
25
|
+
- `query_session` — send a work order (or relayed answer / steering
|
|
26
|
+
update) to W. Only W is reachable. Revoked in code on halt/pause.
|
|
27
|
+
- `get_session_output` — full latest-turn output of W or any session in
|
|
28
|
+
its subtree (round reports are truncated; pull the rest here).
|
|
29
|
+
- File/shell tools — for intake seeding, spec writing, and **evidence
|
|
30
|
+
reproduction** (verification commands only; every command you run
|
|
31
|
+
must be listed in your verdict).
|
|
32
|
+
|
|
33
|
+
## Phase 1 — Intake
|
|
34
|
+
|
|
35
|
+
`/goal create` starts a conversation with the user. Your job here:
|
|
36
|
+
|
|
37
|
+
1. Read `workerRecent` from `goal_context` for scene — the worker's
|
|
38
|
+
last user/assistant exchanges (`workerMessageCount` tells you how
|
|
39
|
+
much history exists beyond it). What has the user been doing? Don't
|
|
40
|
+
make them re-explain. Never parse session JSON files yourself.
|
|
41
|
+
2. Converse until the goal is a **contract**: outcome, acceptance
|
|
42
|
+
criteria (each one mechanically checkable — a command + expected
|
|
43
|
+
result, a file that must exist, a metric threshold), explicit
|
|
44
|
+
non-goals, and any decision policy ("what may you decide for me?").
|
|
45
|
+
3. Write `GOAL_SPEC.md` to the goal dir (path from `goal_context`).
|
|
46
|
+
Structure: `## Outcome`, `## Acceptance criteria` (numbered,
|
|
47
|
+
checkable), `## Non-goals`, `## Decision policy`.
|
|
48
|
+
4. Ask the user to confirm. In that same confirmation message, state
|
|
49
|
+
the current default caps as a standing step (not only if asked):
|
|
50
|
+
read them from `goal_context`'s `caps` and say e.g. "Default caps:
|
|
51
|
+
N rounds / X hours / no token budget — want to adjust any before we
|
|
52
|
+
start?" so the user can pin overrides now instead of discovering a
|
|
53
|
+
limit mid-run. On an explicit go-ahead ("OK, go", "开始"), call
|
|
54
|
+
`goal_attach` with the round-1 kickoff work order. Never attach
|
|
55
|
+
without confirmation; never attach twice.
|
|
56
|
+
|
|
57
|
+
Cap overrides (rounds / hours / token budget) pinned during intake go
|
|
58
|
+
in `goal_attach`'s `caps` argument. Omitted fields keep the defaults
|
|
59
|
+
you reported from `goal_context`.
|
|
60
|
+
|
|
61
|
+
## Phase 2 — The loop
|
|
62
|
+
|
|
63
|
+
Round reports arrive as messages headed
|
|
64
|
+
`[Goal round N/cap · elapsed … · no-progress k/3]`. For each:
|
|
65
|
+
|
|
66
|
+
**Judge — evidence, not testimony.** The report has dual evidentiary
|
|
67
|
+
status:
|
|
68
|
+
|
|
69
|
+
- For "**is the task done**": the report is a **claim list**. Accept no
|
|
70
|
+
claim without evidence you reproduced yourself — command + exit code,
|
|
71
|
+
file content, diff. "The worker said tests pass" is not evidence;
|
|
72
|
+
`pnpm test → exit 0` that YOU ran is. Run verification commands only;
|
|
73
|
+
list every command in the verdict.
|
|
74
|
+
- For "**is the worker malfunctioning**": the report **is** first-hand
|
|
75
|
+
evidence — an `Error:`-shaped report, malformed output, or an empty
|
|
76
|
+
round is a symptom to diagnose, not a claim to verify.
|
|
77
|
+
|
|
78
|
+
**Verdict shape** — write this as your working notes each round:
|
|
79
|
+
|
|
80
|
+
```markdown
|
|
81
|
+
---
|
|
82
|
+
pass: false
|
|
83
|
+
worker_fault: config # absent | transient | config
|
|
84
|
+
---
|
|
85
|
+
## Evidence
|
|
86
|
+
- ran `pnpm --filter @turmind/halo-core coverage` → exit 1 (74.2% < 80%)
|
|
87
|
+
- report claimed "added git-manager tests" — verified: diff shows
|
|
88
|
+
git-manager.test.ts +190 lines. True.
|
|
89
|
+
## Missing
|
|
90
|
+
- git-manager.ts 41% → 80%: uncovered = push-failure branch (L210-247)
|
|
91
|
+
- workspace.ts 68% → 80%: resolveWorkspace symlink branch untested
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
- **Missing is a work order, not a review.** Every item must be
|
|
95
|
+
actionable enough to paste into the next dispatch. "Overall quality
|
|
96
|
+
needs improvement" is banned.
|
|
97
|
+
- **`worker_fault` triage**: `transient` (one-off glitch — re-kick with
|
|
98
|
+
the same order) vs `config` (invalid API key, persistently malformed
|
|
99
|
+
tool use — do NOT burn rounds re-kicking; park with a diagnosis to
|
|
100
|
+
the user).
|
|
101
|
+
|
|
102
|
+
**Dispatch.** Not done → `query_session` to W with the Missing list as
|
|
103
|
+
the next work order. Include in every work order: "if you hit a genuine
|
|
104
|
+
fork you cannot resolve from the spec, stop and end your reply with
|
|
105
|
+
`<NEED_INPUT>` followed by the question." Done → verify every
|
|
106
|
+
acceptance criterion once more, `goal_finish`, then write the final
|
|
107
|
+
report (see below).
|
|
108
|
+
|
|
109
|
+
**Semantic no-progress.** The code breaker only catches byte-identical
|
|
110
|
+
reports. If the Missing list hasn't materially changed for 2 rounds, or
|
|
111
|
+
the diff is empty while the worker claims progress, change strategy:
|
|
112
|
+
decompose differently, narrow the order to one criterion, or park to
|
|
113
|
+
the user with your diagnosis. Don't re-send the same order a third time.
|
|
114
|
+
|
|
115
|
+
## Question-stops (`<NEED_INPUT>`)
|
|
116
|
+
|
|
117
|
+
A report containing `<NEED_INPUT>` arrives with a question-stop header
|
|
118
|
+
(round counter unchanged). Triage:
|
|
119
|
+
|
|
120
|
+
- **Answerable from GOAL_SPEC + scene** → answer it yourself: call
|
|
121
|
+
`goal_decide` (records `decision-<n>.md`, counts against the cap of
|
|
122
|
+
5), then relay the answer to W via `query_session`.
|
|
123
|
+
- **A genuine user-sovereignty fork** (spend money, delete data,
|
|
124
|
+
contradicts the spec, taste calls the spec doesn't settle) → park:
|
|
125
|
+
write the question as your reply — it reaches the user through the
|
|
126
|
+
chat surface. When their answer arrives as a normal message, fold it
|
|
127
|
+
into GOAL_SPEC.md (append, don't rewrite history) and resume via
|
|
128
|
+
`query_session`.
|
|
129
|
+
|
|
130
|
+
**Missed-marker backstop**: a round report that ends in an unanswered
|
|
131
|
+
question is a question-stop even without the marker. Treat it as one.
|
|
132
|
+
|
|
133
|
+
## Steering, pause, restart
|
|
134
|
+
|
|
135
|
+
- **User messages mid-run are steering.** Fold durable changes into
|
|
136
|
+
GOAL_SPEC.md (append a `## Steering` entry) and relay via the next
|
|
137
|
+
work order. Never let steering bypass the spec — the spec is the
|
|
138
|
+
contract, and the platform hashes it (your appends via goal_attach's
|
|
139
|
+
protocol are fine; the hash is stamped at attach and verified against
|
|
140
|
+
tampering by OTHERS — you must not edit the spec after attach, use
|
|
141
|
+
decision files and work orders instead).
|
|
142
|
+
- **Paused** (`/goal pause`): you're stopped too. On `/goal resume` you
|
|
143
|
+
get a nudge — re-read the spec and your transcript (the user may have
|
|
144
|
+
changed things manually), then re-dispatch.
|
|
145
|
+
- **Server restart**: same nudge protocol. Counters survived in the db;
|
|
146
|
+
the in-flight round did not. Re-dispatch the current work order.
|
|
147
|
+
|
|
148
|
+
## Halt
|
|
149
|
+
|
|
150
|
+
A `[Goal HALTED: …]` header means a guardrail tripped in code and your
|
|
151
|
+
dispatch edge is **revoked** — `query_session` will be rejected. Do not
|
|
152
|
+
fight it. Write the halt diagnosis as your reply: which cap tripped,
|
|
153
|
+
the last Missing list, what you'd try next, and how to restart cleanly
|
|
154
|
+
(`/goal clear` then a fresh `/goal create`, or `/goal resume` where
|
|
155
|
+
applicable).
|
|
156
|
+
|
|
157
|
+
## Final report
|
|
158
|
+
|
|
159
|
+
After `goal_finish`, your reply is the user's receipt. It MUST contain:
|
|
160
|
+
|
|
161
|
+
1. Outcome vs. the acceptance criteria — each criterion with the
|
|
162
|
+
evidence command + result you verified it by.
|
|
163
|
+
2. **Every delegated decision** ("I made these N calls for you"), from
|
|
164
|
+
your `decision-<n>.md` files.
|
|
165
|
+
3. Rounds used / elapsed, and anything left deliberately out of scope.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Goal
|
|
2
|
+
description: Goal-mode judge + dispatcher. Runs the intake conversation, writes GOAL_SPEC.md, then drives the bound worker session round by round until the acceptance criteria pass. Hidden from rosters; created only by /goal create.
|
|
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 goal-mode judge and dispatcher. A user bound you to a worker
|
|
15
|
+
session via /goal. You run the intake conversation, write GOAL_SPEC.md,
|
|
16
|
+
attach with goal_attach, then judge every round report with evidence you
|
|
17
|
+
reproduce yourself and dispatch the next work order via query_session. The
|
|
18
|
+
platform enforces round caps, wall time, and no-progress in code at the
|
|
19
|
+
delivery point — your job is verdict quality. See AGENT.md for the full
|
|
20
|
+
discipline.
|
|
21
|
+
context:
|
|
22
|
+
maxTokens: 200000
|
|
23
|
+
compressAt: 0.8
|
|
24
|
+
tools:
|
|
25
|
+
- file_read
|
|
26
|
+
- view_image
|
|
27
|
+
- file_write
|
|
28
|
+
- file_edit
|
|
29
|
+
- file_list
|
|
30
|
+
- shell_exec
|
|
31
|
+
- grep
|
|
32
|
+
- glob
|
|
33
|
+
- web_fetch
|
|
34
|
+
skills: []
|
|
@@ -38,6 +38,7 @@ models:
|
|
|
38
38
|
- id: global.anthropic.claude-fable-5
|
|
39
39
|
displayName: Claude Fable 5
|
|
40
40
|
maxOutputTokens: 128000
|
|
41
|
+
contextWindow: 1000000
|
|
41
42
|
capabilities:
|
|
42
43
|
image: true
|
|
43
44
|
video: false
|
|
@@ -65,6 +66,7 @@ models:
|
|
|
65
66
|
- id: global.anthropic.claude-sonnet-4-6
|
|
66
67
|
displayName: Claude Sonnet 4.6
|
|
67
68
|
maxOutputTokens: 64000
|
|
69
|
+
contextWindow: 1000000
|
|
68
70
|
capabilities:
|
|
69
71
|
image: true
|
|
70
72
|
video: false
|
|
@@ -91,6 +93,7 @@ models:
|
|
|
91
93
|
- id: global.anthropic.claude-sonnet-5
|
|
92
94
|
displayName: Claude Sonnet 5
|
|
93
95
|
maxOutputTokens: 64000
|
|
96
|
+
contextWindow: 1000000
|
|
94
97
|
capabilities:
|
|
95
98
|
image: true
|
|
96
99
|
video: false
|
|
@@ -117,6 +120,7 @@ models:
|
|
|
117
120
|
- id: global.anthropic.claude-opus-4-6-v1
|
|
118
121
|
displayName: Claude Opus 4.6
|
|
119
122
|
maxOutputTokens: 128000
|
|
123
|
+
contextWindow: 1000000
|
|
120
124
|
capabilities:
|
|
121
125
|
image: true
|
|
122
126
|
video: false
|
|
@@ -139,6 +143,7 @@ models:
|
|
|
139
143
|
- id: global.anthropic.claude-opus-4-7
|
|
140
144
|
displayName: Claude Opus 4.7
|
|
141
145
|
maxOutputTokens: 128000
|
|
146
|
+
contextWindow: 1000000
|
|
142
147
|
capabilities:
|
|
143
148
|
image: true
|
|
144
149
|
video: false
|
|
@@ -162,6 +167,7 @@ models:
|
|
|
162
167
|
- id: global.anthropic.claude-opus-4-8
|
|
163
168
|
displayName: Claude Opus 4.8
|
|
164
169
|
maxOutputTokens: 128000
|
|
170
|
+
contextWindow: 1000000
|
|
165
171
|
capabilities:
|
|
166
172
|
image: true
|
|
167
173
|
video: false
|
|
@@ -187,6 +193,7 @@ models:
|
|
|
187
193
|
- id: global.anthropic.claude-haiku-4-5-20251001-v1:0
|
|
188
194
|
displayName: Claude Haiku 4.5
|
|
189
195
|
maxOutputTokens: 64000
|
|
196
|
+
contextWindow: 200000
|
|
190
197
|
capabilities:
|
|
191
198
|
image: true
|
|
192
199
|
video: false
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
id: aws-bedrock-mantle
|
|
2
2
|
displayName: AWS Bedrock Mantle (OpenAI GPT-5.x)
|
|
3
3
|
displayName_zh: AWS Bedrock Mantle(OpenAI GPT-5.x)
|
|
4
|
-
description: OpenAI GPT-5.
|
|
5
|
-
description_zh: 通过 Bedrock Mantle 端点调用 OpenAI GPT-5.
|
|
4
|
+
description: OpenAI GPT-5.6 (Sol / Terra / Luna) on Amazon Bedrock via the bedrock-mantle endpoint (OpenAI Responses API only — not Converse/InvokeModel).
|
|
5
|
+
description_zh: 通过 Bedrock Mantle 端点调用 OpenAI GPT-5.6(Sol / Terra / Luna)(仅 OpenAI Responses API,不支持 Converse/InvokeModel)。
|
|
6
6
|
# Mantle is a distinct endpoint from bedrock-runtime; the OpenAI surface lives
|
|
7
|
-
# under /openai/v1.
|
|
8
|
-
# but
|
|
7
|
+
# under /openai/v1. Regions: us-east-2 serves ALL models below; us-west-2
|
|
8
|
+
# additionally serves Terra / Luna but NOT Sol. We ship the us-east-2
|
|
9
|
+
# endpoint that covers everything.
|
|
9
10
|
defaultEndpoint: https://bedrock-mantle.us-east-2.api.aws/openai/v1
|
|
10
11
|
endpointPresets:
|
|
11
12
|
- https://bedrock-mantle.us-east-2.api.aws/openai/v1
|
|
12
13
|
|
|
13
|
-
defaultModelId: openai.gpt-5.
|
|
14
|
+
defaultModelId: openai.gpt-5.6-sol
|
|
14
15
|
|
|
15
16
|
# Auth: a Bedrock long-term API key passed as a Bearer token. Generate at
|
|
16
17
|
# console → Bedrock → API keys → long-term. The default placeholder reads the
|
|
@@ -30,11 +31,19 @@ secrets:
|
|
|
30
31
|
# is sent and there's no 1h option — single 5m preset reflects reality, the
|
|
31
32
|
# runtime never writes cache control, it only reads cached_tokens back.
|
|
32
33
|
# - thinking: adaptive via reasoning.effort = low|medium|high (no budget_tokens
|
|
33
|
-
# mode; xhigh/max would be mapped down to high by the runtime).
|
|
34
|
+
# mode; xhigh/max would be mapped down to high by the runtime). Note: Mantle
|
|
35
|
+
# never surfaces reasoning summaries — output[].reasoning.summary stays empty
|
|
36
|
+
# even with reasoning.summary=detailed (verified against the live endpoint;
|
|
37
|
+
# reasoning_tokens > 0 proves thinking runs). So no thinking text is shown in
|
|
38
|
+
# the UI; that's upstream behavior, not a parsing gap.
|
|
39
|
+
# - maxOutputTokens for the 5.6 variants: not disclosed in the 5.6 model card —
|
|
40
|
+
# conservatively carried over from GPT-5.5's 64000.
|
|
34
41
|
models:
|
|
35
|
-
|
|
36
|
-
|
|
42
|
+
# GPT-5.6 flagship.
|
|
43
|
+
- id: openai.gpt-5.6-sol
|
|
44
|
+
displayName: GPT-5.6 Sol
|
|
37
45
|
maxOutputTokens: 64000
|
|
46
|
+
contextWindow: 272000
|
|
38
47
|
capabilities:
|
|
39
48
|
image: true
|
|
40
49
|
video: false
|
|
@@ -61,9 +70,11 @@ models:
|
|
|
61
70
|
- { value: medium, label: Medium }
|
|
62
71
|
- { value: high, label: High }
|
|
63
72
|
|
|
64
|
-
-
|
|
65
|
-
|
|
73
|
+
# GPT-5.6 balanced — official line: GPT-5.5-level performance at half the price.
|
|
74
|
+
- id: openai.gpt-5.6-terra
|
|
75
|
+
displayName: GPT-5.6 Terra
|
|
66
76
|
maxOutputTokens: 64000
|
|
77
|
+
contextWindow: 272000
|
|
67
78
|
capabilities:
|
|
68
79
|
image: true
|
|
69
80
|
video: false
|
|
@@ -80,7 +91,36 @@ models:
|
|
|
80
91
|
- { value: low, label: Low }
|
|
81
92
|
- { value: medium, label: Medium }
|
|
82
93
|
- { value: high, label: High }
|
|
83
|
-
# See GPT-5.
|
|
94
|
+
# See GPT-5.6 Sol above — final-answer length, default low, per-agent overridable.
|
|
95
|
+
verbosity:
|
|
96
|
+
default: low
|
|
97
|
+
presets:
|
|
98
|
+
- { value: low, label: Low }
|
|
99
|
+
- { value: medium, label: Medium }
|
|
100
|
+
- { value: high, label: High }
|
|
101
|
+
|
|
102
|
+
# GPT-5.6 fast / low-cost.
|
|
103
|
+
- id: openai.gpt-5.6-luna
|
|
104
|
+
displayName: GPT-5.6 Luna
|
|
105
|
+
maxOutputTokens: 64000
|
|
106
|
+
contextWindow: 272000
|
|
107
|
+
capabilities:
|
|
108
|
+
image: true
|
|
109
|
+
video: false
|
|
110
|
+
audio: false
|
|
111
|
+
promptCaching:
|
|
112
|
+
default: 5m
|
|
113
|
+
ttlPresets:
|
|
114
|
+
- { value: 5m, label: 5min }
|
|
115
|
+
thinking:
|
|
116
|
+
mode: adaptive
|
|
117
|
+
defaultEnabled: true
|
|
118
|
+
default: medium
|
|
119
|
+
effortPresets:
|
|
120
|
+
- { value: low, label: Low }
|
|
121
|
+
- { value: medium, label: Medium }
|
|
122
|
+
- { value: high, label: High }
|
|
123
|
+
# See GPT-5.6 Sol above — final-answer length, default low, per-agent overridable.
|
|
84
124
|
verbosity:
|
|
85
125
|
default: low
|
|
86
126
|
presets:
|
|
@@ -22,6 +22,7 @@ models:
|
|
|
22
22
|
- id: deepseek-v4-pro
|
|
23
23
|
displayName: DeepSeek V4 Pro
|
|
24
24
|
maxOutputTokens: 65536
|
|
25
|
+
contextWindow: 1000000
|
|
25
26
|
capabilities:
|
|
26
27
|
image: false
|
|
27
28
|
video: false
|
|
@@ -43,6 +44,7 @@ models:
|
|
|
43
44
|
- id: deepseek-v4-flash
|
|
44
45
|
displayName: DeepSeek V4 Flash
|
|
45
46
|
maxOutputTokens: 65536
|
|
47
|
+
contextWindow: 1000000
|
|
46
48
|
capabilities:
|
|
47
49
|
image: false
|
|
48
50
|
video: false
|
|
@@ -40,6 +40,7 @@ models:
|
|
|
40
40
|
- id: doubao-seed-2-0-pro-260215
|
|
41
41
|
displayName: Doubao Seed 2.0 Pro
|
|
42
42
|
maxOutputTokens: 16384
|
|
43
|
+
contextWindow: 256000
|
|
43
44
|
capabilities:
|
|
44
45
|
image: false
|
|
45
46
|
video: false
|
|
@@ -67,6 +68,7 @@ models:
|
|
|
67
68
|
- id: doubao-seed-2-0-lite-260428
|
|
68
69
|
displayName: Doubao Seed 2.0 Lite
|
|
69
70
|
maxOutputTokens: 16384
|
|
71
|
+
contextWindow: 256000
|
|
70
72
|
capabilities:
|
|
71
73
|
image: false
|
|
72
74
|
video: false
|
|
@@ -91,6 +93,7 @@ models:
|
|
|
91
93
|
- id: doubao-seed-2-0-mini-260428
|
|
92
94
|
displayName: Doubao Seed 2.0 Mini
|
|
93
95
|
maxOutputTokens: 16384
|
|
96
|
+
contextWindow: 256000
|
|
94
97
|
capabilities:
|
|
95
98
|
image: false
|
|
96
99
|
video: false
|
|
@@ -115,6 +118,7 @@ models:
|
|
|
115
118
|
- id: doubao-seed-2-0-code-preview-260215
|
|
116
119
|
displayName: Doubao Seed 2.0 Code Preview
|
|
117
120
|
maxOutputTokens: 16384
|
|
121
|
+
contextWindow: 256000
|
|
118
122
|
capabilities:
|
|
119
123
|
image: false
|
|
120
124
|
video: false
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
id: kimi
|
|
2
2
|
displayName: Kimi (Moonshot AI)
|
|
3
3
|
displayName_zh: Kimi(月之暗面)
|
|
4
|
-
description: Kimi K2.6 via OpenAI-compatible chat completions API
|
|
5
|
-
description_zh: Kimi K2.6,通过 OpenAI 兼容的 chat completions API 调用
|
|
4
|
+
description: Kimi K3 / K2.6 via OpenAI-compatible chat completions API
|
|
5
|
+
description_zh: Kimi K3 / K2.6,通过 OpenAI 兼容的 chat completions API 调用
|
|
6
6
|
defaultEndpoint: https://api.moonshot.cn/v1
|
|
7
7
|
|
|
8
8
|
secrets:
|
|
@@ -12,18 +12,53 @@ secrets:
|
|
|
12
12
|
default: <<KIMI_API_KEY>>
|
|
13
13
|
secret: true
|
|
14
14
|
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
15
|
+
# Capability notes (per-model specifics live on each entry):
|
|
16
|
+
# - Caching is automatic on both models; cached_tokens shows up reliably
|
|
17
|
+
# from turn 2 once the prompt is long enough (~2K+).
|
|
18
|
+
# - Thinking control is TWO separate mechanisms depending on generation:
|
|
19
|
+
# K3 uses the top-level `reasoning_effort` field (enum currently only
|
|
20
|
+
# "max" per the official OpenAPI schema); K2.x uses the
|
|
21
|
+
# `thinking:{type:'enabled'|'disabled'}` toggle and has NO
|
|
22
|
+
# reasoning_effort field at all (OpenAPI marks it unsupported for
|
|
23
|
+
# k2.6). An earlier comment here claiming K2.6 accepts
|
|
24
|
+
# reasoning_effort { minimal, low, medium, high } was wrong.
|
|
22
25
|
models:
|
|
26
|
+
- id: kimi-k3
|
|
27
|
+
displayName: Kimi K3
|
|
28
|
+
# Official default output cap; the model can go up to 1M but we don't max out.
|
|
29
|
+
maxOutputTokens: 131072
|
|
30
|
+
contextWindow: 1048576
|
|
31
|
+
capabilities:
|
|
32
|
+
# K3 itself also supports video input, but Halo has no video upload
|
|
33
|
+
# path yet — keep video:false until one exists. Image input is
|
|
34
|
+
# base64-only (public URLs are not supported); kimi-agent happens to
|
|
35
|
+
# send only base64 data URLs, so it's naturally compatible.
|
|
36
|
+
image: true
|
|
37
|
+
video: false
|
|
38
|
+
audio: false
|
|
39
|
+
promptCaching:
|
|
40
|
+
# Automatic caching, hint-only (prompt_cache_key) — same as K2.6.
|
|
41
|
+
default: 5m
|
|
42
|
+
ttlPresets:
|
|
43
|
+
- { value: 5m, label: 5min }
|
|
44
|
+
thinking:
|
|
45
|
+
# K3 thinking is ALWAYS ON server-side — there is no off switch.
|
|
46
|
+
# The only knob is the top-level `reasoning_effort` field, whose
|
|
47
|
+
# enum currently contains just "max" (confirmed in the official
|
|
48
|
+
# OpenAPI schema). Do NOT send the K2.x `thinking` parameter to K3.
|
|
49
|
+
defaultEnabled: true
|
|
50
|
+
default: max
|
|
51
|
+
effortPresets:
|
|
52
|
+
- { value: max, label: Max }
|
|
53
|
+
|
|
23
54
|
- id: kimi-k2.6
|
|
24
55
|
displayName: Kimi K2.6
|
|
25
56
|
maxOutputTokens: 32768
|
|
57
|
+
contextWindow: 262144
|
|
26
58
|
capabilities:
|
|
59
|
+
# Verified 2026-05-27 via live probes: kimi-k2.6 returns "prepare
|
|
60
|
+
# image failed" on image_url blocks despite past docs claiming
|
|
61
|
+
# vision — keep image:false.
|
|
27
62
|
image: false
|
|
28
63
|
video: false
|
|
29
64
|
audio: false
|
|
@@ -32,10 +67,11 @@ models:
|
|
|
32
67
|
ttlPresets:
|
|
33
68
|
- { value: 5m, label: 5min }
|
|
34
69
|
thinking:
|
|
70
|
+
# K2.6 has NO reasoning_effort field — its only reasoning control is
|
|
71
|
+
# the top-level `thinking:{type:'enabled'|'disabled'}` on/off toggle.
|
|
72
|
+
# The effort label below is Halo-side only (doubao precedent):
|
|
73
|
+
# kimi-agent just maps enabled → omit / disabled → thinking:disabled.
|
|
35
74
|
defaultEnabled: true
|
|
36
75
|
default: medium
|
|
37
76
|
effortPresets:
|
|
38
|
-
- { value:
|
|
39
|
-
- { value: low, label: Low }
|
|
40
|
-
- { value: medium, label: Medium }
|
|
41
|
-
- { value: high, label: High }
|
|
77
|
+
- { value: medium, label: On }
|
|
@@ -19,6 +19,7 @@ models:
|
|
|
19
19
|
- id: mimo-v2.5-pro
|
|
20
20
|
displayName: MiMo v2.5 Pro
|
|
21
21
|
maxOutputTokens: 131072
|
|
22
|
+
contextWindow: 1048576
|
|
22
23
|
capabilities:
|
|
23
24
|
image: false
|
|
24
25
|
video: false
|
|
@@ -41,6 +42,7 @@ models:
|
|
|
41
42
|
- id: mimo-v2.5
|
|
42
43
|
displayName: MiMo v2.5
|
|
43
44
|
maxOutputTokens: 131072
|
|
45
|
+
contextWindow: 1048576
|
|
44
46
|
capabilities:
|
|
45
47
|
image: true
|
|
46
48
|
video: false
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
id: minimax
|
|
2
2
|
displayName: MiniMax
|
|
3
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 调用
|
|
4
|
+
description: MiniMax M3 / M2.7 family via the Anthropic-compatible Messages API
|
|
5
|
+
description_zh: MiniMax M3 / M2.7 系列,通过 Anthropic 兼容的 Messages API 调用
|
|
6
6
|
defaultEndpoint: https://api.minimaxi.com/anthropic
|
|
7
|
-
defaultModelId: MiniMax-
|
|
7
|
+
defaultModelId: MiniMax-M3
|
|
8
8
|
|
|
9
9
|
secrets:
|
|
10
10
|
- key: api_key
|
|
@@ -16,11 +16,12 @@ secrets:
|
|
|
16
16
|
# Capability notes for MiniMax M2.7 family — verified against
|
|
17
17
|
# platform.minimaxi.com/docs/api-reference/text-anthropic-api on 2026-05-26
|
|
18
18
|
# plus live probes against MiniMax-M2.7:
|
|
19
|
-
# - image / video / audio: documented as not supported
|
|
19
|
+
# - image / video / audio: documented as not supported (M2.x; M3 differs —
|
|
20
|
+
# see its entry)
|
|
20
21
|
# - thinking: forced on — `thinking:{type:'disabled'}` and omitting the
|
|
21
22
|
# field both still produce thinking blocks; only budget_tokens influences
|
|
22
23
|
# output. So we don't expose an off toggle.
|
|
23
|
-
# - cache_control: both models support caching. Doc says TTL is 5min,
|
|
24
|
+
# - cache_control: both M2.7 models support caching. Doc says TTL is 5min,
|
|
24
25
|
# refreshing automatically on each hit. cache_control:{type:'ephemeral'}
|
|
25
26
|
# is the only shape — no longer-TTL knob exposed by MiniMax.
|
|
26
27
|
# - MiniMax-M2.7-highspeed: turn 1 reports cache_creation_input_tokens=N,
|
|
@@ -35,9 +36,39 @@ secrets:
|
|
|
35
36
|
# observed to truncate the run with stop=max_tokens before any thinking
|
|
36
37
|
# completes — leaving it out of the preset list. medium/high are safe.
|
|
37
38
|
models:
|
|
39
|
+
- id: MiniMax-M3
|
|
40
|
+
displayName: MiniMax M3
|
|
41
|
+
# Official recommended value; hard cap is 524288 but we don't max out.
|
|
42
|
+
maxOutputTokens: 131072
|
|
43
|
+
contextWindow: 1000000
|
|
44
|
+
capabilities:
|
|
45
|
+
# M3 also supports video input, but Halo has no video upload path yet —
|
|
46
|
+
# keep video:false until one exists. Image rides the Anthropic-compatible
|
|
47
|
+
# API's standard image blocks; minimax-agent passes this.messages
|
|
48
|
+
# straight through, so no agent code change is needed.
|
|
49
|
+
image: true
|
|
50
|
+
video: false
|
|
51
|
+
audio: false
|
|
52
|
+
# No promptCaching key on purpose: both official caching docs agree
|
|
53
|
+
# that explicit caching (cache_control) is only supported on the
|
|
54
|
+
# M2.7/M2.5/M2.1/M2 families — NOT M3. M3 only has passive automatic
|
|
55
|
+
# caching (no parameter; usage reports cache_read, which the agent
|
|
56
|
+
# already reads). Omitting the key keeps the UI toggle away so users
|
|
57
|
+
# can't configure the unsupported M3+cache_control combination.
|
|
58
|
+
thinking:
|
|
59
|
+
# M3 thinking is off by default; enabling sends
|
|
60
|
+
# thinking:{type:'adaptive'} — no low/medium/high grading and no
|
|
61
|
+
# budget_tokens. This is the opposite of M2.x's manual+budget scheme.
|
|
62
|
+
mode: adaptive
|
|
63
|
+
defaultEnabled: true
|
|
64
|
+
default: adaptive
|
|
65
|
+
effortPresets:
|
|
66
|
+
- { value: adaptive, label: Adaptive }
|
|
67
|
+
|
|
38
68
|
- id: MiniMax-M2.7
|
|
39
69
|
displayName: MiniMax M2.7
|
|
40
70
|
maxOutputTokens: 16384
|
|
71
|
+
contextWindow: 204800
|
|
41
72
|
capabilities:
|
|
42
73
|
image: false
|
|
43
74
|
video: false
|
|
@@ -62,6 +93,7 @@ models:
|
|
|
62
93
|
- id: MiniMax-M2.7-highspeed
|
|
63
94
|
displayName: MiniMax M2.7 Highspeed
|
|
64
95
|
maxOutputTokens: 16384
|
|
96
|
+
contextWindow: 204800
|
|
65
97
|
capabilities:
|
|
66
98
|
image: false
|
|
67
99
|
video: false
|
|
@@ -38,6 +38,7 @@ models:
|
|
|
38
38
|
- id: qwen3.7-max
|
|
39
39
|
displayName: Qwen3.7 Max
|
|
40
40
|
maxOutputTokens: 16384
|
|
41
|
+
contextWindow: 1000000
|
|
41
42
|
capabilities:
|
|
42
43
|
image: false
|
|
43
44
|
video: false
|
|
@@ -60,6 +61,7 @@ models:
|
|
|
60
61
|
- id: qwen3.6-plus
|
|
61
62
|
displayName: Qwen3.6 Plus
|
|
62
63
|
maxOutputTokens: 16384
|
|
64
|
+
contextWindow: 1000000
|
|
63
65
|
capabilities:
|
|
64
66
|
image: true
|
|
65
67
|
video: false
|
package/templates/schema.sql
CHANGED
|
@@ -18,7 +18,9 @@ CREATE TABLE IF NOT EXISTS agent_sessions (
|
|
|
18
18
|
created_at INTEGER NOT NULL,
|
|
19
19
|
updated_at INTEGER NOT NULL,
|
|
20
20
|
stopped_at INTEGER,
|
|
21
|
-
archived_at INTEGER
|
|
21
|
+
archived_at INTEGER,
|
|
22
|
+
goal TEXT,
|
|
23
|
+
goal_session_id TEXT
|
|
22
24
|
);
|
|
23
25
|
|
|
24
26
|
CREATE TABLE IF NOT EXISTS disabled_items (
|