dev-sessions 0.1.1 → 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 CHANGED
@@ -82,7 +82,7 @@ npm install -g dev-sessions
82
82
 
83
83
  Or clone and link:
84
84
  ```bash
85
- git clone <repo-url>
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 CLI with permission bypass flags (default) |
107
- | `native` | `--mode native` | Runs CLI normally (will prompt for permissions) |
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
- When running inside a Docker container (detected via `IS_SANDBOX=1`), the CLI automatically routes commands through an HTTP gateway relay on the host.
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
- 2. Inside Docker, the CLI detects `IS_SANDBOX=1` and uses `DEV_SESSIONS_GATEWAY_URL` (default `http://host.docker.internal:6767`)
117
- 3. `HOST_PATH` maps the container workspace to the host filesystem
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
- This is an optional integration for users of [claude-ting](https://github.com/anthropics/claude-ting) Docker workflows. The CLI works natively on the host without any gateway.
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 (83 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
  ```
@@ -13,6 +13,7 @@ export declare class ClaudeTmuxBackend {
13
13
  private getPaneCommands;
14
14
  private isUserCliProcess;
15
15
  private buildStartupCommand;
16
+ private waitForTranscriptReady;
16
17
  private execTmux;
17
18
  private execCommand;
18
19
  private sleep;
@@ -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|$)/;
@@ -44,6 +46,9 @@ class ClaudeTmuxBackend {
44
46
  await this.sleep(5000);
45
47
  await this.execTmux(['send-keys', '-t', tmuxSessionName, 'C-m']);
46
48
  }
49
+ else {
50
+ await this.waitForTranscriptReady(workspacePath, sessionUuid);
51
+ }
47
52
  }
48
53
  async sendMessage(tmuxSessionName, message) {
49
54
  if (!(await this.isClaudeRunning(tmuxSessionName))) {
@@ -150,6 +155,22 @@ class ClaudeTmuxBackend {
150
155
  }
151
156
  return `cd ${shellEscape(workspacePath)} && ${commandParts.join(' ')}`;
152
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
+ }
153
174
  async execTmux(args) {
154
175
  return this.execCommand('tmux', args);
155
176
  }
@@ -1 +1 @@
1
- {"version":3,"file":"claude-tmux.js","sourceRoot":"","sources":["../../src/backends/claude-tmux.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-tmux.js","sourceRoot":"","sources":["../../src/backends/claude-tmux.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA8C;AAC9C,+CAA0C;AAC1C,0DAA6B;AAC7B,yCAAsC;AACtC,+DAAsE;AAGtE,MAAM,aAAa,GAAG,IAAA,qBAAS,EAAC,6BAAQ,CAAC,CAAC;AAC1C,MAAM,qBAAqB,GAAG,qCAAqC,CAAC;AACpE,MAAM,uBAAuB,GAAG,6BAA6B,CAAC;AAE9D,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,MAAa,iBAAiB;IACC;IAA7B,YAA6B,YAAoB,MAAM;QAA1B,cAAS,GAAT,SAAS,CAAiB;IAAG,CAAC;IAE3D,KAAK,CAAC,aAAa,CACjB,eAAuB,EACvB,aAAqB,EACrB,IAAiB,EACjB,WAAmB;QAEnB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CACb,iGAAiG;oBACjG,+EAA+E,CAChF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAElF,MAAM,IAAI,CAAC,QAAQ,CAAC;YAClB,aAAa;YACb,IAAI;YACJ,IAAI;YACJ,eAAe;YACf,IAAI;YACJ,eAAe;YACf,MAAM;YACN,KAAK;YACL,cAAc;SACf,CAAC,CAAC;QAEH,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,eAAuB,EAAE,OAAe;QACxD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvE,MAAM,aAAa,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG;YACb,2BAA2B,OAAO,mDAAmD,OAAO,iBAAiB;YAC7G,wBAAwB,aAAa,aAAa;SACnD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;QAExD,oFAAoF;QACpF,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAErB,uFAAuF;QACvF,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,eAAuB;QACvC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,eAAuB;QACvC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;YAC/E,OAAO,MAAM;iBACV,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,eAAuB;QACzC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,eAAuB;QAC3C,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;YACxC,iCAAiC;YACjC,oBAAoB;SACrB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,eAAuB,EAAE,kBAA4B,EAAE;QACxE,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAEjE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CACzD,CAAC;YACJ,CAAC;YAED,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,eAAuB;QACnD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;QACnG,MAAM,QAAQ,GAAG,UAAU;aACxB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEvC,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAC7E,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YAED,MAAM,WAAW,GAAG,QAAQ;iBACzB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,gBAAgB,CAAC,OAAe;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxF,CAAC;IAEO,mBAAmB,CAAC,aAAqB,EAAE,IAAiB,EAAE,WAAmB;QACvF,MAAM,MAAM,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxD,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,iBAAiB,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAE5E,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,MAAM,WAAW,CAAC,aAAa,CAAC,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACzE,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,aAAqB,EACrB,WAAmB,EACnB,iBAAyB,GAAG;QAE5B,MAAM,cAAc,GAAG,IAAA,uCAAuB,EAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAE7C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,IAAA,iBAAM,EAAC,cAAc,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,sCAAsC;YACxC,CAAC;YAED,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,CAAC,IAAI,CACV,6DAA6D,cAAc,IAAI;YAC/E,8CAA8C,CAC/C,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,IAAc;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,IAAc,EAAE,YAAoB,IAAI,CAAC,SAAS;QAC3F,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE;YACpD,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC;SAC3B,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,EAAU;QAC5B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAtND,8CAsNC"}
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
- skillSourcePath(): string;
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
- skillSourcePath: () => node_path_1.default.resolve(__dirname, '..', 'skill', 'SKILL.md'),
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 sourcePath = installSkillDependencies.skillSourcePath();
263
- const sourceContent = await installSkillDependencies.readFile(sourcePath, 'utf8');
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
- installedDirectories.forEach((directoryPath) => {
279
- io.stdout.write(`Installed dev-sessions skill: ${directoryPath}\n`);
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":"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"}
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":";;;;;;AAYA,kDAEC;AAED,gDAEC;AAED,8CAEC;AAED,8CAoCC;AAED,4CAmBC;AAED,oDAgDC;AAED,wDAsDC;AAED,wDA6BC;AA1ND,2DAA8C;AAC9C,+CAA4D;AAC5D,sDAAyB;AACzB,0DAA6B;AAC7B,yCAAsC;AACtC,qCAAuE;AAEvE,MAAM,aAAa,GAAG,IAAA,qBAAS,EAAC,6BAAQ,CAAC,CAAC;AAE7B,QAAA,aAAa,GAAG,0BAA0B,CAAC;AAC3C,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D,SAAgB,mBAAmB,CAAC,UAAkB,iBAAE,CAAC,OAAO,EAAE;IAChE,OAAO,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,qBAAa,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED,SAAgB,kBAAkB,CAAC,UAAkB,iBAAE,CAAC,OAAO,EAAE;IAC/D,OAAO,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,4BAAoB,UAAU,CAAC,CAAC;AAC7F,CAAC;AAED,SAAgB,iBAAiB,CAAC,UAAkB,iBAAE,CAAC,OAAO,EAAE;IAC9D,OAAO,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,iBAAiB,CAAC,UAAkB,EAAE,IAAY,EAAE,OAAe,EAAE,QAAiB;IACpG,qEAAqE;IACrE,8EAA8E;IAC9E,MAAM,WAAW,GAAG,QAAQ;QAC1B,CAAC,CAAC,eAAe,QAAQ,0BAA0B,UAAU,WAAW;QACxE,CAAC,CAAC,eAAe,UAAU,WAAW,CAAC;IAEzC,OAAO;;;;;YAKG,qBAAa;;;EAGvB,WAAW;;;cAGC,IAAI;;;;;cAKJ,IAAI;;;;;YAKN,OAAO;;YAEP,OAAO;;;;;CAKlB,CAAC;AACF,CAAC;AAED,SAAgB,gBAAgB,CAAC,UAAkB,EAAE,IAAY,EAAE,OAAe,EAAE,QAAiB;IACnG,MAAM,SAAS,GAAG,QAAQ;QACxB,CAAC,CAAC,GAAG,QAAQ,IAAI,UAAU,mBAAmB,IAAI,EAAE;QACpD,CAAC,CAAC,GAAG,UAAU,mBAAmB,IAAI,EAAE,CAAC;IAE3C,OAAO;;;;;YAKG,SAAS;wCACmB,IAAI;;wBAEpB,OAAO;uBACR,OAAO;;;;CAI7B,CAAC;AACF,CAAC;AAEM,KAAK,UAAU,oBAAoB,CAAC,UAMvC,EAAE;IACJ,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,iBAAE,CAAC,OAAO,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAA,gCAAuB,GAAE,CAAC;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAA,2BAAkB,GAAE,CAAC;IAClD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,yEAAyE;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IAEtD,MAAM,IAAA,gBAAK,EAAC,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5E,MAAM,IAAA,gBAAK,EAAC,mBAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,IAAA,oBAAS,EAAC,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAEjD,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;QAClD,CAAC;QAED,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,gBAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1E,MAAM,IAAA,gBAAK,EAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;QAC9D,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,4BAAoB,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,MAAM,IAAI,KAAK,CACb,yBAAyB,QAAQ,4DAA4D,CAC9F,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,UAGzC,EAAE;IACJ,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,iBAAE,CAAC,OAAO,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IAEtD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAA,iBAAM,EAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,GAAG,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,4BAAoB,CAAC,CAAC,CAAC;QACzF,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;QAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,CAAC;YACH,MAAM,IAAA,iBAAM,EAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,GAAG,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,MAAM,IAAI,KAAK,CACb,yBAAyB,QAAQ,8DAA8D,CAChG,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,UAGzC,EAAE;IACJ,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAA,2BAAkB,GAAE,CAAC;IAElD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,6EAA6E;YAC7E,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,qBAAa,CAAC,CAAC,CAAC;YAC1D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,4BAAoB,CAAC,CAAC,CAAC;YAC3F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,yBAAyB,QAAQ,2DAA2D,CAC7F,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dev-sessions",
3
- "version": "0.1.1",
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
- "skill/SKILL.md",
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