@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.
Files changed (36) hide show
  1. package/README.md +1 -5
  2. package/admin-out/404.html +1 -1
  3. package/admin-out/_next/static/chunks/298-4fac7d44a7949eec.js +1 -0
  4. package/admin-out/_next/static/chunks/{503-7c6d9935df6e0cea.js → 307-d7a99f9a4a436ec3.js} +1 -1
  5. package/admin-out/_next/static/chunks/app/page-b12a2e8e48fe4ea0.js +1 -0
  6. package/admin-out/_next/static/css/{8fce4e1a54dac12a.css → 372e3dbd4a0d1c25.css} +1 -1
  7. package/admin-out/index.html +1 -1
  8. package/admin-out/index.txt +4 -4
  9. package/bundled-docs/dev/acp-adapter.md +5 -4
  10. package/bundled-docs/dev/desktop-packaging.md +94 -8
  11. package/bundled-docs/guide/getting-started.md +3 -2
  12. package/bundled-docs/requirements/explorer.md +11 -0
  13. package/dist/index.js +13373 -13246
  14. package/package.json +1 -1
  15. package/templates/agents/executor/agent.yaml +2 -2
  16. package/templates/models/aws-bedrock-claude-invoke.yaml +26 -0
  17. package/templates/skills/acp/SKILL.md +8 -1
  18. package/templates/skills/acp/templates/SKILL.md.tmpl +2 -1
  19. package/templates/skills/acp/templates/ask.py +2 -1
  20. package/templates/skills/acp/templates/config.yaml.tmpl +5 -0
  21. package/admin-out/_next/static/chunks/298-d6b224b569da4de0.js +0 -1
  22. package/admin-out/_next/static/chunks/app/page-cc8043335282d745.js +0 -1
  23. package/bundled-docs/plans/cron-tasks.md +0 -362
  24. package/bundled-docs/plans/design-suggestions.md +0 -203
  25. package/bundled-docs/plans/issue-session-deep-nesting.md +0 -208
  26. package/bundled-docs/plans/launch-plan.md +0 -111
  27. package/bundled-docs/plans/md-and-agent-refactor.md +0 -197
  28. package/bundled-docs/plans/remote-mac-worker.md +0 -196
  29. package/bundled-docs/plans/roadmap.md +0 -40
  30. package/bundled-docs/plans/self-evolution.md +0 -1379
  31. package/bundled-docs/plans/todo.md +0 -32
  32. package/bundled-docs/plans/weixin-channel.md +0 -255
  33. package/bundled-docs/test/docs-seeding.md +0 -101
  34. package/bundled-docs/test/session.md +0 -374
  35. /package/admin-out/_next/static/{IBP_mwBDf-cPwZSZZGpi8 → ep7BWneNhTuIPwJfFFh72}/_buildManifest.js +0 -0
  36. /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