@turmind/halo 0.1.9 → 0.2.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 +1 -5
- package/admin-out/404.html +1 -1
- package/admin-out/_next/static/chunks/298-4fac7d44a7949eec.js +1 -0
- package/admin-out/_next/static/chunks/{503-7c6d9935df6e0cea.js → 307-d7a99f9a4a436ec3.js} +1 -1
- package/admin-out/_next/static/chunks/app/page-b12a2e8e48fe4ea0.js +1 -0
- package/admin-out/_next/static/css/{8fce4e1a54dac12a.css → 372e3dbd4a0d1c25.css} +1 -1
- package/admin-out/index.html +1 -1
- package/admin-out/index.txt +4 -4
- package/bundled-docs/dev/acp-adapter.md +5 -4
- package/bundled-docs/dev/desktop-packaging.md +94 -8
- package/bundled-docs/guide/getting-started.md +3 -2
- package/bundled-docs/requirements/explorer.md +11 -0
- package/dist/index.js +13373 -13246
- package/package.json +1 -1
- package/templates/agents/executor/agent.yaml +2 -2
- package/templates/models/aws-bedrock-claude-invoke.yaml +26 -0
- package/templates/skills/acp/SKILL.md +8 -1
- package/templates/skills/acp/templates/SKILL.md.tmpl +2 -1
- package/templates/skills/acp/templates/ask.py +2 -1
- package/templates/skills/acp/templates/config.yaml.tmpl +5 -0
- package/admin-out/_next/static/chunks/298-d6b224b569da4de0.js +0 -1
- package/admin-out/_next/static/chunks/app/page-cc8043335282d745.js +0 -1
- package/bundled-docs/plans/cron-tasks.md +0 -362
- package/bundled-docs/plans/design-suggestions.md +0 -203
- package/bundled-docs/plans/issue-session-deep-nesting.md +0 -208
- package/bundled-docs/plans/launch-plan.md +0 -111
- package/bundled-docs/plans/md-and-agent-refactor.md +0 -197
- package/bundled-docs/plans/remote-mac-worker.md +0 -196
- package/bundled-docs/plans/roadmap.md +0 -40
- package/bundled-docs/plans/self-evolution.md +0 -1379
- package/bundled-docs/plans/todo.md +0 -32
- package/bundled-docs/plans/weixin-channel.md +0 -255
- package/bundled-docs/test/docs-seeding.md +0 -101
- package/bundled-docs/test/session.md +0 -374
- /package/admin-out/_next/static/{IBP_mwBDf-cPwZSZZGpi8 → ep7BWneNhTuIPwJfFFh72}/_buildManifest.js +0 -0
- /package/admin-out/_next/static/{IBP_mwBDf-cPwZSZZGpi8 → ep7BWneNhTuIPwJfFFh72}/_ssgManifest.js +0 -0
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
# Remote Mac Worker — Design Blueprint
|
|
2
|
-
|
|
3
|
-
**Status**: not started, design initially frozen
|
|
4
|
-
**Filed**: 2026-04-28
|
|
5
|
-
**Priority**: future work, not at the front of the roadmap
|
|
6
|
-
|
|
7
|
-
## Scope
|
|
8
|
-
|
|
9
|
-
Wire the user's Mac into Halo — **not** as a remote code workspace, but as a **capability provider**, letting server-side agents tap into native Mac capabilities (screenshot, camera, browser, WPS, iMessage, calendar, …).
|
|
10
|
-
|
|
11
|
-
The key contrast with openclaw / opencode / Claude Code:
|
|
12
|
-
- Those tools: agent loop on the local machine, LLM remote
|
|
13
|
-
- This plan: **agent loop + LLM both on the server, Mac is just a "capability execution environment"**
|
|
14
|
-
|
|
15
|
-
It's "Mac as a service", not "LLM as a service".
|
|
16
|
-
|
|
17
|
-
## Architecture choice: Swiss-army knife + skill accumulation
|
|
18
|
-
|
|
19
|
-
Rejected alternatives (discussed and dropped):
|
|
20
|
-
- **Static capability plugin** (a fixed preset tool set) → capability boundary is rigid; agents have no recourse for novel capabilities
|
|
21
|
-
- **Computer Use pixel-level** (screenshot + click coordinates) → unfriendly to the 2018 Intel Mac (slow + expensive); universality bought with token cost
|
|
22
|
-
|
|
23
|
-
Settled on **Swiss-army knife + skills**:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
Low-level primitives (registered by the Worker)
|
|
27
|
-
- mac_shell(cmd) → arbitrary shell commands
|
|
28
|
-
- mac_applescript(script) → arbitrary AppleScript
|
|
29
|
-
- mac_jxa(script) → JavaScript for Automation (AppleScript modernised)
|
|
30
|
-
- mac_filesystem → file_read/write/list etc.
|
|
31
|
-
|
|
32
|
-
Middle layer — skills (preset + user-written + agent-accumulated)
|
|
33
|
-
- mac_screenshot
|
|
34
|
-
- mac_take_photo
|
|
35
|
-
- mac_open_wps
|
|
36
|
-
- mac_safari_goto
|
|
37
|
-
- mac_read_imessage
|
|
38
|
-
- …(agent first explores new scenarios, then asks user to save them as skills after verification)
|
|
39
|
-
|
|
40
|
-
Surface / UI
|
|
41
|
-
- Settings shows the connected worker + its registered primitives
|
|
42
|
-
- Each skill can be enabled/disabled
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Why:
|
|
46
|
-
- Covers ~99% of Mac apps (mature AppleScript ecosystem)
|
|
47
|
-
- Friendly to old Intel Mac hardware (no continuous-screenshot + vision-inference load)
|
|
48
|
-
- Plays naturally with Halo's existing Skill system
|
|
49
|
-
- High capability ceiling (Turing-complete)
|
|
50
|
-
|
|
51
|
-
## Worker protocol outline
|
|
52
|
-
|
|
53
|
-
WebSocket-based reverse connection (Mac only needs outbound; no public IP needed):
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
Mac Halo Server (9527)
|
|
57
|
-
halo-worker ──── WSS ───▶ /worker endpoint
|
|
58
|
-
↕
|
|
59
|
-
worker-pool
|
|
60
|
-
↕
|
|
61
|
-
agent tool dispatch
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Worker registration payload:
|
|
65
|
-
|
|
66
|
-
```json
|
|
67
|
-
{
|
|
68
|
-
"type": "register",
|
|
69
|
-
"workerId": "peter-mac",
|
|
70
|
-
"primitives": ["shell", "applescript", "jxa", "filesystem"],
|
|
71
|
-
"os": "macos",
|
|
72
|
-
"osVersion": "14.x",
|
|
73
|
-
"arch": "x64",
|
|
74
|
-
"home": "/Users/peter"
|
|
75
|
-
}
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Server reads `primitives` and dynamically assembles the tool set it injects into the agent.
|
|
79
|
-
|
|
80
|
-
Protocol messages to support:
|
|
81
|
-
|
|
82
|
-
```
|
|
83
|
-
Worker → Server
|
|
84
|
-
- register
|
|
85
|
-
- tool_result (id, ok, result)
|
|
86
|
-
- tool_stream (id, chunk) // shell stdout streaming
|
|
87
|
-
- pong
|
|
88
|
-
|
|
89
|
-
Server → Worker
|
|
90
|
-
- tool_call (id, tool, args, dry_run?)
|
|
91
|
-
- tool_cancel (id)
|
|
92
|
-
- ping
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
**Tool results must support multiple shapes**: text / image (base64 PNG) / file (binary) / structured (JSON). No longer the "all-tool-results-are-strings" simplification.
|
|
96
|
-
|
|
97
|
-
## Security model (mandatory)
|
|
98
|
-
|
|
99
|
-
**Dynamic model + Swiss-army knife = high risk**. Required guards:
|
|
100
|
-
|
|
101
|
-
### 1. Frontend approval
|
|
102
|
-
|
|
103
|
-
Every `mac_shell` / `mac_applescript` execution pops a frontend confirmation:
|
|
104
|
-
- Show the command text
|
|
105
|
-
- Allow once / allow for this session / allow permanently for this command pattern
|
|
106
|
-
|
|
107
|
-
Like Claude Desktop / Cursor's tool approval UI.
|
|
108
|
-
|
|
109
|
-
### 2. Server-side dangerous-command blocking
|
|
110
|
-
|
|
111
|
-
Regex scan for:
|
|
112
|
-
- `rm -rf`, `sudo`, `curl|bash` pipes, `nc`, `mkfs`, `dd`
|
|
113
|
-
- AppleScript `delete file`, `empty trash`, `quit application`
|
|
114
|
-
→ Force popup, no "session allowlist"
|
|
115
|
-
|
|
116
|
-
### 3. Worker-side path validation
|
|
117
|
-
|
|
118
|
-
`mac_filesystem`-family tools still use the `validateWorkspacePath` approach from `workspace-tools.ts`; the worker validates itself, doesn't trust server-supplied absolute paths.
|
|
119
|
-
|
|
120
|
-
### 4. Capability switches
|
|
121
|
-
|
|
122
|
-
Settings lets the user:
|
|
123
|
-
- Disable `mac_shell` (keep only AppleScript)
|
|
124
|
-
- Block specific commands entirely (`rm` / `sudo` / `curl`)
|
|
125
|
-
- Disable an entire sensitive skill
|
|
126
|
-
|
|
127
|
-
## Hardware constraints (user's 2018 Intel Mac)
|
|
128
|
-
|
|
129
|
-
- Latest macOS (exact version unknown — will probe)
|
|
130
|
-
- **Computer Use pixel-vision unsuitable** — old GPU, slow image processing
|
|
131
|
-
- AppleScript / shell / osascript are native CLI — no perf issues
|
|
132
|
-
- `node-pty` needs to be built x64 (not arm64)
|
|
133
|
-
|
|
134
|
-
## Time estimate (revised)
|
|
135
|
-
|
|
136
|
-
The earlier "2-3 days" was wishful; realistic estimate:
|
|
137
|
-
|
|
138
|
-
| Phase | Time | Deliverable |
|
|
139
|
-
|---|---|---|
|
|
140
|
-
| MVP: protocol + shell + filesystem | 1 week | Agent can run commands / read files on Mac |
|
|
141
|
-
| + AppleScript + screenshot | 3 days | Agent controls any Mac app + screenshots |
|
|
142
|
-
| + Safari control, WPS control | 3 days | "Open this page and screenshot it" works end-to-end |
|
|
143
|
-
| + Camera, iMessage | 3-5 days | Take photos, read/send messages |
|
|
144
|
-
| UI: worker management + approvals | 1 week | Frontend can see worker status, approve tool calls |
|
|
145
|
-
| Polish + package CLI + deploy docs | 1-2 weeks | Shippable |
|
|
146
|
-
|
|
147
|
-
**Total: 4-6 full-time weeks.**
|
|
148
|
-
|
|
149
|
-
Suggested split:
|
|
150
|
-
- **First window (2 weekend days)**: MVP only. Get "agent executes `ls` on Mac and sees the result". Stop to evaluate whether to continue.
|
|
151
|
-
- **Second window (2-3 weeks)**: up to "screenshot + Safari + WPS control" — already a strong demo.
|
|
152
|
-
|
|
153
|
-
## MVP checklist
|
|
154
|
-
|
|
155
|
-
Start and stop here; do nothing else until it lands:
|
|
156
|
-
|
|
157
|
-
- [ ] New `packages/worker` workspace, add to pnpm
|
|
158
|
-
- [ ] New `packages/server/src/workers/` with worker-pool + `/worker` WS endpoint
|
|
159
|
-
- [ ] Protocol: register / tool_call / tool_result / ping-pong
|
|
160
|
-
- [ ] Worker CLI: WS connect, register, ping, one `mac_shell` primitive
|
|
161
|
-
- [ ] Server: Project table gains `execution_target` (local / worker:<id>)
|
|
162
|
-
- [ ] Agent tool dispatch abstraction: `LocalExecutor` vs `RemoteExecutor`
|
|
163
|
-
- [ ] Frontend: Settings hard-codes one worker entry + shows worker status
|
|
164
|
-
- [ ] End-to-end: agent runs `ls ~` on Mac successfully
|
|
165
|
-
|
|
166
|
-
Stop once these 8 are green. **Do not expand scope.**
|
|
167
|
-
|
|
168
|
-
## Decision log vs Anthropic Computer Use
|
|
169
|
-
|
|
170
|
-
We discussed Computer Use (Claude Sonnet 3.5+'s vision + coordinate-click capability) and decided not to go that route, because:
|
|
171
|
-
|
|
172
|
-
1. User's machine is 2018 Intel Mac; vision inference is slow
|
|
173
|
-
2. Each step's screenshot burns tokens → costly
|
|
174
|
-
3. Non-deterministic (potential misclicks)
|
|
175
|
-
4. Generic, but overkill for macOS's mature AppleScript ecosystem
|
|
176
|
-
5. Halo runs on Bedrock Claude; it's supported but latency/cost is worse than direct API
|
|
177
|
-
|
|
178
|
-
**Not opposed to adding it later** as another primitive ("vision fallback"), but not the main path.
|
|
179
|
-
|
|
180
|
-
## Reference projects
|
|
181
|
-
|
|
182
|
-
- **Anthropic computer-use-demo** (Docker demo, for protocol reference)
|
|
183
|
-
- **OpenInterpreter 01** (open-source local agent, primitive design)
|
|
184
|
-
- **Claude Desktop + MCP** (tool approval UX)
|
|
185
|
-
- **Self-Operating Computer** (coordinate-click fallback, if we ever add it)
|
|
186
|
-
- **Dagger** / **dstack.ai** (worker pool management)
|
|
187
|
-
|
|
188
|
-
## Questions to answer before starting
|
|
189
|
-
|
|
190
|
-
1. Mac's specific macOS version (gates which APIs are available)
|
|
191
|
-
2. Which three skills to prioritise packaging (pick 3 from screenshot / Safari / WPS / iMessage)
|
|
192
|
-
3. Approval UI granularity (session allowlist vs per-command pattern)
|
|
193
|
-
4. Worker auth (where to store tokens, rotation)
|
|
194
|
-
5. Multi-worker support (1 server to N workers)
|
|
195
|
-
|
|
196
|
-
Answer these first before any code.
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# Roadmap
|
|
2
|
-
|
|
3
|
-
## Model Providers
|
|
4
|
-
- [x] OpenAI (GPT series)
|
|
5
|
-
- [ ] Google Gemini
|
|
6
|
-
- [ ] OpenRouter (multi-model aggregator)
|
|
7
|
-
- [ ] Ollama (local models)
|
|
8
|
-
|
|
9
|
-
Extension interface is ready (`ModelRuntime`). Adding providers is integration work, not architecture work.
|
|
10
|
-
|
|
11
|
-
## Channels
|
|
12
|
-
- [ ] Discord
|
|
13
|
-
- [x] Slack
|
|
14
|
-
- [ ] Email
|
|
15
|
-
- [ ] SMS
|
|
16
|
-
|
|
17
|
-
Channel adapter pattern established (Web, WeChat, Telegram, Slack, Feishu already working). New channels follow the same `CommandContext` interface.
|
|
18
|
-
|
|
19
|
-
## CLI / TUI
|
|
20
|
-
- [x] CLI mode (headless, SSH-friendly)
|
|
21
|
-
- [x] TUI (terminal UI with interactive chat)
|
|
22
|
-
|
|
23
|
-
Enables usage without a browser. Important for SSH-into-server workflows.
|
|
24
|
-
|
|
25
|
-
## Deployment
|
|
26
|
-
- [ ] Dockerfile + docker-compose
|
|
27
|
-
- [ ] One-click deploy templates (Fly.io / Render / Railway)
|
|
28
|
-
|
|
29
|
-
Currently manual (`node dist/index.js`). Containerization needed for distribution.
|
|
30
|
-
|
|
31
|
-
## Shared Workspace
|
|
32
|
-
- [ ] Workspace templates (clone/fork a pre-configured workspace)
|
|
33
|
-
- [ ] Workspace marketplace or registry
|
|
34
|
-
- [ ] Readonly workspace sharing with token auth
|
|
35
|
-
|
|
36
|
-
Core differentiator. Share an entire configured workspace (agents + skills + context + docs), not just individual tools or skills.
|
|
37
|
-
|
|
38
|
-
## Quality
|
|
39
|
-
- [ ] Test suite (unit + integration)
|
|
40
|
-
- [ ] CI pipeline
|