@lostintangent/toy-box 0.1.18 → 0.1.20

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 (3) hide show
  1. package/README.md +49 -9
  2. package/package.json +24 -34
  3. 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 Inbox for asynchronous tasks, and an integrated terminal.
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
- - **Real-time sessions:** Start or resume work and watch responses, reasoning, tool calls, and progress stream in while queuing follow-ups during a run.
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
- - **Cross-device sync:** Install Toy Box as a PWA and keep real-time session status—including running and unread—synchronized across every connected desktop and mobile client.
16
- - **Bidirectional artifacts:** Agent changes appear in editable Markdown, HTML, and SVG views, while your edits are saved to disk and notify the agent; custom viewers can support other formats.
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
- - **Integrated terminal:** Run shell commands from a configurable terminal that works on your desktop and phone and reconnects seamlessly without losing your scrollback.
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 globally: `npm install -g @lostintangent/toy-box`
25
- 1. Start it in any directory: `toy-box <path>`
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.18",
3
+ "version": "0.1.20",
4
4
  "description": "Your personal coding agent server",
5
5
  "bin": {
6
6
  "toy-box": "toy-box"
@@ -29,20 +29,10 @@
29
29
  },
30
30
  "dependencies": {},
31
31
  "devDependencies": {
32
- "@babel/core": "^8.0.1",
33
- "@github/copilot-sdk": "^1.0.11",
34
- "@lostintangent/documint": "^0.0.34",
32
+ "@base-ui/react": "^1.8.0",
33
+ "@github/copilot-sdk": "1.0.13",
34
+ "@lostintangent/documint": "latest",
35
35
  "@lostintangent/leafnode": "^0.0.1",
36
- "@radix-ui/react-alert-dialog": "^1.1.23",
37
- "@radix-ui/react-dialog": "^1.1.23",
38
- "@radix-ui/react-dropdown-menu": "^2.1.24",
39
- "@radix-ui/react-popover": "^1.1.23",
40
- "@radix-ui/react-scroll-area": "^1.2.18",
41
- "@radix-ui/react-select": "^2.3.7",
42
- "@radix-ui/react-separator": "^1.1.15",
43
- "@radix-ui/react-slot": "^1.3.3",
44
- "@radix-ui/react-tooltip": "^1.2.16",
45
- "@rolldown/plugin-babel": "^0.2.3",
46
36
  "@streamdown/code": "^1.1.1",
47
37
  "@tailwindcss/oxide": "^4.3.3",
48
38
  "@tailwindcss/typography": "^0.5.20",
@@ -54,60 +44,60 @@
54
44
  "@tanstack/eslint-plugin-query": "5.101.2",
55
45
  "@tanstack/eslint-plugin-router": "1.162.0",
56
46
  "@tanstack/pacer": "^0.21.1",
57
- "@tanstack/react-devtools": "^0.10.10",
47
+ "@tanstack/react-devtools": "^0.10.12",
58
48
  "@tanstack/react-hotkeys": "^0.10.0",
59
49
  "@tanstack/react-pacer": "^0.22.1",
60
- "@tanstack/react-query": "^5.101.4",
61
- "@tanstack/react-router": "^1.170.29",
50
+ "@tanstack/react-query": "^5.102.8",
51
+ "@tanstack/react-router": "^1.170.33",
62
52
  "@tanstack/react-router-devtools": "^1.167.1",
63
- "@tanstack/react-router-ssr-query": "^1.167.1",
64
- "@tanstack/react-start": "^1.168.46",
53
+ "@tanstack/react-router-ssr-query": "^1.167.2",
54
+ "@tanstack/react-start": "^1.168.50",
65
55
  "@tanstack/react-store": "^0.11.1",
66
- "@tanstack/router-plugin": "^1.168.32",
56
+ "@tanstack/router-plugin": "^1.168.36",
67
57
  "@tanstack/store": "^0.11.1",
68
58
  "@tanstack/virtual-file-routes": "^1.162.0",
69
59
  "@tanstack/zod-adapter": "^1.167.0",
70
60
  "@types/node": "^25.9.5",
71
61
  "@types/react": "^19.2.18",
72
- "@types/react-dom": "^19.2.4",
73
- "@vitejs/plugin-react": "^6.0.5",
74
- "@xmldom/xmldom": "^0.9.11",
62
+ "@types/react-dom": "^19.2.7",
63
+ "@vitejs/plugin-react": "^6.1.1",
64
+ "@xmldom/xmldom": "^0.9.12",
75
65
  "@xterm/addon-fit": "^0.11.0",
76
66
  "@xterm/addon-unicode11": "^0.9.0",
77
67
  "@xterm/addon-webgl": "^0.19.0",
78
68
  "@xterm/xterm": "^6.0.0",
79
69
  "app-typescript": "npm:typescript@^5.9.3",
80
- "babel-plugin-react-compiler": "^1.0.0",
81
- "bun-types": "^1.3.14",
70
+ "bun-types": "^1.4.2",
82
71
  "citty": "^0.2.2",
83
72
  "class-variance-authority": "^0.7.1",
84
73
  "clsx": "^2.1.1",
85
74
  "cmdk": "^1.1.1",
86
75
  "cron-parser": "^5.10.0",
87
- "crossws": "^0.4.10",
76
+ "crossws": "^0.4.12",
77
+ "h3-compression": "1.1.0",
88
78
  "json-schema-to-ts": "^3.1.1",
89
- "lucide-react": "^1.31.0",
90
- "motion": "^13.1.0",
79
+ "lucide-react": "^1.43.0",
80
+ "motion": "^13.2.0",
91
81
  "motion-plus": "npm:@motionplus/core@^2.12.0",
92
82
  "nitro": "npm:nitro-nightly@3.0.1-20260731-205209-52abde8a",
93
- "open": "^11.0.1",
94
- "radix-ui": "^1.6.7",
83
+ "open": "^11.0.2",
84
+ "oxc-transform-react": "0.148.0",
95
85
  "react": "^19.2.8",
96
86
  "react-dom": "^19.2.8",
97
87
  "react-resizable-panels": "^2.1.9",
88
+ "shadcn": "^4.21.0",
98
89
  "shiki": "^3.23.0",
99
- "streamdown": "^2.5.0",
90
+ "streamdown": "^2.6.0",
100
91
  "tailwind-merge": "^3.6.0",
101
92
  "tailwindcss": "^4.3.3",
102
93
  "tw-animate-css": "^1.4.0",
103
94
  "use-stick-to-bottom": "^1.1.6",
104
- "vaul": "^1.1.2",
105
95
  "vite": "npm:@voidzero-dev/vite-plus-core@0.2.8",
106
96
  "vite-plus": "0.2.8",
107
- "zod": "^4.4.3"
97
+ "zod": "^4.5.4"
108
98
  },
109
99
  "overrides": {
110
- "motion": "^13.1.0",
100
+ "motion": "^13.2.0",
111
101
  "motion-dom": "^13.0.0",
112
102
  "motion-utils": "^13.0.0",
113
103
  "vite": "npm:@voidzero-dev/vite-plus-core@0.2.8"
package/toy-box CHANGED
Binary file