@turmind/halo 2.2.0 → 2.2.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/1989-3b2faa2731d973c4.js +1 -0
- package/admin-out/_next/static/chunks/app/page-10a4afac9cbc27a2.js +1 -0
- package/admin-out/index.html +1 -1
- package/admin-out/index.txt +4 -4
- package/bundled-docs/design/background-dispatch.md +1 -1
- package/bundled-docs/design/canvas-extensions.md +1 -1
- package/bundled-docs/design/cron.md +4 -4
- package/bundled-docs/design/node.md +7 -1
- package/bundled-docs/design/session.md +2 -2
- package/bundled-docs/design/stt-local.md +34 -10
- package/bundled-docs/design/ws.md +7 -5
- package/bundled-docs/dev/api.md +5 -4
- package/bundled-docs/dev/deploy.md +1 -1
- package/bundled-docs/guide/agents.md +1 -1
- package/bundled-docs/guide/node.md +45 -6
- package/bundled-docs/requirements/agent.md +1 -1
- package/bundled-docs/requirements/workspace.md +3 -3
- package/dist/index.js +347 -47
- package/package.json +1 -1
- package/templates/skills/cron/SKILL.md +46 -21
- package/templates/skills/cron/manage-cron.py +10 -13
- package/admin-out/_next/static/chunks/1989-dab5d5c24b8f4c9f.js +0 -1
- package/admin-out/_next/static/chunks/app/page-cca81a2ed69100f5.js +0 -1
- /package/admin-out/_next/static/{Rs9tIYSSITPLxv274DU9f → u9pg60rITCj73MBYeXsW1}/_buildManifest.js +0 -0
- /package/admin-out/_next/static/{Rs9tIYSSITPLxv274DU9f → u9pg60rITCj73MBYeXsW1}/_ssgManifest.js +0 -0
|
@@ -10,16 +10,16 @@ halo-node --root ~/proj ──WebSocket──────▶ halo server ──
|
|
|
10
10
|
|
|
11
11
|
Two clients do the same job, with the same flags and the same behaviour:
|
|
12
12
|
|
|
13
|
-
- **Linux (x86_64 / arm64 / armv7)**: `halo-node`, a single
|
|
14
|
-
- **macOS
|
|
13
|
+
- **Linux (x86_64 / arm64 / armv7) and Windows (amd64)**: `halo-node`, a single binary attached to every GitHub release. It needs no Node.js. The Linux build is ~7 MB and idles at about 9 MB of memory.
|
|
14
|
+
- **macOS** (or a Linux / Windows machine that already has the npm package): `halo node` from `npm install -g @turmind/halo`.
|
|
15
15
|
|
|
16
16
|
Neither needs `halo setup` or model keys, and neither writes anything under `~/.halo/`.
|
|
17
17
|
|
|
18
|
-
Supported: **Linux and
|
|
18
|
+
Supported: **Linux, macOS and Windows amd64**. The Go client is tested natively on Linux and Windows CI; macOS uses npm. Windows `node_run` commands go to `cmd.exe`, with UTF-8 output and a GBK fallback.
|
|
19
19
|
|
|
20
20
|
## 1. Create a token
|
|
21
21
|
|
|
22
|
-
Admin → **Channels → Linked machines** → **Add machine**. Pick the workspace and a machine name (`a-z 0-9 -`, e.g. `mbp`; unique within the workspace — the agent uses it to address the machine). The dialog shows two commands to copy: one installs `halo-node` on Linux and runs it with `~/.local/bin` prepended to `PATH` (where a non-root install lands), the other runs `halo node`
|
|
22
|
+
Admin → **Channels → Linked machines** → **Add machine**. Pick the workspace and a machine name (`a-z 0-9 -`, e.g. `mbp`; unique within the workspace — the agent uses it to address the machine). The dialog shows two commands to copy: one installs `halo-node` on Linux and runs it with `~/.local/bin` prepended to `PATH` (where a non-root install lands), the other runs the npm `halo node` client. On Windows, use the standalone exe below instead. The install link points at the server's own release, so the machine and the server come from the same version.
|
|
23
23
|
|
|
24
24
|
The token stays on the list row (copy button). Deleting the row revokes it at once and disconnects the machine.
|
|
25
25
|
|
|
@@ -55,7 +55,18 @@ curl -fsL https://github.com/turmind/halo-agent/releases/latest/download/SHA256S
|
|
|
55
55
|
./halo-node --server https://halo.example.com --root ~/proj
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
### Windows (amd64)
|
|
59
|
+
|
|
60
|
+
Download `halo-node-windows-amd64.exe` from the [GitHub release](https://github.com/turmind/halo-agent/releases/latest) matching your server (no npm or Node.js needed). Put it in e.g. `C:\halo-node`. In PowerShell:
|
|
61
|
+
|
|
62
|
+
```powershell
|
|
63
|
+
$env:HALO_NODE_TOKEN = '<token>'
|
|
64
|
+
& 'C:\halo-node\halo-node-windows-amd64.exe' --server https://halo.example.com --root 'C:\Users\alice\proj'
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The release's `SHA256SUMS` includes the exe; compare its entry with `Get-FileHash C:\halo-node\halo-node-windows-amd64.exe -Algorithm SHA256`. Use either `/` or `\` in paths; `~/` expands from `USERPROFILE`. Folder mode resolves symlinks and junctions before checking the root. Add `--allow-shell` only if you want commands as this Windows user. Stop the process before replacing the exe during an upgrade.
|
|
68
|
+
|
|
69
|
+
**macOS (npm)**:
|
|
59
70
|
|
|
60
71
|
```bash
|
|
61
72
|
npm install -g @turmind/halo # once
|
|
@@ -97,7 +108,7 @@ Neither client follows `HTTP(S)_PROXY`. To reach the server through a forward pr
|
|
|
97
108
|
|
|
98
109
|
### TLS certificates (`https://` servers)
|
|
99
110
|
|
|
100
|
-
`halo-node` trusts the system's CA store (`/etc/ssl/certs
|
|
111
|
+
`halo-node` trusts the system's CA store (the Windows certificate store on Windows; `/etc/ssl/certs/…` on Linux, where `SSL_CERT_FILE` / `SSL_CERT_DIR` can point it elsewhere). It falls back to a built-in Mozilla root set only on a system with no CA bundle at all. For a private or corporate CA, install it into the system store, or on Linux set `SSL_CERT_FILE`. `halo node` (Node.js) does the opposite: it uses Node's built-in roots plus `NODE_EXTRA_CA_CERTS`, and ignores the system store.
|
|
101
112
|
|
|
102
113
|
### Run it as a service (systemd)
|
|
103
114
|
|
|
@@ -129,6 +140,34 @@ WantedBy=multi-user.target
|
|
|
129
140
|
|
|
130
141
|
Network drops, server restarts, a busy token (409) and a lockout (429) are handled inside the process, which keeps running, so `on-failure` is enough. Don't use `Restart=always`: it keeps restarting after a revoked token, and each restart is a failed login. After 5 failures in 15 minutes the server locks out that IP address, which blocks every machine connecting from it. ExecStart takes the path the install script printed. For the npm client, set `ExecStart=/usr/bin/halo node …`. After upgrading with the install script, `systemctl restart halo-node` to run the new binary.
|
|
131
142
|
|
|
143
|
+
### Start at boot on Windows (Task Scheduler)
|
|
144
|
+
|
|
145
|
+
Create `C:\halo-node\start.cmd` (replace the token, server and shared folder). Restrict this directory and wrapper to your account, Administrators and SYSTEM: it contains a plaintext token, and the log can contain file paths. The wrapper keeps the token out of the task's command line and appends logs:
|
|
146
|
+
|
|
147
|
+
```bat
|
|
148
|
+
@echo off
|
|
149
|
+
setlocal
|
|
150
|
+
set "HALO_NODE_TOKEN=<token>"
|
|
151
|
+
"C:\halo-node\halo-node-windows-amd64.exe" --server https://halo.example.com --root "C:\Users\alice\proj" >>"C:\halo-node\halo-node.log" 2>&1
|
|
152
|
+
exit /b %errorlevel%
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Run PowerShell **as administrator** once to register a startup task. Set `$user` to the account that owns the shared files (not necessarily the administrator registering the task):
|
|
156
|
+
|
|
157
|
+
```powershell
|
|
158
|
+
$user = "$env:COMPUTERNAME\alice"
|
|
159
|
+
$action = New-ScheduledTaskAction -Execute "$env:SystemRoot\System32\cmd.exe" -Argument '/d /c "C:\halo-node\start.cmd"' -WorkingDirectory 'C:\halo-node'
|
|
160
|
+
$trigger = New-ScheduledTaskTrigger -AtStartup
|
|
161
|
+
$principal = New-ScheduledTaskPrincipal -UserId $user -LogonType S4U -RunLevel Limited
|
|
162
|
+
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit ([TimeSpan]::Zero) -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
|
|
163
|
+
Register-ScheduledTask -TaskName 'halo-node' -Action $action -Trigger $trigger -Principal $principal -Settings $settings
|
|
164
|
+
Start-ScheduledTask -TaskName 'halo-node'
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
S4U runs hidden without a logged-in desktop or a stored password. It cannot use that user's network credentials (mapped drives / authenticated SMB) or EFS-encrypted files; use a local shared folder. Outbound HTTPS with the Halo token still works. `ExecutionTimeLimit` **must be zero**: Task Scheduler's default stops a task after 72 hours. Do not enable restart-on-failure: exit 1 means a rejected token / other permanent refusal, and restarting repeats failed logins. Network failures already retry inside halo-node.
|
|
168
|
+
|
|
169
|
+
If your server is reached through **Tailscale**, enable Tailscale's **Run unattended** on Windows so it connects before login. halo-node retries until the network is ready. Inspect `C:\halo-node\halo-node.log` and `Get-ScheduledTaskInfo halo-node`; after replacing the token or upgrading the exe, stop and start the task. The append-only log is yours to rotate.
|
|
170
|
+
|
|
132
171
|
### Settings on the machine
|
|
133
172
|
|
|
134
173
|
`halo-node` takes its shell timeout only from `HALO_SHELL_TIMEOUT` (ms, default 120 s); grep's default of 50 matches and the 5 MiB command-output cap are fixed. `halo node` (npm) also reads them from the machine's own `~/.halo/secrets/` (`timeout.shell_exec` in `config.yaml`, the `general.limits.*` keys in `settings.yaml`). This only matters on a machine that also runs a halo server with those settings changed.
|
|
@@ -93,6 +93,6 @@ API: `GET/PUT /api/agent-configs/:id/md/:fileType`, `GET /api/agent-configs/:id/
|
|
|
93
93
|
- **Not rendered for internal agents** (`internal: true`) — they're delegated to by other agents, never driven directly
|
|
94
94
|
|
|
95
95
|
### Internal agents
|
|
96
|
-
Agents flagged `internal: true` in agent.yaml (e.g. `__evo_agent__`, `__apply_agent__`, `__score__`) are platform tooling. They are hidden from every user-facing surface: the delegation roster, `/session new` default pick, the chat agent selector, the
|
|
96
|
+
Agents flagged `internal: true` in agent.yaml (e.g. `__evo_agent__`, `__apply_agent__`, `__score__`) are platform tooling. They are hidden from every user-facing surface: the delegation roster, `/session new` default pick, the chat agent selector, the Triggers (cron) job agent picker and `halo cli`'s agent list (`halo agents`) — and have no Test button. They stay editable in the management sidebar's collapsed **Internal** group.
|
|
97
97
|
|
|
98
98
|
Replaces the old built-in test chat panel, giving a more realistic environment (full workspace tools + session persistence).
|
|
@@ -37,12 +37,12 @@ The Bottom Panel (Chat + Terminal) can also be **floated** into a draggable wind
|
|
|
37
37
|
| Zap | Skills | Skill list | SkillsMain (full height) | — |
|
|
38
38
|
| MessageCircle | Channels | Channel list | Channel config editor | — |
|
|
39
39
|
| Sparkles | Evolution | Run list + status / auto / observation filters | Evolution main (run/apply review, auto-apply verdict, rollback, observation → GitHub issue) | — |
|
|
40
|
-
| Clock |
|
|
40
|
+
| Clock | Triggers (触发器) | Job list | Cron job detail / form + run audit | — |
|
|
41
41
|
| Settings2 | Settings | — | Settings panel | — |
|
|
42
42
|
|
|
43
|
-
The Source Control entry is hidden in workspaces that are not git repos.
|
|
43
|
+
The Source Control entry is hidden in workspaces that are not git repos. The Triggers tab is the UI name for cron jobs (schedule, one-shot and webhook); code, API, routes and the `cron` skill keep the `cron` name.
|
|
44
44
|
|
|
45
|
-
**Extension entries.** An installed [canvas extension](../design/canvas-extensions.md#activity-bar-entries) whose manifest declares `activity` adds one button after
|
|
45
|
+
**Extension entries.** An installed [canvas extension](../design/canvas-extensions.md#activity-bar-entries) whose manifest declares `activity` adds one button after Triggers (several sort by the manifest's `order`, then id; the built-in tabs never move). It uses the extension's icon (tinted like the built-in icons; a puzzle piece when it has none) and its title / description in the hover drawer, in the admin's language. Clicking it shows the extension's page full-width in the main area with no sidebar, like Agents / Settings; leaving the tab closes the page (anything it was playing or refreshing stops). The last-used page is restored after a reload; if that extension has been removed, or doesn't run on this device, the workspace opens on Explorer instead. With no such extension installed, the bar is unchanged.
|
|
46
46
|
|
|
47
47
|
**Short windows.** When the window is too short for every view button, the upper group (built-in views + extension entries) scrolls (no visible scrollbar); Settings and the quick-toggles entry stay pinned at the bottom.
|
|
48
48
|
|