terminal-tool-for-agents 0.1.3

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/dist/client.js ADDED
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ensureServerRunning = ensureServerRunning;
37
+ exports.sendRequest = sendRequest;
38
+ /**
39
+ * CLI → server HTTP client. Auto-starts the server if needed.
40
+ */
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const child_process = __importStar(require("child_process"));
44
+ const server_1 = require("./server");
45
+ const SERVER_START_TIMEOUT_MS = 3000;
46
+ const SERVER_POLL_INTERVAL_MS = 100;
47
+ const HEALTH_TIMEOUT_MS = 500;
48
+ function info(msg) {
49
+ process.stderr.write(`tta: ${msg}\n`);
50
+ }
51
+ function isDevMode() {
52
+ return fs.existsSync(path.join(__dirname, "..", ".tta-dev"));
53
+ }
54
+ async function ensureServerRunning() {
55
+ if (await isServerReachable())
56
+ return;
57
+ if (isDevMode()) {
58
+ throw new Error("Dev server is not running.\n" +
59
+ " Start it in the project root: just dev\n" +
60
+ " Then run tta commands in another terminal.");
61
+ }
62
+ info("starting server...");
63
+ await spawnServer();
64
+ }
65
+ async function sendRequest(req) {
66
+ await ensureServerRunning();
67
+ const res = await fetch(`${server_1.SERVER_URL}/rpc`, {
68
+ method: "POST",
69
+ headers: { "Content-Type": "application/json" },
70
+ body: JSON.stringify(req),
71
+ });
72
+ if (!res.ok) {
73
+ throw new Error(`Server HTTP ${res.status}: ${await res.text()}`);
74
+ }
75
+ return res.json();
76
+ }
77
+ async function isServerReachable() {
78
+ try {
79
+ const res = await fetch(`${server_1.SERVER_URL}/health`, { signal: AbortSignal.timeout(HEALTH_TIMEOUT_MS) });
80
+ return res.ok;
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ }
86
+ async function spawnServer() {
87
+ const serverScript = path.join(__dirname, "server.js");
88
+ if (!fs.existsSync(serverScript)) {
89
+ throw new Error(`Server script not found: ${serverScript}`);
90
+ }
91
+ const child = child_process.spawn(process.execPath, [serverScript], {
92
+ detached: true,
93
+ stdio: ["ignore", "ignore", "inherit"],
94
+ });
95
+ child.on("error", (e) => info(`failed to spawn server: ${e.message}`));
96
+ child.unref();
97
+ const deadline = Date.now() + SERVER_START_TIMEOUT_MS;
98
+ let attempts = 0;
99
+ while (Date.now() < deadline) {
100
+ await sleep(SERVER_POLL_INTERVAL_MS);
101
+ attempts++;
102
+ if (await isServerReachable()) {
103
+ info(`server ready (${attempts * SERVER_POLL_INTERVAL_MS}ms)`);
104
+ return;
105
+ }
106
+ }
107
+ throw new Error(`Server failed to start after ${SERVER_START_TIMEOUT_MS}ms\n` +
108
+ ` Check if port 7654 is in use or see stderr for errors`);
109
+ }
110
+ function sleep(ms) {
111
+ return new Promise((resolve) => setTimeout(resolve, ms));
112
+ }
113
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Session } from "./session";
2
+ import { Request, Response, SessionInfo, ErrorResponse } from "./protocol";
3
+ export declare function setShutdownIfEmpty(fn: () => void): void;
4
+ export declare function listSessions(): SessionInfo[];
5
+ export declare function resolveSession(name: string): Session | ErrorResponse;
6
+ export declare function killAllSessions(options?: {
7
+ fromShutdown?: boolean;
8
+ }): number;
9
+ export declare function armIdleTimer(): void;
10
+ export declare function handleRequest(req: Request): Promise<Response>;
11
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAoC,MAAM,WAAW,CAAC;AAEtE,OAAO,EACL,OAAO,EACP,QAAQ,EAQR,WAAW,EACX,aAAa,EACd,MAAM,YAAY,CAAC;AASpB,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAEvD;AA0DD,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAE5C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,CAEpE;AAED,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAa5E;AAUD,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoGnE"}
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.setShutdownIfEmpty = setShutdownIfEmpty;
37
+ exports.listSessions = listSessions;
38
+ exports.resolveSession = resolveSession;
39
+ exports.killAllSessions = killAllSessions;
40
+ exports.armIdleTimer = armIdleTimer;
41
+ exports.handleRequest = handleRequest;
42
+ /**
43
+ * PTY session registry and request handlers.
44
+ */
45
+ const path = __importStar(require("path"));
46
+ const session_1 = require("./session");
47
+ const keys_1 = require("./keys");
48
+ const IDLE_TIMEOUT_MS = 5 * 60 * 1000;
49
+ const sessions = new Map();
50
+ const startingSessions = new Set();
51
+ let idleTimer = null;
52
+ let shutdownIfEmpty = null;
53
+ function setShutdownIfEmpty(fn) {
54
+ shutdownIfEmpty = fn;
55
+ }
56
+ function maybeShutdownServer() {
57
+ if (sessions.size > 0 || startingSessions.size > 0)
58
+ return;
59
+ if (idleTimer) {
60
+ clearTimeout(idleTimer);
61
+ idleTimer = null;
62
+ }
63
+ shutdownIfEmpty?.();
64
+ }
65
+ function resetIdleTimer() {
66
+ if (idleTimer)
67
+ clearTimeout(idleTimer);
68
+ idleTimer = setTimeout(() => {
69
+ if (sessions.size === 0 && startingSessions.size === 0) {
70
+ shutdownIfEmpty?.();
71
+ }
72
+ }, IDLE_TIMEOUT_MS);
73
+ idleTimer.unref();
74
+ }
75
+ /** Keep exited sessions in the registry until sess kill; refresh idle timer on exit. */
76
+ function attachSessionExitHook(session) {
77
+ session.onExit(() => {
78
+ resetIdleTimer();
79
+ });
80
+ }
81
+ function getSession(name) {
82
+ const nameErr = (0, session_1.validateSessionName)(name);
83
+ if (nameErr)
84
+ return { type: "error", message: nameErr };
85
+ const session = sessions.get(name);
86
+ if (!session)
87
+ return { type: "error", message: `Session not found: ${name}` };
88
+ return session;
89
+ }
90
+ const SESSION_IN_USE_HINT = (name) => `Session "${name}" is already in use. Use a different session name, or run 'tta sess kill --sess=${name}' first.`;
91
+ function screenResponse(screen) {
92
+ return { type: "screen", screen };
93
+ }
94
+ function checkSessionNameAvailable(name) {
95
+ if (startingSessions.has(name)) {
96
+ return { type: "error", message: SESSION_IN_USE_HINT(name) };
97
+ }
98
+ const existing = sessions.get(name);
99
+ if (existing) {
100
+ if (existing.status === "exited") {
101
+ sessions.delete(name);
102
+ return null;
103
+ }
104
+ return { type: "error", message: SESSION_IN_USE_HINT(name) };
105
+ }
106
+ return null;
107
+ }
108
+ function listSessions() {
109
+ return [...sessions.values()].map((s) => s.toInfo());
110
+ }
111
+ function resolveSession(name) {
112
+ return getSession(name);
113
+ }
114
+ function killAllSessions(options) {
115
+ const count = sessions.size;
116
+ for (const session of sessions.values()) {
117
+ try {
118
+ session.kill();
119
+ }
120
+ catch {
121
+ /* ignore */
122
+ }
123
+ }
124
+ sessions.clear();
125
+ startingSessions.clear();
126
+ if (!options?.fromShutdown)
127
+ maybeShutdownServer();
128
+ return count;
129
+ }
130
+ function afterSessionRemoved() {
131
+ if (sessions.size === 0 && startingSessions.size === 0) {
132
+ maybeShutdownServer();
133
+ }
134
+ else {
135
+ resetIdleTimer();
136
+ }
137
+ }
138
+ function armIdleTimer() {
139
+ resetIdleTimer();
140
+ }
141
+ async function handleRequest(req) {
142
+ switch (req.type) {
143
+ case "start": {
144
+ const r = req;
145
+ const nameErr = (0, session_1.validateSessionName)(r.session_name);
146
+ if (nameErr)
147
+ return { type: "error", message: nameErr };
148
+ if (typeof r.command !== "string" || !r.command.trim()) {
149
+ return { type: "error", message: "command required (e.g. npm run dev)" };
150
+ }
151
+ const cwdErr = (0, session_1.validateCwd)(r.cwd);
152
+ if (cwdErr)
153
+ return { type: "error", message: cwdErr };
154
+ const unavailable = checkSessionNameAvailable(r.session_name);
155
+ if (unavailable)
156
+ return unavailable;
157
+ startingSessions.add(r.session_name);
158
+ try {
159
+ const session = new session_1.Session(r.session_name, r.command.trim(), {
160
+ cwd: path.resolve(r.cwd),
161
+ });
162
+ attachSessionExitHook(session);
163
+ sessions.set(r.session_name, session);
164
+ resetIdleTimer();
165
+ return { type: "ok" };
166
+ }
167
+ finally {
168
+ startingSessions.delete(r.session_name);
169
+ }
170
+ }
171
+ case "screen_now": {
172
+ const r = req;
173
+ const sessionOrError = getSession(r.session_name);
174
+ if ("type" in sessionOrError && sessionOrError.type === "error")
175
+ return sessionOrError;
176
+ return screenResponse(sessionOrError.snapshot());
177
+ }
178
+ case "screen_stable": {
179
+ const r = req;
180
+ const sessionOrError = getSession(r.session_name);
181
+ if ("type" in sessionOrError && sessionOrError.type === "error")
182
+ return sessionOrError;
183
+ return screenResponse(await sessionOrError.waitForStable());
184
+ }
185
+ case "screen_scroll": {
186
+ const r = req;
187
+ const sessionOrError = getSession(r.session_name);
188
+ if ("type" in sessionOrError && sessionOrError.type === "error")
189
+ return sessionOrError;
190
+ const session = sessionOrError;
191
+ session.scroll(r.direction);
192
+ return screenResponse(session.snapshot());
193
+ }
194
+ case "send_text": {
195
+ const r = req;
196
+ const sessionOrError = getSession(r.session_name);
197
+ if ("type" in sessionOrError && sessionOrError.type === "error")
198
+ return sessionOrError;
199
+ const session = sessionOrError;
200
+ try {
201
+ session.send(r.text);
202
+ return { type: "ok" };
203
+ }
204
+ catch (e) {
205
+ return { type: "error", message: e instanceof Error ? e.message : String(e) };
206
+ }
207
+ }
208
+ case "send_key": {
209
+ const r = req;
210
+ const sequence = (0, keys_1.resolveKey)(r.key);
211
+ if (!sequence) {
212
+ return { type: "error", message: `Unknown key "${r.key}"` };
213
+ }
214
+ const sessionOrError = getSession(r.session_name);
215
+ if ("type" in sessionOrError && sessionOrError.type === "error")
216
+ return sessionOrError;
217
+ const session = sessionOrError;
218
+ try {
219
+ session.press(sequence);
220
+ return { type: "ok" };
221
+ }
222
+ catch (e) {
223
+ return { type: "error", message: e instanceof Error ? e.message : String(e) };
224
+ }
225
+ }
226
+ case "kill": {
227
+ const r = req;
228
+ const sessionOrError = getSession(r.session_name);
229
+ if ("type" in sessionOrError && sessionOrError.type === "error")
230
+ return sessionOrError;
231
+ sessionOrError.kill();
232
+ sessions.delete(r.session_name);
233
+ afterSessionRemoved();
234
+ return { type: "kill", ok: true };
235
+ }
236
+ case "killall":
237
+ return { type: "killall", ok: true, count: killAllSessions() };
238
+ case "list":
239
+ return { type: "list", sessions: listSessions() };
240
+ default:
241
+ return { type: "error", message: "Unknown request type" };
242
+ }
243
+ }
244
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
package/dist/keys.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare const SUPPORTED_KEYS: string[];
2
+ export declare function resolveKey(name: string): string | null;
3
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,cAAc,UAAuB,CAAC;AAEnD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEtD"}
package/dist/keys.js ADDED
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SUPPORTED_KEYS = void 0;
4
+ exports.resolveKey = resolveKey;
5
+ /** Key name → PTY escape sequence for `send_key` requests. */
6
+ const KEY_MAP = {
7
+ "ctrl+a": "\x01", "ctrl+b": "\x02", "ctrl+c": "\x03", "ctrl+d": "\x04",
8
+ "ctrl+e": "\x05", "ctrl+f": "\x06", "ctrl+g": "\x07", "ctrl+h": "\x08",
9
+ "ctrl+i": "\x09", "ctrl+j": "\x0a", "ctrl+k": "\x0b", "ctrl+l": "\x0c",
10
+ "ctrl+m": "\x0d", "ctrl+n": "\x0e", "ctrl+o": "\x0f", "ctrl+p": "\x10",
11
+ "ctrl+q": "\x11", "ctrl+r": "\x12", "ctrl+s": "\x13", "ctrl+t": "\x14",
12
+ "ctrl+u": "\x15", "ctrl+v": "\x16", "ctrl+w": "\x17", "ctrl+x": "\x18",
13
+ "ctrl+y": "\x19", "ctrl+z": "\x1a",
14
+ "arrow_up": "\x1b[A", "arrow_down": "\x1b[B",
15
+ "arrow_right": "\x1b[C", "arrow_left": "\x1b[D",
16
+ "page_up": "\x1b[5~", "page_down": "\x1b[6~",
17
+ "home": "\x1b[H", "end": "\x1b[F",
18
+ "enter": "\r", "tab": "\t", "escape": "\x1b",
19
+ "backspace": "\x7f", "delete": "\x1b[3~",
20
+ "f1": "\x1bOP", "f2": "\x1bOQ", "f3": "\x1bOR", "f4": "\x1bOS",
21
+ "f5": "\x1b[15~", "f6": "\x1b[17~", "f7": "\x1b[18~", "f8": "\x1b[19~",
22
+ "f9": "\x1b[20~", "f10": "\x1b[21~",
23
+ };
24
+ exports.SUPPORTED_KEYS = Object.keys(KEY_MAP);
25
+ function resolveKey(name) {
26
+ return KEY_MAP[name.toLowerCase()] ?? null;
27
+ }
28
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":";;;AAsBA,gCAEC;AAxBD,8DAA8D;AAC9D,MAAM,OAAO,GAA2B;IACtC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IACtE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IACtE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IACtE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IACtE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IACtE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IACtE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAClC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ;IAC5C,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ;IAC/C,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS;IAC5C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;IACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM;IAC5C,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS;IACxC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ;IAC9D,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU;IACtE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU;CACpC,CAAC;AAEW,QAAA,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEnD,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * tta protocol — CLI RPC request/response types (POST /rpc JSON body).
3
+ * Request `type` values match CLI subcommands (e.g. send_text ↔ tta act send text, start ↔ tta sess start).
4
+ */
5
+ export type SessionStatus = "running" | "exited";
6
+ export interface StartRequest {
7
+ type: "start";
8
+ session_name: string;
9
+ /** Command line to run in a PTY (tta picks the platform shell internally). */
10
+ command: string;
11
+ cwd: string;
12
+ }
13
+ export interface SendTextRequest {
14
+ type: "send_text";
15
+ session_name: string;
16
+ text: string;
17
+ }
18
+ export interface SendKeyRequest {
19
+ type: "send_key";
20
+ session_name: string;
21
+ key: string;
22
+ }
23
+ export interface ScreenNowRequest {
24
+ type: "screen_now";
25
+ session_name: string;
26
+ }
27
+ export interface ScreenStableRequest {
28
+ type: "screen_stable";
29
+ session_name: string;
30
+ }
31
+ export interface ScreenScrollRequest {
32
+ type: "screen_scroll";
33
+ session_name: string;
34
+ direction: "up" | "down" | "top" | "bottom";
35
+ }
36
+ export interface KillRequest {
37
+ type: "kill";
38
+ session_name: string;
39
+ }
40
+ export interface KillResponse {
41
+ type: "kill";
42
+ ok: boolean;
43
+ }
44
+ export interface KillAllRequest {
45
+ type: "killall";
46
+ }
47
+ export interface KillAllResponse {
48
+ type: "killall";
49
+ ok: boolean;
50
+ count: number;
51
+ }
52
+ export interface ListRequest {
53
+ type: "list";
54
+ }
55
+ export interface SessionInfo {
56
+ session_name: string;
57
+ status: SessionStatus;
58
+ exit_code?: number;
59
+ }
60
+ export interface ListResponse {
61
+ type: "list";
62
+ sessions: SessionInfo[];
63
+ }
64
+ export interface OkResponse {
65
+ type: "ok";
66
+ }
67
+ export interface ScreenResponse {
68
+ type: "screen";
69
+ screen: string;
70
+ }
71
+ export interface ErrorResponse {
72
+ type: "error";
73
+ message: string;
74
+ }
75
+ export type Request = StartRequest | SendTextRequest | SendKeyRequest | ScreenNowRequest | ScreenStableRequest | ScreenScrollRequest | KillRequest | KillAllRequest | ListRequest;
76
+ export type Response = OkResponse | ScreenResponse | KillResponse | KillAllResponse | ListResponse | ErrorResponse;
77
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,OAAO,GACf,YAAY,GACZ,eAAe,GACf,cAAc,GACd,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,WAAW,GACX,cAAc,GACd,WAAW,CAAC;AAEhB,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,cAAc,GACd,YAAY,GACZ,eAAe,GACf,YAAY,GACZ,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * tta protocol — CLI RPC request/response types (POST /rpc JSON body).
4
+ * Request `type` values match CLI subcommands (e.g. send_text ↔ tta act send text, start ↔ tta sess start).
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,4 @@
1
+ export declare const SERVER_HOST = "127.0.0.1";
2
+ export declare const SERVER_PORT = 7654;
3
+ export declare const SERVER_URL = "http://127.0.0.1:7654";
4
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,WAAW,cAAc,CAAC;AACvC,eAAO,MAAM,WAAW,OAAO,CAAC;AAChC,eAAO,MAAM,UAAU,0BAAyC,CAAC"}