@turmind/halo 2.0.8 → 2.1.1
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/{241-75bac3bb8e7aca1b.js → 398-9a8be186767b4504.js} +1 -1
- package/admin-out/_next/static/chunks/989-71c38d29c6672b27.js +1 -0
- package/admin-out/_next/static/chunks/app/page-67334fcd2175c7ad.js +1 -0
- package/admin-out/_next/static/css/3467b854242306b8.css +1 -0
- package/admin-out/index.html +1 -1
- package/admin-out/index.txt +5 -5
- package/bundled-docs/design/agentcore.md +1 -1
- package/bundled-docs/design/architecture.md +5 -3
- package/bundled-docs/design/canvas-extensions.md +1 -1
- package/bundled-docs/design/node.md +98 -0
- package/bundled-docs/design/prompt-system.md +2 -0
- package/bundled-docs/design/storage.md +4 -4
- package/bundled-docs/design/ws.md +8 -7
- package/bundled-docs/dev/api.md +21 -0
- package/bundled-docs/dev/env.md +2 -2
- package/bundled-docs/dev/tools.md +58 -1
- package/bundled-docs/guide/README.md +4 -0
- package/bundled-docs/guide/agents.md +1 -1
- package/bundled-docs/guide/cli.md +23 -0
- package/bundled-docs/guide/delegation-and-access.md +2 -2
- package/bundled-docs/guide/node.md +86 -0
- package/bundled-docs/guide/workspace.md +6 -3
- package/bundled-docs/requirements/agent.md +1 -1
- package/bundled-docs/requirements/terminal.md +76 -44
- package/bundled-docs/requirements/workspace.md +12 -1
- package/dist/evo-wrapper.js +7 -5
- package/dist/index.js +1997 -844
- package/package.json +3 -1
- package/templates/agents/default/agent.yaml +2 -0
- package/templates/config.yaml +0 -6
- package/templates/models/aws-bedrock-mantle.yaml +44 -4
- package/templates/models/aws-bedrock-openai.yaml +44 -4
- package/templates/models/doubao.yaml +97 -7
- package/templates/models/kimi.yaml +41 -3
- package/templates/models/minimax.yaml +35 -4
- package/admin-out/_next/static/chunks/989-af7e27a2004069ac.js +0 -1
- package/admin-out/_next/static/chunks/app/page-2af2482b39d6ec64.js +0 -1
- package/admin-out/_next/static/css/2e6b00182ac44ae1.css +0 -1
- /package/admin-out/_next/static/{pBIsb2BS3McG20ieKaTDx → 0cRHmPZfENhrU7Hb0w3n_}/_buildManifest.js +0 -0
- /package/admin-out/_next/static/{pBIsb2BS3McG20ieKaTDx → 0cRHmPZfENhrU7Hb0w3n_}/_ssgManifest.js +0 -0
|
@@ -67,6 +67,17 @@ Two tabs:
|
|
|
67
67
|
|
|
68
68
|
Current tab stored in `editorStore.bottomTab`.
|
|
69
69
|
|
|
70
|
+
The middle of the tab bar shows the current tab's title — the session title on Chat ("New session" for a draft, "Untitled session" until it has one), the active terminal's name on Terminal. It is truncated with an ellipsis when it doesn't fit (full text on hover) and hidden when the bar is too narrow.
|
|
71
|
+
|
|
72
|
+
### Split view
|
|
73
|
+
A split button (split-square icon, left of maximize) shows Chat and Terminal at once; pressing it again returns to the single view:
|
|
74
|
+
- **Layout**: side by side (Chat left, Terminal right) when the panel's content is at least 720px wide; stacked (Chat on top) when it's narrower — e.g. the 480-wide floating window. The direction follows the width live
|
|
75
|
+
- **Divider**: drag to resize; each pane keeps at least 20%. The ratio is remembered separately for side-by-side and stacked (`localStorage` `halo_bottom_split_ratio_row` / `_column`)
|
|
76
|
+
- **Tab bar**: both tabs show as selected; clicking either one leaves the split and shows just that tab. The centred title reads `<chat title> · <terminal name>`, dropping an empty half
|
|
77
|
+
- **Terminal** mounts as soon as the split opens (it's otherwise mounted on first visit to the Terminal tab)
|
|
78
|
+
- **Persisted** in `localStorage` (`editorStore.bottomSplit`, key `halo_bottom_split`) — survives a refresh. Works docked, maximized and floating
|
|
79
|
+
- Switching single ↔ split or flipping the direction never remounts Chat or Terminal — the chat keeps its state and terminals their scroll buffers
|
|
80
|
+
|
|
70
81
|
### Floating mode
|
|
71
82
|
The tab bar has a maximize button and, at the far right, a float button. Toggling the float button detaches the panel into a draggable window:
|
|
72
83
|
- **Default position/size**: bottom-right corner, 480×640 with a 24px margin
|
|
@@ -84,7 +95,7 @@ The tab bar has a maximize button and, at the far right, a float button. Togglin
|
|
|
84
95
|
|---|---|
|
|
85
96
|
| Cmd/Ctrl + P | Quick Open (fuzzy file search) |
|
|
86
97
|
| Cmd/Ctrl + S | Save current file |
|
|
87
|
-
| Cmd/Ctrl + ` | Toggle the bottom panel between Chat and Terminal |
|
|
98
|
+
| Cmd/Ctrl + ` | Toggle the bottom panel between Chat and Terminal (does nothing in split view) |
|
|
88
99
|
| Alt + W | Close current tab (Cmd+W cannot be overridden in browsers; the desktop app uses Cmd/Ctrl + W) |
|
|
89
100
|
|
|
90
101
|
## Auth
|
package/dist/evo-wrapper.js
CHANGED
|
@@ -211,6 +211,9 @@ function cleanChildEnv() {
|
|
|
211
211
|
const env = { ...process.env };
|
|
212
212
|
delete env.HALO_PASSWORD;
|
|
213
213
|
delete env.HALO_JWT_SECRET;
|
|
214
|
+
delete env.HALO_NODE_RELAY_URL;
|
|
215
|
+
delete env.HALO_NODE_RELAY_TOKEN;
|
|
216
|
+
delete env.HALO_NODE_TOKEN;
|
|
214
217
|
for (const key of settingsOtelEnvKeys)
|
|
215
218
|
delete env[key];
|
|
216
219
|
return env;
|
|
@@ -885,7 +888,7 @@ function generalSection() {
|
|
|
885
888
|
{ key: "limits.tool_result_render_chars", type: "int", globalOnly: true, description: 'Per-tool-result cap on the content fed back to the LLM. Larger results are truncated (with a "[Content truncated]" marker telling the model to re-run with narrower scope) to protect the context window and prompt cache. The UI/admin chat panel shows a far larger slice \u2014 see tool_result_ui_chars.', description_zh: "\u6BCF\u6761 tool result \u56DE\u4F20\u7ED9 LLM \u7684\u5185\u5BB9\u957F\u5EA6\u4E0A\u9650\u3002\u8D85\u51FA\u90E8\u5206\u4F1A\u88AB\u622A\u65AD\uFF08\u5E76\u9644 [Content truncated] \u6807\u8BB0\u63D0\u793A\u6A21\u578B\u7F29\u5C0F\u8303\u56F4\u91CD\u67E5\uFF09\uFF0C\u4EE5\u4FDD\u62A4\u4E0A\u4E0B\u6587\u7A97\u53E3\u548C\u63D0\u793A\u8BCD\u7F13\u5B58\u3002UI/admin \u804A\u5929\u9762\u677F\u5C55\u793A\u7684\u5185\u5BB9\u4E0A\u9650\u8981\u5927\u5F97\u591A\uFF0C\u89C1 tool_result_ui_chars\u3002", default: "8000" },
|
|
886
889
|
{ key: "limits.tool_result_ui_chars", type: "int", globalOnly: true, description: "Per-tool-result cap on the content stored for UI display (admin/web chat panel). Far larger than the LLM cap so the full output of a normal command stays visible, but bounded so a multi-MB `cat` does not bloat the session file, the WS payload, or the browser render. Output past this is truncated with a marker pointing at file_read for the complete content.", description_zh: "\u6BCF\u6761 tool result \u5B58\u7ED9 UI \u5C55\u793A\uFF08admin/web \u804A\u5929\u9762\u677F\uFF09\u7684\u5185\u5BB9\u957F\u5EA6\u4E0A\u9650\u3002\u8FDC\u5927\u4E8E LLM \u4E0A\u9650\uFF0C\u4FDD\u8BC1\u666E\u901A\u547D\u4EE4\u7684\u5B8C\u6574\u8F93\u51FA\u90FD\u80FD\u770B\u5230\uFF1B\u4F46\u4ECD\u6709\u754C\uFF0C\u907F\u514D cat \u4E2A\u51E0 MB \u7684\u6587\u4EF6\u6491\u7206\u4F1A\u8BDD\u6587\u4EF6\u3001WS \u4F20\u8F93\u548C\u6D4F\u89C8\u5668\u6E32\u67D3\u3002\u8D85\u51FA\u90E8\u5206\u622A\u65AD\u5E76\u9644\u6807\u8BB0\uFF0C\u63D0\u793A\u7528 file_read \u770B\u5B8C\u6574\u5185\u5BB9\u3002", default: String(64 * 1024) },
|
|
887
890
|
{ key: "limits.auto_report_chars", type: "int", globalOnly: true, description: "Cap on the auto-report a finished sub-agent delivers to its parent. Longer reports are truncated with a pointer to get_session_output for the full text.", description_zh: "\u5B50\u4F1A\u8BDD\u5B8C\u6210\u540E\u81EA\u52A8\u4E0A\u62A5\u7ED9\u7236\u4F1A\u8BDD\u7684\u5185\u5BB9\u957F\u5EA6\u4E0A\u9650\u3002\u8D85\u51FA\u622A\u65AD\uFF0C\u5E76\u63D0\u793A\u7528 get_session_output \u53D6\u5168\u6587\u3002", default: "8192" },
|
|
888
|
-
{ key: "limits.
|
|
891
|
+
{ key: "limits.terminal_scrollback_lines", type: "int", globalOnly: true, description: "Scrollback lines the server keeps per terminal, restored to every page that attaches (reconnect, another browser or device). Applies to terminals opened after the change.", description_zh: "\u670D\u52A1\u7AEF\u4E3A\u6BCF\u4E2A\u7EC8\u7AEF\u4FDD\u7559\u7684\u56DE\u6EDA\u884C\u6570\uFF0C\u4EFB\u4F55\u9875\u9762\u63A5\u5165\uFF08\u91CD\u8FDE\u3001\u6362\u6D4F\u89C8\u5668\u6216\u8BBE\u5907\uFF09\u65F6\u6062\u590D\u3002\u4FEE\u6539\u540E\u5BF9\u65B0\u5F00\u7684\u7EC8\u7AEF\u751F\u6548\u3002", default: "5000" }
|
|
889
892
|
].map((f) => ({
|
|
890
893
|
...f,
|
|
891
894
|
kind: "param",
|
|
@@ -1352,8 +1355,7 @@ var config = {
|
|
|
1352
1355
|
// fragments, SSE comments included), so for them it is an idle timeout — a
|
|
1353
1356
|
// long but live stream is never cut off.
|
|
1354
1357
|
modelRequest: systemInt("HALO_MODEL_TIMEOUT", "timeout.model_request", 10 * 6e4),
|
|
1355
|
-
sessionGrace: systemInt("HALO_SESSION_GRACE", "timeout.session_grace", 5 * 6e4)
|
|
1356
|
-
terminalGrace: systemInt("HALO_TERMINAL_GRACE", "timeout.terminal_grace", 5 * 6e4)
|
|
1358
|
+
sessionGrace: systemInt("HALO_SESSION_GRACE", "timeout.session_grace", 5 * 6e4)
|
|
1357
1359
|
},
|
|
1358
1360
|
// Runtime caps — read live from settings.yaml on every access. Getters
|
|
1359
1361
|
// (not literals) so a settings reload takes effect on the next tool
|
|
@@ -1378,8 +1380,8 @@ var config = {
|
|
|
1378
1380
|
get autoReportMax() {
|
|
1379
1381
|
return settingsInt("general.limits.auto_report_chars", 8192);
|
|
1380
1382
|
},
|
|
1381
|
-
get
|
|
1382
|
-
return settingsInt("general.limits.
|
|
1383
|
+
get terminalScrollbackLines() {
|
|
1384
|
+
return settingsInt("general.limits.terminal_scrollback_lines", 5e3);
|
|
1383
1385
|
}
|
|
1384
1386
|
},
|
|
1385
1387
|
compact: {
|