@dmsdc-ai/aigentry-telepty 0.3.3 → 0.3.5
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/AGENTS.md +23 -0
- package/CHANGELOG.md +110 -0
- package/README.md +67 -1
- package/cli.js +125 -39
- package/cross-machine.js +132 -0
- package/docs/reports/2026-05-05-issue-8-claude-review.md +194 -0
- package/docs/specs/2026-05-05-issue-8-telepty-init.md +477 -0
- package/host-spec.js +60 -0
- package/mcp-server/index.mjs +24 -3
- package/package.json +6 -5
- package/scripts/regen-snippet-fixtures.js +42 -0
- package/skill-installer.js +42 -6
- package/skills/telepty/SKILL.md +1 -1
- package/skills/telepty-allow/SKILL.md +1 -1
- package/skills/telepty-attach/SKILL.md +1 -1
- package/skills/telepty-broadcast/SKILL.md +1 -1
- package/skills/telepty-daemon/SKILL.md +1 -1
- package/skills/telepty-inject/SKILL.md +76 -4
- package/skills/telepty-list/SKILL.md +1 -1
- package/skills/telepty-listen/SKILL.md +1 -1
- package/skills/telepty-rename/SKILL.md +1 -1
- package/skills/telepty-session/SKILL.md +1 -1
- package/src/init/print-snippet.js +114 -0
- package/src/init/snippets/agents.md +15 -0
- package/src/init/snippets/claude.md +15 -0
- package/src/init/snippets/gemini.md +15 -0
- package/tests/snippet-protocol/v1/golden-agents.json +1 -0
- package/tests/snippet-protocol/v1/golden-agents.md +17 -0
- package/tests/snippet-protocol/v1/golden-all.json +3 -0
- package/tests/snippet-protocol/v1/golden-all.md +53 -0
- package/tests/snippet-protocol/v1/golden-claude.json +1 -0
- package/tests/snippet-protocol/v1/golden-claude.md +17 -0
- package/tests/snippet-protocol/v1/golden-gemini.json +1 -0
- package/tests/snippet-protocol/v1/golden-gemini.md +17 -0
package/skill-installer.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
// LEGACY: grandfathered by ADR 2026-05-05-telepty-devkit-boundary §6.2.1. New installer behavior MUST land in @dmsdc-ai/aigentry-devkit. Bugfixes only.
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
4
|
const fs = require('fs');
|
|
4
5
|
const os = require('os');
|
|
5
6
|
const path = require('path');
|
|
7
|
+
const { execSync } = require('child_process');
|
|
6
8
|
const prompts = require('prompts');
|
|
7
9
|
|
|
8
10
|
const TARGET_CLIENTS = {
|
|
@@ -10,22 +12,44 @@ const TARGET_CLIENTS = {
|
|
|
10
12
|
label: 'Claude Code',
|
|
11
13
|
globalDir: () => path.join(os.homedir(), '.claude', 'skills'),
|
|
12
14
|
projectDir: (cwd) => path.join(cwd, '.claude', 'skills'),
|
|
13
|
-
defaultScope: 'global'
|
|
15
|
+
defaultScope: 'global',
|
|
16
|
+
homeDir: () => path.join(os.homedir(), '.claude'),
|
|
17
|
+
binary: 'claude'
|
|
14
18
|
},
|
|
15
19
|
codex: {
|
|
16
20
|
label: 'Codex',
|
|
17
21
|
globalDir: () => path.join(os.homedir(), '.codex', 'skills'),
|
|
18
22
|
projectDir: (cwd) => path.join(cwd, '.codex', 'skills'),
|
|
19
|
-
defaultScope: 'global'
|
|
23
|
+
defaultScope: 'global',
|
|
24
|
+
homeDir: () => path.join(os.homedir(), '.codex'),
|
|
25
|
+
binary: 'codex'
|
|
20
26
|
},
|
|
21
27
|
gemini: {
|
|
22
28
|
label: 'Gemini',
|
|
23
29
|
globalDir: () => path.join(os.homedir(), '.gemini', 'skills'),
|
|
24
30
|
projectDir: (cwd) => path.join(cwd, '.gemini', 'skills'),
|
|
25
|
-
defaultScope: 'project'
|
|
31
|
+
defaultScope: 'project',
|
|
32
|
+
homeDir: () => path.join(os.homedir(), '.gemini'),
|
|
33
|
+
binary: 'gemini'
|
|
26
34
|
}
|
|
27
35
|
};
|
|
28
36
|
|
|
37
|
+
function hasCliBinary(cmd) {
|
|
38
|
+
try {
|
|
39
|
+
execSync(`command -v ${cmd}`, { stdio: 'ignore', shell: '/bin/sh' });
|
|
40
|
+
return true;
|
|
41
|
+
} catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function detectInstalledClients() {
|
|
47
|
+
return Object.keys(TARGET_CLIENTS).filter((key) => {
|
|
48
|
+
const client = TARGET_CLIENTS[key];
|
|
49
|
+
return fs.existsSync(client.homeDir()) || hasCliBinary(client.binary);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
29
53
|
function resolveSkillsSourceRoot(packageRoot = __dirname) {
|
|
30
54
|
return path.join(packageRoot, 'skills');
|
|
31
55
|
}
|
|
@@ -163,13 +187,23 @@ async function runInteractiveSkillInstaller(options = {}) {
|
|
|
163
187
|
console.log(`Installing packaged skill: ${packagedSkills[0].name}`);
|
|
164
188
|
}
|
|
165
189
|
|
|
190
|
+
const installedClients = options.detectClients
|
|
191
|
+
? options.detectClients()
|
|
192
|
+
: detectInstalledClients();
|
|
193
|
+
const installedSet = new Set(installedClients);
|
|
194
|
+
const detectedLabel = installedClients.length
|
|
195
|
+
? `Detected: ${installedClients.join(', ')}`
|
|
196
|
+
: 'No AI CLI detected — manual selection required';
|
|
197
|
+
console.log(detectedLabel);
|
|
198
|
+
|
|
166
199
|
const selectedClientsAnswer = await promptImpl({
|
|
167
200
|
type: 'multiselect',
|
|
168
201
|
name: 'clients',
|
|
169
|
-
message: 'Select target clients',
|
|
202
|
+
message: 'Select target clients (detected CLIs pre-selected)',
|
|
170
203
|
choices: Object.entries(TARGET_CLIENTS).map(([key, value]) => ({
|
|
171
|
-
title: value.label
|
|
172
|
-
value: key
|
|
204
|
+
title: `${value.label}${installedSet.has(key) ? ' ✓ detected' : ' (not detected)'}`,
|
|
205
|
+
value: key,
|
|
206
|
+
selected: installedSet.has(key)
|
|
173
207
|
})),
|
|
174
208
|
min: 1
|
|
175
209
|
});
|
|
@@ -262,6 +296,8 @@ async function runInteractiveSkillInstaller(options = {}) {
|
|
|
262
296
|
module.exports = {
|
|
263
297
|
TARGET_CLIENTS,
|
|
264
298
|
copySkillDirectory,
|
|
299
|
+
detectInstalledClients,
|
|
300
|
+
hasCliBinary,
|
|
265
301
|
installSkillsWithPlan,
|
|
266
302
|
listPackagedSkills,
|
|
267
303
|
resolveTargetDirectory,
|
package/skills/telepty/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telepty
|
|
3
|
-
description: Overview of telepty — PTY multiplexer for AI session orchestration. Use this when user asks "what is telepty" or needs a getting-started guide.
|
|
3
|
+
description: Overview of telepty — PTY multiplexer for AI session orchestration. Use this when user asks "what is telepty" or needs a getting-started guide. 키워드: 텔레프티, 텔레프티 개요, 시작하기, telepty 소개, 사용법, 가이드
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# telepty — Overview
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telepty-allow
|
|
3
|
-
description: Create telepty sessions by wrapping CLI processes. Covers the allow/enable/wrap command for session creation and PTY management.
|
|
3
|
+
description: Create telepty sessions by wrapping CLI processes. Covers the allow/enable/wrap command for session creation and PTY management. 키워드: 세션 생성, 세션 래핑, CLI 래핑, allow, 세션 만들기, PTY
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# telepty-allow — Create and Manage Sessions
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telepty-attach
|
|
3
|
-
description: Attach interactively to a telepty session to view output and send input in real-time.
|
|
3
|
+
description: Attach interactively to a telepty session to view output and send input in real-time. 키워드: 세션 접속, 세션 연결, 세션 들어가기, 어태치, attach, 실시간 보기
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# telepty-attach — Interactive Session Attachment
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telepty-broadcast
|
|
3
|
-
description: Send messages to multiple telepty sessions at once. Covers broadcast (all sessions) and multicast (selected targets).
|
|
3
|
+
description: Send messages to multiple telepty sessions at once. Covers broadcast (all sessions) and multicast (selected targets). 키워드: 전체 공지, 모든 세션에, 일괄 전송, 브로드캐스트, 멀티캐스트, 다중 주입
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# telepty-broadcast — Multi-Target Messaging
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telepty-daemon
|
|
3
|
-
description: Manage the telepty daemon — start, stop, repair, update, and TUI dashboard. Use when daemon is broken or needs maintenance.
|
|
3
|
+
description: Manage the telepty daemon — start, stop, repair, update, and TUI dashboard. Use when daemon is broken or needs maintenance. 키워드: 데몬 시작, 데몬 재시작, 데몬 종료, TUI, 대시보드, 데몬 상태, daemon
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# telepty-daemon — Daemon Management
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telepty-inject
|
|
3
|
-
description: Send messages, commands, and keystrokes to telepty sessions. Covers inject, enter, send-key, and reply commands.
|
|
3
|
+
description: Send messages, commands, and keystrokes to telepty sessions. Covers inject, enter, send-key, and reply commands. 키워드: 세션에 메시지, 메시지 보내기, 전달, 주입, inject, 응답, 답장, 키 입력
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# telepty-inject — Send Messages to Sessions
|
|
@@ -51,14 +51,34 @@ If you expect a reply, ALWAYS include `--from` so the target knows where to resp
|
|
|
51
51
|
telepty inject <target> "your message" --from $(echo $TELEPTY_SESSION_ID)
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
### Cross-host inject
|
|
54
|
+
### Cross-host inject — `<id>@<host>` syntax
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
To inject into a session running on a different machine, append `@<host>` to
|
|
57
|
+
the session ID. `<host>` can be a hostname, LAN IP, or Tailnet name.
|
|
57
58
|
|
|
58
59
|
```bash
|
|
59
|
-
|
|
60
|
+
# Hostname
|
|
61
|
+
telepty inject session_id@worker-01 "message"
|
|
62
|
+
|
|
63
|
+
# LAN IP (daemon must be reachable on port 3848)
|
|
64
|
+
telepty inject orchestrator-claude@172.28.4.165 "PING from build server"
|
|
65
|
+
|
|
66
|
+
# With return address (recommended for cross-host)
|
|
67
|
+
telepty inject orchestrator-claude@192.168.1.10 "task done" \
|
|
68
|
+
--from "$TELEPTY_SESSION_ID"
|
|
60
69
|
```
|
|
61
70
|
|
|
71
|
+
**Requirements**:
|
|
72
|
+
- The remote daemon must be reachable on port `3848` from the calling host
|
|
73
|
+
(firewall / LAN routing / Tailscale).
|
|
74
|
+
- No SSH or sshd is required on either side — the call hits the remote
|
|
75
|
+
daemon's HTTP API directly.
|
|
76
|
+
- Use the same `<id>@<host>` syntax for `attach`, `read-screen`, `enter`,
|
|
77
|
+
and `multicast` targets.
|
|
78
|
+
|
|
79
|
+
Use this when the same session ID exists on multiple hosts, or when the
|
|
80
|
+
calling host has no local daemon discovery (no Tailnet, mixed LAN, etc.).
|
|
81
|
+
|
|
62
82
|
## enter — Send Enter keystroke only
|
|
63
83
|
|
|
64
84
|
```bash
|
|
@@ -83,6 +103,58 @@ telepty reply "<message>"
|
|
|
83
103
|
|
|
84
104
|
Automatically targets the session that last injected into yours (uses stored `lastInjectFrom`).
|
|
85
105
|
|
|
106
|
+
## Report Convention (REPORT to orchestrator)
|
|
107
|
+
|
|
108
|
+
When a sub-session finishes a task or needs to escalate state, it reports to the
|
|
109
|
+
**orchestrator** session using the `REPORT:` prefix.
|
|
110
|
+
|
|
111
|
+
### Hard rule: NEVER hardcode the orchestrator session ID
|
|
112
|
+
|
|
113
|
+
Session IDs are volatile runtime identifiers — they may change across hosts,
|
|
114
|
+
restarts, or topology shifts. Resolve the orchestrator ID at runtime from
|
|
115
|
+
`telepty list --json` instead.
|
|
116
|
+
|
|
117
|
+
### Standard pattern (telepty 0.3.3+)
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# 1. Resolve orchestrator session ID at runtime (filter out role-suffixed peers)
|
|
121
|
+
ORCH_ID=$(telepty list --json | python3 -c "import json,sys; \
|
|
122
|
+
print(next(s['id'] for s in json.load(sys.stdin) \
|
|
123
|
+
if 'orchestrator' in s['id'] \
|
|
124
|
+
and not any(x in s['id'] for x in ('coder','reviewer','architect','runner','tester','analyst','builder'))))")
|
|
125
|
+
|
|
126
|
+
# 2. Inject the REPORT (retry-safe submit; --ref keeps payload short)
|
|
127
|
+
telepty inject --ref --submit --submit-retry 2 \
|
|
128
|
+
--from "$TELEPTY_SESSION_ID" "$ORCH_ID" \
|
|
129
|
+
"REPORT: <one-line summary> | evidence: <commit/test/etc> | next: <handoff>"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Convention rules
|
|
133
|
+
|
|
134
|
+
- **Prefix**: messages MUST start with `REPORT:` so the orchestrator's event
|
|
135
|
+
classifier can route them.
|
|
136
|
+
- **Return address**: include `--from "$TELEPTY_SESSION_ID"` so the orchestrator
|
|
137
|
+
knows which sub-session reported.
|
|
138
|
+
- **Retry**: pass `--submit-retry 2` (telepty 0.3.3+). The retry is idempotent
|
|
139
|
+
on safe gate-timeout 504s (`gated_dispatch_unconsumed`, `gate_timeout`,
|
|
140
|
+
`no_prompt_symbol_seen`); hard-fail reasons (`session_dead`, `error`,
|
|
141
|
+
`restarting`, `no_state`) are not retried.
|
|
142
|
+
- **Long payloads**: store the full body in a file and use `--ref <file>` so the
|
|
143
|
+
inject prompt itself stays short.
|
|
144
|
+
- **Self-report (idempotent)**: a session reporting on its own behalf may use
|
|
145
|
+
`--submit-force` to bypass the render gate. Do NOT use `--submit-force` for
|
|
146
|
+
general inject — it can clobber in-flight user input.
|
|
147
|
+
|
|
148
|
+
### Anti-patterns (DO NOT)
|
|
149
|
+
|
|
150
|
+
- `telepty inject orchestrator-claude "..."` — hardcoded session ID; breaks the
|
|
151
|
+
moment the orchestrator is renamed or runs under a different CLI (codex,
|
|
152
|
+
gemini).
|
|
153
|
+
- Embedding `aigentry-orchestrator-claude` in spec templates, scripts, or
|
|
154
|
+
docs as a literal target.
|
|
155
|
+
- Reporting without the `REPORT:` prefix — the orchestrator cannot distinguish
|
|
156
|
+
a status report from a peer-to-peer message.
|
|
157
|
+
|
|
86
158
|
## Common Errors
|
|
87
159
|
|
|
88
160
|
| Error | Cause | Fix |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telepty-list
|
|
3
|
-
description: Discover telepty sessions, check status and health. Covers list, session info, and status commands.
|
|
3
|
+
description: Discover telepty sessions, check status and health. Covers list, session info, and status commands. 키워드: 세션 목록, 활성 세션, 세션 조회, 세션 상태, 세션 확인, 리스트
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# telepty-list — Discover Sessions and Check Status
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telepty-listen
|
|
3
|
-
description: Monitor telepty events and read session screen output. Covers listen (event bus) and read-screen commands.
|
|
3
|
+
description: Monitor telepty events and read session screen output. Covers listen (event bus) and read-screen commands. 키워드: 이벤트 모니터, 화면 확인, 화면 읽기, 이벤트 스트림, listen, read-screen, 모니터링
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# telepty-listen — Event Monitoring and Screen Reading
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telepty-rename
|
|
3
|
-
description: Rename, delete, and clean up telepty sessions. Session lifecycle management.
|
|
3
|
+
description: Rename, delete, and clean up telepty sessions. Session lifecycle management. 키워드: 세션 이름 변경, 세션 삭제, 세션 정리, 세션 청소, rename, 라이프사이클
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# telepty-rename — Session Lifecycle Management
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telepty-session
|
|
3
|
-
description: Multi-session orchestration — start multiple sessions at once and arrange terminal layouts. Covers session start and layout commands.
|
|
3
|
+
description: Multi-session orchestration — start multiple sessions at once and arrange terminal layouts. Covers session start and layout commands. 키워드: 멀티 세션 시작, 다중 세션, 세션 레이아웃, 세션 일괄 시작, 멀티 시작, layout
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# telepty-session — Multi-Session Orchestration
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('node:fs');
|
|
4
|
+
const path = require('node:path');
|
|
5
|
+
const { createHash } = require('node:crypto');
|
|
6
|
+
|
|
7
|
+
const VERSION = 'telepty-snippet/v1';
|
|
8
|
+
const TARGETS = ['claude', 'agents', 'gemini'];
|
|
9
|
+
const FORMATS = ['markdown', 'json'];
|
|
10
|
+
const SNIPPET_DIR = path.join(__dirname, 'snippets');
|
|
11
|
+
const HELP = 'usage: telepty init --print-snippet [--target {claude|agents|gemini|all}] [--format {markdown|json}]';
|
|
12
|
+
|
|
13
|
+
function sha256Hex(body) {
|
|
14
|
+
return createHash('sha256').update(body, 'utf8').digest('hex');
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function loadBody(target, options = {}) {
|
|
18
|
+
const snippetDir = options.snippetDir || SNIPPET_DIR;
|
|
19
|
+
return fs.readFileSync(path.join(snippetDir, `${target}.md`), 'utf8');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function expandTargets(target) {
|
|
23
|
+
return target === 'all' ? TARGETS : [target];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function emitMarkdown(target, body) {
|
|
27
|
+
const sha8 = sha256Hex(body).slice(0, 8);
|
|
28
|
+
return `<!-- ${VERSION} BEGIN target=${target} sha256=${sha8} -->\n${body}<!-- ${VERSION} END target=${target} -->\n`;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function emitJson(target, body) {
|
|
32
|
+
return JSON.stringify({
|
|
33
|
+
version: VERSION,
|
|
34
|
+
target,
|
|
35
|
+
sha256: sha256Hex(body),
|
|
36
|
+
body
|
|
37
|
+
}) + '\n';
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function parseArgs(args) {
|
|
41
|
+
const parsed = {
|
|
42
|
+
printSnippet: false,
|
|
43
|
+
target: 'all',
|
|
44
|
+
format: 'markdown',
|
|
45
|
+
help: false
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
49
|
+
const arg = args[index];
|
|
50
|
+
if (arg === '--help' || arg === '-h') {
|
|
51
|
+
parsed.help = true;
|
|
52
|
+
} else if (arg === '--print-snippet') {
|
|
53
|
+
parsed.printSnippet = true;
|
|
54
|
+
} else if (arg === '--target') {
|
|
55
|
+
parsed.target = args[index + 1] || '';
|
|
56
|
+
index += 1;
|
|
57
|
+
} else if (arg.startsWith('--target=')) {
|
|
58
|
+
parsed.target = arg.slice('--target='.length);
|
|
59
|
+
} else if (arg === '--format') {
|
|
60
|
+
parsed.format = args[index + 1] || '';
|
|
61
|
+
index += 1;
|
|
62
|
+
} else if (arg.startsWith('--format=')) {
|
|
63
|
+
parsed.format = arg.slice('--format='.length);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return parsed;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function buildOutput(args, options = {}) {
|
|
71
|
+
const parsed = parseArgs(args);
|
|
72
|
+
const stdout = options.stdout || process.stdout;
|
|
73
|
+
const stderr = options.stderr || process.stderr;
|
|
74
|
+
|
|
75
|
+
if (parsed.help || !parsed.printSnippet) {
|
|
76
|
+
stdout.write(`${HELP}\n`);
|
|
77
|
+
return 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (![...TARGETS, 'all'].includes(parsed.target)) {
|
|
81
|
+
stderr.write('error: --target must be one of claude, agents, gemini, all\n');
|
|
82
|
+
return 2;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (!FORMATS.includes(parsed.format)) {
|
|
86
|
+
stderr.write('error: --format must be one of markdown, json\n');
|
|
87
|
+
return 2;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
try {
|
|
91
|
+
const outputs = expandTargets(parsed.target).map((target) => {
|
|
92
|
+
const body = loadBody(target, options);
|
|
93
|
+
return parsed.format === 'json' ? emitJson(target, body) : emitMarkdown(target, body);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
stdout.write(parsed.format === 'json' ? outputs.join('') : outputs.join('\n'));
|
|
97
|
+
return 0;
|
|
98
|
+
} catch (error) {
|
|
99
|
+
stderr.write(`error: failed to generate telepty snippet: ${error.message}\n`);
|
|
100
|
+
return 4;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
module.exports = {
|
|
105
|
+
HELP,
|
|
106
|
+
TARGETS,
|
|
107
|
+
VERSION,
|
|
108
|
+
buildOutput,
|
|
109
|
+
emitJson,
|
|
110
|
+
emitMarkdown,
|
|
111
|
+
loadBody,
|
|
112
|
+
main: buildOutput,
|
|
113
|
+
sha256Hex
|
|
114
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
## telepty-snippet:agents
|
|
2
|
+
|
|
3
|
+
**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.
|
|
4
|
+
|
|
5
|
+
Quick-start (5 commands):
|
|
6
|
+
|
|
7
|
+
telepty daemon
|
|
8
|
+
telepty allow --id <name> claude
|
|
9
|
+
telepty list
|
|
10
|
+
telepty inject <name> "<prompt>"
|
|
11
|
+
telepty attach <name>
|
|
12
|
+
|
|
13
|
+
`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.
|
|
14
|
+
|
|
15
|
+
Run `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
## telepty-snippet:claude
|
|
2
|
+
|
|
3
|
+
**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.
|
|
4
|
+
|
|
5
|
+
Quick-start (5 commands):
|
|
6
|
+
|
|
7
|
+
telepty daemon
|
|
8
|
+
telepty allow --id <name> claude
|
|
9
|
+
telepty list
|
|
10
|
+
telepty inject <name> "<prompt>"
|
|
11
|
+
telepty attach <name>
|
|
12
|
+
|
|
13
|
+
`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.
|
|
14
|
+
|
|
15
|
+
Run `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
## telepty-snippet:gemini
|
|
2
|
+
|
|
3
|
+
**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.
|
|
4
|
+
|
|
5
|
+
Quick-start (5 commands):
|
|
6
|
+
|
|
7
|
+
telepty daemon
|
|
8
|
+
telepty allow --id <name> claude
|
|
9
|
+
telepty list
|
|
10
|
+
telepty inject <name> "<prompt>"
|
|
11
|
+
telepty attach <name>
|
|
12
|
+
|
|
13
|
+
`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.
|
|
14
|
+
|
|
15
|
+
Run `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"telepty-snippet/v1","target":"agents","sha256":"f5a0986a29a334ab0a12e672f4f3428c0c6f1458d35d6d0263a5ec3c33721195","body":"## telepty-snippet:agents\n\n**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.\n\nQuick-start (5 commands):\n\n telepty daemon\n telepty allow --id <name> claude\n telepty list\n telepty inject <name> \"<prompt>\"\n telepty attach <name>\n\n`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.\n\nRun `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.\n"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- telepty-snippet/v1 BEGIN target=agents sha256=f5a0986a -->
|
|
2
|
+
## telepty-snippet:agents
|
|
3
|
+
|
|
4
|
+
**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.
|
|
5
|
+
|
|
6
|
+
Quick-start (5 commands):
|
|
7
|
+
|
|
8
|
+
telepty daemon
|
|
9
|
+
telepty allow --id <name> claude
|
|
10
|
+
telepty list
|
|
11
|
+
telepty inject <name> "<prompt>"
|
|
12
|
+
telepty attach <name>
|
|
13
|
+
|
|
14
|
+
`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.
|
|
15
|
+
|
|
16
|
+
Run `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.
|
|
17
|
+
<!-- telepty-snippet/v1 END target=agents -->
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
{"version":"telepty-snippet/v1","target":"claude","sha256":"305aad8181c1e75bb94589386cbc34f2b5103d6b5c1f6a7f01c99f1fbf6ed8c3","body":"## telepty-snippet:claude\n\n**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.\n\nQuick-start (5 commands):\n\n telepty daemon\n telepty allow --id <name> claude\n telepty list\n telepty inject <name> \"<prompt>\"\n telepty attach <name>\n\n`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.\n\nRun `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.\n"}
|
|
2
|
+
{"version":"telepty-snippet/v1","target":"agents","sha256":"f5a0986a29a334ab0a12e672f4f3428c0c6f1458d35d6d0263a5ec3c33721195","body":"## telepty-snippet:agents\n\n**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.\n\nQuick-start (5 commands):\n\n telepty daemon\n telepty allow --id <name> claude\n telepty list\n telepty inject <name> \"<prompt>\"\n telepty attach <name>\n\n`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.\n\nRun `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.\n"}
|
|
3
|
+
{"version":"telepty-snippet/v1","target":"gemini","sha256":"c97635b0d684552aa060a969981c2be11cf49b60f5a6237d52f5214e9ecc1a07","body":"## telepty-snippet:gemini\n\n**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.\n\nQuick-start (5 commands):\n\n telepty daemon\n telepty allow --id <name> claude\n telepty list\n telepty inject <name> \"<prompt>\"\n telepty attach <name>\n\n`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.\n\nRun `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.\n"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!-- telepty-snippet/v1 BEGIN target=claude sha256=305aad81 -->
|
|
2
|
+
## telepty-snippet:claude
|
|
3
|
+
|
|
4
|
+
**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.
|
|
5
|
+
|
|
6
|
+
Quick-start (5 commands):
|
|
7
|
+
|
|
8
|
+
telepty daemon
|
|
9
|
+
telepty allow --id <name> claude
|
|
10
|
+
telepty list
|
|
11
|
+
telepty inject <name> "<prompt>"
|
|
12
|
+
telepty attach <name>
|
|
13
|
+
|
|
14
|
+
`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.
|
|
15
|
+
|
|
16
|
+
Run `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.
|
|
17
|
+
<!-- telepty-snippet/v1 END target=claude -->
|
|
18
|
+
|
|
19
|
+
<!-- telepty-snippet/v1 BEGIN target=agents sha256=f5a0986a -->
|
|
20
|
+
## telepty-snippet:agents
|
|
21
|
+
|
|
22
|
+
**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.
|
|
23
|
+
|
|
24
|
+
Quick-start (5 commands):
|
|
25
|
+
|
|
26
|
+
telepty daemon
|
|
27
|
+
telepty allow --id <name> claude
|
|
28
|
+
telepty list
|
|
29
|
+
telepty inject <name> "<prompt>"
|
|
30
|
+
telepty attach <name>
|
|
31
|
+
|
|
32
|
+
`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.
|
|
33
|
+
|
|
34
|
+
Run `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.
|
|
35
|
+
<!-- telepty-snippet/v1 END target=agents -->
|
|
36
|
+
|
|
37
|
+
<!-- telepty-snippet/v1 BEGIN target=gemini sha256=c97635b0 -->
|
|
38
|
+
## telepty-snippet:gemini
|
|
39
|
+
|
|
40
|
+
**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.
|
|
41
|
+
|
|
42
|
+
Quick-start (5 commands):
|
|
43
|
+
|
|
44
|
+
telepty daemon
|
|
45
|
+
telepty allow --id <name> claude
|
|
46
|
+
telepty list
|
|
47
|
+
telepty inject <name> "<prompt>"
|
|
48
|
+
telepty attach <name>
|
|
49
|
+
|
|
50
|
+
`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.
|
|
51
|
+
|
|
52
|
+
Run `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.
|
|
53
|
+
<!-- telepty-snippet/v1 END target=gemini -->
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"telepty-snippet/v1","target":"claude","sha256":"305aad8181c1e75bb94589386cbc34f2b5103d6b5c1f6a7f01c99f1fbf6ed8c3","body":"## telepty-snippet:claude\n\n**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.\n\nQuick-start (5 commands):\n\n telepty daemon\n telepty allow --id <name> claude\n telepty list\n telepty inject <name> \"<prompt>\"\n telepty attach <name>\n\n`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.\n\nRun `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.\n"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- telepty-snippet/v1 BEGIN target=claude sha256=305aad81 -->
|
|
2
|
+
## telepty-snippet:claude
|
|
3
|
+
|
|
4
|
+
**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.
|
|
5
|
+
|
|
6
|
+
Quick-start (5 commands):
|
|
7
|
+
|
|
8
|
+
telepty daemon
|
|
9
|
+
telepty allow --id <name> claude
|
|
10
|
+
telepty list
|
|
11
|
+
telepty inject <name> "<prompt>"
|
|
12
|
+
telepty attach <name>
|
|
13
|
+
|
|
14
|
+
`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.
|
|
15
|
+
|
|
16
|
+
Run `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.
|
|
17
|
+
<!-- telepty-snippet/v1 END target=claude -->
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"telepty-snippet/v1","target":"gemini","sha256":"c97635b0d684552aa060a969981c2be11cf49b60f5a6237d52f5214e9ecc1a07","body":"## telepty-snippet:gemini\n\n**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.\n\nQuick-start (5 commands):\n\n telepty daemon\n telepty allow --id <name> claude\n telepty list\n telepty inject <name> \"<prompt>\"\n telepty attach <name>\n\n`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.\n\nRun `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.\n"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- telepty-snippet/v1 BEGIN target=gemini sha256=c97635b0 -->
|
|
2
|
+
## telepty-snippet:gemini
|
|
3
|
+
|
|
4
|
+
**telepty** is the aigentry ecosystem's PTY multiplexer and session orchestrator. It allows wrapping AI CLI sessions under stable IDs and addressing them across local and cross-machine boundaries via a daemon-mediated transport.
|
|
5
|
+
|
|
6
|
+
Quick-start (5 commands):
|
|
7
|
+
|
|
8
|
+
telepty daemon
|
|
9
|
+
telepty allow --id <name> claude
|
|
10
|
+
telepty list
|
|
11
|
+
telepty inject <name> "<prompt>"
|
|
12
|
+
telepty attach <name>
|
|
13
|
+
|
|
14
|
+
`telepty allow` wraps a CLI under the chosen `<name>`; `telepty list` enumerates known sessions; `telepty inject` sends a prompt to a wrapped session; `telepty attach` interactively connects to one.
|
|
15
|
+
|
|
16
|
+
Run `telepty --help` for the full command list. Run `telepty <command> --help` for per-command flags.
|
|
17
|
+
<!-- telepty-snippet/v1 END target=gemini -->
|