@lostintangent/toy-box 0.1.15 → 0.1.19
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 +49 -9
- package/package.json +36 -32
- package/toy-box +0 -0
package/README.md
CHANGED
|
@@ -2,27 +2,67 @@
|
|
|
2
2
|
|
|
3
3
|
Toy Box is a self-hosted agent server for running agentic tasks from anywhere. It includes an easy-to-use web app for starting, observing, and controlling sessions from both your desktop and phone while keeping all connected clients synchronized.
|
|
4
4
|
|
|
5
|
-
Beyond simple session management, Toy Box provides several helpful workflows that make everyday tasks simpler: scheduled automations, editable artifacts, child session orchestration, an
|
|
5
|
+
Beyond simple session management, Toy Box provides several helpful workflows that make everyday tasks simpler: scheduled automations, editable artifacts, child session orchestration, generative apps, and an inbox for asynchronous tasks, and an integrated terminal.
|
|
6
6
|
|
|
7
7
|
<img width="1000" src="https://github.com/user-attachments/assets/7964dab2-ca7c-4bc4-8e00-cbb85afa9c8b" />
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
11
|
-
- **
|
|
11
|
+
- **Live, multi-device sessions:** Start or resume work from desktop or mobile, watch and steer it from every connected client, answer agent questions, manage queued follow-ups, and pin important sessions.
|
|
12
12
|
- **Rich composer:** Choose the model and reasoning effort, attach images, invoke skills, dictate by voice, and start sessions in a working directory or isolated Git worktree.
|
|
13
|
-
- **Multi-pane workspace:** Open up to four sessions, artifacts, or agent-provided canvases together, with live previews and an adaptive mobile layout.
|
|
13
|
+
- **Multi-pane workspace:** Open up to four sessions, local files, artifacts, apps, terminals, or agent-provided canvases together, with live previews and an adaptive mobile layout.
|
|
14
14
|
- **Multi-agent orchestration:** Delegate parallel work to child sessions and use the floating Hyper workspace for a dedicated orchestration thread.
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **Focused Inbox:** Dispatch asynchronous tasks from Toy Box or directly from any webpage with the browser extension, then get notified when concise results and editable artifacts are ready.
|
|
15
|
+
- **Collaborative artifacts:** Browse and edit Markdown, HTML, JSON, and SVG alongside the agent, or use structured intent boards to review and launch consequential work.
|
|
16
|
+
- **Toy Box apps:** Build session-scoped `.toy` React artifacts or install reusable, stateful apps from trusted GitHub Gists. Apps can compose sessions, files, panes, workers, and shared content.
|
|
18
17
|
- **Scheduled automations:** Configure recurring prompts that automate routine work and produce reviewable artifacts such as reports, analyses, and news digests.
|
|
19
|
-
- **
|
|
18
|
+
- **Inbox and webhooks:** Dispatch background tasks from Toy Box, webpages, mobile voice capture, or any HTTP client, then review concise results and editable artifacts in one place.
|
|
20
19
|
|
|
21
20
|
## Getting Started
|
|
22
21
|
|
|
23
22
|
1. Install the Copilot CLI and authenticate with your GitHub account
|
|
24
|
-
1. Install Toy Box
|
|
25
|
-
1. Start
|
|
23
|
+
1. Install Toy Box: `npm install -g @lostintangent/toy-box`
|
|
24
|
+
1. Start the agent server: `toy-box`
|
|
25
|
+
1. Open `http://localhost:3000` in your browser
|
|
26
|
+
|
|
27
|
+
## Access From Anywhere
|
|
28
|
+
|
|
29
|
+
In order to access Toy Box from your phone (or other machines), simply configure [Tailscale](https://tailscale.com/) on the desired devices, enable MagicDNS and HTTPS for your tailnet, start Toy Box (`toy-box`), then run:
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
tailscale serve --bg http://127.0.0.1:3000
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
You can then open the provided https://<machine>.<tailnet>.ts.net/ URL from any device on the same tailnet as the Toy Box server. After opening this URL in your mobile browser, you can install it to your home screen by doing the following:
|
|
36
|
+
|
|
37
|
+
| Mobile platform | Install Step(s) |
|
|
38
|
+
| ------------------- | ---------------------------------------------- |
|
|
39
|
+
| iOS (iPhone / iPad) | Use Safari's Share → Add to Home Screen |
|
|
40
|
+
| Android | Use Chrome's Install app or Add to Home screen |
|
|
41
|
+
|
|
42
|
+
> ⚠️ Toy Box has no app-level authentication. Keep it behind Tailscale Serve and tailnet access controls; do not expose it publicly with Funnel.
|
|
43
|
+
|
|
44
|
+
## Inbox Webhook
|
|
45
|
+
|
|
46
|
+
With that private HTTPS URL in place, Toy Box's inbox can accept external tasks by means of simply sending a `POST` to the following URL: `https://<toy-box-host>/api/inbox`.
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
curl -X POST "https://<toy-box-host>/api/inbox" \
|
|
50
|
+
-H "Content-Type: application/json" \
|
|
51
|
+
-d '{"prompt":"Summarize the latest changes and send the result to my Inbox."}'
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The webhook supports both JSON and multipart form data:
|
|
55
|
+
|
|
56
|
+
| Payload type | Expected payload data |
|
|
57
|
+
| ------------ | ----------------------------------------------------------------------------------------------------------- |
|
|
58
|
+
| JSON | A non-empty `prompt`, with optional base64 `attachments` containing `displayName`, `mimeType`, and `base64` |
|
|
59
|
+
| Form data | `prompt` or `transcription`, with optional files using the field name `attachments` |
|
|
60
|
+
|
|
61
|
+
The same endpoint works with several ready-made integrations:
|
|
62
|
+
|
|
63
|
+
- **Browser extension:** Follow [`browser/README.md`](browser/README.md), then set its server URL to the Toy Box base URL without `/api/inbox`. It can include the current page, selected text, and a viewport screenshot, with toolbar, shortcut, and context-menu actions.
|
|
64
|
+
- **Pebble Index 01:** In CoreApp, open **Index Settings → Webhook**, use the full Inbox URL, and choose **Transcription only**. Toy Box accepts CoreApp's `transcription` field directly; no auth token is required.
|
|
65
|
+
- **QuickCast Hook:** Install it from the [App Store](https://apps.apple.com/us/app/quickcast-hook/id6756369952), then create a `POST` multipart webhook using the full Inbox URL. Enable on-device transcription, name its field `transcription`, and use `attachments` as the file field when sending audio or images.
|
|
26
66
|
|
|
27
67
|
## Developing
|
|
28
68
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lostintangent/toy-box",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.19",
|
|
4
4
|
"description": "Your personal coding agent server",
|
|
5
5
|
"bin": {
|
|
6
6
|
"toy-box": "toy-box"
|
|
@@ -20,20 +20,18 @@
|
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"dev": "TERMINAL_WS_PORT=3101 bun run --parallel \"dev:*\"",
|
|
23
|
-
"dev:app": "
|
|
24
|
-
"dev:terminal": "bun run src/
|
|
25
|
-
"build": "
|
|
23
|
+
"dev:app": "vp dev --port 3100",
|
|
24
|
+
"dev:terminal": "bun run src/features/terminal/server/dev.ts",
|
|
25
|
+
"build": "vp build",
|
|
26
26
|
"build:cli": "bun run build && bun run cli/build.ts",
|
|
27
|
-
"check": "
|
|
28
|
-
"
|
|
29
|
-
"lint": "oxlint",
|
|
30
|
-
"prepare": "lefthook install"
|
|
27
|
+
"check": "vp check",
|
|
28
|
+
"prepare": "vp config --no-agent"
|
|
31
29
|
},
|
|
32
30
|
"dependencies": {},
|
|
33
31
|
"devDependencies": {
|
|
34
32
|
"@babel/core": "^8.0.1",
|
|
35
|
-
"@github/copilot-sdk": "^1.0.
|
|
36
|
-
"@lostintangent/documint": "^0.0.
|
|
33
|
+
"@github/copilot-sdk": "^1.0.11",
|
|
34
|
+
"@lostintangent/documint": "^0.0.35",
|
|
37
35
|
"@lostintangent/leafnode": "^0.0.1",
|
|
38
36
|
"@radix-ui/react-alert-dialog": "^1.1.23",
|
|
39
37
|
"@radix-ui/react-dialog": "^1.1.23",
|
|
@@ -56,56 +54,62 @@
|
|
|
56
54
|
"@tanstack/eslint-plugin-query": "5.101.2",
|
|
57
55
|
"@tanstack/eslint-plugin-router": "1.162.0",
|
|
58
56
|
"@tanstack/pacer": "^0.21.1",
|
|
59
|
-
"@tanstack/react-devtools": "^0.10.
|
|
57
|
+
"@tanstack/react-devtools": "^0.10.12",
|
|
60
58
|
"@tanstack/react-hotkeys": "^0.10.0",
|
|
61
59
|
"@tanstack/react-pacer": "^0.22.1",
|
|
62
|
-
"@tanstack/react-query": "^5.
|
|
63
|
-
"@tanstack/react-router": "^1.170.
|
|
60
|
+
"@tanstack/react-query": "^5.102.6",
|
|
61
|
+
"@tanstack/react-router": "^1.170.32",
|
|
64
62
|
"@tanstack/react-router-devtools": "^1.167.1",
|
|
65
63
|
"@tanstack/react-router-ssr-query": "^1.167.1",
|
|
66
|
-
"@tanstack/react-start": "^1.168.
|
|
67
|
-
"@tanstack/react-store": "^0.11.
|
|
68
|
-
"@tanstack/router-plugin": "^1.168.
|
|
69
|
-
"@tanstack/store": "^0.11.
|
|
64
|
+
"@tanstack/react-start": "^1.168.49",
|
|
65
|
+
"@tanstack/react-store": "^0.11.1",
|
|
66
|
+
"@tanstack/router-plugin": "^1.168.35",
|
|
67
|
+
"@tanstack/store": "^0.11.1",
|
|
68
|
+
"@tanstack/virtual-file-routes": "^1.162.0",
|
|
70
69
|
"@tanstack/zod-adapter": "^1.167.0",
|
|
71
70
|
"@types/node": "^25.9.5",
|
|
72
71
|
"@types/react": "^19.2.18",
|
|
73
|
-
"@types/react-dom": "^19.2.
|
|
74
|
-
"@vitejs/plugin-react": "^6.0
|
|
75
|
-
"@xmldom/xmldom": "^0.9.
|
|
72
|
+
"@types/react-dom": "^19.2.5",
|
|
73
|
+
"@vitejs/plugin-react": "^6.1.0",
|
|
74
|
+
"@xmldom/xmldom": "^0.9.12",
|
|
76
75
|
"@xterm/addon-fit": "^0.11.0",
|
|
77
76
|
"@xterm/addon-unicode11": "^0.9.0",
|
|
78
77
|
"@xterm/addon-webgl": "^0.19.0",
|
|
79
78
|
"@xterm/xterm": "^6.0.0",
|
|
80
79
|
"app-typescript": "npm:typescript@^5.9.3",
|
|
81
80
|
"babel-plugin-react-compiler": "^1.0.0",
|
|
82
|
-
"bun-types": "^1.
|
|
81
|
+
"bun-types": "^1.4.0",
|
|
83
82
|
"citty": "^0.2.2",
|
|
84
83
|
"class-variance-authority": "^0.7.1",
|
|
85
84
|
"clsx": "^2.1.1",
|
|
86
85
|
"cmdk": "^1.1.1",
|
|
87
|
-
"cron-parser": "^5.
|
|
88
|
-
"crossws": "^0.4.
|
|
86
|
+
"cron-parser": "^5.10.0",
|
|
87
|
+
"crossws": "^0.4.12",
|
|
89
88
|
"json-schema-to-ts": "^3.1.1",
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"oxlint": "^1.77.0",
|
|
89
|
+
"lucide-react": "^1.34.0",
|
|
90
|
+
"motion": "^13.1.1",
|
|
91
|
+
"motion-plus": "npm:@motionplus/core@^2.12.0",
|
|
92
|
+
"nitro": "npm:nitro-nightly@3.0.1-20260731-205209-52abde8a",
|
|
93
|
+
"open": "^11.0.1",
|
|
96
94
|
"radix-ui": "^1.6.7",
|
|
97
95
|
"react": "^19.2.8",
|
|
98
96
|
"react-dom": "^19.2.8",
|
|
99
97
|
"react-resizable-panels": "^2.1.9",
|
|
100
98
|
"shiki": "^3.23.0",
|
|
101
|
-
"streamdown": "^2.
|
|
99
|
+
"streamdown": "^2.6.0",
|
|
102
100
|
"tailwind-merge": "^3.6.0",
|
|
103
101
|
"tailwindcss": "^4.3.3",
|
|
104
102
|
"tw-animate-css": "^1.4.0",
|
|
105
|
-
"typescript": "^7.0.2",
|
|
106
103
|
"use-stick-to-bottom": "^1.1.6",
|
|
107
104
|
"vaul": "^1.1.2",
|
|
108
|
-
"vite": "
|
|
105
|
+
"vite": "npm:@voidzero-dev/vite-plus-core@0.2.8",
|
|
106
|
+
"vite-plus": "0.2.8",
|
|
109
107
|
"zod": "^4.4.3"
|
|
108
|
+
},
|
|
109
|
+
"overrides": {
|
|
110
|
+
"motion": "^13.1.1",
|
|
111
|
+
"motion-dom": "^13.0.0",
|
|
112
|
+
"motion-utils": "^13.0.0",
|
|
113
|
+
"vite": "npm:@voidzero-dev/vite-plus-core@0.2.8"
|
|
110
114
|
}
|
|
111
115
|
}
|
package/toy-box
CHANGED
|
Binary file
|