@thurstonsand/ghosttykit 0.0.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.
Files changed (42) hide show
  1. package/README.md +174 -0
  2. package/dist/src/client.d.ts +59 -0
  3. package/dist/src/client.d.ts.map +1 -0
  4. package/dist/src/client.js +271 -0
  5. package/dist/src/client.js.map +1 -0
  6. package/dist/src/codes.d.ts +14 -0
  7. package/dist/src/codes.d.ts.map +1 -0
  8. package/dist/src/codes.js +13 -0
  9. package/dist/src/codes.js.map +1 -0
  10. package/dist/src/errors.d.ts +41 -0
  11. package/dist/src/errors.d.ts.map +1 -0
  12. package/dist/src/errors.js +89 -0
  13. package/dist/src/errors.js.map +1 -0
  14. package/dist/src/index.d.ts +9 -0
  15. package/dist/src/index.d.ts.map +1 -0
  16. package/dist/src/index.js +6 -0
  17. package/dist/src/index.js.map +1 -0
  18. package/dist/src/paste-internal.d.ts +5 -0
  19. package/dist/src/paste-internal.d.ts.map +1 -0
  20. package/dist/src/paste-internal.js +259 -0
  21. package/dist/src/paste-internal.js.map +1 -0
  22. package/dist/src/paste.d.ts +42 -0
  23. package/dist/src/paste.d.ts.map +1 -0
  24. package/dist/src/paste.js +17 -0
  25. package/dist/src/paste.js.map +1 -0
  26. package/dist/src/protocol.d.ts +106 -0
  27. package/dist/src/protocol.d.ts.map +1 -0
  28. package/dist/src/protocol.js +132 -0
  29. package/dist/src/protocol.js.map +1 -0
  30. package/dist/src/socket.d.ts +7 -0
  31. package/dist/src/socket.d.ts.map +1 -0
  32. package/dist/src/socket.js +39 -0
  33. package/dist/src/socket.js.map +1 -0
  34. package/dist/test/client.test.d.ts +2 -0
  35. package/dist/test/client.test.d.ts.map +1 -0
  36. package/dist/test/client.test.js +174 -0
  37. package/dist/test/client.test.js.map +1 -0
  38. package/dist/test/protocol.test.d.ts +2 -0
  39. package/dist/test/protocol.test.d.ts.map +1 -0
  40. package/dist/test/protocol.test.js +25 -0
  41. package/dist/test/protocol.test.js.map +1 -0
  42. package/package.json +46 -0
@@ -0,0 +1,89 @@
1
+ import { protocolCodes } from "./codes.js";
2
+ export class GhosttyKitError extends Error {
3
+ code;
4
+ constructor(code, message) {
5
+ super(message ? `${code}: ${message}` : code);
6
+ this.name = new.target.name;
7
+ this.code = code;
8
+ }
9
+ }
10
+ export class ReplyError extends GhosttyKitError {
11
+ }
12
+ export class ProtocolVersionMismatchError extends GhosttyKitError {
13
+ }
14
+ export class UnknownCommandError extends GhosttyKitError {
15
+ }
16
+ export class InvalidRequestError extends GhosttyKitError {
17
+ }
18
+ export class TerminalNotFoundError extends GhosttyKitError {
19
+ }
20
+ export class GhosttyUnavailableError extends GhosttyKitError {
21
+ }
22
+ export class PasteEmptyError extends GhosttyKitError {
23
+ }
24
+ export class PasteUnsupportedError extends GhosttyKitError {
25
+ }
26
+ export class StreamFailedError extends GhosttyKitError {
27
+ }
28
+ export class InternalError extends GhosttyKitError {
29
+ }
30
+ export class TransportError extends Error {
31
+ constructor(message, options) {
32
+ super(message, options);
33
+ this.name = "TransportError";
34
+ }
35
+ }
36
+ export class InvalidReplyModeError extends Error {
37
+ constructor(message) {
38
+ super(message);
39
+ this.name = "InvalidReplyModeError";
40
+ }
41
+ }
42
+ export class InvalidReplyError extends Error {
43
+ constructor(message, options) {
44
+ super(message, options);
45
+ this.name = "InvalidReplyError";
46
+ }
47
+ }
48
+ export class PasteConsumedError extends Error {
49
+ constructor(message) {
50
+ super(message);
51
+ this.name = "PasteConsumedError";
52
+ }
53
+ }
54
+ export function errorFromReply(reply) {
55
+ if (reply.code === protocolCodes.ok) {
56
+ return undefined;
57
+ }
58
+ const code = reply.code;
59
+ const message = reply.error;
60
+ switch (code) {
61
+ case protocolCodes.protocolVersionMismatch:
62
+ return new ProtocolVersionMismatchError(code, message);
63
+ case protocolCodes.unknownCommand:
64
+ return new UnknownCommandError(code, message);
65
+ case protocolCodes.invalidRequest:
66
+ return new InvalidRequestError(code, message);
67
+ case protocolCodes.terminalNotFound:
68
+ return new TerminalNotFoundError(code, message);
69
+ case protocolCodes.ghosttyUnavailable:
70
+ return new GhosttyUnavailableError(code, message);
71
+ case protocolCodes.pasteEmpty:
72
+ return new PasteEmptyError(code, message);
73
+ case protocolCodes.pasteUnsupported:
74
+ return new PasteUnsupportedError(code, message);
75
+ case protocolCodes.streamFailed:
76
+ return new StreamFailedError(code, message);
77
+ case protocolCodes.internalError:
78
+ return new InternalError(code, message);
79
+ default:
80
+ return new ReplyError(code, message);
81
+ }
82
+ }
83
+ export function throwIfReplyError(reply) {
84
+ const error = errorFromReply(reply);
85
+ if (error) {
86
+ throw error;
87
+ }
88
+ }
89
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type { Bridge, ClientOptions, CommandOptions, DoctorStatus, HoldResult, RawStream, SplitCommandOptions, TerminalCommandOptions, TerminalOptions, } from "./client.js";
2
+ export { client, GhosttyKitClient } from "./client.js";
3
+ export { errorFromReply, GhosttyKitError, GhosttyUnavailableError, InternalError, InvalidReplyError, InvalidReplyModeError, InvalidRequestError, PasteConsumedError, PasteEmptyError, PasteUnsupportedError, ProtocolVersionMismatchError, ReplyError, StreamFailedError, TerminalNotFoundError, TransportError, throwIfReplyError, UnknownCommandError, } from "./errors.js";
4
+ export type { FilesPaste, PasteFile, PasteFileContent, PasteMatcher, PasteState, SavedPasteFile, TextPaste, } from "./paste.js";
5
+ export { Paste } from "./paste.js";
6
+ export type { Direction, FocusTarget, ResizeAmount, } from "./protocol.js";
7
+ export * as protocol from "./protocol.js";
8
+ export { defaultSocketPath, dial, socketPath } from "./socket.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACL,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,4BAA4B,EAC5B,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EACV,SAAS,EACT,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { client, GhosttyKitClient } from "./client.js";
2
+ export { errorFromReply, GhosttyKitError, GhosttyUnavailableError, InternalError, InvalidReplyError, InvalidReplyModeError, InvalidRequestError, PasteConsumedError, PasteEmptyError, PasteUnsupportedError, ProtocolVersionMismatchError, ReplyError, StreamFailedError, TerminalNotFoundError, TransportError, throwIfReplyError, UnknownCommandError, } from "./errors.js";
3
+ export { Paste } from "./paste.js";
4
+ export * as protocol from "./protocol.js";
5
+ export { defaultSocketPath, dial, socketPath } from "./socket.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACL,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,4BAA4B,EAC5B,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAUrB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAMnC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Readable } from "node:stream";
2
+ import type { Paste } from "./paste.js";
3
+ import type { PasteStreamHeader } from "./protocol.js";
4
+ export declare function pasteFromStream(header: PasteStreamHeader, body: Readable, close: () => void): Paste;
5
+ //# sourceMappingURL=paste-internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paste-internal.d.ts","sourceRoot":"","sources":["../../src/paste-internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,aAAa,CAAC;AAItD,OAAO,KAAK,EAEV,KAAK,EAMN,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvE,wBAAgB,eAAe,CAC7B,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,IAAI,GAChB,KAAK,CAQP"}
@@ -0,0 +1,259 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { once } from "node:events";
3
+ import { createWriteStream } from "node:fs";
4
+ import { mkdir, rm } from "node:fs/promises";
5
+ import path from "node:path";
6
+ import { extension } from "mime-types";
7
+ import sanitize from "sanitize-filename";
8
+ import { InvalidReplyError, PasteConsumedError } from "./errors.js";
9
+ export function pasteFromStream(header, body, close) {
10
+ const reader = new ExactStreamReader(body);
11
+ switch (header.kind) {
12
+ case "text":
13
+ return new TextPasteImpl(header.bytes, reader, close);
14
+ case "files":
15
+ return new FilesPasteImpl(header.bytes, header.files.map(normalizePasteFile), reader, close);
16
+ }
17
+ }
18
+ function normalizePasteFile(file) {
19
+ assertValidByteCount(file.bytes, `clipboard file ${file.fileName ?? ""} has invalid byte count`);
20
+ return {
21
+ fileName: file.fileName,
22
+ mediaType: file.mediaType,
23
+ byteLength: file.bytes,
24
+ source: file.source,
25
+ };
26
+ }
27
+ class TextPasteImpl {
28
+ byteLength;
29
+ reader;
30
+ closeStream;
31
+ kind = "text";
32
+ #state = "pending";
33
+ constructor(byteLength, reader, closeStream) {
34
+ this.byteLength = byteLength;
35
+ this.reader = reader;
36
+ this.closeStream = closeStream;
37
+ assertValidByteCount(byteLength, "clipboard text has invalid byte count");
38
+ }
39
+ get state() {
40
+ return this.#state;
41
+ }
42
+ get consumed() {
43
+ return this.#state === "consumed";
44
+ }
45
+ async text() {
46
+ return Buffer.from(await this.raw()).toString("utf8");
47
+ }
48
+ raw() {
49
+ return this.consume(async () => this.reader.readBytes(this.byteLength));
50
+ }
51
+ save(outputDir) {
52
+ return this.consume(async () => {
53
+ const file = {
54
+ mediaType: "text/plain",
55
+ byteLength: this.byteLength,
56
+ source: "pasteboard-text",
57
+ };
58
+ const saved = await saveFile(this.reader, file, outputDir, uniqueTextFileName());
59
+ return [saved];
60
+ });
61
+ }
62
+ async consume(operation) {
63
+ claimPending(this.#state);
64
+ this.#state = "consuming";
65
+ try {
66
+ return await operation();
67
+ }
68
+ finally {
69
+ this.#state = "consumed";
70
+ this.closeStream();
71
+ }
72
+ }
73
+ }
74
+ class FilesPasteImpl {
75
+ byteLength;
76
+ files;
77
+ reader;
78
+ closeStream;
79
+ kind = "files";
80
+ #state = "pending";
81
+ constructor(byteLength, files, reader, closeStream) {
82
+ this.byteLength = byteLength;
83
+ this.files = files;
84
+ this.reader = reader;
85
+ this.closeStream = closeStream;
86
+ assertValidByteCount(byteLength, "clipboard files have invalid byte count");
87
+ }
88
+ get state() {
89
+ return this.#state;
90
+ }
91
+ get consumed() {
92
+ return this.#state === "consumed";
93
+ }
94
+ contents() {
95
+ return this.consume(async () => {
96
+ const contents = [];
97
+ for (const file of this.files) {
98
+ contents.push({ ...file, data: await this.reader.readBytes(file.byteLength) });
99
+ }
100
+ return contents;
101
+ });
102
+ }
103
+ save(outputDir) {
104
+ return this.consume(async () => {
105
+ const savedFiles = [];
106
+ for (const file of this.files) {
107
+ savedFiles.push(await saveFile(this.reader, file, outputDir, uniqueFileName(file)));
108
+ }
109
+ return savedFiles;
110
+ });
111
+ }
112
+ async consume(operation) {
113
+ claimPending(this.#state);
114
+ this.#state = "consuming";
115
+ try {
116
+ return await operation();
117
+ }
118
+ finally {
119
+ this.#state = "consumed";
120
+ this.closeStream();
121
+ }
122
+ }
123
+ }
124
+ function claimPending(state) {
125
+ if (state !== "pending") {
126
+ throw new PasteConsumedError("paste stream has already been consumed");
127
+ }
128
+ }
129
+ async function saveFile(reader, file, outputDir, fileName) {
130
+ assertValidByteCount(file.byteLength, `clipboard file ${file.fileName ?? ""} has invalid byte count`);
131
+ await mkdir(outputDir, { recursive: true, mode: 0o700 });
132
+ const filePath = path.join(outputDir, fileName);
133
+ const stream = createWriteStream(filePath, { flags: "wx", mode: 0o600 });
134
+ let removeFile = true;
135
+ try {
136
+ await reader.writeTo(stream, file.byteLength);
137
+ await closeWritable(stream);
138
+ removeFile = false;
139
+ return { ...file, path: filePath };
140
+ }
141
+ catch (error) {
142
+ stream.destroy();
143
+ if (removeFile) {
144
+ await rm(filePath, { force: true }).catch(() => undefined);
145
+ }
146
+ throw error;
147
+ }
148
+ }
149
+ function uniqueTextFileName() {
150
+ return `pasted-text-${randomUUID()}.txt`;
151
+ }
152
+ function uniqueFileName(file) {
153
+ const ext = extensionForFile(file);
154
+ const name = path.basename((file.fileName ?? "").trim());
155
+ if (name !== "." && name !== path.sep && name !== "") {
156
+ const base = name.slice(0, name.length - path.extname(name).length);
157
+ if (base !== "") {
158
+ return `${sanitize(base) || "pasted-file"}-${randomUUID()}${ext}`;
159
+ }
160
+ }
161
+ return `pasted-file-${randomUUID()}${ext}`;
162
+ }
163
+ function extensionForFile(file) {
164
+ if (file.fileName) {
165
+ return path.extname(file.fileName);
166
+ }
167
+ return extensionForMediaType(file.mediaType);
168
+ }
169
+ function extensionForMediaType(mediaType) {
170
+ if (!mediaType) {
171
+ return "";
172
+ }
173
+ const ext = extension(mediaType);
174
+ return ext ? `.${ext}` : "";
175
+ }
176
+ class ExactStreamReader {
177
+ iterator;
178
+ buffered = Buffer.alloc(0);
179
+ constructor(readable) {
180
+ this.iterator = readable[Symbol.asyncIterator]();
181
+ }
182
+ async readBytes(bytes) {
183
+ assertValidByteCount(bytes, "paste content has invalid byte count");
184
+ const chunks = [];
185
+ let remaining = bytes;
186
+ while (remaining > 0) {
187
+ const chunk = await this.take(remaining);
188
+ chunks.push(chunk);
189
+ remaining -= chunk.length;
190
+ }
191
+ return Buffer.concat(chunks, bytes);
192
+ }
193
+ async writeTo(writable, bytes) {
194
+ let remaining = bytes;
195
+ while (remaining > 0) {
196
+ const chunk = await this.take(remaining);
197
+ remaining -= chunk.length;
198
+ await writeChunk(writable, chunk);
199
+ }
200
+ }
201
+ async take(maxBytes) {
202
+ if (this.buffered.length > 0) {
203
+ const chunk = this.buffered.subarray(0, maxBytes);
204
+ this.buffered = this.buffered.subarray(chunk.length);
205
+ return chunk;
206
+ }
207
+ while (true) {
208
+ const next = await this.iterator.next();
209
+ if (next.done) {
210
+ throw new InvalidReplyError("paste stream ended before expected byte count");
211
+ }
212
+ const chunk = toBuffer(next.value);
213
+ if (chunk.length === 0) {
214
+ continue;
215
+ }
216
+ if (chunk.length > maxBytes) {
217
+ this.buffered = chunk.subarray(maxBytes);
218
+ return chunk.subarray(0, maxBytes);
219
+ }
220
+ return chunk;
221
+ }
222
+ }
223
+ }
224
+ function toBuffer(chunk) {
225
+ if (Buffer.isBuffer(chunk)) {
226
+ return chunk;
227
+ }
228
+ if (chunk instanceof Uint8Array) {
229
+ return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
230
+ }
231
+ if (typeof chunk === "string") {
232
+ return Buffer.from(chunk);
233
+ }
234
+ throw new InvalidReplyError(`paste stream returned unsupported chunk: ${typeof chunk}`);
235
+ }
236
+ async function writeChunk(writable, chunk) {
237
+ if (writable.write(chunk)) {
238
+ return;
239
+ }
240
+ const drained = once(writable, "drain");
241
+ const failed = once(writable, "error").then(([error]) => {
242
+ throw error;
243
+ });
244
+ await Promise.race([drained, failed]);
245
+ }
246
+ async function closeWritable(writable) {
247
+ const finished = once(writable, "finish");
248
+ const failed = once(writable, "error").then(([error]) => {
249
+ throw error;
250
+ });
251
+ writable.end();
252
+ await Promise.race([finished, failed]);
253
+ }
254
+ function assertValidByteCount(bytes, message) {
255
+ if (!Number.isSafeInteger(bytes) || bytes < 0) {
256
+ throw new InvalidReplyError(message);
257
+ }
258
+ }
259
+ //# sourceMappingURL=paste-internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paste-internal.js","sourceRoot":"","sources":["../../src/paste-internal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export type Paste = TextPaste | FilesPaste;
2
+ export type PasteState = "pending" | "consuming" | "consumed";
3
+ export interface TextPaste {
4
+ readonly kind: "text";
5
+ readonly byteLength: number;
6
+ readonly state: PasteState;
7
+ readonly consumed: boolean;
8
+ text(): Promise<string>;
9
+ raw(): Promise<Uint8Array>;
10
+ save(outputDir: string): Promise<readonly SavedPasteFile[]>;
11
+ }
12
+ export interface FilesPaste {
13
+ readonly kind: "files";
14
+ readonly byteLength: number;
15
+ readonly files: readonly PasteFile[];
16
+ readonly state: PasteState;
17
+ readonly consumed: boolean;
18
+ contents(): Promise<readonly PasteFileContent[]>;
19
+ save(outputDir: string): Promise<readonly SavedPasteFile[]>;
20
+ }
21
+ export interface PasteFile {
22
+ readonly fileName?: string;
23
+ readonly mediaType?: string;
24
+ readonly byteLength: number;
25
+ readonly source?: string;
26
+ }
27
+ export interface PasteFileContent extends PasteFile {
28
+ readonly data: Uint8Array;
29
+ }
30
+ export interface SavedPasteFile extends PasteFile {
31
+ readonly path: string;
32
+ }
33
+ export interface PasteMatcher<T> {
34
+ text: (paste: TextPaste) => T | Promise<T>;
35
+ files: (paste: FilesPaste) => T | Promise<T>;
36
+ }
37
+ export declare const Paste: {
38
+ match<T>(paste: Paste, matcher: PasteMatcher<T>): T | Promise<T>;
39
+ isText(paste: Paste): paste is TextPaste;
40
+ isFiles(paste: Paste): paste is FilesPaste;
41
+ };
42
+ //# sourceMappingURL=paste.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paste.d.ts","sourceRoot":"","sources":["../../src/paste.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;AAC3C,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,QAAQ,IAAI,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9C;AAED,eAAO,MAAM,KAAK;UACV,CAAC,SAAS,KAAK,WAAW,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;kBASlD,KAAK,GAAG,KAAK,IAAI,SAAS;mBAIzB,KAAK,GAAG,KAAK,IAAI,UAAU;CAG3C,CAAC"}
@@ -0,0 +1,17 @@
1
+ export const Paste = {
2
+ match(paste, matcher) {
3
+ switch (paste.kind) {
4
+ case "text":
5
+ return matcher.text(paste);
6
+ case "files":
7
+ return matcher.files(paste);
8
+ }
9
+ },
10
+ isText(paste) {
11
+ return paste.kind === "text";
12
+ },
13
+ isFiles(paste) {
14
+ return paste.kind === "files";
15
+ },
16
+ };
17
+ //# sourceMappingURL=paste.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paste.js","sourceRoot":"","sources":["../../src/paste.ts"],"names":[],"mappings":"AA6CA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK,CAAI,KAAY,EAAE,OAAwB;QAC7C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,KAAK,OAAO;gBACV,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAY;QACjB,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,KAAY;QAClB,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;IAChC,CAAC;CACF,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { type ProtocolCode, protocolCodes } from "./codes.js";
2
+ export declare const protocolVersion = 1;
3
+ export type ReplyMode = "frame" | "none" | "stream" | "hold";
4
+ export interface RequestEnvelope {
5
+ version: typeof protocolVersion;
6
+ command: string;
7
+ }
8
+ export interface FrameReply {
9
+ version: number;
10
+ code: ProtocolCode | string;
11
+ value?: string;
12
+ error?: string;
13
+ }
14
+ export interface DoctorReply extends FrameReply {
15
+ healthy: boolean;
16
+ checks?: DoctorCheck[];
17
+ }
18
+ export interface DoctorCheck {
19
+ name: string;
20
+ status: string;
21
+ message?: string;
22
+ }
23
+ export interface BridgeCreateReply extends FrameReply {
24
+ socketPath?: string;
25
+ leaseToken?: string;
26
+ }
27
+ export type Direction = "left" | "down" | "up" | "right";
28
+ export type FocusTarget = "new" | "original";
29
+ export type ResizeAmount = {
30
+ pixels: number;
31
+ } | {
32
+ percent: number;
33
+ };
34
+ export interface TerminalTargetOptions {
35
+ tty?: string;
36
+ focused?: boolean;
37
+ }
38
+ export interface TerminalIdOptions extends TerminalTargetOptions {
39
+ refresh?: boolean;
40
+ }
41
+ export interface AckOptions extends TerminalTargetOptions {
42
+ ack?: boolean;
43
+ }
44
+ export interface KeyTableActivateOptions extends AckOptions {
45
+ table: string;
46
+ }
47
+ export interface DirectionOptions extends AckOptions {
48
+ direction: Direction;
49
+ }
50
+ export interface SplitOptions extends DirectionOptions {
51
+ cwd?: string;
52
+ commandText?: string;
53
+ focus?: FocusTarget;
54
+ }
55
+ export interface ResizeOptions extends DirectionOptions {
56
+ amount: ResizeAmount;
57
+ }
58
+ export interface PasteOptions {
59
+ tty?: string;
60
+ }
61
+ export interface BridgeLeaseOptions {
62
+ token: string;
63
+ }
64
+ export interface Request extends RequestEnvelope {
65
+ [key: string]: unknown;
66
+ }
67
+ export interface PasteFrameFile {
68
+ fileName?: string;
69
+ mediaType?: string;
70
+ bytes: number;
71
+ source?: string;
72
+ }
73
+ export interface PasteStreamFrameHeader extends FrameReply {
74
+ kind?: "text" | "files";
75
+ files?: PasteFrameFile[];
76
+ bytes?: number;
77
+ }
78
+ export type PasteStreamHeader = (PasteStreamFrameHeader & {
79
+ kind: "text";
80
+ bytes: number;
81
+ }) | (PasteStreamFrameHeader & {
82
+ kind: "files";
83
+ files: PasteFrameFile[];
84
+ bytes: number;
85
+ });
86
+ export declare function replyModeOf(request: RequestEnvelope): ReplyMode;
87
+ export declare function encodeRequest(request: RequestEnvelope): string;
88
+ export declare function doctorRequest(): Request;
89
+ export declare function terminalIdRequest(options?: TerminalIdOptions): Request;
90
+ export declare function tabTerminalCountRequest(options?: TerminalTargetOptions): Request;
91
+ export declare function clearCacheRequest(options?: {
92
+ tty?: string;
93
+ ack?: boolean;
94
+ }): Request;
95
+ export declare function keyTableActivateRequest(options: KeyTableActivateOptions): Request;
96
+ export declare function keyTableDeactivateRequest(options?: AckOptions): Request;
97
+ export declare function focusRequest(options: DirectionOptions): Request;
98
+ export declare function splitRequest(options: SplitOptions): Request;
99
+ export declare function resizeRequest(options: ResizeOptions): Request;
100
+ export declare function zoomRequest(options?: AckOptions): Request;
101
+ export declare function pasteRequest(options?: PasteOptions): Request;
102
+ export declare function bridgeCreateRequest(options?: TerminalTargetOptions): Request;
103
+ export declare function bridgeLeaseRequest(token: string): Request;
104
+ export type { ProtocolCode };
105
+ export { protocolCodes };
106
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/protocol.ts"],"names":[],"mappings":"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"}