@indianic/dialout 1.1.2 → 1.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 +420 -24
- package/bin/AGENTS.md +44 -0
- package/bin/devdash-agent.js +2 -0
- package/dist/ai-adapters/claude.d.ts +3 -0
- package/dist/ai-adapters/claude.d.ts.map +1 -0
- package/dist/ai-adapters/claude.js +98 -0
- package/dist/ai-adapters/claude.js.map +1 -0
- package/dist/ai-adapters/codex.d.ts +3 -0
- package/dist/ai-adapters/codex.d.ts.map +1 -0
- package/dist/ai-adapters/codex.js +147 -0
- package/dist/ai-adapters/codex.js.map +1 -0
- package/dist/ai-adapters/grok.d.ts +3 -0
- package/dist/ai-adapters/grok.d.ts.map +1 -0
- package/dist/ai-adapters/grok.js +164 -0
- package/dist/ai-adapters/grok.js.map +1 -0
- package/dist/ai-adapters/index.d.ts +5 -0
- package/dist/ai-adapters/index.d.ts.map +1 -0
- package/dist/ai-adapters/index.js +30 -0
- package/dist/ai-adapters/index.js.map +1 -0
- package/dist/ai-adapters/types.d.ts +3 -0
- package/dist/ai-adapters/types.d.ts.map +1 -0
- package/dist/ai-adapters/types.js +7 -0
- package/dist/ai-adapters/types.js.map +1 -0
- package/dist/ai-capabilities/claude.d.ts +4 -0
- package/dist/ai-capabilities/claude.d.ts.map +1 -0
- package/dist/ai-capabilities/claude.js +174 -0
- package/dist/ai-capabilities/claude.js.map +1 -0
- package/dist/ai-capabilities/describe.d.ts +2 -0
- package/dist/ai-capabilities/describe.d.ts.map +1 -0
- package/dist/ai-capabilities/describe.js +31 -0
- package/dist/ai-capabilities/describe.js.map +1 -0
- package/dist/ai-capabilities/fsdeps.d.ts +3 -0
- package/dist/ai-capabilities/fsdeps.d.ts.map +1 -0
- package/dist/ai-capabilities/fsdeps.js +71 -0
- package/dist/ai-capabilities/fsdeps.js.map +1 -0
- package/dist/ai-capabilities/grok.d.ts +5 -0
- package/dist/ai-capabilities/grok.d.ts.map +1 -0
- package/dist/ai-capabilities/grok.js +145 -0
- package/dist/ai-capabilities/grok.js.map +1 -0
- package/dist/ai-capabilities/index.d.ts +4 -0
- package/dist/ai-capabilities/index.d.ts.map +1 -0
- package/dist/ai-capabilities/index.js +94 -0
- package/dist/ai-capabilities/index.js.map +1 -0
- package/dist/ai-capabilities/redact.d.ts +2 -0
- package/dist/ai-capabilities/redact.d.ts.map +1 -0
- package/dist/ai-capabilities/redact.js +27 -0
- package/dist/ai-capabilities/redact.js.map +1 -0
- package/dist/ai-capabilities/types.d.ts +11 -0
- package/dist/ai-capabilities/types.d.ts.map +1 -0
- package/dist/ai-capabilities/types.js +3 -0
- package/dist/ai-capabilities/types.js.map +1 -0
- package/dist/ai-launch.d.ts +35 -0
- package/dist/ai-launch.d.ts.map +1 -0
- package/dist/ai-launch.js +211 -0
- package/dist/ai-launch.js.map +1 -0
- package/dist/ai-session-detector.d.ts +19 -0
- package/dist/ai-session-detector.d.ts.map +1 -0
- package/dist/ai-session-detector.js +79 -0
- package/dist/ai-session-detector.js.map +1 -0
- package/dist/ai-sessions.d.ts +36 -0
- package/dist/ai-sessions.d.ts.map +1 -0
- package/dist/ai-sessions.js +309 -0
- package/dist/ai-sessions.js.map +1 -0
- package/dist/ai-status.d.ts +6 -0
- package/dist/ai-status.d.ts.map +1 -0
- package/dist/ai-status.js +40 -0
- package/dist/ai-status.js.map +1 -0
- package/dist/ai-transcript-locator.d.ts +35 -0
- package/dist/ai-transcript-locator.d.ts.map +1 -0
- package/dist/ai-transcript-locator.js +268 -0
- package/dist/ai-transcript-locator.js.map +1 -0
- package/dist/ai-transcript-tail.d.ts +17 -0
- package/dist/ai-transcript-tail.d.ts.map +1 -0
- package/dist/ai-transcript-tail.js +120 -0
- package/dist/ai-transcript-tail.js.map +1 -0
- package/dist/checklist.d.ts +20 -0
- package/dist/checklist.d.ts.map +1 -0
- package/dist/checklist.js +51 -0
- package/dist/checklist.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1427 -0
- package/dist/cli.js.map +1 -0
- package/dist/command-runner.d.ts +15 -0
- package/dist/command-runner.d.ts.map +1 -0
- package/dist/command-runner.js +84 -0
- package/dist/command-runner.js.map +1 -0
- package/dist/config.d.ts +41 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +152 -0
- package/dist/config.js.map +1 -0
- package/dist/cowork.d.ts +26 -0
- package/dist/cowork.d.ts.map +1 -0
- package/dist/cowork.js +370 -0
- package/dist/cowork.js.map +1 -0
- package/dist/fs-browser.d.ts +6 -0
- package/dist/fs-browser.d.ts.map +1 -0
- package/dist/fs-browser.js +61 -0
- package/dist/fs-browser.js.map +1 -0
- package/dist/has-command.d.ts +12 -0
- package/dist/has-command.d.ts.map +1 -0
- package/dist/has-command.js +24 -0
- package/dist/has-command.js.map +1 -0
- package/dist/heartbeat.d.ts +7 -0
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +50 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/port-scanner.d.ts +4 -0
- package/dist/port-scanner.d.ts.map +1 -0
- package/dist/port-scanner.js +75 -0
- package/dist/port-scanner.js.map +1 -0
- package/dist/project-scanner.d.ts +15 -0
- package/dist/project-scanner.d.ts.map +1 -0
- package/dist/project-scanner.js +333 -0
- package/dist/project-scanner.js.map +1 -0
- package/dist/pty-manager.d.ts +28 -0
- package/dist/pty-manager.d.ts.map +1 -0
- package/dist/pty-manager.js +506 -0
- package/dist/pty-manager.js.map +1 -0
- package/dist/service-installer.d.ts +95 -0
- package/dist/service-installer.d.ts.map +1 -0
- package/dist/service-installer.js +911 -0
- package/dist/service-installer.js.map +1 -0
- package/dist/single-instance.d.ts +20 -0
- package/dist/single-instance.d.ts.map +1 -0
- package/dist/single-instance.js +151 -0
- package/dist/single-instance.js.map +1 -0
- package/dist/ssh-local-network.d.ts +26 -0
- package/dist/ssh-local-network.d.ts.map +1 -0
- package/dist/ssh-local-network.js +169 -0
- package/dist/ssh-local-network.js.map +1 -0
- package/dist/terminal-detect.d.ts +52 -0
- package/dist/terminal-detect.d.ts.map +1 -0
- package/dist/terminal-detect.js +147 -0
- package/dist/terminal-detect.js.map +1 -0
- package/dist/terminal-markers.d.ts +52 -0
- package/dist/terminal-markers.d.ts.map +1 -0
- package/dist/terminal-markers.js +174 -0
- package/dist/terminal-markers.js.map +1 -0
- package/dist/tmux-manager.d.ts +35 -0
- package/dist/tmux-manager.d.ts.map +1 -0
- package/dist/tmux-manager.js +274 -0
- package/dist/tmux-manager.js.map +1 -0
- package/dist/update-check.d.ts +3 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +202 -0
- package/dist/update-check.js.map +1 -0
- package/dist/websocket.d.ts +8 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +472 -0
- package/dist/websocket.js.map +1 -0
- package/node_modules/@dialout/shared/README.md +16 -0
- package/node_modules/@dialout/shared/dist/ai-chat-prefs.d.ts +8 -0
- package/node_modules/@dialout/shared/dist/ai-chat-prefs.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/ai-chat-prefs.js +41 -0
- package/node_modules/@dialout/shared/dist/capabilities.d.ts +25 -0
- package/node_modules/@dialout/shared/dist/capabilities.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/capabilities.js +2 -0
- package/node_modules/@dialout/shared/dist/chat-blocks.d.ts +33 -0
- package/node_modules/@dialout/shared/dist/chat-blocks.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/chat-blocks.js +61 -0
- package/node_modules/@dialout/shared/dist/command-filter.d.ts +4 -0
- package/node_modules/@dialout/shared/dist/command-filter.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/command-filter.js +49 -0
- package/node_modules/@dialout/shared/dist/composer-behaviour.d.ts +6 -0
- package/node_modules/@dialout/shared/dist/composer-behaviour.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/composer-behaviour.js +24 -0
- package/node_modules/@dialout/shared/dist/events.d.ts +37 -0
- package/node_modules/@dialout/shared/dist/events.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/events.js +13 -0
- package/node_modules/@dialout/shared/dist/index.d.ts +21 -0
- package/node_modules/@dialout/shared/dist/index.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/index.js +37 -0
- package/node_modules/@dialout/shared/dist/kinds.d.ts +2 -0
- package/node_modules/@dialout/shared/dist/kinds.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/kinds.js +2 -0
- package/node_modules/@dialout/shared/dist/notify.d.ts +3 -0
- package/node_modules/@dialout/shared/dist/notify.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/notify.js +31 -0
- package/node_modules/@dialout/shared/dist/permission.d.ts +4 -0
- package/node_modules/@dialout/shared/dist/permission.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/permission.js +8 -0
- package/node_modules/@dialout/shared/dist/scroll-pin.d.ts +3 -0
- package/node_modules/@dialout/shared/dist/scroll-pin.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/scroll-pin.js +11 -0
- package/node_modules/@dialout/shared/dist/session.d.ts +19 -0
- package/node_modules/@dialout/shared/dist/session.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/session.js +6 -0
- package/node_modules/@dialout/shared/dist/terminal-name.d.ts +25 -0
- package/node_modules/@dialout/shared/dist/terminal-name.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/terminal-name.js +63 -0
- package/node_modules/@dialout/shared/dist/tool-appearance.d.ts +9 -0
- package/node_modules/@dialout/shared/dist/tool-appearance.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/tool-appearance.js +30 -0
- package/node_modules/@dialout/shared/package.json +37 -0
- package/node_modules/@dialout/shared/src/ai-chat-prefs.test.ts +40 -0
- package/node_modules/@dialout/shared/src/ai-chat-prefs.ts +39 -0
- package/node_modules/@dialout/shared/src/capabilities.ts +30 -0
- package/node_modules/@dialout/shared/src/chat-blocks.test.ts +65 -0
- package/node_modules/@dialout/shared/src/chat-blocks.ts +79 -0
- package/node_modules/@dialout/shared/src/command-filter.test.ts +76 -0
- package/node_modules/@dialout/shared/src/command-filter.ts +45 -0
- package/node_modules/@dialout/shared/src/composer-behaviour.test.ts +31 -0
- package/node_modules/@dialout/shared/src/composer-behaviour.ts +22 -0
- package/node_modules/@dialout/shared/src/events.ts +27 -0
- package/node_modules/@dialout/shared/src/index.ts +32 -0
- package/node_modules/@dialout/shared/src/kinds.ts +5 -0
- package/node_modules/@dialout/shared/src/notify.test.ts +49 -0
- package/node_modules/@dialout/shared/src/notify.ts +30 -0
- package/node_modules/@dialout/shared/src/permission.ts +10 -0
- package/node_modules/@dialout/shared/src/scroll-pin.test.ts +23 -0
- package/node_modules/@dialout/shared/src/scroll-pin.ts +13 -0
- package/node_modules/@dialout/shared/src/session.ts +25 -0
- package/node_modules/@dialout/shared/src/terminal-name.ts +82 -0
- package/node_modules/@dialout/shared/src/tool-appearance.test.ts +41 -0
- package/node_modules/@dialout/shared/src/tool-appearance.ts +39 -0
- package/package.json +54 -14
- package/scripts/postinstall.js +79 -0
- package/scripts/prepack.js +45 -0
- package/bin/dialout.js +0 -13
package/README.md
CHANGED
|
@@ -1,45 +1,441 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="https://raw.githubusercontent.com/indianic/dialout/main/docs/assets/logo.svg" width="88" height="88" alt="Dialout">
|
|
4
|
+
|
|
1
5
|
# @indianic/dialout
|
|
2
6
|
|
|
3
|
-
**
|
|
7
|
+
**Your machines, one room. The agent dials out, so nothing has to dial in.**
|
|
8
|
+
|
|
9
|
+
<sub>The package is scoped; the command it installs is plain `dialout`.</sub>
|
|
10
|
+
|
|
11
|
+
[](https://www.npmjs.com/package/@indianic/dialout)
|
|
12
|
+
[](https://github.com/indianic/dialout/blob/main/LICENSE)
|
|
13
|
+
[](https://nodejs.org)
|
|
14
|
+
[](#requirements)
|
|
15
|
+
|
|
16
|
+
**[dialout.dev](https://www.dialout.dev)** · [GitHub](https://github.com/indianic/dialout) · [Get started](#getting-started) · [CLI reference](#cli-reference) · [Troubleshooting](#troubleshooting)
|
|
17
|
+
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
**This is the agent for [Dialout](https://www.dialout.dev), a free, open-source,
|
|
23
|
+
self-hosted remote development dashboard.** Install it on any computer you code
|
|
24
|
+
on — your office desktop, your home machine, a build box — and that machine
|
|
25
|
+
appears in your Dialout dashboard, reachable from any browser or your phone.
|
|
26
|
+
|
|
27
|
+
The agent connects **outbound** to your server and holds the socket open. There
|
|
28
|
+
is no inbound port to open, no VPN to join, and no port forwarding to configure.
|
|
29
|
+
If the machine can reach the internet, you can reach the machine.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install -g @indianic/dialout
|
|
33
|
+
dialout init
|
|
34
|
+
dialout install-service
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## The problem it solves
|
|
40
|
+
|
|
41
|
+
You are away from your desk and you need to know what your machine is doing.
|
|
42
|
+
Today that means being at the machine, or reassembling the answer by hand:
|
|
43
|
+
|
|
44
|
+
```console
|
|
45
|
+
$ lsof -i :3000 # which project is this, again?
|
|
46
|
+
node 41287 you 26u IPv6 TCP *:3000 (LISTEN)
|
|
47
|
+
|
|
48
|
+
$ ssh build-box # the other four ports are on a different box
|
|
49
|
+
you@build-box:~$ pm2 list
|
|
50
|
+
you@build-box:~$ cat apps/checkout/.env | grep STRIPE_
|
|
51
|
+
|
|
52
|
+
$ tmux ls # and the migration I started on Friday?
|
|
53
|
+
0: 1 windows 1: 1 windows # no idea which one
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Four terminals, three machines, and the only index is your memory. Run six
|
|
57
|
+
projects for a year and *"which port was the admin panel on?"* becomes a
|
|
58
|
+
genuinely hard question that nothing in your toolchain is keeping the answer to.
|
|
59
|
+
Meanwhile an AI coding agent is running a 40-minute task on that machine and
|
|
60
|
+
will sit and wait for an answer the moment you walk away.
|
|
61
|
+
|
|
62
|
+
With the agent installed, all of that is one URL — from a phone if that is what
|
|
63
|
+
you have on you:
|
|
64
|
+
|
|
65
|
+
- **Search a port, keep the answer.** Scan a range, find what is listening, save
|
|
66
|
+
it as a project. `:3000` becomes *Checkout, on the office Mac, running.*
|
|
67
|
+
- **Open a real terminal, from anywhere** — straight into the project folder.
|
|
68
|
+
- **Answer your AI agent from your phone.** Claude Code, Codex and Grok sessions
|
|
69
|
+
rendered as chat, with a push when one is waiting on you.
|
|
70
|
+
- **Share a project with a teammate**, with notes and todos attached to the
|
|
71
|
+
project instead of a chat thread.
|
|
72
|
+
- **Put `localhost` on a public URL** for a demo, a webhook, or a test device.
|
|
73
|
+
|
|
74
|
+
<img src="https://raw.githubusercontent.com/indianic/dialout/main/docs/assets/screenshots/hero.png" alt="The Dialout dashboard: projects across every machine, with live port status">
|
|
75
|
+
|
|
76
|
+
## What the agent does
|
|
77
|
+
|
|
78
|
+
- **Port scanning** — scans local ports on demand and reports what is listening
|
|
79
|
+
- **Terminal sessions** — tmux-backed PTYs streamed to the browser over WebSocket
|
|
80
|
+
- **AI session tailing** — follows the JSONL transcript each AI CLI already
|
|
81
|
+
writes, so sessions render as chat without ever scraping the terminal UI
|
|
82
|
+
- **Filesystem browsing** — lists directories for the path picker
|
|
83
|
+
- **Process control** — runs the quick-launch commands you saved per project
|
|
84
|
+
- **HTTP tunnel origin** — serves your local dev server through the public URL
|
|
85
|
+
- **Heartbeat** — a persistent connection with a 30 s keep-alive
|
|
86
|
+
|
|
87
|
+
## Requirements
|
|
88
|
+
|
|
89
|
+
- Node.js 18 or newer
|
|
90
|
+
- macOS or Linux
|
|
91
|
+
- A running [Dialout server](https://github.com/indianic/dialout) — it is
|
|
92
|
+
self-hosted, so this is your server, on your infrastructure
|
|
93
|
+
|
|
94
|
+
## Getting started
|
|
95
|
+
|
|
96
|
+
Six steps, about ten minutes. You need a Dialout **server** — one, shared by all
|
|
97
|
+
your machines — and this agent on each machine you want to reach.
|
|
98
|
+
|
|
99
|
+
### 1 · Get a server
|
|
100
|
+
|
|
101
|
+
Pick one:
|
|
102
|
+
|
|
103
|
+
- **Self-host it.** Clone [github.com/indianic/dialout](https://github.com/indianic/dialout)
|
|
104
|
+
and follow the README. One PostgreSQL database and two Node processes; your
|
|
105
|
+
data stays on your infrastructure. This is the intended path.
|
|
106
|
+
- **Use [dialout.dev](https://www.dialout.dev).** A public instance running the
|
|
107
|
+
same code, if you want to look around before committing to hosting it. You can
|
|
108
|
+
repoint the agent at your own server later with one command.
|
|
109
|
+
|
|
110
|
+
### 2 · Create your account
|
|
111
|
+
|
|
112
|
+
Open your server and sign up with your email, then complete **two-factor
|
|
113
|
+
enrolment** — scan the QR code with any TOTP app. It is not skippable, and the
|
|
114
|
+
API enforces it independently of the interface, because this is a tool that
|
|
115
|
+
opens terminals on your machines.
|
|
116
|
+
|
|
117
|
+
### 3 · Add the machine and generate its key
|
|
118
|
+
|
|
119
|
+
In the dashboard, **Settings → Machines → Add machine**. Give it a name you will
|
|
120
|
+
recognise (`office-mac`, `home-desktop`, `build-box`), then click **Generate
|
|
121
|
+
key**.
|
|
122
|
+
|
|
123
|
+
You get an `mch_…` key. **Copy it now — it is shown once and stored only as a
|
|
124
|
+
hash.** Generate a new one at any time if you lose it.
|
|
125
|
+
|
|
126
|
+
### 4 · Install the agent
|
|
127
|
+
|
|
128
|
+
On the computer you just registered:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
npm install -g @indianic/dialout
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 5 · Point it at your server
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
dialout init
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
It asks for two things:
|
|
141
|
+
|
|
142
|
+
| Prompt | What to paste |
|
|
143
|
+
| --- | --- |
|
|
144
|
+
| **Server URL** | The WebSocket base — `wss://www.dialout.dev/ws`, or `ws://localhost:50052` for a local server. The agent appends `/daemon` itself. |
|
|
145
|
+
| **API key** | The `mch_…` key from step 3 |
|
|
146
|
+
|
|
147
|
+
Configuration is written to `~/.dialout/config.json`. `init` then offers to
|
|
148
|
+
install the OS service for you — choose **at boot** if you want the machine
|
|
149
|
+
reachable before anyone logs into the desktop session, which on a machine you
|
|
150
|
+
are trying to reach remotely is almost always what you want.
|
|
151
|
+
|
|
152
|
+
To run it in the foreground once, before committing to a service:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
dialout start # Ctrl-C to stop
|
|
156
|
+
dialout start --daemon # or in the background
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 6 · Install as a service and verify
|
|
160
|
+
|
|
161
|
+
If you skipped the offer in `init`, two modes — chosen by whether you need the
|
|
162
|
+
agent running **before** login:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
dialout install-service # per-user — starts at LOGIN (no sudo)
|
|
166
|
+
dialout install-service --system # system — starts at BOOT (needs sudo)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
| Mode | macOS | Linux | Starts |
|
|
170
|
+
|------|-------|-------|--------|
|
|
171
|
+
| default | LaunchAgent `~/Library/LaunchAgents/com.dialout.agent.plist` | systemd user unit `~/.config/systemd/user/dialout.service` | at login |
|
|
172
|
+
| `--system` | LaunchDaemon `/Library/LaunchDaemons/com.dialout.agent.plist` | systemd system unit `/etc/systemd/system/dialout.service` | at boot |
|
|
173
|
+
|
|
174
|
+
Both modes restart the agent automatically if it crashes or is killed.
|
|
175
|
+
|
|
176
|
+
<details>
|
|
177
|
+
<summary><b>Finishing a <code>--system</code> install by hand</b></summary>
|
|
178
|
+
|
|
179
|
+
<br>
|
|
180
|
+
|
|
181
|
+
A boot service must be owned by root, so a non-root CLI cannot install it
|
|
182
|
+
directly. Run as a normal user, `install-service --system` **stages** the unit
|
|
183
|
+
file and prints the exact commands to finish. Run `sudo dialout install-service
|
|
184
|
+
--system` instead and it does all of this for you.
|
|
185
|
+
|
|
186
|
+
**macOS**
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
sudo bash -c 'cp ~/.dialout/com.dialout.agent.plist /Library/LaunchDaemons/com.dialout.agent.plist \
|
|
190
|
+
&& chown root:wheel /Library/LaunchDaemons/com.dialout.agent.plist \
|
|
191
|
+
&& chmod 644 /Library/LaunchDaemons/com.dialout.agent.plist \
|
|
192
|
+
&& launchctl bootstrap system /Library/LaunchDaemons/com.dialout.agent.plist'
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Replace `~` with the absolute path the command printed (e.g.
|
|
196
|
+
`/Users/you/.dialout/…`) — under `sudo`, `~` resolves to root's home, not yours.
|
|
197
|
+
|
|
198
|
+
**Linux**
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
sudo cp ~/.dialout/dialout.service /etc/systemd/system/dialout.service
|
|
202
|
+
sudo systemctl daemon-reload
|
|
203
|
+
sudo systemctl enable --now dialout
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
</details>
|
|
207
|
+
|
|
208
|
+
Then check it:
|
|
4
209
|
|
|
5
210
|
```bash
|
|
6
|
-
|
|
211
|
+
dialout status
|
|
7
212
|
```
|
|
8
213
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
214
|
+
```
|
|
215
|
+
Dialout Agent Status
|
|
216
|
+
────────────────────────────────────────────
|
|
217
|
+
Server: wss://www.dialout.dev/ws
|
|
218
|
+
API Key: ****K27F
|
|
219
|
+
Config: /Users/you/.dialout/config.json
|
|
220
|
+
Service: installed (launchd, at boot)
|
|
221
|
+
Cron: not installed
|
|
222
|
+
Process: running (PID: 12345, managed by launchd)
|
|
223
|
+
────────────────────────────────────────────
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
The machine now shows green in the dashboard and its ports go live. `status`
|
|
227
|
+
reports the **service-managed** process, not just a `--daemon` PID file, so a
|
|
228
|
+
service-installed agent that is up always shows `running` with the live PID.
|
|
229
|
+
|
|
230
|
+
Repeat steps 3 to 6 for every other machine you want in the room.
|
|
231
|
+
|
|
232
|
+
## CLI reference
|
|
233
|
+
|
|
234
|
+
| Command | Description |
|
|
235
|
+
|---------|-------------|
|
|
236
|
+
| `dialout init` | Configure server URL and API key, and optionally install the service |
|
|
237
|
+
| `dialout start` | Start in the foreground (Ctrl-C to stop) |
|
|
238
|
+
| `dialout start --daemon` | Start in the background |
|
|
239
|
+
| `dialout stop` | Stop a background agent |
|
|
240
|
+
| `dialout restart` | Stop and start again |
|
|
241
|
+
| `dialout status` | Connection state, service state, and the live PID |
|
|
242
|
+
| `dialout install-service` | Install as an OS service — starts at **login** |
|
|
243
|
+
| `dialout install-service --system` | Install as an OS service — starts at **boot** (needs sudo) |
|
|
244
|
+
| `dialout uninstall-service` | Remove the OS service, either mode |
|
|
245
|
+
| `dialout setup-cron` | Install a cron watchdog that restarts the agent if it dies |
|
|
246
|
+
| `dialout remove-cron` | Remove the cron watchdog |
|
|
247
|
+
| `dialout setup-cowork` | Wire your shell rc so native terminals join the same tmux session |
|
|
248
|
+
| `dialout repair` | Diagnose and fix a stale or competing supervisor |
|
|
249
|
+
| `dialout profiles` / `dialout use <profile>` | Switch between saved server configurations |
|
|
250
|
+
| `dialout update` | Update to the latest published version |
|
|
251
|
+
| `dialout config show` \| `path` \| `set <key> <value>` \| `reset` | Inspect and edit configuration |
|
|
252
|
+
| `dialout --version` \| `--help` | Version and help |
|
|
253
|
+
|
|
254
|
+
## Configuration
|
|
255
|
+
|
|
256
|
+
Config file: `~/.dialout/config.json`
|
|
257
|
+
|
|
258
|
+
```json
|
|
259
|
+
{
|
|
260
|
+
"serverUrl": "wss://dialout.example.com/ws",
|
|
261
|
+
"apiKey": "mch_xxxxxxxxxxxx",
|
|
262
|
+
"scanPorts": [3000, 3001, 4200, 5173, 8000, 8080, 9000],
|
|
263
|
+
"scanRange": { "from": 3000, "to": 9000 },
|
|
264
|
+
"heartbeatInterval": 30000
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
| Key | Default | Description |
|
|
269
|
+
|-----|---------|-------------|
|
|
270
|
+
| `serverUrl` | — | WebSocket base URL of your Dialout server; the agent appends `/daemon` |
|
|
271
|
+
| `apiKey` | — | The machine's `mch_…` key, generated in the web UI |
|
|
272
|
+
| `scanPorts` | common dev ports | Specific ports to check on a quick scan |
|
|
273
|
+
| `scanRange` | 3000–9000 | Port range for a full scan |
|
|
274
|
+
| `heartbeatInterval` | 30000 | Keep-alive interval, in milliseconds |
|
|
275
|
+
|
|
276
|
+
## How it works
|
|
277
|
+
|
|
278
|
+
```
|
|
279
|
+
┌──────────────────┐ outbound ┌──────────────────┐ HTTPS ┌──────────┐
|
|
280
|
+
│ dialout agent │ ===========▶ │ Dialout server │ ◀──────────▶ │ Browser │
|
|
281
|
+
│ (your machine) │ WSS │ (yours, self- │ │ or phone │
|
|
282
|
+
│ │ │ hosted) │ │ │
|
|
283
|
+
│ · port scanner │ │ · relay │ │ · xterm │
|
|
284
|
+
│ · PTY / tmux │ │ · auth │ │ · UI │
|
|
285
|
+
│ · AI transcripts│ │ · recording │ │ │
|
|
286
|
+
│ · FS browser │ │ · tunnel │ │ │
|
|
287
|
+
└──────────────────┘ └──────────────────┘ └──────────┘
|
|
288
|
+
nothing dials in ▲ the arrow only ever points this way
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
1. The agent connects outbound to `<serverUrl>/daemon` over WebSocket. No
|
|
292
|
+
inbound port is needed on the machine.
|
|
293
|
+
2. The server authenticates it with the `X-API-Key` header, SHA-256 compared
|
|
294
|
+
against the stored hash.
|
|
295
|
+
3. Browser requests — port scan, terminal, browse, run command — are relayed
|
|
296
|
+
through the server to the agent.
|
|
297
|
+
4. Terminal I/O streams browser ↔ server ↔ agent ↔ local PTY.
|
|
298
|
+
|
|
299
|
+
## Service management
|
|
300
|
+
|
|
301
|
+
Logs for both modes are written to `~/.dialout/logs/`.
|
|
302
|
+
|
|
303
|
+
<details>
|
|
304
|
+
<summary><b>macOS (launchd)</b></summary>
|
|
13
305
|
|
|
14
|
-
>
|
|
15
|
-
> binary, and npm will not overwrite an existing command — installing the second
|
|
16
|
-
> one globally fails with `EEXIST`. If you have one and want the other, remove
|
|
17
|
-
> the first: `npm uninstall -g dialout` or
|
|
18
|
-
> `npm uninstall -g @indianic/dialout`.
|
|
306
|
+
<br>
|
|
19
307
|
|
|
20
|
-
|
|
308
|
+
```bash
|
|
309
|
+
dialout status
|
|
310
|
+
launchctl print gui/$(id -u)/com.dialout.agent # login agent
|
|
311
|
+
sudo launchctl print system/com.dialout.agent # boot daemon
|
|
21
312
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
package in the wrong place and get a 404:
|
|
313
|
+
tail -f ~/.dialout/logs/stdout.log
|
|
314
|
+
tail -f ~/.dialout/logs/stderr.log
|
|
25
315
|
|
|
316
|
+
dialout uninstall-service
|
|
317
|
+
# a boot daemon also needs:
|
|
318
|
+
sudo launchctl bootout system /Library/LaunchDaemons/com.dialout.agent.plist \
|
|
319
|
+
&& sudo rm /Library/LaunchDaemons/com.dialout.agent.plist
|
|
26
320
|
```
|
|
27
|
-
|
|
321
|
+
|
|
322
|
+
</details>
|
|
323
|
+
|
|
324
|
+
<details>
|
|
325
|
+
<summary><b>Linux (systemd)</b></summary>
|
|
326
|
+
|
|
327
|
+
<br>
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
systemctl --user status dialout # login
|
|
331
|
+
systemctl status dialout # boot
|
|
332
|
+
|
|
333
|
+
journalctl --user -u dialout -f # login
|
|
334
|
+
journalctl -u dialout -f # boot
|
|
335
|
+
|
|
336
|
+
dialout uninstall-service
|
|
28
337
|
```
|
|
29
338
|
|
|
30
|
-
|
|
31
|
-
|
|
339
|
+
</details>
|
|
340
|
+
|
|
341
|
+
## Troubleshooting
|
|
342
|
+
|
|
343
|
+
**The agent will not connect.**
|
|
344
|
+
Run `dialout status` first — it shows the config and the service state together.
|
|
345
|
+
A **401** means the API key is not registered for any machine; it is *not* a
|
|
346
|
+
wrong-URL problem. Regenerate the key in the web UI and
|
|
347
|
+
`dialout config set apiKey mch_…`. Check that `serverUrl` is the WebSocket base
|
|
348
|
+
(`wss://host/ws`) and does **not** include `/daemon`. The agent connects
|
|
349
|
+
outbound over TLS on 443, so an outbound firewall is the other thing to check.
|
|
350
|
+
|
|
351
|
+
**"not running" right after a reboot.**
|
|
352
|
+
A *login* service only starts once you log into the desktop session. For a
|
|
353
|
+
headless machine, or one you want to reach before login, use
|
|
354
|
+
`install-service --system`. At boot DNS may not be up yet, so a brief
|
|
355
|
+
`getaddrinfo ENOTFOUND` in `stderr.log` is expected — the agent retries every
|
|
356
|
+
5 s and connects when the network arrives.
|
|
357
|
+
|
|
358
|
+
**Terminals do not work.**
|
|
359
|
+
Confirm the logs say *Connected and ready*, then check `node-pty`:
|
|
360
|
+
`node -e "require('node-pty')"`. If it fails, `npm rebuild node-pty`.
|
|
361
|
+
|
|
362
|
+
**The service will not start.**
|
|
363
|
+
macOS: read `~/.dialout/logs/stderr.log`. Linux:
|
|
364
|
+
`journalctl --user -u dialout` (drop `--user` for a `--system` install). Make
|
|
365
|
+
sure `dialout init` ran before the service was installed. If a previous
|
|
366
|
+
supervisor is stuck, `dialout repair` diagnoses and clears it.
|
|
367
|
+
|
|
368
|
+
## Upgrading from an earlier package name
|
|
369
|
+
|
|
370
|
+
This agent has been published under three names. If you have an older one
|
|
371
|
+
installed, remove it first — they all provide the same `dialout` command, and
|
|
372
|
+
npm will not overwrite an existing binary:
|
|
32
373
|
|
|
33
374
|
```bash
|
|
34
|
-
|
|
375
|
+
dialout uninstall-service # stop the old service
|
|
376
|
+
|
|
377
|
+
npm uninstall -g dialout # the unscoped name (deprecated)
|
|
378
|
+
npm uninstall -g @indianic/devdash-agent # the original private package
|
|
379
|
+
|
|
380
|
+
npm install -g @indianic/dialout
|
|
381
|
+
dialout install-service --system # or without --system for a login service
|
|
382
|
+
dialout status
|
|
35
383
|
```
|
|
36
384
|
|
|
37
|
-
|
|
38
|
-
|
|
385
|
+
Your configuration is untouched by any of this. `~/.dialout/config.json` stays
|
|
386
|
+
where it is, and a much older `~/.devdash-agent` is **copied** rather than moved
|
|
387
|
+
on first run, so no re-`init` is needed.
|
|
388
|
+
|
|
389
|
+
> **On an IndiaNIC machine, check your `~/.npmrc` first.** A line reading
|
|
390
|
+
> `@indianic:registry=https://npm.indianic.in/` points the whole scope at a
|
|
391
|
+
> retired private registry, and this package will 404 until it is removed.
|
|
392
|
+
|
|
393
|
+
## The mobile app
|
|
394
|
+
|
|
395
|
+
Native **iOS and Android** apps are coming soon to the App Store and Google
|
|
396
|
+
Play. Until then the web dashboard installs as a PWA — *Add to Home Screen* —
|
|
397
|
+
with push notifications on both platforms today.
|
|
398
|
+
|
|
399
|
+
## Changelog
|
|
400
|
+
|
|
401
|
+
Release history is in
|
|
402
|
+
[CHANGELOG.md](https://github.com/indianic/dialout/blob/main/packages/devdash-agent/CHANGELOG.md).
|
|
403
|
+
Note that entries below 1.0.0 are numbered 2.x: the agent shipped privately as
|
|
404
|
+
`@indianic/devdash-agent` and reached 2.7.4 before the open-source release reset
|
|
405
|
+
it to 1.0.0.
|
|
406
|
+
|
|
407
|
+
## Contributing and issues
|
|
408
|
+
|
|
409
|
+
The whole project is open source at
|
|
410
|
+
**[github.com/indianic/dialout](https://github.com/indianic/dialout)**. Bugs and
|
|
411
|
+
feature requests go in
|
|
412
|
+
[Issues](https://github.com/indianic/dialout/issues); see
|
|
413
|
+
[CONTRIBUTING.md](https://github.com/indianic/dialout/blob/main/CONTRIBUTING.md).
|
|
414
|
+
Security reports go to the process in
|
|
415
|
+
[SECURITY.md](https://github.com/indianic/dialout/blob/main/SECURITY.md).
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
<div align="center">
|
|
420
|
+
|
|
421
|
+
Built by **[Sandeep Mundra](mailto:sandeep@indianic.com)**, CTO of IndiaNIC, to
|
|
422
|
+
solve a problem he had himself — working on his office and home machines from
|
|
423
|
+
wherever he happened to be.
|
|
424
|
+
|
|
425
|
+
<sub>Sponsored and maintained by</sub>
|
|
426
|
+
|
|
427
|
+
### [IndiaNIC Infotech Ltd](https://www.indianic.com)
|
|
428
|
+
|
|
429
|
+
[](https://www.indianic.com)
|
|
430
|
+
[](mailto:hello@indianic.com)
|
|
431
|
+
|
|
432
|
+
</div>
|
|
39
433
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
434
|
+
Dialout is free and MIT licensed, and always will be. If you want it customised
|
|
435
|
+
for your team, integrated with your stack, or deployed and run for you, that is
|
|
436
|
+
what IndiaNIC does — reach us at
|
|
437
|
+
**[hello@indianic.com](mailto:hello@indianic.com)** or
|
|
438
|
+
**[www.indianic.com](https://www.indianic.com)**.
|
|
43
439
|
|
|
44
440
|
## Licence
|
|
45
441
|
|
package/bin/AGENTS.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!-- Parent: ../AGENTS.md -->
|
|
2
|
+
<!-- Generated: 2026-08-21 | Updated: 2026-08-21 -->
|
|
3
|
+
|
|
4
|
+
# bin
|
|
5
|
+
|
|
6
|
+
## Purpose
|
|
7
|
+
|
|
8
|
+
npm bin shim. `package.json` `"bin": { "devdash-agent": "./bin/devdash-agent.js" }`.
|
|
9
|
+
|
|
10
|
+
## Key Files
|
|
11
|
+
|
|
12
|
+
| File | Description |
|
|
13
|
+
|------|-------------|
|
|
14
|
+
| `devdash-agent.js` | Shebang wrapper that loads `dist/` CLI. |
|
|
15
|
+
|
|
16
|
+
## Subdirectories
|
|
17
|
+
|
|
18
|
+
None.
|
|
19
|
+
|
|
20
|
+
## For AI Agents
|
|
21
|
+
|
|
22
|
+
### Working In This Directory
|
|
23
|
+
|
|
24
|
+
Don't put logic here — keep it a thin require/import of `dist`. After changing `src/cli.ts`, `npm run build` must run before the bin does anything new.
|
|
25
|
+
|
|
26
|
+
### Testing Requirements
|
|
27
|
+
|
|
28
|
+
Covered indirectly by CLI tests / manual `devdash-agent --help`.
|
|
29
|
+
|
|
30
|
+
### Common Patterns
|
|
31
|
+
|
|
32
|
+
Unix shebang + `require('../dist/...')`.
|
|
33
|
+
|
|
34
|
+
## Dependencies
|
|
35
|
+
|
|
36
|
+
### Internal
|
|
37
|
+
|
|
38
|
+
`../dist/` (built from `../src/`)
|
|
39
|
+
|
|
40
|
+
### External
|
|
41
|
+
|
|
42
|
+
None.
|
|
43
|
+
|
|
44
|
+
<!-- MANUAL: -->
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/ai-adapters/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,SAAS,CAAC;AA6BtD,eAAO,MAAM,aAAa,EAAE,SA0D3B,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.claudeAdapter = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
// Claude Code writes ~/.claude/projects/<escaped-cwd>/<session-uuid>.jsonl,
|
|
6
|
+
// one JSON record per line. `user` and `assistant` records carry a full
|
|
7
|
+
// Anthropic message object; the rest are session metadata.
|
|
8
|
+
function textOf(value) {
|
|
9
|
+
if (typeof value === 'string')
|
|
10
|
+
return value;
|
|
11
|
+
if (Array.isArray(value)) {
|
|
12
|
+
return value.map((b) => (typeof b?.text === 'string' ? b.text : '')).join('');
|
|
13
|
+
}
|
|
14
|
+
return '';
|
|
15
|
+
}
|
|
16
|
+
// A short human string, so the UI never has to understand a tool's schema.
|
|
17
|
+
function summarize(name, input) {
|
|
18
|
+
if (input && typeof input === 'object') {
|
|
19
|
+
if (typeof input.command === 'string')
|
|
20
|
+
return `${name}: ${input.command}`;
|
|
21
|
+
if (typeof input.file_path === 'string') {
|
|
22
|
+
// Absolute paths are long and the leading directories are noise on a
|
|
23
|
+
// phone; the last two segments identify the file well enough.
|
|
24
|
+
const parts = input.file_path.split('/').filter(Boolean);
|
|
25
|
+
return `${name} ${parts.slice(-2).join('/')}`;
|
|
26
|
+
}
|
|
27
|
+
if (typeof input.pattern === 'string')
|
|
28
|
+
return `${name}: ${input.pattern}`;
|
|
29
|
+
}
|
|
30
|
+
return name;
|
|
31
|
+
}
|
|
32
|
+
exports.claudeAdapter = {
|
|
33
|
+
toEvents(record) {
|
|
34
|
+
const rec = record;
|
|
35
|
+
if (!rec || typeof rec !== 'object')
|
|
36
|
+
return [];
|
|
37
|
+
if (rec.type !== 'user' && rec.type !== 'assistant')
|
|
38
|
+
return [];
|
|
39
|
+
// Subagent output would interleave incomprehensibly with the main thread.
|
|
40
|
+
if (rec.isSidechain)
|
|
41
|
+
return [];
|
|
42
|
+
const at = typeof rec.timestamp === 'string' ? rec.timestamp : '';
|
|
43
|
+
const id = typeof rec.uuid === 'string' ? rec.uuid : '';
|
|
44
|
+
const content = rec.message?.content;
|
|
45
|
+
if (content == null)
|
|
46
|
+
return [];
|
|
47
|
+
if (typeof content === 'string') {
|
|
48
|
+
if (!content)
|
|
49
|
+
return [];
|
|
50
|
+
return [{ kind: 'message', role: rec.type, text: content, id, at }];
|
|
51
|
+
}
|
|
52
|
+
if (!Array.isArray(content))
|
|
53
|
+
return [];
|
|
54
|
+
const events = [];
|
|
55
|
+
for (const block of content) {
|
|
56
|
+
if (!block || typeof block !== 'object')
|
|
57
|
+
continue;
|
|
58
|
+
switch (block.type) {
|
|
59
|
+
case 'tool_use':
|
|
60
|
+
events.push({
|
|
61
|
+
kind: 'tool_call', name: String(block.name || 'tool'),
|
|
62
|
+
summary: summarize(String(block.name || 'tool'), block.input),
|
|
63
|
+
input: block.input, id: String(block.id || id), at,
|
|
64
|
+
});
|
|
65
|
+
break;
|
|
66
|
+
case 'tool_result':
|
|
67
|
+
events.push({
|
|
68
|
+
kind: 'tool_result', forId: String(block.tool_use_id || ''),
|
|
69
|
+
ok: !block.is_error, preview: (0, types_1.preview)(textOf(block.content)), at,
|
|
70
|
+
});
|
|
71
|
+
break;
|
|
72
|
+
case 'thinking':
|
|
73
|
+
events.push({ kind: 'thinking', text: String(block.thinking || ''), id, at });
|
|
74
|
+
break;
|
|
75
|
+
default: {
|
|
76
|
+
// Includes 'text' and any block type a future release introduces.
|
|
77
|
+
// Rendering it as text keeps a new vendor format readable instead of
|
|
78
|
+
// silently dropping half the conversation.
|
|
79
|
+
const text = typeof block.text === 'string' ? block.text : '';
|
|
80
|
+
if (text)
|
|
81
|
+
events.push({ kind: 'message', role: rec.type, text, id, at });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return events;
|
|
86
|
+
},
|
|
87
|
+
title(record) {
|
|
88
|
+
const rec = record;
|
|
89
|
+
if (!rec || typeof rec !== 'object')
|
|
90
|
+
return null;
|
|
91
|
+
if (rec.type === 'custom-title' && typeof rec.customTitle === 'string')
|
|
92
|
+
return rec.customTitle;
|
|
93
|
+
if (rec.type === 'last-prompt' && typeof rec.lastPrompt === 'string')
|
|
94
|
+
return rec.lastPrompt;
|
|
95
|
+
return null;
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/ai-adapters/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/ai-adapters/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,SAAS,CAAC;AAyCtD,eAAO,MAAM,YAAY,EAAE,SAsG1B,CAAC"}
|