@zeph-to/cli 2.8.1 → 2.9.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 +6 -1
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +2 -0
- package/dist/installer.d.ts +15 -0
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +79 -17
- package/dist/inventory-offload.d.ts +18 -0
- package/dist/inventory-offload.d.ts.map +1 -0
- package/dist/inventory-offload.js +124 -0
- package/dist/inventory-worker.d.ts +2 -0
- package/dist/inventory-worker.d.ts.map +1 -0
- package/dist/inventory-worker.js +22 -0
- package/dist/listener.d.ts +10 -8
- package/dist/listener.d.ts.map +1 -1
- package/dist/listener.js +60 -9
- package/dist/remote-agents.d.ts +10 -0
- package/dist/remote-agents.d.ts.map +1 -1
- package/dist/remote-agents.js +12 -0
- package/dist/remote-hook.d.ts +1 -1
- package/dist/remote-hook.d.ts.map +1 -1
- package/dist/remote-hook.js +5 -3
- package/dist/templates.d.ts +8 -0
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +87 -2
- package/dist/uninstall.d.ts +4 -0
- package/dist/uninstall.d.ts.map +1 -1
- package/dist/uninstall.js +18 -6
- package/dist/verify.d.ts.map +1 -1
- package/dist/verify.js +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -141,12 +141,13 @@ an answerable `zeph_ask`).
|
|
|
141
141
|
| Claude Code | `UserPromptSubmit` → plugin's `zeph-remote.sh` | Zeph plugin |
|
|
142
142
|
| Gemini CLI | `BeforeAgent` → `zeph remote-hook gemini` | `zeph setup` |
|
|
143
143
|
| Codex CLI | `UserPromptSubmit` → `zeph remote-hook codex` | `zeph setup` |
|
|
144
|
+
| Pi | `before_agent_start` → `zeph remote-hook pi` (via extension) | `zeph setup` |
|
|
144
145
|
| Cursor CLI | — none yet | — |
|
|
145
146
|
|
|
146
147
|
Detection is exact-match: a terminal keystroke racing a phone message
|
|
147
148
|
can never false-flag. Muted projects are never flagged.
|
|
148
149
|
|
|
149
|
-
Agents without that hook (Cursor, Windsurf, Copilot, Cline, Aider) have one
|
|
150
|
+
Agents without that hook (Cursor, Windsurf, Copilot, Cline, Aider, OpenCode) have one
|
|
150
151
|
other way in: a `zeph_ask` answer that is not a Done-like button. Their rule
|
|
151
152
|
files therefore keep the after-real-work `zeph_ask` — the "Entering REMOTE
|
|
152
153
|
without a prompt hook" preamble in `src/templates.ts` — so the phone always
|
|
@@ -218,6 +219,8 @@ block here.
|
|
|
218
219
|
zeph cursor # cursor-agent → tmux session "zeph-<project>"
|
|
219
220
|
zeph gemini # gemini → tmux session "zeph-<project>"
|
|
220
221
|
zeph hermes # hermes → tmux session "zeph-<project>"
|
|
222
|
+
zeph pi # pi → tmux session "zeph-<project>"
|
|
223
|
+
zeph opencode # opencode → tmux session "zeph-<project>"
|
|
221
224
|
```
|
|
222
225
|
|
|
223
226
|
`zeph cursor` runs **`cursor-agent`**, Cursor's terminal agent — a
|
|
@@ -712,6 +715,8 @@ try {
|
|
|
712
715
|
| Copilot CLI | Session end hook + rules |
|
|
713
716
|
| Cline | Rules file (`~/.cline/rules/zeph.md`) |
|
|
714
717
|
| Aider | Conventions file + `read:` directive in `~/.aider.conf.yml` |
|
|
718
|
+
| Pi | Extension (settle hook + remote detection) + rules — no MCP (pi has none; rules map zeph tools to the CLI) |
|
|
719
|
+
| OpenCode | MCP server + idle-notify plugin + rules |
|
|
715
720
|
|
|
716
721
|
For remote-control via `zeph listener` the per-agent setup is the same
|
|
717
722
|
across CC/Codex/Gemini — the wrapper just spawns them in a named tmux
|
package/dist/agents.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,KAAK;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;CACrB;AAID,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,OAOxC,CAAC;AAEF,eAAO,MAAM,YAAY,QAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,KAAK;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;CACrB;AAID,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,OAOxC,CAAC;AAEF,eAAO,MAAM,YAAY,QAAO,KAAK,EAWpC,CAAC"}
|
package/dist/agents.js
CHANGED
|
@@ -25,5 +25,7 @@ const detectAgents = () => [
|
|
|
25
25
|
{ name: 'Copilot CLI', id: 'copilot', detected: (0, fs_1.existsSync)((0, path_1.join)(HOME, '.copilot')) },
|
|
26
26
|
{ name: 'Cline', id: 'cline', detected: (0, fs_1.existsSync)((0, path_1.join)(HOME, '.cline')) },
|
|
27
27
|
{ name: 'Aider', id: 'aider', detected: (0, exports.hasCommand)('aider') },
|
|
28
|
+
{ name: 'Pi', id: 'pi', detected: (0, fs_1.existsSync)((0, path_1.join)(HOME, '.pi')) || (0, exports.hasCommand)('pi') },
|
|
29
|
+
{ name: 'OpenCode', id: 'opencode', detected: (0, fs_1.existsSync)((0, path_1.join)(HOME, '.config', 'opencode')) || (0, exports.hasCommand)('opencode') },
|
|
28
30
|
];
|
|
29
31
|
exports.detectAgents = detectAgents;
|
package/dist/installer.d.ts
CHANGED
|
@@ -12,6 +12,21 @@ export declare const shouldReauth: (currentKey: string | undefined, relogin: boo
|
|
|
12
12
|
/** Exported for tests (installGemini shells out to the real `gemini` binary,
|
|
13
13
|
* so the merge semantics can't be covered through it deterministically). */
|
|
14
14
|
export declare const mergeJsonFile: (filePath: string, patch: Record<string, unknown>) => void;
|
|
15
|
+
/**
|
|
16
|
+
* opencode.json's own MCP schema — top-level `mcp` key (not `mcpServers`),
|
|
17
|
+
* `command` as ARRAY (binary + args), `type: "local"`. No `environment` —
|
|
18
|
+
* opencode is a terminal app that inherits shell env, and the MCP server
|
|
19
|
+
* falls back to ~/.zeph/config.json anyway (an unexpanded "${ZEPH_API_KEY}"
|
|
20
|
+
* literal would shadow that fallback with junk). Exported for tests (shape pin).
|
|
21
|
+
*/
|
|
22
|
+
export declare const OPENCODE_MCP_ENTRY: {
|
|
23
|
+
type: string;
|
|
24
|
+
command: string[];
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
};
|
|
27
|
+
/** Add the zeph entry under `key` in an MCP registry JSON file, preserving
|
|
28
|
+
* everything else in it. Exported for tests (merge semantics). */
|
|
29
|
+
export declare const injectMcpEntry: (filePath: string, key: string, entry: Record<string, unknown>) => void;
|
|
15
30
|
/**
|
|
16
31
|
* Resolve agents from a non-interactive `--only cursor,gemini` flag.
|
|
17
32
|
* Matches on agent id; unknown ids are silently dropped. Exported for
|
package/dist/installer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AA+BzC;;;GAGG;AACH;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,YAAY,MAAM,GAAG,SAAS,EAAE,SAAS,OAAO,KAAG,OACxD,CAAC;AAoBzB;6EAC6E;AAC7E,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IAqBhF,CAAC;AAgDF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AAEF;mEACmE;AACnE,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,EAAE,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IAQ9F,CAAC;AAqPF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,KAAK,EAAE,EAAE,MAAM,MAAM,KAAG,KAAK,EAKxE,CAAC;AA8EF;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACtC,gBAAgB,OAAO,KACtB,KAAK,GAAG,IAAI,GAAG,KAKjB,CAAC;AAgCF,eAAO,MAAM,aAAa,GAAU,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAG,OAAO,CAAC,MAAM,CAuH1F,CAAC"}
|
package/dist/installer.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleInstall = exports.serviceInstallChoice = exports.filterAgentsByIds = exports.mergeJsonFile = exports.shouldReauth = void 0;
|
|
3
|
+
exports.handleInstall = exports.serviceInstallChoice = exports.filterAgentsByIds = exports.injectMcpEntry = exports.OPENCODE_MCP_ENTRY = exports.mergeJsonFile = exports.shouldReauth = void 0;
|
|
4
4
|
const child_process_1 = require("child_process");
|
|
5
5
|
const fs_1 = require("fs");
|
|
6
6
|
const os_1 = require("os");
|
|
@@ -104,26 +104,41 @@ const addAiderReadDirective = (confPath, conventionsPath) => {
|
|
|
104
104
|
(0, fs_1.writeFileSync)(confPath, (base ? `${base}\n\n` : '') + line);
|
|
105
105
|
};
|
|
106
106
|
// ── Per-Agent Installers ─────────────────────────────────────────
|
|
107
|
-
|
|
107
|
+
// Pass through env explicitly so the MCP server doesn't have to rely on
|
|
108
|
+
// process-env inheritance (which behaves differently per IDE — Cursor and
|
|
109
|
+
// Windsurf spawn the MCP from a graphical context that may not inherit
|
|
110
|
+
// shell env). Mirrors plugin/.mcp.json.
|
|
111
|
+
const MCP_SERVERS_ENTRY = {
|
|
112
|
+
command: 'npx',
|
|
113
|
+
args: ['-y', '@zeph-to/mcp-server'],
|
|
114
|
+
env: { ZEPH_API_KEY: '${ZEPH_API_KEY}' },
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* opencode.json's own MCP schema — top-level `mcp` key (not `mcpServers`),
|
|
118
|
+
* `command` as ARRAY (binary + args), `type: "local"`. No `environment` —
|
|
119
|
+
* opencode is a terminal app that inherits shell env, and the MCP server
|
|
120
|
+
* falls back to ~/.zeph/config.json anyway (an unexpanded "${ZEPH_API_KEY}"
|
|
121
|
+
* literal would shadow that fallback with junk). Exported for tests (shape pin).
|
|
122
|
+
*/
|
|
123
|
+
exports.OPENCODE_MCP_ENTRY = {
|
|
124
|
+
type: 'local',
|
|
125
|
+
command: ['npx', '-y', '@zeph-to/mcp-server'],
|
|
126
|
+
enabled: true,
|
|
127
|
+
};
|
|
128
|
+
/** Add the zeph entry under `key` in an MCP registry JSON file, preserving
|
|
129
|
+
* everything else in it. Exported for tests (merge semantics). */
|
|
130
|
+
const injectMcpEntry = (filePath, key, entry) => {
|
|
108
131
|
let data = {};
|
|
109
132
|
try {
|
|
110
133
|
data = JSON.parse((0, fs_1.readFileSync)(filePath, 'utf-8'));
|
|
111
134
|
}
|
|
112
135
|
catch { /* new file */ }
|
|
113
|
-
if (!data
|
|
114
|
-
data
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
// Windsurf spawn the MCP from a graphical context that may not inherit
|
|
118
|
-
// shell env). Mirrors plugin/.mcp.json.
|
|
119
|
-
data.mcpServers.zeph = {
|
|
120
|
-
command: 'npx',
|
|
121
|
-
args: ['-y', '@zeph-to/mcp-server'],
|
|
122
|
-
env: { ZEPH_API_KEY: '${ZEPH_API_KEY}' },
|
|
123
|
-
};
|
|
124
|
-
(0, fs_1.mkdirSync)((0, path_1.dirname)(filePath), { recursive: true });
|
|
125
|
-
(0, fs_1.writeFileSync)(filePath, JSON.stringify(data, null, 2) + '\n');
|
|
136
|
+
if (!isPlainObject(data[key]))
|
|
137
|
+
data[key] = {};
|
|
138
|
+
data[key].zeph = entry;
|
|
139
|
+
writeFile(filePath, JSON.stringify(data, null, 2));
|
|
126
140
|
};
|
|
141
|
+
exports.injectMcpEntry = injectMcpEntry;
|
|
127
142
|
const installClaude = () => {
|
|
128
143
|
try {
|
|
129
144
|
(0, child_process_1.execSync)('claude plugin marketplace add zeph-to/plugin', { stdio: 'pipe' });
|
|
@@ -138,7 +153,7 @@ const installClaude = () => {
|
|
|
138
153
|
};
|
|
139
154
|
const installCursor = () => {
|
|
140
155
|
try {
|
|
141
|
-
|
|
156
|
+
(0, exports.injectMcpEntry)((0, path_1.join)(HOME, '.cursor', 'mcp.json'), 'mcpServers', MCP_SERVERS_ENTRY);
|
|
142
157
|
ok('MCP server added');
|
|
143
158
|
}
|
|
144
159
|
catch {
|
|
@@ -161,7 +176,7 @@ const installCursor = () => {
|
|
|
161
176
|
};
|
|
162
177
|
const installWindsurf = () => {
|
|
163
178
|
try {
|
|
164
|
-
|
|
179
|
+
(0, exports.injectMcpEntry)((0, path_1.join)(HOME, '.codeium', 'windsurf', 'mcp_config.json'), 'mcpServers', MCP_SERVERS_ENTRY);
|
|
165
180
|
ok('MCP server added');
|
|
166
181
|
}
|
|
167
182
|
catch {
|
|
@@ -283,6 +298,49 @@ const installAider = () => {
|
|
|
283
298
|
fail(`Config wiring failed. Manual: add "read: ${conventionsPath}" to ~/.aider.conf.yml`);
|
|
284
299
|
}
|
|
285
300
|
};
|
|
301
|
+
const installPi = () => {
|
|
302
|
+
try {
|
|
303
|
+
// Drop-in auto-load; full-file overwrite is the idempotency model
|
|
304
|
+
// (the header comment is the ownership marker). No MCP — pi has none;
|
|
305
|
+
// PI_RULE maps the zeph_* tools to the CLI instead.
|
|
306
|
+
writeFile((0, path_1.join)(HOME, '.pi', 'agent', 'extensions', 'zeph.ts'), templates_js_1.PI_EXTENSION);
|
|
307
|
+
ok('Extension added (settle notify + remote detection)');
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
fail('Extension install failed. Manual: save the zeph extension to ~/.pi/agent/extensions/zeph.ts');
|
|
311
|
+
}
|
|
312
|
+
try {
|
|
313
|
+
// Pi loads ~/.pi/agent/AGENTS.md as global context.
|
|
314
|
+
writeManagedRule((0, path_1.join)(HOME, '.pi', 'agent', 'AGENTS.md'), templates_js_1.PI_RULE);
|
|
315
|
+
ok('Rules added to AGENTS.md');
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
fail('Rule install failed. Manual: add zeph rules to ~/.pi/agent/AGENTS.md');
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
const installOpencode = () => {
|
|
322
|
+
try {
|
|
323
|
+
(0, exports.injectMcpEntry)((0, path_1.join)(HOME, '.config', 'opencode', 'opencode.json'), 'mcp', exports.OPENCODE_MCP_ENTRY);
|
|
324
|
+
ok('MCP server added');
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
fail('MCP injection failed. Manual: add zeph to ~/.config/opencode/opencode.json');
|
|
328
|
+
}
|
|
329
|
+
try {
|
|
330
|
+
writeFile((0, path_1.join)(HOME, '.config', 'opencode', 'plugins', 'zeph.ts'), templates_js_1.OPENCODE_PLUGIN);
|
|
331
|
+
ok('Idle-notify plugin added');
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
fail('Plugin install failed. Manual: save the zeph plugin to ~/.config/opencode/plugins/zeph.ts');
|
|
335
|
+
}
|
|
336
|
+
try {
|
|
337
|
+
writeManagedRule((0, path_1.join)(HOME, '.config', 'opencode', 'AGENTS.md'), templates_js_1.OPENCODE_RULE);
|
|
338
|
+
ok('Rules added to AGENTS.md');
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
fail('Rule install failed. Manual: add zeph rules to ~/.config/opencode/AGENTS.md');
|
|
342
|
+
}
|
|
343
|
+
};
|
|
286
344
|
const AGENT_INSTALLERS = {
|
|
287
345
|
claude: installClaude,
|
|
288
346
|
cursor: installCursor,
|
|
@@ -292,6 +350,8 @@ const AGENT_INSTALLERS = {
|
|
|
292
350
|
copilot: installCopilot,
|
|
293
351
|
cline: installCline,
|
|
294
352
|
aider: installAider,
|
|
353
|
+
pi: installPi,
|
|
354
|
+
opencode: installOpencode,
|
|
295
355
|
};
|
|
296
356
|
// One-line summary of what each agent's installer does — shown in the
|
|
297
357
|
// interactive plan before anything is written.
|
|
@@ -304,6 +364,8 @@ const AGENT_PLAN_LABELS = {
|
|
|
304
364
|
copilot: 'Copilot CLI — hooks + rules',
|
|
305
365
|
cline: 'Cline — rules',
|
|
306
366
|
aider: 'Aider — conventions',
|
|
367
|
+
pi: 'Pi — extension + rules',
|
|
368
|
+
opencode: 'OpenCode — MCP + plugin + rules',
|
|
307
369
|
};
|
|
308
370
|
// ── Agent selection ──────────────────────────────────────────────
|
|
309
371
|
/**
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CollectResult } from './listener.js';
|
|
2
|
+
export interface InventoryReply {
|
|
3
|
+
id: number;
|
|
4
|
+
result?: CollectResult;
|
|
5
|
+
error?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface InventoryOffload {
|
|
8
|
+
/** Resolve one inventory sweep. Rejects when a working worker fails mid-sweep. */
|
|
9
|
+
collect: () => Promise<CollectResult>;
|
|
10
|
+
/** Stop the worker. Safe to call more than once. */
|
|
11
|
+
close: () => void;
|
|
12
|
+
}
|
|
13
|
+
/** Longer than any sane sweep (measured ~3s at 15 sessions), shorter than the
|
|
14
|
+
* run of cycles a stuck worker would otherwise cost: the caller gates sweeps
|
|
15
|
+
* one-at-a-time, so this bounds how long a hang can hold the inventory. */
|
|
16
|
+
export declare const COLLECT_TIMEOUT_MS = 20000;
|
|
17
|
+
export declare const startInventoryOffload: (inThread: () => CollectResult, log: (msg: string) => void, workerPath?: string) => InventoryOffload;
|
|
18
|
+
//# sourceMappingURL=inventory-offload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory-offload.d.ts","sourceRoot":"","sources":["../src/inventory-offload.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC7B,kFAAkF;IAClF,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACtC,oDAAoD;IACpD,KAAK,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;4EAE4E;AAC5E,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAQzC,eAAO,MAAM,qBAAqB,GAC9B,UAAU,MAAM,aAAa,EAC7B,KAAK,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC1B,aAAY,MAA+C,KAC5D,gBAsFF,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startInventoryOffload = exports.COLLECT_TIMEOUT_MS = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Runs the tmux session inventory on a worker thread so the daemon's event
|
|
6
|
+
* loop stays free while `tmux` child processes are waited on.
|
|
7
|
+
*
|
|
8
|
+
* Why a thread and not async spawns: the inventory is a chain of synchronous
|
|
9
|
+
* `spawnSync` calls — one `list-sessions` plus `display-message` and
|
|
10
|
+
* `capture-pane` per session — and with 15 sessions a single sweep was measured
|
|
11
|
+
* at 3s on the main thread (57% of daemon wall time, measured 2026-08-26).
|
|
12
|
+
* Every one of those seconds the WebSocket was neither read nor written, so
|
|
13
|
+
* stream subscribes arrived late, frames left late, pongs were missed and leases
|
|
14
|
+
* lapsed. Moving the same synchronous code onto a worker keeps every tmux call
|
|
15
|
+
* exactly as it was — including the tests that stub `spawnSync` — and only
|
|
16
|
+
* changes which thread waits.
|
|
17
|
+
*
|
|
18
|
+
* The worker is optional. A worker that fails before it has ever answered
|
|
19
|
+
* (missing file, module error, immediate exit) is given up on: pending and
|
|
20
|
+
* future sweeps run in-thread as before, so a broken worker degrades to the old
|
|
21
|
+
* behaviour instead of an empty session list. A worker that dies after having
|
|
22
|
+
* worked is treated as transient — that sweep fails (the caller skips the
|
|
23
|
+
* cycle) and the next `collect()` starts a fresh one.
|
|
24
|
+
*/
|
|
25
|
+
const path_1 = require("path");
|
|
26
|
+
const worker_threads_1 = require("worker_threads");
|
|
27
|
+
/** Longer than any sane sweep (measured ~3s at 15 sessions), shorter than the
|
|
28
|
+
* run of cycles a stuck worker would otherwise cost: the caller gates sweeps
|
|
29
|
+
* one-at-a-time, so this bounds how long a hang can hold the inventory. */
|
|
30
|
+
exports.COLLECT_TIMEOUT_MS = 20_000;
|
|
31
|
+
const startInventoryOffload = (inThread, log, workerPath = (0, path_1.join)(__dirname, 'inventory-worker.js')) => {
|
|
32
|
+
let worker = null;
|
|
33
|
+
let closed = false;
|
|
34
|
+
/** Set once a worker has answered; a failure before that is not transient. */
|
|
35
|
+
let everReplied = false;
|
|
36
|
+
/** Set when the worker is given up on — sweeps run in-thread from then on. */
|
|
37
|
+
let inThreadOnly = false;
|
|
38
|
+
let nextId = 0;
|
|
39
|
+
const pending = new Map();
|
|
40
|
+
const settleAll = (outcome) => {
|
|
41
|
+
for (const [id, p] of pending) {
|
|
42
|
+
clearTimeout(p.timer);
|
|
43
|
+
pending.delete(id);
|
|
44
|
+
outcome(p);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const onFailure = (what) => {
|
|
48
|
+
if (closed)
|
|
49
|
+
return settleAll((p) => p.reject(new Error('inventory offload closed')));
|
|
50
|
+
if (everReplied)
|
|
51
|
+
return settleAll((p) => p.reject(new Error(what)));
|
|
52
|
+
inThreadOnly = true;
|
|
53
|
+
log(`! ${what} before its first sweep — running the inventory in-thread from now on`);
|
|
54
|
+
settleAll((p) => {
|
|
55
|
+
try {
|
|
56
|
+
p.resolve(inThread());
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
p.reject(err instanceof Error ? err : new Error(String(err)));
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
const spawn = () => {
|
|
64
|
+
const w = new worker_threads_1.Worker(workerPath);
|
|
65
|
+
// Never keep the process alive on the worker's account: the daemon's
|
|
66
|
+
// own socket and timers decide when it exits.
|
|
67
|
+
w.unref();
|
|
68
|
+
w.on('message', (msg) => {
|
|
69
|
+
const p = pending.get(msg.id);
|
|
70
|
+
if (!p)
|
|
71
|
+
return;
|
|
72
|
+
pending.delete(msg.id);
|
|
73
|
+
clearTimeout(p.timer);
|
|
74
|
+
everReplied = true;
|
|
75
|
+
if (msg.error !== undefined)
|
|
76
|
+
p.reject(new Error(msg.error));
|
|
77
|
+
else
|
|
78
|
+
p.resolve(msg.result);
|
|
79
|
+
});
|
|
80
|
+
w.on('error', (err) => {
|
|
81
|
+
if (worker === w)
|
|
82
|
+
worker = null;
|
|
83
|
+
onFailure(`inventory worker error (${err instanceof Error ? err.message : String(err)})`);
|
|
84
|
+
});
|
|
85
|
+
w.on('exit', (code) => {
|
|
86
|
+
if (worker === w)
|
|
87
|
+
worker = null;
|
|
88
|
+
// A worker we terminated (timeout, close) has already been settled.
|
|
89
|
+
if (pending.size > 0)
|
|
90
|
+
onFailure(`inventory worker exited (${code})`);
|
|
91
|
+
});
|
|
92
|
+
return w;
|
|
93
|
+
};
|
|
94
|
+
const collect = () => {
|
|
95
|
+
if (closed || inThreadOnly)
|
|
96
|
+
return Promise.resolve(inThread());
|
|
97
|
+
worker ??= spawn();
|
|
98
|
+
const w = worker;
|
|
99
|
+
const id = ++nextId;
|
|
100
|
+
return new Promise((resolve, reject) => {
|
|
101
|
+
const timer = setTimeout(() => {
|
|
102
|
+
pending.delete(id);
|
|
103
|
+
reject(new Error(`inventory sweep exceeded ${exports.COLLECT_TIMEOUT_MS / 1000}s`));
|
|
104
|
+
// A stuck worker is not coming back; the next call spawns a fresh one.
|
|
105
|
+
if (worker === w)
|
|
106
|
+
worker = null;
|
|
107
|
+
void w.terminate();
|
|
108
|
+
}, exports.COLLECT_TIMEOUT_MS);
|
|
109
|
+
timer.unref();
|
|
110
|
+
pending.set(id, { resolve, reject, timer });
|
|
111
|
+
w.postMessage(id);
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
const close = () => {
|
|
115
|
+
closed = true;
|
|
116
|
+
settleAll((p) => p.reject(new Error('inventory offload closed')));
|
|
117
|
+
const w = worker;
|
|
118
|
+
worker = null;
|
|
119
|
+
if (w)
|
|
120
|
+
void w.terminate();
|
|
121
|
+
};
|
|
122
|
+
return { collect, close };
|
|
123
|
+
};
|
|
124
|
+
exports.startInventoryOffload = startInventoryOffload;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory-worker.d.ts","sourceRoot":"","sources":["../src/inventory-worker.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Worker-thread entry for the tmux session inventory (see inventory-offload.ts).
|
|
5
|
+
* One sweep per request; the sweep itself is the unchanged synchronous
|
|
6
|
+
* `collectSessionsVerbose` — it only runs on this thread now.
|
|
7
|
+
*/
|
|
8
|
+
const worker_threads_1 = require("worker_threads");
|
|
9
|
+
const listener_js_1 = require("./listener.js");
|
|
10
|
+
const port = worker_threads_1.parentPort;
|
|
11
|
+
if (!port)
|
|
12
|
+
throw new Error('inventory-worker must be started as a worker thread');
|
|
13
|
+
port.on('message', (id) => {
|
|
14
|
+
let reply;
|
|
15
|
+
try {
|
|
16
|
+
reply = { id, result: (0, listener_js_1.collectSessionsVerbose)() };
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
reply = { id, error: err instanceof Error ? err.message : String(err) };
|
|
20
|
+
}
|
|
21
|
+
port.postMessage(reply);
|
|
22
|
+
});
|
package/dist/listener.d.ts
CHANGED
|
@@ -691,16 +691,18 @@ export interface CollectResult {
|
|
|
691
691
|
* re-attach, and the current command is `node` rather than `claude`).
|
|
692
692
|
*/
|
|
693
693
|
export declare const collectSessionsVerbose: () => CollectResult;
|
|
694
|
+
export declare const recordInventory: (sessions: ReadonlyArray<{
|
|
695
|
+
name: string;
|
|
696
|
+
}> | null) => void;
|
|
694
697
|
/**
|
|
695
|
-
*
|
|
696
|
-
*
|
|
697
|
-
*
|
|
698
|
-
*
|
|
699
|
-
*
|
|
700
|
-
*
|
|
701
|
-
* phone can't usefully address them.
|
|
698
|
+
* Is this session in the inventory? Answered from the last sweep when it can
|
|
699
|
+
* be: a full sweep is two tmux spawns per session on this thread, and it used
|
|
700
|
+
* to run again on every stream start and screen request (12% of daemon wall
|
|
701
|
+
* time, measured 2026-08-26). A miss still sweeps, so a session
|
|
702
|
+
* younger than one poll interval is not refused, and the inventory filter stays
|
|
703
|
+
* the security boundary: only zeph-* panes running an agent are reachable.
|
|
702
704
|
*/
|
|
703
|
-
export declare const
|
|
705
|
+
export declare const isInventoried: (sessionName: string) => boolean;
|
|
704
706
|
/**
|
|
705
707
|
* One file riding on an `agent.command` push. agent.command attachments
|
|
706
708
|
* are uploaded in *plaintext* (the listener has no per-user crypto key),
|
package/dist/listener.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"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"}
|
package/dist/listener.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
};
|
|
27
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
28
|
exports.MAX_INPUT_BODY_CHARS = exports.MAX_INPUT_KEYS = exports.handleStreamControl = exports.buildStreamFrame = exports.isStreamCapReached = exports.stopAllStreams = exports.stopStream = exports.MAX_CONCURRENT_STREAMS = exports.STREAM_RENEW_FRESH_MS = exports.STREAM_LEASE_MS = exports.claimFrameSend = exports.hasFrameBudget = exports.streamCadence = exports.MAX_FRAMES_PER_SEC = exports.BURST_WINDOW_MS = exports.BURST_INTERVAL_MS = exports.STREAM_INTERVAL_MS = exports.STREAM_CAPTURE_LINES = exports.scheduleInjectSnapshots = exports.historyLinesIn = exports.cursorLineFor = exports.parsePaneGeometry = exports.handleScreenHistoryRequest = exports.SCREEN_HISTORY_MAX_LINES = exports.handleSessionForgetRequest = exports.handleSessionExitRequest = exports.SESSION_EXIT_STEP_MS = exports.handleSessionResumeRequest = exports.handleDiffFileRequest = exports.handleDiffFilesRequest = exports.DIFF_PAGE_MAX_BYTES = exports.handleScreenRequest = exports.collectWatchHits = exports.resetPatternWatches = exports.setPatternWatches = exports.deriveSessionState = exports.resetSessionStates = exports.detectRemoteAgent = exports.parseSessionName = exports.invalidateTmuxSocketCache = exports.resolveKeys = exports.paneCurrentCommand = exports.checkRateLimit = exports.AUTH_FAILURE_CODES = exports.sessionsReportDue = exports.sessionsFingerprint = exports.knownSessionsFingerprint = exports.knownSessionsToReport = exports.KNOWN_SESSIONS_REPORTED = exports.SESSION_REPORT_HEARTBEAT_MS = void 0;
|
|
29
|
-
exports.handleListener = exports.resolveWsUrl = exports.computeListenerDeviceId = exports.computeBackoff = exports.handlePush = exports.gcAttachments = exports.setAttachmentContext = exports.writeRemoteMarker = exports.
|
|
29
|
+
exports.handleListener = exports.resolveWsUrl = exports.computeListenerDeviceId = exports.computeBackoff = exports.handlePush = exports.gcAttachments = exports.setAttachmentContext = exports.writeRemoteMarker = exports.isInventoried = exports.recordInventory = exports.collectSessionsVerbose = exports.handleCommandInput = exports.pendingInputDecrypts = exports.MAX_PENDING_DECRYPTS = exports.MAX_INPUT_LANES = exports.validateInputMessage = void 0;
|
|
30
30
|
const child_process_1 = require("child_process");
|
|
31
31
|
const crypto_1 = require("crypto");
|
|
32
32
|
const fs_1 = require("fs");
|
|
@@ -40,6 +40,7 @@ const session_registry_js_1 = require("./session-registry.js");
|
|
|
40
40
|
const remote_agents_js_1 = require("./remote-agents.js");
|
|
41
41
|
const listener_service_js_1 = require("./listener-service.js");
|
|
42
42
|
const agent_state_js_1 = require("./agent-state.js");
|
|
43
|
+
const inventory_offload_js_1 = require("./inventory-offload.js");
|
|
43
44
|
const agent_rules_fetch_js_1 = require("./agent-rules-fetch.js");
|
|
44
45
|
const crypto_js_1 = require("./crypto.js");
|
|
45
46
|
const input_sequencer_js_1 = require("./input-sequencer.js");
|
|
@@ -797,7 +798,7 @@ const handleScreenRequest = (req) => {
|
|
|
797
798
|
if (!(0, exports.checkRateLimit)(`screen:${req.sessionName}`)) {
|
|
798
799
|
return { ...base, error: 'rate_limited' };
|
|
799
800
|
}
|
|
800
|
-
if (!(0, exports.
|
|
801
|
+
if (!(0, exports.isInventoried)(req.sessionName)) {
|
|
801
802
|
return { ...base, error: 'unknown_session' };
|
|
802
803
|
}
|
|
803
804
|
const captured = capturePane(req.sessionName);
|
|
@@ -1316,7 +1317,7 @@ const handleScreenHistoryRequest = (req, send) => {
|
|
|
1316
1317
|
const lines = Math.min(asked, exports.SCREEN_HISTORY_MAX_LINES);
|
|
1317
1318
|
if (!(0, exports.checkRateLimit)(`screen:${req.sessionName}`))
|
|
1318
1319
|
return reply({ error: 'rate_limited' });
|
|
1319
|
-
if (!(0, exports.
|
|
1320
|
+
if (!(0, exports.isInventoried)(req.sessionName)) {
|
|
1320
1321
|
return reply({ error: 'unknown_session' });
|
|
1321
1322
|
}
|
|
1322
1323
|
const stream = activeStreams.get(req.sessionName);
|
|
@@ -1826,7 +1827,7 @@ const handleStreamControl = (req, send) => {
|
|
|
1826
1827
|
const sessionName = req.sessionName;
|
|
1827
1828
|
if (!sessionName)
|
|
1828
1829
|
return true;
|
|
1829
|
-
if (!(0, exports.
|
|
1830
|
+
if (!(0, exports.isInventoried)(sessionName)) {
|
|
1830
1831
|
send(streamErrorFrame(sessionName, 'unknown_session'));
|
|
1831
1832
|
return true;
|
|
1832
1833
|
}
|
|
@@ -2483,7 +2484,36 @@ exports.collectSessionsVerbose = collectSessionsVerbose;
|
|
|
2483
2484
|
* phone can't usefully address them.
|
|
2484
2485
|
*/
|
|
2485
2486
|
const collectSessions = () => (0, exports.collectSessionsVerbose)().sessions;
|
|
2486
|
-
|
|
2487
|
+
/** Names from the most recent inventory sweep; null until the first one lands —
|
|
2488
|
+
* a membership check in that window (the connect burst) still sweeps in-thread. */
|
|
2489
|
+
let inventorySnapshot = null;
|
|
2490
|
+
let inThreadSweepLogged = false;
|
|
2491
|
+
const recordInventory = (sessions) => {
|
|
2492
|
+
inventorySnapshot = sessions && new Set(sessions.map((s) => s.name));
|
|
2493
|
+
};
|
|
2494
|
+
exports.recordInventory = recordInventory;
|
|
2495
|
+
/** The daemon's sweep runner, set for the lifetime of `handleListener`. Null
|
|
2496
|
+
* outside the daemon (tests, one-shot commands) — sweeps then run in-thread. */
|
|
2497
|
+
let inventoryOffload = null;
|
|
2498
|
+
/**
|
|
2499
|
+
* Is this session in the inventory? Answered from the last sweep when it can
|
|
2500
|
+
* be: a full sweep is two tmux spawns per session on this thread, and it used
|
|
2501
|
+
* to run again on every stream start and screen request (12% of daemon wall
|
|
2502
|
+
* time, measured 2026-08-26). A miss still sweeps, so a session
|
|
2503
|
+
* younger than one poll interval is not refused, and the inventory filter stays
|
|
2504
|
+
* the security boundary: only zeph-* panes running an agent are reachable.
|
|
2505
|
+
*/
|
|
2506
|
+
const isInventoried = (sessionName) => {
|
|
2507
|
+
if (inventorySnapshot?.has(sessionName))
|
|
2508
|
+
return true;
|
|
2509
|
+
// Visible once, so a daemon that keeps sweeping in-thread can be seen doing it.
|
|
2510
|
+
if (inventorySnapshot && !inThreadSweepLogged) {
|
|
2511
|
+
inThreadSweepLogged = true;
|
|
2512
|
+
log(`inventory miss for ${sessionName} — swept in-thread (logged once)`);
|
|
2513
|
+
}
|
|
2514
|
+
return collectSessions().some((s) => s.name === sessionName);
|
|
2515
|
+
};
|
|
2516
|
+
exports.isInventoried = isInventoried;
|
|
2487
2517
|
/**
|
|
2488
2518
|
* Shared inject path: pane guard → rate limit → tmux send-keys. Both
|
|
2489
2519
|
* the structured `agent.command` push type and the legacy `@<session>`
|
|
@@ -2919,10 +2949,28 @@ const streamSession = (wsUrl, apiKey) => {
|
|
|
2919
2949
|
// nothing, or another listener's stale data, for this device).
|
|
2920
2950
|
let lastSentFingerprint = null;
|
|
2921
2951
|
let lastSentAtMs = 0;
|
|
2922
|
-
|
|
2952
|
+
let sweepInFlight = false;
|
|
2953
|
+
const reportSessions = async () => {
|
|
2923
2954
|
if (sock.readyState !== ws_1.default.OPEN)
|
|
2924
2955
|
return;
|
|
2925
|
-
|
|
2956
|
+
// One sweep at a time: a slow sweep must not stack a second behind it.
|
|
2957
|
+
if (sweepInFlight)
|
|
2958
|
+
return;
|
|
2959
|
+
sweepInFlight = true;
|
|
2960
|
+
try {
|
|
2961
|
+
const inventory = inventoryOffload ? await inventoryOffload.collect() : (0, exports.collectSessionsVerbose)();
|
|
2962
|
+
if (sock.readyState === ws_1.default.OPEN)
|
|
2963
|
+
publishSessions(inventory);
|
|
2964
|
+
}
|
|
2965
|
+
catch (err) {
|
|
2966
|
+
log(`! session sweep failed, skipping this cycle: ${err instanceof Error ? err.message : String(err)}`);
|
|
2967
|
+
}
|
|
2968
|
+
finally {
|
|
2969
|
+
sweepInFlight = false;
|
|
2970
|
+
}
|
|
2971
|
+
};
|
|
2972
|
+
const publishSessions = ({ sessions, rejected }) => {
|
|
2973
|
+
(0, exports.recordInventory)(sessions);
|
|
2926
2974
|
// Watch hits are one-shot events — they go out on every poll,
|
|
2927
2975
|
// independent of the sessions-report gate below.
|
|
2928
2976
|
// (§S5 v2): probe watched panes and report hits; the server
|
|
@@ -2992,8 +3040,8 @@ const streamSession = (wsUrl, apiKey) => {
|
|
|
2992
3040
|
log('connected');
|
|
2993
3041
|
// Initial inventory so the phone's picker has something to
|
|
2994
3042
|
// show as soon as the listener comes online.
|
|
2995
|
-
reportSessions();
|
|
2996
|
-
sessionsTimer = setInterval(reportSessions, SESSION_REPORT_INTERVAL_MS);
|
|
3043
|
+
void reportSessions();
|
|
3044
|
+
sessionsTimer = setInterval(() => void reportSessions(), SESSION_REPORT_INTERVAL_MS);
|
|
2997
3045
|
pingTimer = setInterval(() => {
|
|
2998
3046
|
if (sock.readyState !== ws_1.default.OPEN)
|
|
2999
3047
|
return;
|
|
@@ -3361,6 +3409,7 @@ const handleListener = async (args) => {
|
|
|
3361
3409
|
};
|
|
3362
3410
|
process.on('SIGINT', () => stop('SIGINT'));
|
|
3363
3411
|
process.on('SIGTERM', () => stop('SIGTERM'));
|
|
3412
|
+
inventoryOffload = (0, inventory_offload_js_1.startInventoryOffload)(exports.collectSessionsVerbose, log);
|
|
3364
3413
|
let attempt = 0;
|
|
3365
3414
|
while (!shuttingDown) {
|
|
3366
3415
|
activeHandle = streamSession(wsUrl, apiKey);
|
|
@@ -3368,6 +3417,7 @@ const handleListener = async (args) => {
|
|
|
3368
3417
|
activeHandle = null;
|
|
3369
3418
|
if (exports.AUTH_FAILURE_CODES.has(result.closeCode ?? -1)) {
|
|
3370
3419
|
console.error(`zeph listener: auth failure (${result.closeCode} ${result.reason}). Check API key.`);
|
|
3420
|
+
inventoryOffload.close();
|
|
3371
3421
|
removeListenerPid();
|
|
3372
3422
|
return 3;
|
|
3373
3423
|
}
|
|
@@ -3383,6 +3433,7 @@ const handleListener = async (args) => {
|
|
|
3383
3433
|
await Promise.race([sleep(delay), stopped]);
|
|
3384
3434
|
attempt = Math.min(attempt + 1, 10);
|
|
3385
3435
|
}
|
|
3436
|
+
inventoryOffload.close();
|
|
3386
3437
|
removeListenerPid();
|
|
3387
3438
|
return 0;
|
|
3388
3439
|
};
|
package/dist/remote-agents.d.ts
CHANGED
|
@@ -186,6 +186,16 @@ declare const REMOTE_AGENT_TABLE: readonly [{
|
|
|
186
186
|
readonly binary: "hermes";
|
|
187
187
|
readonly subcommands: readonly ["hermes"];
|
|
188
188
|
readonly resolveSessionName: (paneCwd: string, panePid?: number, deps?: StoreResolveDeps) => string | null;
|
|
189
|
+
}, {
|
|
190
|
+
readonly kind: "pi";
|
|
191
|
+
readonly displayName: "Pi";
|
|
192
|
+
readonly binary: "pi";
|
|
193
|
+
readonly subcommands: readonly ["pi"];
|
|
194
|
+
}, {
|
|
195
|
+
readonly kind: "opencode";
|
|
196
|
+
readonly displayName: "OpenCode";
|
|
197
|
+
readonly binary: "opencode";
|
|
198
|
+
readonly subcommands: readonly ["opencode"];
|
|
189
199
|
}];
|
|
190
200
|
/** Closed union of remote-controllable agent kinds, derived from the table above. */
|
|
191
201
|
export type AgentKind = (typeof REMOTE_AGENT_TABLE)[number]['kind'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-agents.d.ts","sourceRoot":"","sources":["../src/remote-agents.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"remote-agents.d.ts","sourceRoot":"","sources":["../src/remote-agents.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,WAAW;IACxB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACxE;;;;;;;;;OASG;IACH,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC7E;AAgFD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAI5D,CAAC;AAaF,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AA4CD,MAAM,WAAW,SAAS;IACtB,qEAAqE;IACrE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,6EAA6E;IAC7E,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,SAe9C,CAAC;AAaF,6EAA6E;AAC7E,eAAO,MAAM,YAAY,QAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAA8C,CAAC;AA6BjG,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,GAAI,SAAS,MAAM,KAAG,GAAG,CAAC,MAAM,CASjE,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,GACjC,SAAS,MAAM,EACf,SAAS,MAAM,GAAG,IAAI,EACtB,OAAM,cAAmB,KAC1B,gBAAgB,GAAG,IAMrB,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACnC,SAAS,MAAM,EACf,SAAS,MAAM,GAAG,IAAI,EACtB,OAAM,cAAmB,KAC1B,MAAM,GAAG,IAA2E,CAAC;AAExF;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,GACrC,SAAS,MAAM,EACf,SAAS,MAAM,GAAG,IAAI,EACtB,OAAM,cAAmB,KAC1B,MAAM,GAAG,IAAwE,CAAC;AAerF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAChC,MAAM,SAAS,CAAC,EAAE,EAClB,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,EACjC,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,GAAG,CAAC,MAAM,CAAC,KAClB,CAAC,GAAG,IAeN,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,KAAK,MAAM,KAAG,OAAO,EAAE,GAAG,IAepE,CAAC;AAEF,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B;AA2BD,eAAO,MAAM,uBAAuB,GAChC,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,OAAM,gBAAqB,KAC5B,MAAM,GAAG,IAkBX,CAAC;AAOF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,SAAS,SAAS,MAAM,EAAE,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,IASxF,CAAC;AAmCF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,GAC/B,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,OAAM,gBAAqB,KAC5B,MAAM,GAAG,IAcX,CAAC;AAIF,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;2CArBX,MAAM,YACL,MAAM,SACV,gBAAgB,KACvB,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;2CA7FH,MAAM,YACL,MAAM,SACV,gBAAgB,KACvB,MAAM,GAAG,IAAI;;;;;;;;;;;EA+K2B,CAAC;AAE5C,qFAAqF;AACrF,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,8FAA8F;AAC9F,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEtE,eAAO,MAAM,aAAa,EAAE,SAAS,qBAAqB,EAAuB,CAAC;AAElF,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,qBAAqB,GAAG,SAClB,CAAC;AAE3D,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,qBAAqB,GAAG,SAG9E,CAAC"}
|
package/dist/remote-agents.js
CHANGED
|
@@ -478,6 +478,18 @@ const REMOTE_AGENT_TABLE = [
|
|
|
478
478
|
// `<timestamp>_<hash>` string, and nothing on the wire consumes it yet.
|
|
479
479
|
resolveSessionName: exports.detectHermesSessionName,
|
|
480
480
|
},
|
|
481
|
+
{
|
|
482
|
+
kind: 'pi',
|
|
483
|
+
displayName: 'Pi',
|
|
484
|
+
binary: 'pi',
|
|
485
|
+
subcommands: ['pi'],
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
kind: 'opencode',
|
|
489
|
+
displayName: 'OpenCode',
|
|
490
|
+
binary: 'opencode',
|
|
491
|
+
subcommands: ['opencode'],
|
|
492
|
+
},
|
|
481
493
|
];
|
|
482
494
|
exports.REMOTE_AGENTS = REMOTE_AGENT_TABLE;
|
|
483
495
|
const findAgentBySubcommand = (cmd) => exports.REMOTE_AGENTS.find((a) => a.subcommands.includes(cmd));
|
package/dist/remote-hook.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Agents whose prompt-submit hooks this command serves. Claude Code is
|
|
2
2
|
* NOT here — its hook ships with the plugin (hooks/zeph-remote.sh). */
|
|
3
|
-
export declare const REMOTE_HOOK_AGENTS: readonly ["gemini", "codex"];
|
|
3
|
+
export declare const REMOTE_HOOK_AGENTS: readonly ["gemini", "codex", "pi"];
|
|
4
4
|
export type RemoteHookAgent = (typeof REMOTE_HOOK_AGENTS)[number];
|
|
5
5
|
export declare const isRemoteHookAgent: (raw: string) => raw is RemoteHookAgent;
|
|
6
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-hook.d.ts","sourceRoot":"","sources":["../src/remote-hook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remote-hook.d.ts","sourceRoot":"","sources":["../src/remote-hook.ts"],"names":[],"mappings":"AA0CA;wEACwE;AACxE,eAAO,MAAM,kBAAkB,oCAAqC,CAAC;AACrE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAqClE,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,GAAG,IAAI,eACE,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO,eAAe,EACtB,OAAO,MAAM,EACb,MAAK,MAAM,CAAC,UAAwB,EACpC,MAAK,MAAM,MAAiB,KAC3B,MAAM,GAAG,IA0CX,CAAC"}
|
package/dist/remote-hook.js
CHANGED
|
@@ -3,8 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.runRemoteHook = exports.isRemoteHookAgent = exports.REMOTE_HOOK_AGENTS = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* `zeph remote-hook <agent>` — prompt-submit hook handler for agents whose
|
|
6
|
-
* hooks the cli installs directly: Gemini CLI (BeforeAgent)
|
|
7
|
-
* (UserPromptSubmit)
|
|
6
|
+
* hooks the cli installs directly: Gemini CLI (BeforeAgent), Codex CLI
|
|
7
|
+
* (UserPromptSubmit), and Pi (before_agent_start, consumed by the zeph
|
|
8
|
+
* extension itself). TS twin of the Claude Code plugin's
|
|
8
9
|
* hooks/zeph-remote.sh (ADR-0002).
|
|
9
10
|
*
|
|
10
11
|
* The listener records every phone→pane text injection as a one-shot
|
|
@@ -35,12 +36,13 @@ const config_js_1 = require("./config.js");
|
|
|
35
36
|
const gate_js_1 = require("./gate.js");
|
|
36
37
|
/** Agents whose prompt-submit hooks this command serves. Claude Code is
|
|
37
38
|
* NOT here — its hook ships with the plugin (hooks/zeph-remote.sh). */
|
|
38
|
-
exports.REMOTE_HOOK_AGENTS = ['gemini', 'codex'];
|
|
39
|
+
exports.REMOTE_HOOK_AGENTS = ['gemini', 'codex', 'pi'];
|
|
39
40
|
/** Per-agent hookEventName echoed back in hookSpecificOutput — each CLI
|
|
40
41
|
* validates it against the event that invoked the hook. */
|
|
41
42
|
const HOOK_EVENT_NAME = {
|
|
42
43
|
gemini: 'BeforeAgent',
|
|
43
44
|
codex: 'UserPromptSubmit',
|
|
45
|
+
pi: 'before_agent_start',
|
|
44
46
|
};
|
|
45
47
|
/**
|
|
46
48
|
* Freshness window (seconds), same as the bash reader: deliberately
|
package/dist/templates.d.ts
CHANGED
|
@@ -12,6 +12,10 @@ export declare const COPILOT_RULE: string;
|
|
|
12
12
|
export declare const CLINE_RULE: string;
|
|
13
13
|
/** Aider — standalone conventions file via .aider.conf.yml `read:` (no Stop hook, no prompt hook). */
|
|
14
14
|
export declare const AIDER_RULE: string;
|
|
15
|
+
/** Pi — managed block in ~/.pi/agent/AGENTS.md. Extension = Stop-equivalent + prompt hook (PI_EXTENSION). */
|
|
16
|
+
export declare const PI_RULE: string;
|
|
17
|
+
/** OpenCode — managed block in ~/.config/opencode/AGENTS.md. Stop hook via plugin, no prompt hook (v1). */
|
|
18
|
+
export declare const OPENCODE_RULE: string;
|
|
15
19
|
export declare const CURSOR_HOOKS: string;
|
|
16
20
|
export declare const WINDSURF_HOOKS: string;
|
|
17
21
|
export declare const GEMINI_HOOKS: {
|
|
@@ -65,6 +69,10 @@ export declare const CODEX_HOOKS: {
|
|
|
65
69
|
*/
|
|
66
70
|
export declare const isZephHookGroup: (group: unknown) => boolean;
|
|
67
71
|
export declare const COPILOT_HOOKS: string;
|
|
72
|
+
/** Pi extension source — written to ~/.pi/agent/extensions/zeph.ts (drop-in auto-load). */
|
|
73
|
+
export declare const PI_EXTENSION: string;
|
|
74
|
+
/** OpenCode plugin source — written to ~/.config/opencode/plugins/zeph.ts (drop-in auto-load). */
|
|
75
|
+
export declare const OPENCODE_PLUGIN: string;
|
|
68
76
|
export declare const ZEPH_MARK_START = "<!-- ZEPH:START \u2014 managed by @zeph-to/cli, do not edit between markers -->";
|
|
69
77
|
export declare const ZEPH_MARK_END = "<!-- ZEPH:END -->";
|
|
70
78
|
/**
|
package/dist/templates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAwJA,6FAA6F;AAC7F,eAAO,MAAM,WAAW,QAKtB,CAAC;AAEH,6FAA6F;AAC7F,eAAO,MAAM,aAAa,QAIxB,CAAC;AAEH,0FAA0F;AAC1F,eAAO,MAAM,WAAW,QAAyE,CAAC;AAElG,uFAAuF;AACvF,eAAO,MAAM,UAAU,QAAyE,CAAC;AAEjG,oGAAoG;AACpG,eAAO,MAAM,YAAY,QAIvB,CAAC;AAEH,gFAAgF;AAChF,eAAO,MAAM,UAAU,QAIrB,CAAC;AAEH,sGAAsG;AACtG,eAAO,MAAM,UAAU,QAIrB,CAAC;AAEH,6GAA6G;AAC7G,eAAO,MAAM,OAAO,QAIlB,CAAC;AAEH,2GAA2G;AAC3G,eAAO,MAAM,aAAa,QAIxB,CAAC;AAIH,eAAO,MAAM,YAAY,QAKd,CAAC;AAEZ,eAAO,MAAM,cAAc,QAOhB,CAAC;AAEZ,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;CAuBxB,CAAC;AAYF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;CASvB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,OAUhD,CAAC;AAEF,eAAO,MAAM,aAAa,QASf,CAAC;AAQZ,2FAA2F;AAC3F,eAAO,MAAM,YAAY,QAmCxB,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,eAAe,QAgB3B,CAAC;AASF,eAAO,MAAM,eAAe,oFAA+E,CAAC;AAC5G,eAAO,MAAM,aAAa,sBAAsB,CAAC;AAQjD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,EAAE,MAAM,MAAM,KAAG,MAWnE,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,MAOrD,CAAC"}
|
package/dist/templates.js
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
// Keeping this in one place means a rule change lands everywhere at once
|
|
26
26
|
// and the agents can't drift apart.
|
|
27
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.removeManagedBlock = exports.upsertManagedBlock = exports.ZEPH_MARK_END = exports.ZEPH_MARK_START = exports.COPILOT_HOOKS = exports.isZephHookGroup = exports.CODEX_HOOKS = exports.GEMINI_HOOKS = exports.WINDSURF_HOOKS = exports.CURSOR_HOOKS = exports.AIDER_RULE = exports.CLINE_RULE = exports.COPILOT_RULE = exports.CODEX_RULE = exports.GEMINI_RULE = exports.WINDSURF_RULE = exports.CURSOR_RULE = void 0;
|
|
28
|
+
exports.removeManagedBlock = exports.upsertManagedBlock = exports.ZEPH_MARK_END = exports.ZEPH_MARK_START = exports.OPENCODE_PLUGIN = exports.PI_EXTENSION = exports.COPILOT_HOOKS = exports.isZephHookGroup = exports.CODEX_HOOKS = exports.GEMINI_HOOKS = exports.WINDSURF_HOOKS = exports.CURSOR_HOOKS = exports.OPENCODE_RULE = exports.PI_RULE = exports.AIDER_RULE = exports.CLINE_RULE = exports.COPILOT_RULE = exports.CODEX_RULE = exports.GEMINI_RULE = exports.WINDSURF_RULE = exports.CURSOR_RULE = void 0;
|
|
29
29
|
const gate_js_1 = require("./gate.js");
|
|
30
30
|
const zeph_core_generated_js_1 = require("./zeph-core.generated.js");
|
|
31
31
|
// Graceful resolution: prefer the installed `zeph` CLI, but fall back to
|
|
@@ -107,9 +107,22 @@ builds, tests, deploys, destructive ops, milestone completions. Skip it on
|
|
|
107
107
|
trivial turns (read-only exploration, a mid-step in an approved plan, a
|
|
108
108
|
typo-sized fix). Once the answer reports \`zephState: "REMOTE"\`, Rule 9
|
|
109
109
|
takes over.`;
|
|
110
|
+
// Tool-access preamble — pi only.
|
|
111
|
+
const PI_TOOL_ACCESS = `## Zeph tools via the CLI (no MCP)
|
|
112
|
+
|
|
113
|
+
Pi has no MCP support, so the zeph_* tools these rules name are not in your
|
|
114
|
+
tool list. Wherever a rule says to call one, run the zeph CLI with your bash
|
|
115
|
+
tool instead — same semantics:
|
|
116
|
+
|
|
117
|
+
- zeph_ask → \`zeph ask --title "…" --body "…" --actions "id:Label,id2:Label2" --timeout 300\`
|
|
118
|
+
Blocks until answered; prints one JSON line. \`answered: false\` (timeout /
|
|
119
|
+
unreachable) is a Done-like outcome — treat it as NORMAL.
|
|
120
|
+
- zeph_notify → \`zeph notify --title "…" --body "…" [--priority high]\`
|
|
121
|
+
- AskUserQuestion → pi's own terminal prompt.`;
|
|
110
122
|
/** Assemble a full rule document from optional frontmatter + preambles + core. */
|
|
111
123
|
const buildRule = (opts) => {
|
|
112
124
|
const fm = opts.frontmatter ? `${opts.frontmatter}\n\n` : '';
|
|
125
|
+
const tools = opts.toolAccess ? `${opts.toolAccess}\n\n` : '';
|
|
113
126
|
const entry = opts.remoteEntry ? `${opts.remoteEntry}\n\n` : '';
|
|
114
127
|
return `${fm}# Zeph — Remote-Control Rules
|
|
115
128
|
|
|
@@ -119,7 +132,7 @@ the user.
|
|
|
119
132
|
|
|
120
133
|
${opts.notify}
|
|
121
134
|
|
|
122
|
-
${entry}${opts.core}
|
|
135
|
+
${tools}${entry}${opts.core}
|
|
123
136
|
`;
|
|
124
137
|
};
|
|
125
138
|
// ── Per-agent rule documents ─────────────────────────────────────
|
|
@@ -162,6 +175,18 @@ exports.AIDER_RULE = buildRule({
|
|
|
162
175
|
remoteEntry: REMOTE_ENTRY_NO_HOOK,
|
|
163
176
|
core: zeph_core_generated_js_1.ZEPH_CORE_RULE_ONLY,
|
|
164
177
|
});
|
|
178
|
+
/** Pi — managed block in ~/.pi/agent/AGENTS.md. Extension = Stop-equivalent + prompt hook (PI_EXTENSION). */
|
|
179
|
+
exports.PI_RULE = buildRule({
|
|
180
|
+
notify: HOOK_DRIVEN_NOTIFY,
|
|
181
|
+
toolAccess: PI_TOOL_ACCESS,
|
|
182
|
+
core: zeph_core_generated_js_1.ZEPH_CORE_HOOK_DRIVEN,
|
|
183
|
+
});
|
|
184
|
+
/** OpenCode — managed block in ~/.config/opencode/AGENTS.md. Stop hook via plugin, no prompt hook (v1). */
|
|
185
|
+
exports.OPENCODE_RULE = buildRule({
|
|
186
|
+
notify: HOOK_DRIVEN_NOTIFY,
|
|
187
|
+
remoteEntry: REMOTE_ENTRY_NO_HOOK,
|
|
188
|
+
core: zeph_core_generated_js_1.ZEPH_CORE_HOOK_DRIVEN,
|
|
189
|
+
});
|
|
165
190
|
// ── Hook configs ─────────────────────────────────────────────────
|
|
166
191
|
exports.CURSOR_HOOKS = JSON.stringify({
|
|
167
192
|
version: 1,
|
|
@@ -250,6 +275,66 @@ exports.COPILOT_HOOKS = JSON.stringify({
|
|
|
250
275
|
}],
|
|
251
276
|
},
|
|
252
277
|
}, null, 2);
|
|
278
|
+
// ── Drop-in artifact sources (pi extension, opencode plugin) ─────
|
|
279
|
+
//
|
|
280
|
+
// Not named *_HOOKS: those exports are JSON configs that templates.test.ts
|
|
281
|
+
// JSON.parses — these are TS source, auto-collected there as *_EXTENSION /
|
|
282
|
+
// *_PLUGIN for the same quiet-default guard, at the string level.
|
|
283
|
+
/** Pi extension source — written to ~/.pi/agent/extensions/zeph.ts (drop-in auto-load). */
|
|
284
|
+
exports.PI_EXTENSION = `// Generated by @zeph-to/cli — reinstall overwrites; \`zeph uninstall\` removes.
|
|
285
|
+
import { spawn } from "node:child_process";
|
|
286
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
287
|
+
|
|
288
|
+
const sh = (cmd: string, cwd: string, stdin?: string): Promise<string> =>
|
|
289
|
+
new Promise((resolve) => {
|
|
290
|
+
const child = spawn("sh", ["-c", cmd], { cwd, stdio: ["pipe", "pipe", "ignore"] });
|
|
291
|
+
let out = "";
|
|
292
|
+
child.stdout.on("data", (d) => (out += d.toString()));
|
|
293
|
+
child.on("error", () => resolve(""));
|
|
294
|
+
child.on("close", () => resolve(out));
|
|
295
|
+
child.stdin.end(stdin ?? "");
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
export default function (pi: ExtensionAPI) {
|
|
299
|
+
// Stop-equivalent: agent_settled fires once per user turn, after retries/compaction.
|
|
300
|
+
// Fire-and-forget: never block pi's turn-end on the notify network call.
|
|
301
|
+
pi.on("agent_settled", (_event, ctx) => {
|
|
302
|
+
const child = spawn("sh", ["-c", ${JSON.stringify(NOTIFY_CMD)}], { cwd: ctx.cwd, stdio: "ignore", detached: true });
|
|
303
|
+
child.on("error", () => {});
|
|
304
|
+
child.unref();
|
|
305
|
+
});
|
|
306
|
+
// Prompt-submit: remote-origin detection (ADR-0002) — additionalContext comes
|
|
307
|
+
// back as a persistent injected message (this extension is the consumer).
|
|
308
|
+
pi.on("before_agent_start", async (event, ctx) => {
|
|
309
|
+
const out = await sh(${JSON.stringify(remoteHookCmd('pi'))}, ctx.cwd,
|
|
310
|
+
JSON.stringify({ prompt: event.prompt, cwd: ctx.cwd }));
|
|
311
|
+
try {
|
|
312
|
+
const context = JSON.parse(out)?.hookSpecificOutput?.additionalContext;
|
|
313
|
+
if (typeof context === "string" && context) {
|
|
314
|
+
return { message: { customType: "zeph-remote", content: context, display: false } };
|
|
315
|
+
}
|
|
316
|
+
} catch { /* silent no-op — the hook only ever adds context */ }
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
`;
|
|
320
|
+
/** OpenCode plugin source — written to ~/.config/opencode/plugins/zeph.ts (drop-in auto-load). */
|
|
321
|
+
exports.OPENCODE_PLUGIN = `// Generated by @zeph-to/cli — reinstall overwrites; \`zeph uninstall\` removes.
|
|
322
|
+
import { spawn } from "node:child_process";
|
|
323
|
+
|
|
324
|
+
const NOTIFY = ${JSON.stringify(NOTIFY_CMD)};
|
|
325
|
+
|
|
326
|
+
export const ZephPlugin = async ({ directory }) => ({
|
|
327
|
+
// Stop-equivalent: the installed plugin API exposes one generic event hook
|
|
328
|
+
// (no per-event keys) — filter for "session.idle", the end-of-turn signal.
|
|
329
|
+
event: async ({ event }) => {
|
|
330
|
+
if (event.type !== "session.idle") return;
|
|
331
|
+
// Fire-and-forget: never block opencode's event pipeline on the notify call.
|
|
332
|
+
const child = spawn("sh", ["-c", NOTIFY], { cwd: directory, stdio: "ignore", detached: true });
|
|
333
|
+
child.on("error", () => {});
|
|
334
|
+
child.unref();
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
`;
|
|
253
338
|
// ── Marker-section helpers for shared global rule files ──────────
|
|
254
339
|
//
|
|
255
340
|
// Windsurf / Gemini / Codex all use a single shared global rule file
|
package/dist/uninstall.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/** Remove just the `zeph` entry from an MCP registry JSON file. `key` is the
|
|
2
|
+
* container: `mcpServers` for Cursor/Windsurf, top-level `mcp` for
|
|
3
|
+
* opencode.json (opencode's own schema). Exported for tests. */
|
|
4
|
+
export declare const rmMcpEntry: (filePath: string, dry: boolean, key?: string) => string | null;
|
|
1
5
|
/** Remove just the zeph-written entries from Gemini's settings.json.
|
|
2
6
|
* Exported for tests (gemini is PATH-detected, so the full-uninstall
|
|
3
7
|
* suite can't reach this deterministically). */
|
package/dist/uninstall.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../src/uninstall.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../src/uninstall.ts"],"names":[],"mappings":"AA4BA;;iEAEiE;AACjE,eAAO,MAAM,UAAU,GAAI,UAAU,MAAM,EAAE,KAAK,OAAO,EAAE,YAAkB,KAAG,MAAM,GAAG,IAexF,CAAC;AA4DF;;iDAEiD;AACjD,eAAO,MAAM,YAAY,GAAI,UAAU,MAAM,EAAE,KAAK,OAAO,KAAG,MAAM,GAAG,IAWtE,CAAC;AAEF;;;gDAGgD;AAChD,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,EAAE,KAAK,OAAO,KAAG,MAAM,GAAG,IAerE,CAAC;AA8EF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAU,KAAK,OAAO,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAM3E,CAAC;AAIF,eAAO,MAAM,eAAe,GAAU,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAG,OAAO,CAAC,MAAM,CAoC5F,CAAC"}
|
package/dist/uninstall.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleUninstall = exports.removeServiceStep = exports.rmCodexHook = exports.rmGeminiHook = void 0;
|
|
3
|
+
exports.handleUninstall = exports.removeServiceStep = exports.rmCodexHook = exports.rmGeminiHook = exports.rmMcpEntry = void 0;
|
|
4
4
|
const child_process_1 = require("child_process");
|
|
5
5
|
const fs_1 = require("fs");
|
|
6
6
|
const os_1 = require("os");
|
|
@@ -25,8 +25,10 @@ const rmFile = (filePath, dry) => {
|
|
|
25
25
|
(0, fs_1.rmSync)(filePath, { force: true });
|
|
26
26
|
return `${verb(dry)} ${filePath}`;
|
|
27
27
|
};
|
|
28
|
-
/** Remove just the `zeph` entry from an
|
|
29
|
-
|
|
28
|
+
/** Remove just the `zeph` entry from an MCP registry JSON file. `key` is the
|
|
29
|
+
* container: `mcpServers` for Cursor/Windsurf, top-level `mcp` for
|
|
30
|
+
* opencode.json (opencode's own schema). Exported for tests. */
|
|
31
|
+
const rmMcpEntry = (filePath, dry, key = 'mcpServers') => {
|
|
30
32
|
if (!(0, fs_1.existsSync)(filePath))
|
|
31
33
|
return null;
|
|
32
34
|
let data;
|
|
@@ -36,7 +38,7 @@ const rmMcpEntry = (filePath, dry) => {
|
|
|
36
38
|
catch {
|
|
37
39
|
return null;
|
|
38
40
|
}
|
|
39
|
-
const servers = data
|
|
41
|
+
const servers = data[key];
|
|
40
42
|
if (!servers || !('zeph' in servers))
|
|
41
43
|
return null;
|
|
42
44
|
if (!dry) {
|
|
@@ -45,6 +47,7 @@ const rmMcpEntry = (filePath, dry) => {
|
|
|
45
47
|
}
|
|
46
48
|
return `${verb(dry)} zeph from ${filePath}`;
|
|
47
49
|
};
|
|
50
|
+
exports.rmMcpEntry = rmMcpEntry;
|
|
48
51
|
/** Strip the <!-- ZEPH:START/END --> block from a shared rule file. */
|
|
49
52
|
const stripManagedRule = (filePath, dry) => {
|
|
50
53
|
if (!(0, fs_1.existsSync)(filePath))
|
|
@@ -185,12 +188,12 @@ const AGENT_UNINSTALLERS = {
|
|
|
185
188
|
}
|
|
186
189
|
},
|
|
187
190
|
cursor: (dry) => runSteps([
|
|
188
|
-
() => rmMcpEntry((0, path_1.join)(HOME, '.cursor', 'mcp.json'), dry),
|
|
191
|
+
() => (0, exports.rmMcpEntry)((0, path_1.join)(HOME, '.cursor', 'mcp.json'), dry),
|
|
189
192
|
() => rmFile((0, path_1.join)(HOME, '.cursor', 'hooks.json'), dry),
|
|
190
193
|
() => rmFile((0, path_1.join)(HOME, '.cursor', 'rules', 'zeph.mdc'), dry),
|
|
191
194
|
]),
|
|
192
195
|
windsurf: (dry) => runSteps([
|
|
193
|
-
() => rmMcpEntry((0, path_1.join)(HOME, '.codeium', 'windsurf', 'mcp_config.json'), dry),
|
|
196
|
+
() => (0, exports.rmMcpEntry)((0, path_1.join)(HOME, '.codeium', 'windsurf', 'mcp_config.json'), dry),
|
|
194
197
|
() => rmFile((0, path_1.join)(HOME, '.codeium', 'windsurf', 'hooks.json'), dry),
|
|
195
198
|
() => stripManagedRule((0, path_1.join)(HOME, '.codeium', 'windsurf', 'memories', 'global_rules.md'), dry),
|
|
196
199
|
]),
|
|
@@ -235,6 +238,15 @@ const AGENT_UNINSTALLERS = {
|
|
|
235
238
|
() => rmFile((0, path_1.join)(HOME, '.zeph', 'aider-conventions.md'), dry),
|
|
236
239
|
() => rmAiderReadDirective((0, path_1.join)(HOME, '.aider.conf.yml'), dry),
|
|
237
240
|
]),
|
|
241
|
+
pi: (dry) => runSteps([
|
|
242
|
+
() => rmFile((0, path_1.join)(HOME, '.pi', 'agent', 'extensions', 'zeph.ts'), dry),
|
|
243
|
+
() => stripManagedRule((0, path_1.join)(HOME, '.pi', 'agent', 'AGENTS.md'), dry),
|
|
244
|
+
]),
|
|
245
|
+
opencode: (dry) => runSteps([
|
|
246
|
+
() => (0, exports.rmMcpEntry)((0, path_1.join)(HOME, '.config', 'opencode', 'opencode.json'), dry, 'mcp'),
|
|
247
|
+
() => rmFile((0, path_1.join)(HOME, '.config', 'opencode', 'plugins', 'zeph.ts'), dry),
|
|
248
|
+
() => stripManagedRule((0, path_1.join)(HOME, '.config', 'opencode', 'AGENTS.md'), dry),
|
|
249
|
+
]),
|
|
238
250
|
};
|
|
239
251
|
/**
|
|
240
252
|
* Remove the login-time LaunchAgent, if one is installed.
|
package/dist/verify.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,YAAY,GAAU,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAG,OAAO,CAAC,MAAM,CAiFzF,CAAC"}
|
package/dist/verify.js
CHANGED
|
@@ -38,6 +38,8 @@ const AGENT_RULE_PRESENT = {
|
|
|
38
38
|
copilot: () => (0, fs_1.existsSync)((0, path_1.join)(HOME, '.copilot', 'instructions', 'zeph.instructions.md')),
|
|
39
39
|
cline: () => (0, fs_1.existsSync)((0, path_1.join)(HOME, '.cline', 'rules', 'zeph.md')),
|
|
40
40
|
aider: () => (0, fs_1.existsSync)((0, path_1.join)(HOME, '.zeph', 'aider-conventions.md')),
|
|
41
|
+
pi: () => hasManagedBlock((0, path_1.join)(HOME, '.pi', 'agent', 'AGENTS.md')),
|
|
42
|
+
opencode: () => hasManagedBlock((0, path_1.join)(HOME, '.config', 'opencode', 'AGENTS.md')),
|
|
41
43
|
};
|
|
42
44
|
const handleVerify = async (args) => {
|
|
43
45
|
const doPing = args.ping === true;
|