dev-sessions 0.1.0 → 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 +30 -9
- package/dist/backends/claude-tmux.d.ts +1 -0
- package/dist/backends/claude-tmux.js +30 -0
- package/dist/backends/claude-tmux.js.map +1 -1
- package/dist/cli.d.ts +2 -1
- package/dist/cli.js +94 -16
- package/dist/cli.js.map +1 -1
- package/dist/gateway/daemon.d.ts +25 -0
- package/dist/gateway/daemon.js +193 -0
- package/dist/gateway/daemon.js.map +1 -0
- package/package.json +2 -2
- package/skills/handoff/SKILL.md +111 -0
- /package/{skill → skills/dev-sessions}/SKILL.md +0 -0
package/README.md
CHANGED
|
@@ -82,7 +82,7 @@ npm install -g dev-sessions
|
|
|
82
82
|
|
|
83
83
|
Or clone and link:
|
|
84
84
|
```bash
|
|
85
|
-
git clone
|
|
85
|
+
git clone https://github.com/andrewting19/dev-sessions
|
|
86
86
|
cd dev-sessions
|
|
87
87
|
npm install && npm run build && npm link
|
|
88
88
|
```
|
|
@@ -103,20 +103,34 @@ The skill teaches agents best practices for task delegation, polling strategies,
|
|
|
103
103
|
|
|
104
104
|
| Mode | Flag | Description |
|
|
105
105
|
|------|------|-------------|
|
|
106
|
-
| `yolo` | `--mode yolo` | Runs
|
|
107
|
-
| `native` | `--mode native` | Runs
|
|
108
|
-
| `docker` | `--mode docker` | Runs via `clauded` Docker wrapper (Claude Code only) |
|
|
106
|
+
| `yolo` | `--mode yolo` | Runs with permission bypass flags — `--dangerously-skip-permissions` for Claude, `approvalPolicy: never` for Codex (default) |
|
|
107
|
+
| `native` | `--mode native` | Runs normally, will prompt for permissions |
|
|
108
|
+
| `docker` | `--mode docker` | Runs via `clauded` Docker wrapper (Claude Code only — see below) |
|
|
109
109
|
|
|
110
110
|
## Docker Integration
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
### Running FROM inside a container
|
|
113
|
+
|
|
114
|
+
When running inside a Docker container (detected via `IS_SANDBOX=1`), the CLI automatically routes all commands through an HTTP gateway relay on the host. This means you can delegate from inside a container to agents running on the host (or in other containers).
|
|
113
115
|
|
|
114
116
|
**Setup:**
|
|
115
117
|
1. Start the gateway on the host: `dev-sessions gateway --port 6767`
|
|
116
|
-
|
|
117
|
-
|
|
118
|
+
- Note: port 6767 may conflict with Docker's own port forwarding. Use `DEV_SESSIONS_GATEWAY_PORT=6868` if needed.
|
|
119
|
+
2. Inside Docker, set `DEV_SESSIONS_GATEWAY_URL=http://host.docker.internal:6767` (or your chosen port)
|
|
120
|
+
3. Set `HOST_PATH` to map the container workspace path to the equivalent host path
|
|
121
|
+
|
|
122
|
+
### `--mode docker` (spawning Claude in a container)
|
|
123
|
+
|
|
124
|
+
`docker` mode spawns Claude inside a Docker container via a `clauded` binary. This requires you to have `clauded` available on the host as an executable (not just a shell function).
|
|
118
125
|
|
|
119
|
-
|
|
126
|
+
For a reference implementation, see [claude-ting](https://github.com/andrewting19/claude-ting), which provides a `clauded` Docker wrapper for Claude Code.
|
|
127
|
+
|
|
128
|
+
> **Note:** If `clauded` is defined as a shell function in your `.zshrc`, you'll need a wrapper script so it's accessible from tmux (which uses bash). Create `~/.local/bin/clauded`:
|
|
129
|
+
> ```bash
|
|
130
|
+
> #!/bin/zsh
|
|
131
|
+
> source ~/.zshrc 2>/dev/null
|
|
132
|
+
> claude-docker "$@"
|
|
133
|
+
> ```
|
|
120
134
|
|
|
121
135
|
## Commands
|
|
122
136
|
|
|
@@ -141,12 +155,19 @@ create → send → [wait / poll status] → last-message → kill
|
|
|
141
155
|
(send follow-up)
|
|
142
156
|
```
|
|
143
157
|
|
|
158
|
+
## Known Limitations
|
|
159
|
+
|
|
160
|
+
- **Claude create → send race condition**: `create` returns as soon as the tmux session starts, but Claude's TUI takes a second or two to initialize. A very fast `send` immediately after `create` may arrive before Claude is ready. In practice a small sleep (`sleep 2`) between create and the first send avoids this.
|
|
161
|
+
- **Codex ignores `--mode`**: Codex always runs with `approvalPolicy: never` / full access regardless of the mode flag. `native` mode for Codex is a known gap.
|
|
162
|
+
- **`docker` mode is Claude-only**: Codex + Docker is not implemented.
|
|
163
|
+
- **Gateway port conflict**: The default gateway port 6767 can conflict with Docker's internal port forwarding. Set `DEV_SESSIONS_GATEWAY_PORT` to use a different port.
|
|
164
|
+
|
|
144
165
|
## Development
|
|
145
166
|
|
|
146
167
|
```bash
|
|
147
168
|
npm install
|
|
148
169
|
npm run build
|
|
149
|
-
npm test # unit + integration tests (
|
|
170
|
+
npm test # unit + integration tests (85 tests)
|
|
150
171
|
npm run test:integration # integration tests only
|
|
151
172
|
npm link # for local CLI testing
|
|
152
173
|
```
|
|
@@ -5,8 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.ClaudeTmuxBackend = void 0;
|
|
7
7
|
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const promises_1 = require("node:fs/promises");
|
|
8
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
10
|
const node_util_1 = require("node:util");
|
|
11
|
+
const claude_parser_1 = require("../transcript/claude-parser");
|
|
10
12
|
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
11
13
|
const SHELL_COMMAND_PATTERN = /(^|\s|\/)-?(bash|zsh|sh|fish)(\s|$)/;
|
|
12
14
|
const CONTROL_COMMAND_PATTERN = /(^|\s|\/)(tmux|login)(\s|$)/;
|
|
@@ -19,6 +21,15 @@ class ClaudeTmuxBackend {
|
|
|
19
21
|
this.timeoutMs = timeoutMs;
|
|
20
22
|
}
|
|
21
23
|
async createSession(tmuxSessionName, workspacePath, mode, sessionUuid) {
|
|
24
|
+
if (mode === 'docker') {
|
|
25
|
+
try {
|
|
26
|
+
await this.execCommand('which', ['clauded'], 5000);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
throw new Error('`clauded` not found. docker mode requires a clauded binary that wraps `docker run ... claude`. ' +
|
|
30
|
+
'See https://github.com/anthropics/claude-ting for a reference implementation.');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
22
33
|
const startupCommand = this.buildStartupCommand(workspacePath, mode, sessionUuid);
|
|
23
34
|
await this.execTmux([
|
|
24
35
|
'new-session',
|
|
@@ -35,6 +46,9 @@ class ClaudeTmuxBackend {
|
|
|
35
46
|
await this.sleep(5000);
|
|
36
47
|
await this.execTmux(['send-keys', '-t', tmuxSessionName, 'C-m']);
|
|
37
48
|
}
|
|
49
|
+
else {
|
|
50
|
+
await this.waitForTranscriptReady(workspacePath, sessionUuid);
|
|
51
|
+
}
|
|
38
52
|
}
|
|
39
53
|
async sendMessage(tmuxSessionName, message) {
|
|
40
54
|
if (!(await this.isClaudeRunning(tmuxSessionName))) {
|
|
@@ -141,6 +155,22 @@ class ClaudeTmuxBackend {
|
|
|
141
155
|
}
|
|
142
156
|
return `cd ${shellEscape(workspacePath)} && ${commandParts.join(' ')}`;
|
|
143
157
|
}
|
|
158
|
+
async waitForTranscriptReady(workspacePath, sessionUuid, pollIntervalMs = 200) {
|
|
159
|
+
const transcriptPath = (0, claude_parser_1.getClaudeTranscriptPath)(workspacePath, sessionUuid);
|
|
160
|
+
const deadline = Date.now() + this.timeoutMs;
|
|
161
|
+
while (Date.now() < deadline) {
|
|
162
|
+
try {
|
|
163
|
+
await (0, promises_1.access)(transcriptPath);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// File not yet created; keep polling.
|
|
168
|
+
}
|
|
169
|
+
await this.sleep(pollIntervalMs);
|
|
170
|
+
}
|
|
171
|
+
console.warn(`[dev-sessions] Timed out waiting for Claude transcript at ${transcriptPath}. ` +
|
|
172
|
+
'Claude may not be ready to accept input yet.');
|
|
173
|
+
}
|
|
144
174
|
async execTmux(args) {
|
|
145
175
|
return this.execCommand('tmux', args);
|
|
146
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-tmux.js","sourceRoot":"","sources":["../../src/backends/claude-tmux.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA8C;AAC9C,0DAA6B;AAC7B,yCAAsC;
|
|
1
|
+
{"version":3,"file":"claude-tmux.js","sourceRoot":"","sources":["../../src/backends/claude-tmux.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -6,7 +6,8 @@ interface CliIO {
|
|
|
6
6
|
stderr: Pick<NodeJS.WriteStream, 'write'>;
|
|
7
7
|
}
|
|
8
8
|
export interface InstallSkillDependencies {
|
|
9
|
-
|
|
9
|
+
skillsDirectory(): string;
|
|
10
|
+
listDirectory(dirPath: string): Promise<string[]>;
|
|
10
11
|
cwd(): string;
|
|
11
12
|
homedir(): string;
|
|
12
13
|
pathExists(candidatePath: string): Promise<boolean>;
|
package/dist/cli.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
@@ -10,6 +43,7 @@ const node_os_1 = __importDefault(require("node:os"));
|
|
|
10
43
|
const node_path_1 = __importDefault(require("node:path"));
|
|
11
44
|
const commander_1 = require("commander");
|
|
12
45
|
const session_manager_1 = require("./session-manager");
|
|
46
|
+
const daemon_1 = require("./gateway/daemon");
|
|
13
47
|
const server_1 = require("./gateway/server");
|
|
14
48
|
class CliError extends Error {
|
|
15
49
|
exitCode;
|
|
@@ -74,7 +108,11 @@ async function pathExists(candidatePath) {
|
|
|
74
108
|
}
|
|
75
109
|
function createDefaultInstallSkillDependencies() {
|
|
76
110
|
return {
|
|
77
|
-
|
|
111
|
+
skillsDirectory: () => node_path_1.default.resolve(__dirname, '..', 'skills'),
|
|
112
|
+
listDirectory: async (dirPath) => {
|
|
113
|
+
const entries = await (0, promises_1.readdir)(dirPath, { withFileTypes: true });
|
|
114
|
+
return entries.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
115
|
+
},
|
|
78
116
|
cwd: () => process.cwd(),
|
|
79
117
|
homedir: () => node_os_1.default.homedir(),
|
|
80
118
|
pathExists,
|
|
@@ -240,15 +278,55 @@ function buildProgram(manager, io = { stdout: process.stdout, stderr: process.st
|
|
|
240
278
|
}
|
|
241
279
|
io.stdout.write('completed\n');
|
|
242
280
|
});
|
|
243
|
-
program
|
|
281
|
+
const gatewayCmd = program
|
|
244
282
|
.command('gateway')
|
|
245
|
-
.description('Start the Docker relay gateway HTTP server')
|
|
283
|
+
.description('Start the Docker relay gateway HTTP server (or manage the daemon)')
|
|
246
284
|
.option('--port <port>', 'Port to listen on', String((0, server_1.resolveGatewayPort)()))
|
|
247
285
|
.action(async (options) => {
|
|
248
286
|
const port = parsePositiveInteger(options.port, '--port');
|
|
249
287
|
await (0, server_1.startGatewayServer)({ port });
|
|
250
288
|
io.stdout.write(`Gateway listening on port ${port}\n`);
|
|
251
289
|
});
|
|
290
|
+
gatewayCmd
|
|
291
|
+
.command('install')
|
|
292
|
+
.description('Install the gateway as a system daemon (launchd on macOS, systemd on Linux)')
|
|
293
|
+
.option('--port <port>', 'Port for the daemon to listen on', String((0, server_1.resolveGatewayPort)()))
|
|
294
|
+
.action(async (options) => {
|
|
295
|
+
const port = parsePositiveInteger(options.port, '--port');
|
|
296
|
+
// Prefer the installed binary on PATH so launchd/systemd can run it as a standalone executable.
|
|
297
|
+
// Fall back to resolveGatewayCliBinary() for local dev runs.
|
|
298
|
+
const { execFile } = await Promise.resolve().then(() => __importStar(require('node:child_process')));
|
|
299
|
+
const { promisify } = await Promise.resolve().then(() => __importStar(require('node:util')));
|
|
300
|
+
const execFileAsync = promisify(execFile);
|
|
301
|
+
let binaryPath;
|
|
302
|
+
try {
|
|
303
|
+
const { stdout } = await execFileAsync('which', ['dev-sessions']);
|
|
304
|
+
binaryPath = stdout.trim();
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
binaryPath = (0, server_1.resolveGatewayCliBinary)();
|
|
308
|
+
}
|
|
309
|
+
await (0, daemon_1.installGatewayDaemon)({ binaryPath, port });
|
|
310
|
+
io.stdout.write(`Gateway daemon installed and started on port ${port}\n`);
|
|
311
|
+
io.stdout.write(`\nNote: On macOS you may need to grant Full Disk Access to:\n`);
|
|
312
|
+
io.stdout.write(` ${process.execPath}\n`);
|
|
313
|
+
io.stdout.write(` System Settings → Privacy & Security → Full Disk Access → add the path above\n`);
|
|
314
|
+
});
|
|
315
|
+
gatewayCmd
|
|
316
|
+
.command('uninstall')
|
|
317
|
+
.description('Stop and remove the gateway daemon')
|
|
318
|
+
.action(async () => {
|
|
319
|
+
await (0, daemon_1.uninstallGatewayDaemon)();
|
|
320
|
+
io.stdout.write('Gateway daemon uninstalled\n');
|
|
321
|
+
});
|
|
322
|
+
gatewayCmd
|
|
323
|
+
.command('status')
|
|
324
|
+
.description('Print whether the gateway daemon is running and which port it uses')
|
|
325
|
+
.action(async () => {
|
|
326
|
+
const { running, port } = await (0, daemon_1.getGatewayDaemonStatus)();
|
|
327
|
+
const state = running ? 'running' : 'stopped';
|
|
328
|
+
io.stdout.write(`Gateway daemon: ${state} (port ${port})\n`);
|
|
329
|
+
});
|
|
252
330
|
program
|
|
253
331
|
.command('install-skill')
|
|
254
332
|
.description('Install the dev-sessions skill for Claude Code and/or Codex CLI')
|
|
@@ -259,25 +337,25 @@ function buildProgram(manager, io = { stdout: process.stdout, stderr: process.st
|
|
|
259
337
|
.action(async (options) => {
|
|
260
338
|
const scope = resolveInstallSkillScope(options);
|
|
261
339
|
const { targets, defaultedToClaude } = await resolveInstallSkillTargets(options, installSkillDependencies);
|
|
262
|
-
const
|
|
263
|
-
const
|
|
340
|
+
const skillsDir = installSkillDependencies.skillsDirectory();
|
|
341
|
+
const skillNames = await installSkillDependencies.listDirectory(skillsDir);
|
|
264
342
|
const installBasePath = scope === 'global'
|
|
265
343
|
? installSkillDependencies.homedir()
|
|
266
344
|
: node_path_1.default.resolve(installSkillDependencies.cwd());
|
|
267
|
-
const installedDirectories = [];
|
|
268
|
-
for (const target of targets) {
|
|
269
|
-
const destinationDirectory = node_path_1.default.join(installBasePath, `.${target}`, 'skills', 'dev-sessions');
|
|
270
|
-
const destinationFile = node_path_1.default.join(destinationDirectory, 'SKILL.md');
|
|
271
|
-
await installSkillDependencies.mkdir(destinationDirectory, { recursive: true });
|
|
272
|
-
await installSkillDependencies.writeFile(destinationFile, sourceContent, 'utf8');
|
|
273
|
-
installedDirectories.push(destinationDirectory);
|
|
274
|
-
}
|
|
275
345
|
if (defaultedToClaude) {
|
|
276
346
|
io.stdout.write('No ~/.claude or ~/.codex found; defaulting to Claude Code.\n');
|
|
277
347
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
348
|
+
for (const skillName of skillNames) {
|
|
349
|
+
const sourcePath = node_path_1.default.join(skillsDir, skillName, 'SKILL.md');
|
|
350
|
+
const sourceContent = await installSkillDependencies.readFile(sourcePath, 'utf8');
|
|
351
|
+
for (const target of targets) {
|
|
352
|
+
const destinationDirectory = node_path_1.default.join(installBasePath, `.${target}`, 'skills', skillName);
|
|
353
|
+
const destinationFile = node_path_1.default.join(destinationDirectory, 'SKILL.md');
|
|
354
|
+
await installSkillDependencies.mkdir(destinationDirectory, { recursive: true });
|
|
355
|
+
await installSkillDependencies.writeFile(destinationFile, sourceContent, 'utf8');
|
|
356
|
+
io.stdout.write(`Installed skill: ${skillName} → ${destinationFile}\n`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
281
359
|
});
|
|
282
360
|
return program;
|
|
283
361
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AA2LA,oCAsMC;AAED,wBA8BC;AAjaD,+CAAsE;AACtE,sDAAyB;AACzB,0DAA6B;AAC7B,yCAA4D;AAC5D,uDAAmG;AACnG,6CAA0E;AAwC1E,MAAM,QAAS,SAAQ,KAAK;IACmB;IAA7C,YAAY,OAAe,EAAkB,WAAmB,CAAC;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,aAAQ,GAAR,QAAQ,CAAY;QAE/D,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,SAAS,oBAAoB,CAAC,GAAW,EAAE,QAAgB;IACzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,QAAQ,CAAC,GAAG,QAAQ,6BAA6B,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,QAAQ,CAAC,GAAG,QAAQ,6BAA6B,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnE,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnG,OAAO,GAAG,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAyB;IACpD,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACrC,OAAO,CAAC,UAAU;QAClB,OAAO,CAAC,GAAG;QACX,OAAO,CAAC,IAAI;QACZ,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,IAAI;QACZ,OAAO,CAAC,WAAW,IAAI,EAAE;QACzB,OAAO,CAAC,QAAQ;KACjB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,CAAC,GAAa,EAAU,EAAE,CAAC,GAAG;SAC7C,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SAChD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAE3D,OAAO;QACL,SAAS,CAAC,OAAO,CAAC;QAClB,SAAS,CAAC,SAAS,CAAC;QACpB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,aAAqB;IAC7C,IAAI,CAAC;QACH,MAAM,IAAA,iBAAM,EAAC,aAAa,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,qCAAqC;IAC5C,OAAO;QACL,eAAe,EAAE,GAAG,EAAE,CAAC,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;QACzE,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;QACxB,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAE,CAAC,OAAO,EAAE;QAC3B,UAAU;QACV,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;YACtC,MAAM,IAAA,gBAAK,EAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAA,mBAAQ,EAAC,QAAQ,EAAE,QAAQ,CAAC;QACpE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;YAC/C,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,OAA8C;IAC9E,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,IAAI,QAAQ,CAAC,sCAAsC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,OAA8C,EAC9C,YAAsC;IAEtC,MAAM,OAAO,GAAyB,EAAE,CAAC;IAEzC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,OAAO;YACP,iBAAiB,EAAE,KAAK;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpD,YAAY,CAAC,UAAU,CAAC,mBAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QACrE,YAAY,CAAC,UAAU,CAAC,mBAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;KACrE,CAAC,CAAC;IAEH,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,CAAC,QAAQ,CAAC;YACnB,iBAAiB,EAAE,IAAI;SACxB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO;QACP,iBAAiB,EAAE,KAAK;KACzB,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAC1B,OAA2B,EAC3B,KAAY,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAC9D,eAAyC,EAAE;IAE3C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC9B,MAAM,wBAAwB,GAA6B;QACzD,GAAG,qCAAqC,EAAE;QAC1C,GAAG,YAAY,CAAC,YAAY;KAC7B,CAAC;IAEF,OAAO;SACJ,IAAI,CAAC,cAAc,CAAC;SACpB,WAAW,CAAC,wCAAwC,CAAC;SACrD,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,uBAAuB,EAAE,CAAC;SAC5F,MAAM,CAAC,iCAAiC,EAAE,sCAAsC,CAAC;SACjF,SAAS,CACR,IAAI,kBAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC3C,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SAC5B,OAAO,CAAC,QAAQ,CAAC,CACrB;SACA,SAAS,CACR,IAAI,kBAAM,CAAC,mBAAmB,EAAE,cAAc,CAAC;SAC5C,OAAO,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACrC,OAAO,CAAC,MAAM,CAAC,CACnB;SACA,MAAM,CAAC,aAAa,EAAE,qCAAqC,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,OAMd,EAAE,EAAE;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC;YAC1C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,uBAAuB,EAAE,kCAAkC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA2B,EAAE,OAA0B,EAAE,EAAE;QACpF,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,QAAQ,CAAC,8CAA8C,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,OAAO,GAAG,OAAO,CAAC;QACtB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,QAAQ,CAAC,sDAAsD,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACvC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sBAAsB,CAAC;SACnC,MAAM,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;QAC5C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,EAAE,GAAG,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA0B,EAAE,EAAE;QACvD,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,0BAA0B,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAEnE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAClD,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CAAC,yBAAyB,EAAE,oBAAoB,EAAE,KAAK,CAAC;SAC9D,MAAM,CAAC,0BAA0B,EAAE,6BAA6B,EAAE,GAAG,CAAC;SACtE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA8C,EAAE,EAAE;QAC3E,MAAM,cAAc,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1E,MAAM,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE;YAC9C,cAAc;YACd,eAAe;SAChB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,IAAI,QAAQ,CAAC,yBAAyB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;QAED,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,eAAe,EAAE,mBAAmB,EAAE,MAAM,CAAC,IAAA,2BAAkB,GAAE,CAAC,CAAC;SAC1E,MAAM,CAAC,KAAK,EAAE,OAAyB,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,IAAA,2BAAkB,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,IAAI,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,UAAU,EAAE,sCAAsC,CAAC;SAC1D,MAAM,CAAC,SAAS,EAAE,qCAAqC,CAAC;SACxD,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;SAC7C,MAAM,CAAC,SAAS,EAAE,uBAAuB,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,OAAiF,EAAE,EAAE;QAClG,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,0BAA0B,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;QAC3G,MAAM,UAAU,GAAG,wBAAwB,CAAC,eAAe,EAAE,CAAC;QAC9D,MAAM,aAAa,GAAG,MAAM,wBAAwB,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAClF,MAAM,eAAe,GACnB,KAAK,KAAK,QAAQ;YAChB,CAAC,CAAC,wBAAwB,CAAC,OAAO,EAAE;YACpC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,CAAC;QACnD,MAAM,oBAAoB,GAAa,EAAE,CAAC;QAE1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,oBAAoB,GAAG,mBAAI,CAAC,IAAI,CACpC,eAAe,EACf,IAAI,MAAM,EAAE,EACZ,QAAQ,EACR,cAAc,CACf,CAAC;YACF,MAAM,eAAe,GAAG,mBAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;YAEpE,MAAM,wBAAwB,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChF,MAAM,wBAAwB,CAAC,SAAS,CAAC,eAAe,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YACjF,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,iBAAiB,EAAE,CAAC;YACtB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,oBAAoB,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;YAC7C,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,aAAa,IAAI,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,MAAM,CAC1B,OAAiB,OAAO,CAAC,IAAI,EAC7B,UAA8B,IAAA,6CAA2B,GAAE,EAC3D,KAAY,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;IAE9D,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,YAAY,EAAE,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,0BAAc,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;gBAC7C,OAAO,CAAC,CAAC;YACX,CAAC;YAED,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC,QAAQ,CAAC;QACxB,CAAC;QAED,MAAM,QAAQ,GACZ,OAAQ,KAAgC,CAAC,QAAQ,KAAK,QAAQ;YAC5D,CAAC,CAAE,KAA8B,CAAC,QAAQ;YAC1C,CAAC,CAAC,CAAC,CAAC;QAER,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const LAUNCHD_LABEL = "com.dev-sessions.gateway";
|
|
2
|
+
export declare const SYSTEMD_SERVICE_NAME = "dev-sessions-gateway";
|
|
3
|
+
export declare function getLaunchdPlistPath(homeDir?: string): string;
|
|
4
|
+
export declare function getSystemdUnitPath(homeDir?: string): string;
|
|
5
|
+
export declare function getGatewayLogPath(homeDir?: string): string;
|
|
6
|
+
export declare function buildLaunchdPlist(binaryPath: string, port: number, logPath: string, nodePath?: string): string;
|
|
7
|
+
export declare function buildSystemdUnit(binaryPath: string, port: number, logPath: string, nodePath?: string): string;
|
|
8
|
+
export declare function installGatewayDaemon(options?: {
|
|
9
|
+
binaryPath?: string;
|
|
10
|
+
port?: number;
|
|
11
|
+
platform?: string;
|
|
12
|
+
homeDir?: string;
|
|
13
|
+
nodePath?: string;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
export declare function uninstallGatewayDaemon(options?: {
|
|
16
|
+
platform?: string;
|
|
17
|
+
homeDir?: string;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
export declare function getGatewayDaemonStatus(options?: {
|
|
20
|
+
platform?: string;
|
|
21
|
+
port?: number;
|
|
22
|
+
}): Promise<{
|
|
23
|
+
running: boolean;
|
|
24
|
+
port: number;
|
|
25
|
+
}>;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SYSTEMD_SERVICE_NAME = exports.LAUNCHD_LABEL = void 0;
|
|
7
|
+
exports.getLaunchdPlistPath = getLaunchdPlistPath;
|
|
8
|
+
exports.getSystemdUnitPath = getSystemdUnitPath;
|
|
9
|
+
exports.getGatewayLogPath = getGatewayLogPath;
|
|
10
|
+
exports.buildLaunchdPlist = buildLaunchdPlist;
|
|
11
|
+
exports.buildSystemdUnit = buildSystemdUnit;
|
|
12
|
+
exports.installGatewayDaemon = installGatewayDaemon;
|
|
13
|
+
exports.uninstallGatewayDaemon = uninstallGatewayDaemon;
|
|
14
|
+
exports.getGatewayDaemonStatus = getGatewayDaemonStatus;
|
|
15
|
+
const node_child_process_1 = require("node:child_process");
|
|
16
|
+
const promises_1 = require("node:fs/promises");
|
|
17
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
18
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
19
|
+
const node_util_1 = require("node:util");
|
|
20
|
+
const server_1 = require("./server");
|
|
21
|
+
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
22
|
+
exports.LAUNCHD_LABEL = 'com.dev-sessions.gateway';
|
|
23
|
+
exports.SYSTEMD_SERVICE_NAME = 'dev-sessions-gateway';
|
|
24
|
+
function getLaunchdPlistPath(homeDir = node_os_1.default.homedir()) {
|
|
25
|
+
return node_path_1.default.join(homeDir, 'Library', 'LaunchAgents', `${exports.LAUNCHD_LABEL}.plist`);
|
|
26
|
+
}
|
|
27
|
+
function getSystemdUnitPath(homeDir = node_os_1.default.homedir()) {
|
|
28
|
+
return node_path_1.default.join(homeDir, '.config', 'systemd', 'user', `${exports.SYSTEMD_SERVICE_NAME}.service`);
|
|
29
|
+
}
|
|
30
|
+
function getGatewayLogPath(homeDir = node_os_1.default.homedir()) {
|
|
31
|
+
return node_path_1.default.join(homeDir, '.dev-sessions', 'gateway.log');
|
|
32
|
+
}
|
|
33
|
+
function buildLaunchdPlist(binaryPath, port, logPath, nodePath) {
|
|
34
|
+
// launchd runs with a minimal PATH that won't find NVM-managed node.
|
|
35
|
+
// If nodePath is provided, invoke node explicitly so the shebang is bypassed.
|
|
36
|
+
const programArgs = nodePath
|
|
37
|
+
? ` <string>${nodePath}</string>\n <string>${binaryPath}</string>`
|
|
38
|
+
: ` <string>${binaryPath}</string>`;
|
|
39
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
40
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
41
|
+
<plist version="1.0">
|
|
42
|
+
<dict>
|
|
43
|
+
<key>Label</key>
|
|
44
|
+
<string>${exports.LAUNCHD_LABEL}</string>
|
|
45
|
+
<key>ProgramArguments</key>
|
|
46
|
+
<array>
|
|
47
|
+
${programArgs}
|
|
48
|
+
<string>gateway</string>
|
|
49
|
+
<string>--port</string>
|
|
50
|
+
<string>${port}</string>
|
|
51
|
+
</array>
|
|
52
|
+
<key>EnvironmentVariables</key>
|
|
53
|
+
<dict>
|
|
54
|
+
<key>DEV_SESSIONS_GATEWAY_PORT</key>
|
|
55
|
+
<string>${port}</string>
|
|
56
|
+
</dict>
|
|
57
|
+
<key>KeepAlive</key>
|
|
58
|
+
<true/>
|
|
59
|
+
<key>StandardOutPath</key>
|
|
60
|
+
<string>${logPath}</string>
|
|
61
|
+
<key>StandardErrorPath</key>
|
|
62
|
+
<string>${logPath}</string>
|
|
63
|
+
<key>RunAtLoad</key>
|
|
64
|
+
<true/>
|
|
65
|
+
</dict>
|
|
66
|
+
</plist>
|
|
67
|
+
`;
|
|
68
|
+
}
|
|
69
|
+
function buildSystemdUnit(binaryPath, port, logPath, nodePath) {
|
|
70
|
+
const execStart = nodePath
|
|
71
|
+
? `${nodePath} ${binaryPath} gateway --port ${port}`
|
|
72
|
+
: `${binaryPath} gateway --port ${port}`;
|
|
73
|
+
return `[Unit]
|
|
74
|
+
Description=dev-sessions gateway HTTP server
|
|
75
|
+
After=network.target
|
|
76
|
+
|
|
77
|
+
[Service]
|
|
78
|
+
ExecStart=${execStart}
|
|
79
|
+
Environment=DEV_SESSIONS_GATEWAY_PORT=${port}
|
|
80
|
+
Restart=on-failure
|
|
81
|
+
StandardOutput=append:${logPath}
|
|
82
|
+
StandardError=append:${logPath}
|
|
83
|
+
|
|
84
|
+
[Install]
|
|
85
|
+
WantedBy=default.target
|
|
86
|
+
`;
|
|
87
|
+
}
|
|
88
|
+
async function installGatewayDaemon(options = {}) {
|
|
89
|
+
const homeDir = options.homeDir ?? node_os_1.default.homedir();
|
|
90
|
+
const platform = options.platform ?? process.platform;
|
|
91
|
+
const binaryPath = options.binaryPath ?? (0, server_1.resolveGatewayCliBinary)();
|
|
92
|
+
const port = options.port ?? (0, server_1.resolveGatewayPort)();
|
|
93
|
+
const logPath = getGatewayLogPath(homeDir);
|
|
94
|
+
// Resolve node binary so launchd/systemd can find it regardless of PATH.
|
|
95
|
+
const nodePath = options.nodePath ?? process.execPath;
|
|
96
|
+
await (0, promises_1.mkdir)(node_path_1.default.dirname(logPath), { recursive: true });
|
|
97
|
+
if (platform === 'darwin') {
|
|
98
|
+
const plistPath = getLaunchdPlistPath(homeDir);
|
|
99
|
+
const plistContent = buildLaunchdPlist(binaryPath, port, logPath, nodePath);
|
|
100
|
+
await (0, promises_1.mkdir)(node_path_1.default.dirname(plistPath), { recursive: true });
|
|
101
|
+
await (0, promises_1.writeFile)(plistPath, plistContent, 'utf8');
|
|
102
|
+
try {
|
|
103
|
+
await execFileAsync('launchctl', ['unload', plistPath]);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// Ignore: service may not have been loaded yet.
|
|
107
|
+
}
|
|
108
|
+
await execFileAsync('launchctl', ['load', plistPath]);
|
|
109
|
+
console.log(`[gateway] daemon installed at ${plistPath}`);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (platform === 'linux') {
|
|
113
|
+
const unitPath = getSystemdUnitPath(homeDir);
|
|
114
|
+
const unitContent = buildSystemdUnit(binaryPath, port, logPath, nodePath);
|
|
115
|
+
await (0, promises_1.mkdir)(node_path_1.default.dirname(unitPath), { recursive: true });
|
|
116
|
+
await (0, promises_1.writeFile)(unitPath, unitContent, 'utf8');
|
|
117
|
+
await execFileAsync('systemctl', ['--user', 'daemon-reload']);
|
|
118
|
+
await execFileAsync('systemctl', ['--user', 'enable', '--now', exports.SYSTEMD_SERVICE_NAME]);
|
|
119
|
+
console.log(`[gateway] daemon installed at ${unitPath}`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
throw new Error(`Unsupported platform: ${platform}. Gateway daemon install is supported on darwin and linux.`);
|
|
123
|
+
}
|
|
124
|
+
async function uninstallGatewayDaemon(options = {}) {
|
|
125
|
+
const homeDir = options.homeDir ?? node_os_1.default.homedir();
|
|
126
|
+
const platform = options.platform ?? process.platform;
|
|
127
|
+
if (platform === 'darwin') {
|
|
128
|
+
const plistPath = getLaunchdPlistPath(homeDir);
|
|
129
|
+
try {
|
|
130
|
+
await execFileAsync('launchctl', ['unload', plistPath]);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// Ignore: may not have been loaded.
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
await (0, promises_1.unlink)(plistPath);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// Ignore: may not exist.
|
|
140
|
+
}
|
|
141
|
+
console.log(`[gateway] daemon uninstalled (${plistPath})`);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (platform === 'linux') {
|
|
145
|
+
try {
|
|
146
|
+
await execFileAsync('systemctl', ['--user', 'disable', '--now', exports.SYSTEMD_SERVICE_NAME]);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Ignore: may not be active.
|
|
150
|
+
}
|
|
151
|
+
const unitPath = getSystemdUnitPath(homeDir);
|
|
152
|
+
try {
|
|
153
|
+
await (0, promises_1.unlink)(unitPath);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Ignore: may not exist.
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
await execFileAsync('systemctl', ['--user', 'daemon-reload']);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Best effort.
|
|
163
|
+
}
|
|
164
|
+
console.log(`[gateway] daemon uninstalled (${unitPath})`);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
throw new Error(`Unsupported platform: ${platform}. Gateway daemon uninstall is supported on darwin and linux.`);
|
|
168
|
+
}
|
|
169
|
+
async function getGatewayDaemonStatus(options = {}) {
|
|
170
|
+
const platform = options.platform ?? process.platform;
|
|
171
|
+
const port = options.port ?? (0, server_1.resolveGatewayPort)();
|
|
172
|
+
if (platform === 'darwin') {
|
|
173
|
+
try {
|
|
174
|
+
// launchctl list <label> exits 0 when the job is loaded, non-zero otherwise.
|
|
175
|
+
await execFileAsync('launchctl', ['list', exports.LAUNCHD_LABEL]);
|
|
176
|
+
return { running: true, port };
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return { running: false, port };
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (platform === 'linux') {
|
|
183
|
+
try {
|
|
184
|
+
await execFileAsync('systemctl', ['--user', 'is-active', '--quiet', exports.SYSTEMD_SERVICE_NAME]);
|
|
185
|
+
return { running: true, port };
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return { running: false, port };
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
throw new Error(`Unsupported platform: ${platform}. Gateway daemon status is supported on darwin and linux.`);
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/gateway/daemon.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dev-sessions",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "CLI tool to spawn and manage coding agent sessions",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"bin": {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"dist",
|
|
11
|
-
"
|
|
11
|
+
"skills/",
|
|
12
12
|
"README.md"
|
|
13
13
|
],
|
|
14
14
|
"scripts": {
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: handoff
|
|
3
|
+
description: Hand off work to a fresh dev session when context is running long. Creates a briefing and spawns a new session the user can attach to.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Handoff Skill
|
|
7
|
+
|
|
8
|
+
Use this skill when context is running long and you need to hand off work to a fresh session. Instead of compacting and losing nuance, create a comprehensive briefing and spawn a new dev session that can continue with full context.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- User explicitly requests a handoff
|
|
13
|
+
- Context is getting long and quality may degrade
|
|
14
|
+
- You've accumulated significant context that would be lost in compaction
|
|
15
|
+
- The remaining work is substantial enough to warrant a fresh session
|
|
16
|
+
|
|
17
|
+
## The Handoff Flow
|
|
18
|
+
|
|
19
|
+
1. **Synthesize your knowledge** - You have all the context. Distill it into what the next agent actually needs.
|
|
20
|
+
|
|
21
|
+
2. **Spawn dev session** - Use `dev-sessions create` via Bash.
|
|
22
|
+
|
|
23
|
+
3. **Send the briefing** - Use `dev-sessions send` to deliver a comprehensive briefing (see structure below). Write it to a temp file and send with `--file` to avoid shell quoting issues.
|
|
24
|
+
|
|
25
|
+
4. **Inform the user** - Tell them the session ID and how to monitor it.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Create session
|
|
29
|
+
sid=$(dev-sessions create -q --description "handoff")
|
|
30
|
+
|
|
31
|
+
# Write briefing to file and send
|
|
32
|
+
cat > /tmp/handoff-brief.md << 'EOF'
|
|
33
|
+
<briefing content here>
|
|
34
|
+
EOF
|
|
35
|
+
dev-sessions send "$sid" --file /tmp/handoff-brief.md
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Briefing Structure
|
|
39
|
+
|
|
40
|
+
This is a recommended structure. Adapt it based on what's actually important for your specific situation.
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
## Handoff Briefing
|
|
44
|
+
|
|
45
|
+
### Goal
|
|
46
|
+
What we're ultimately trying to accomplish. Be as thorough as needed - if the goal requires detailed explanation, provide it.
|
|
47
|
+
|
|
48
|
+
### Current State
|
|
49
|
+
- What's been completed
|
|
50
|
+
- What's in progress
|
|
51
|
+
- Key decisions made and the reasoning behind them
|
|
52
|
+
|
|
53
|
+
### Relevant Code
|
|
54
|
+
Files and areas of the codebase that matter for this task. Not an exhaustive list -
|
|
55
|
+
just what the next agent should start with. They can explore from there.
|
|
56
|
+
|
|
57
|
+
- `path/to/important/file.py` - why it matters
|
|
58
|
+
- `path/to/another/` - what's in this directory
|
|
59
|
+
|
|
60
|
+
### What's Next
|
|
61
|
+
The concrete next steps. Be specific but not overly prescriptive.
|
|
62
|
+
|
|
63
|
+
1. First thing to do
|
|
64
|
+
2. Second thing to do
|
|
65
|
+
3. etc.
|
|
66
|
+
|
|
67
|
+
### Context and Gotchas
|
|
68
|
+
Things you learned that aren't obvious from the code:
|
|
69
|
+
- Gotchas and pitfalls
|
|
70
|
+
- Why certain approaches were chosen
|
|
71
|
+
- What didn't work and why
|
|
72
|
+
- Anything non-obvious
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Instructions for You
|
|
77
|
+
|
|
78
|
+
1. Read the relevant code listed above. Explore further as needed to build understanding.
|
|
79
|
+
|
|
80
|
+
2. Once you understand the codebase and the task, summarize your understanding and
|
|
81
|
+
proposed approach.
|
|
82
|
+
|
|
83
|
+
3. **Wait for the user** - Do not start implementation until the user explicitly
|
|
84
|
+
says to continue. They will attach to this session and review your understanding first.
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Guidelines for Writing Briefings
|
|
88
|
+
|
|
89
|
+
**Be thorough where it matters** - Complex business logic, non-obvious constraints, nuanced requirements - explain these fully. Don't omit critical details just to be concise.
|
|
90
|
+
|
|
91
|
+
**Be concise where you can** - Don't waste tokens on things the receiving agent can figure out. They're intelligent. Give them files and they can explore the code themselves.
|
|
92
|
+
|
|
93
|
+
**Stay focused** - Include what's relevant to the task. Skip tangential context that won't help them succeed.
|
|
94
|
+
|
|
95
|
+
**Include the "why"** - Decisions without reasoning are hard to build on. If you chose approach A over B, say why.
|
|
96
|
+
|
|
97
|
+
**Mention what didn't work** - Failed approaches are valuable context. The next agent shouldn't repeat your mistakes.
|
|
98
|
+
|
|
99
|
+
## After Sending
|
|
100
|
+
|
|
101
|
+
Tell the user:
|
|
102
|
+
```
|
|
103
|
+
Handoff complete. I've created session [session-id] with a full briefing.
|
|
104
|
+
|
|
105
|
+
The session is running. You can monitor it with:
|
|
106
|
+
dev-sessions status [session-id]
|
|
107
|
+
dev-sessions wait [session-id]
|
|
108
|
+
|
|
109
|
+
The new agent will read the code and present its understanding.
|
|
110
|
+
It's waiting for you to say "continue" before taking any action.
|
|
111
|
+
```
|
|
File without changes
|