@monotykamary/localterm-server 2.0.5 → 2.1.1
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/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -0
- package/dist/constants.js.map +1 -1
- package/dist/git-diff.d.ts.map +1 -1
- package/dist/git-diff.js +420 -475
- package/dist/git-diff.js.map +1 -1
- package/dist/utils/run-git.d.ts +7 -0
- package/dist/utils/run-git.d.ts.map +1 -0
- package/dist/utils/run-git.js +44 -0
- package/dist/utils/run-git.js.map +1 -0
- package/package.json +1 -3
- package/dist/cdp/open-background-tab.d.ts +0 -33
- package/dist/cdp/open-background-tab.d.ts.map +0 -1
- package/dist/cdp/open-background-tab.js +0 -98
- package/dist/cdp/open-background-tab.js.map +0 -1
- package/dist/finding-store.d.ts +0 -21
- package/dist/finding-store.d.ts.map +0 -1
- package/dist/finding-store.js +0 -155
- package/dist/finding-store.js.map +0 -1
- package/dist/utils/compute-patch.d.ts +0 -7
- package/dist/utils/compute-patch.d.ts.map +0 -1
- package/dist/utils/compute-patch.js +0 -74
- package/dist/utils/compute-patch.js.map +0 -1
- package/dist/utils/parse-osc-finding.d.ts +0 -7
- package/dist/utils/parse-osc-finding.d.ts.map +0 -1
- package/dist/utils/parse-osc-finding.js +0 -55
- package/dist/utils/parse-osc-finding.js.map +0 -1
- package/dist/utils/reconcile-file-stats.d.ts +0 -7
- package/dist/utils/reconcile-file-stats.d.ts.map +0 -1
- package/dist/utils/reconcile-file-stats.js +0 -45
- package/dist/utils/reconcile-file-stats.js.map +0 -1
- package/dist/utils/resolve-cwd-for-pid.d.ts +0 -2
- package/dist/utils/resolve-cwd-for-pid.d.ts.map +0 -1
- package/dist/utils/resolve-cwd-for-pid.js +0 -29
- package/dist/utils/resolve-cwd-for-pid.js.map +0 -1
- package/dist/utils/rewrite-kitty-file-transmission.d.ts +0 -2
- package/dist/utils/rewrite-kitty-file-transmission.d.ts.map +0 -1
- package/dist/utils/rewrite-kitty-file-transmission.js +0 -147
- package/dist/utils/rewrite-kitty-file-transmission.js.map +0 -1
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { structuredPatch } from "diff";
|
|
2
|
-
const MODE_REGULAR = "100644";
|
|
3
|
-
export const computePatchFromContents = (oldContent, newContent, oldPath, newPath, _oldMode = null, newMode = null, oldId = null, newId = null, isRename = false) => {
|
|
4
|
-
const effectiveOld = oldContent ?? "";
|
|
5
|
-
const effectiveNew = newContent ?? "";
|
|
6
|
-
const isAdded = oldContent === null && newContent !== null;
|
|
7
|
-
const isDeleted = newContent === null && oldContent !== null;
|
|
8
|
-
const aPath = oldPath ?? "/dev/null";
|
|
9
|
-
const bPath = newPath ?? "/dev/null";
|
|
10
|
-
const result = structuredPatch(aPath, bPath, effectiveOld, effectiveNew);
|
|
11
|
-
if (result.hunks.length === 0 && !isAdded && !isDeleted && !isRename) {
|
|
12
|
-
return { patchText: "", additions: 0, deletions: 0 };
|
|
13
|
-
}
|
|
14
|
-
const parts = [];
|
|
15
|
-
if (isRename) {
|
|
16
|
-
parts.push(`diff --git a/${oldPath} b/${newPath}`);
|
|
17
|
-
parts.push("similarity index 100%");
|
|
18
|
-
parts.push(`rename from ${oldPath}`);
|
|
19
|
-
parts.push(`rename to ${newPath}`);
|
|
20
|
-
}
|
|
21
|
-
else if (isAdded) {
|
|
22
|
-
parts.push(`diff --git a/${bPath} b/${bPath}`);
|
|
23
|
-
parts.push(`new file mode ${newMode ?? MODE_REGULAR}`);
|
|
24
|
-
}
|
|
25
|
-
else if (isDeleted) {
|
|
26
|
-
parts.push(`diff --git a/${aPath} b/${aPath}`);
|
|
27
|
-
parts.push(`deleted file mode ${MODE_REGULAR}`);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
parts.push(`diff --git a/${aPath} b/${bPath}`);
|
|
31
|
-
const abbreviatedOld = (oldId ?? "").substring(0, 7);
|
|
32
|
-
const abbreviatedNew = (newId ?? "").substring(0, 7);
|
|
33
|
-
parts.push(`index ${abbreviatedOld}..${abbreviatedNew}`);
|
|
34
|
-
}
|
|
35
|
-
if (!isRename) {
|
|
36
|
-
if (isAdded) {
|
|
37
|
-
parts.push("--- /dev/null");
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
parts.push(`--- a/${aPath}`);
|
|
41
|
-
}
|
|
42
|
-
if (isDeleted) {
|
|
43
|
-
parts.push("+++ /dev/null");
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
parts.push(`+++ b/${bPath}`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
let additions = 0;
|
|
50
|
-
let deletions = 0;
|
|
51
|
-
for (const hunk of result.hunks) {
|
|
52
|
-
const hunkHeader = `@@ -${hunk.oldStart},${hunk.oldLines} +${hunk.newStart},${hunk.newLines} @@`;
|
|
53
|
-
const bodyLines = [];
|
|
54
|
-
for (const line of hunk.lines) {
|
|
55
|
-
const marker = line[0];
|
|
56
|
-
if (marker === "+") {
|
|
57
|
-
additions += 1;
|
|
58
|
-
bodyLines.push(line);
|
|
59
|
-
}
|
|
60
|
-
else if (marker === "-") {
|
|
61
|
-
deletions += 1;
|
|
62
|
-
bodyLines.push(line);
|
|
63
|
-
}
|
|
64
|
-
else if (marker === " ") {
|
|
65
|
-
bodyLines.push(line);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
parts.push(hunkHeader);
|
|
69
|
-
parts.push(bodyLines.join("\n"));
|
|
70
|
-
}
|
|
71
|
-
const patchText = parts.join("\n") + "\n";
|
|
72
|
-
return { patchText, additions, deletions };
|
|
73
|
-
};
|
|
74
|
-
//# sourceMappingURL=compute-patch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compute-patch.js","sourceRoot":"","sources":["../../src/utils/compute-patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-osc-finding.d.ts","sourceRoot":"","sources":["../../src/utils/parse-osc-finding.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,eAAO,MAAM,yBAAyB,GAAI,MAAM,MAAM,KAAG,aAAa,EA2CrE,CAAC"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
// OSC 7888 (localterm automation finding) format:
|
|
2
|
-
// ESC ] 7888 ; automation-finding ; <severity> ; <title> [ ; <dedupKey> ] ST
|
|
3
|
-
// where ST is either BEL (0x07) or ESC \ (0x1b 0x5c).
|
|
4
|
-
//
|
|
5
|
-
// severity is one of: info, warn, error, clear
|
|
6
|
-
// title is a short human-readable summary (e.g. "Tests failing in src/utils")
|
|
7
|
-
// dedupKey is optional; when absent the server synthesizes one from the title
|
|
8
|
-
//
|
|
9
|
-
// Emitted by automation commands to report structured findings back to the
|
|
10
|
-
// server. Multiple findings can be emitted in one session. A severity of
|
|
11
|
-
// "clear" signals that nothing is worth reporting (auto-resolves open findings).
|
|
12
|
-
import { MAX_AUTOMATION_FINDING_TITLE_LENGTH } from "../constants.js";
|
|
13
|
-
const OSC_FINDING_PREFIX = "\x1b]7888;automation-finding;";
|
|
14
|
-
const BEL = "\x07";
|
|
15
|
-
const ST = "\x1b\\";
|
|
16
|
-
const VALID_SEVERITIES = new Set(["info", "warn", "error", "clear"]);
|
|
17
|
-
export const parseOscFindingsFromChunk = (data) => {
|
|
18
|
-
const findings = [];
|
|
19
|
-
let searchFrom = 0;
|
|
20
|
-
while (searchFrom < data.length) {
|
|
21
|
-
const start = data.indexOf(OSC_FINDING_PREFIX, searchFrom);
|
|
22
|
-
if (start === -1)
|
|
23
|
-
break;
|
|
24
|
-
const payloadStart = start + OSC_FINDING_PREFIX.length;
|
|
25
|
-
const belIndex = data.indexOf(BEL, payloadStart);
|
|
26
|
-
const stIndex = data.indexOf(ST, payloadStart);
|
|
27
|
-
let payloadEnd;
|
|
28
|
-
if (belIndex !== -1 && (stIndex === -1 || belIndex < stIndex)) {
|
|
29
|
-
payloadEnd = belIndex;
|
|
30
|
-
}
|
|
31
|
-
else if (stIndex !== -1) {
|
|
32
|
-
payloadEnd = stIndex;
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
break;
|
|
36
|
-
}
|
|
37
|
-
const payload = data.slice(payloadStart, payloadEnd);
|
|
38
|
-
const parts = payload.split(";");
|
|
39
|
-
const severity = parts[0];
|
|
40
|
-
const title = parts.slice(1, -1).join(";") || parts[1] || "";
|
|
41
|
-
const dedupKey = parts.length >= 3 ? parts[parts.length - 1] : null;
|
|
42
|
-
if (VALID_SEVERITIES.has(severity) &&
|
|
43
|
-
title.length > 0 &&
|
|
44
|
-
title.length <= MAX_AUTOMATION_FINDING_TITLE_LENGTH) {
|
|
45
|
-
findings.push({
|
|
46
|
-
severity: severity,
|
|
47
|
-
title,
|
|
48
|
-
dedupKey,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
searchFrom = payloadEnd + 1;
|
|
52
|
-
}
|
|
53
|
-
return findings;
|
|
54
|
-
};
|
|
55
|
-
//# sourceMappingURL=parse-osc-finding.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-osc-finding.js","sourceRoot":"","sources":["../../src/utils/parse-osc-finding.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,+EAA+E;AAC/E,sDAAsD;AACtD,EAAE;AACF,+CAA+C;AAC/C,8EAA8E;AAC9E,8EAA8E;AAC9E,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,iFAAiF;AAEjF,OAAO,EAAE,mCAAmC,EAAE,MAAM,iBAAiB,CAAC;AAEtE,MAAM,kBAAkB,GAAG,+BAA+B,CAAC;AAC3D,MAAM,GAAG,GAAG,MAAM,CAAC;AACnB,MAAM,EAAE,GAAG,QAAQ,CAAC;AAEpB,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAQrE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,IAAY,EAAmB,EAAE;IACzE,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QAC3D,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,MAAM;QAExB,MAAM,YAAY,GAAG,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QAE/C,IAAI,UAAkB,CAAC;QACvB,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;YAC9D,UAAU,GAAG,QAAQ,CAAC;QACxB,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1B,UAAU,GAAG,OAAO,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEpE,IACE,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B,KAAK,CAAC,MAAM,GAAG,CAAC;YAChB,KAAK,CAAC,MAAM,IAAI,mCAAmC,EACnD,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,QAAqC;gBAC/C,KAAK;gBACL,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;QAED,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export interface FileAddDel {
|
|
2
|
-
additions: number;
|
|
3
|
-
deletions: number;
|
|
4
|
-
binary: boolean;
|
|
5
|
-
}
|
|
6
|
-
export declare const reconcileFileStats: <T extends FileAddDel>(files: T[], totalInsertions: number, totalDeletions: number) => void;
|
|
7
|
-
//# sourceMappingURL=reconcile-file-stats.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-file-stats.d.ts","sourceRoot":"","sources":["../../src/utils/reconcile-file-stats.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAUD,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,UAAU,EACrD,OAAO,CAAC,EAAE,EACV,iBAAiB,MAAM,EACvB,gBAAgB,MAAM,KACrB,IA+BF,CAAC"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// Reconcile per-file +/- counts toward the authoritative aggregate from
|
|
2
|
-
// git's diff.stats(). jsdiff's per-file patch counts (computePatchFromContents)
|
|
3
|
-
// drift from git's totals on trailing-newline / line-ending edge cases, and the
|
|
4
|
-
// drift accumulates across a large diff — so nudge each file ±1 toward the
|
|
5
|
-
// aggregate until they match. Per-file counts must never go negative (the wire
|
|
6
|
-
// schema rejects them), so a surplus (per-file sum exceeds the aggregate) is
|
|
7
|
-
// only taken from files that have room; any leftover remainder is left
|
|
8
|
-
// unreconciled rather than producing a negative count.
|
|
9
|
-
export const reconcileFileStats = (files, totalInsertions, totalDeletions) => {
|
|
10
|
-
let computedAdds = 0;
|
|
11
|
-
let computedDels = 0;
|
|
12
|
-
for (const file of files) {
|
|
13
|
-
if (file.binary)
|
|
14
|
-
continue;
|
|
15
|
-
computedAdds += file.additions;
|
|
16
|
-
computedDels += file.deletions;
|
|
17
|
-
}
|
|
18
|
-
let remainingAdd = totalInsertions - computedAdds;
|
|
19
|
-
let remainingDel = totalDeletions - computedDels;
|
|
20
|
-
if (remainingAdd === 0 && remainingDel === 0)
|
|
21
|
-
return;
|
|
22
|
-
for (const file of files) {
|
|
23
|
-
if (file.binary)
|
|
24
|
-
continue;
|
|
25
|
-
if (remainingAdd > 0) {
|
|
26
|
-
file.additions += 1;
|
|
27
|
-
remainingAdd -= 1;
|
|
28
|
-
}
|
|
29
|
-
else if (remainingAdd < 0 && file.additions > 0) {
|
|
30
|
-
file.additions -= 1;
|
|
31
|
-
remainingAdd += 1;
|
|
32
|
-
}
|
|
33
|
-
if (remainingDel > 0) {
|
|
34
|
-
file.deletions += 1;
|
|
35
|
-
remainingDel -= 1;
|
|
36
|
-
}
|
|
37
|
-
else if (remainingDel < 0 && file.deletions > 0) {
|
|
38
|
-
file.deletions -= 1;
|
|
39
|
-
remainingDel += 1;
|
|
40
|
-
}
|
|
41
|
-
if (remainingAdd === 0 && remainingDel === 0)
|
|
42
|
-
break;
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
//# sourceMappingURL=reconcile-file-stats.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-file-stats.js","sourceRoot":"","sources":["../../src/utils/reconcile-file-stats.ts"],"names":[],"mappings":"AAMA,wEAAwE;AACxE,gFAAgF;AAChF,gFAAgF;AAChF,2EAA2E;AAC3E,+EAA+E;AAC/E,6EAA6E;AAC7E,uEAAuE;AACvE,uDAAuD;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAU,EACV,eAAuB,EACvB,cAAsB,EAChB,EAAE;IACR,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM;YAAE,SAAS;QAC1B,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC;QAC/B,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC;IACjC,CAAC;IAED,IAAI,YAAY,GAAG,eAAe,GAAG,YAAY,CAAC;IAClD,IAAI,YAAY,GAAG,cAAc,GAAG,YAAY,CAAC;IACjD,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC;QAAE,OAAO;IAErD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM;YAAE,SAAS;QAC1B,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;YACpB,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;YACpB,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;YACpB,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;YACpB,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC;YAAE,MAAM;IACtD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-cwd-for-pid.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-cwd-for-pid.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,gBAAgB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAuBzE,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
|
-
import { readlink } from "node:fs/promises";
|
|
3
|
-
import { promisify } from "node:util";
|
|
4
|
-
import { CWD_RESOLVE_TIMEOUT_MS } from "../constants.js";
|
|
5
|
-
const execFileAsync = promisify(execFile);
|
|
6
|
-
export const resolveCwdForPid = async (pid) => {
|
|
7
|
-
if (!Number.isFinite(pid) || pid <= 0)
|
|
8
|
-
return null;
|
|
9
|
-
if (process.platform === "linux") {
|
|
10
|
-
try {
|
|
11
|
-
return await readlink(`/proc/${pid}/cwd`);
|
|
12
|
-
}
|
|
13
|
-
catch {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
if (process.platform === "darwin") {
|
|
18
|
-
try {
|
|
19
|
-
const { stdout } = await execFileAsync("lsof", ["-a", "-p", String(pid), "-d", "cwd", "-Fn"], { timeout: CWD_RESOLVE_TIMEOUT_MS, windowsHide: true });
|
|
20
|
-
const cwdLine = stdout.split("\n").find((line) => line.startsWith("n"));
|
|
21
|
-
return cwdLine ? cwdLine.slice(1) : null;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return null;
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=resolve-cwd-for-pid.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-cwd-for-pid.js","sourceRoot":"","sources":["../../src/utils/resolve-cwd-for-pid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAW,EAA0B,EAAE;IAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CACpC,MAAM,EACN,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAC7C,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,IAAI,EAAE,CACvD,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACxE,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rewrite-kitty-file-transmission.d.ts","sourceRoot":"","sources":["../../src/utils/rewrite-kitty-file-transmission.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,uBAAuB,QAAO,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CA+DnE,CAAC"}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import { readFileSync, statSync } from "node:fs";
|
|
2
|
-
const MAX_CHUNK_BYTES = 4096;
|
|
3
|
-
const MAX_FILE_SIZE_BYTES = 32 * 1024 * 1024;
|
|
4
|
-
export const createKittyFileRewriter = () => {
|
|
5
|
-
let state = { type: "passthrough" };
|
|
6
|
-
return (data) => {
|
|
7
|
-
const input = Buffer.from(data, "binary");
|
|
8
|
-
const out = [];
|
|
9
|
-
let index = 0;
|
|
10
|
-
while (index < input.length) {
|
|
11
|
-
switch (state.type) {
|
|
12
|
-
case "passthrough": {
|
|
13
|
-
if (input[index] === 0x1b &&
|
|
14
|
-
index + 2 < input.length &&
|
|
15
|
-
input[index + 1] === 0x5f &&
|
|
16
|
-
input[index + 2] === 0x47) {
|
|
17
|
-
state = { type: "in_apc", controlData: [] };
|
|
18
|
-
index += 3;
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
out.push(input[index]);
|
|
22
|
-
index += 1;
|
|
23
|
-
}
|
|
24
|
-
break;
|
|
25
|
-
}
|
|
26
|
-
case "in_apc": {
|
|
27
|
-
if (input[index] === 0x3b) {
|
|
28
|
-
state = { type: "in_payload", controlData: state.controlData, payload: [] };
|
|
29
|
-
index += 1;
|
|
30
|
-
}
|
|
31
|
-
else if (input[index] === 0x1b &&
|
|
32
|
-
index + 1 < input.length &&
|
|
33
|
-
input[index + 1] === 0x5c) {
|
|
34
|
-
const rewritten = rewriteIfFileTransmission(state.controlData, []);
|
|
35
|
-
pushAll(out, rewritten);
|
|
36
|
-
state = { type: "passthrough" };
|
|
37
|
-
index += 2;
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
state.controlData.push(input[index]);
|
|
41
|
-
index += 1;
|
|
42
|
-
}
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
case "in_payload": {
|
|
46
|
-
if (input[index] === 0x1b && index + 1 < input.length && input[index + 1] === 0x5c) {
|
|
47
|
-
const rewritten = rewriteIfFileTransmission(state.controlData, state.payload);
|
|
48
|
-
pushAll(out, rewritten);
|
|
49
|
-
state = { type: "passthrough" };
|
|
50
|
-
index += 2;
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
state.payload.push(input[index]);
|
|
54
|
-
index += 1;
|
|
55
|
-
}
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return Buffer.from(out).toString("binary");
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
|
-
const pushAll = (out, str) => {
|
|
64
|
-
for (let index = 0; index < str.length; index++) {
|
|
65
|
-
out.push(str.charCodeAt(index));
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
const rewriteIfFileTransmission = (controlData, payload) => {
|
|
69
|
-
const controlStr = String.fromCharCode(...controlData);
|
|
70
|
-
const payloadStr = String.fromCharCode(...payload);
|
|
71
|
-
if (!hasFileTransmission(controlStr)) {
|
|
72
|
-
const separator = payloadStr ? ";" : "";
|
|
73
|
-
return `\x1b_G${controlStr}${separator}${payloadStr}\x1b\\`;
|
|
74
|
-
}
|
|
75
|
-
if (!payloadStr) {
|
|
76
|
-
const imageId = extractValue(controlStr, "i") ?? "0";
|
|
77
|
-
return `\x1b_Gi=${imageId};EINVAL:empty file path\x1b\\`;
|
|
78
|
-
}
|
|
79
|
-
const filePath = decodeKittyBase64(payloadStr);
|
|
80
|
-
if (!filePath) {
|
|
81
|
-
const imageId = extractValue(controlStr, "i") ?? "0";
|
|
82
|
-
return `\x1b_Gi=${imageId};EINVAL:invalid base64 file path\x1b\\`;
|
|
83
|
-
}
|
|
84
|
-
let fileData;
|
|
85
|
-
try {
|
|
86
|
-
const fileStat = statSync(filePath);
|
|
87
|
-
if (fileStat.size > MAX_FILE_SIZE_BYTES) {
|
|
88
|
-
const imageId = extractValue(controlStr, "i") ?? "0";
|
|
89
|
-
return `\x1b_Gi=${imageId};EINVAL:file too large\x1b\\`;
|
|
90
|
-
}
|
|
91
|
-
fileData = readFileSync(filePath);
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
const imageId = extractValue(controlStr, "i") ?? "0";
|
|
95
|
-
return `\x1b_Gi=${imageId};EINVAL:cannot read file\x1b\\`;
|
|
96
|
-
}
|
|
97
|
-
const newControl = controlStr.replace(/t=f/g, "t=d");
|
|
98
|
-
const base64Data = fileData
|
|
99
|
-
.toString("base64")
|
|
100
|
-
.replace(/\+/g, "-")
|
|
101
|
-
.replace(/\//g, "_")
|
|
102
|
-
.replace(/=+$/, "");
|
|
103
|
-
const chunks = [];
|
|
104
|
-
for (let offset = 0; offset < base64Data.length; offset += MAX_CHUNK_BYTES) {
|
|
105
|
-
chunks.push(base64Data.slice(offset, offset + MAX_CHUNK_BYTES));
|
|
106
|
-
}
|
|
107
|
-
if (chunks.length <= 1) {
|
|
108
|
-
const chunk = chunks[0] ?? "";
|
|
109
|
-
return `\x1b_G${newControl},m=0;${chunk}\x1b\\`;
|
|
110
|
-
}
|
|
111
|
-
const parts = [];
|
|
112
|
-
for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {
|
|
113
|
-
const isFirst = chunkIndex === 0;
|
|
114
|
-
const isLast = chunkIndex === chunks.length - 1;
|
|
115
|
-
const chunkControl = isFirst ? `${newControl},m=1` : isLast ? "m=0" : "m=1";
|
|
116
|
-
parts.push(`\x1b_G${chunkControl};${chunks[chunkIndex]}\x1b\\`);
|
|
117
|
-
}
|
|
118
|
-
return parts.join("");
|
|
119
|
-
};
|
|
120
|
-
const decodeKittyBase64 = (encoded) => {
|
|
121
|
-
try {
|
|
122
|
-
const standard = encoded.replace(/-/g, "+").replace(/_/g, "/");
|
|
123
|
-
return Buffer.from(standard, "base64").toString("utf8");
|
|
124
|
-
}
|
|
125
|
-
catch {
|
|
126
|
-
return null;
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
const hasFileTransmission = (controlStr) => {
|
|
130
|
-
for (const pair of controlStr.split(",")) {
|
|
131
|
-
const eqIndex = pair.indexOf("=");
|
|
132
|
-
if (eqIndex !== -1 && pair.slice(0, eqIndex) === "t" && pair.slice(eqIndex + 1) === "f") {
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return false;
|
|
137
|
-
};
|
|
138
|
-
const extractValue = (controlStr, key) => {
|
|
139
|
-
for (const pair of controlStr.split(",")) {
|
|
140
|
-
const eqIndex = pair.indexOf("=");
|
|
141
|
-
if (eqIndex !== -1 && pair.slice(0, eqIndex) === key) {
|
|
142
|
-
return pair.slice(eqIndex + 1);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return undefined;
|
|
146
|
-
};
|
|
147
|
-
//# sourceMappingURL=rewrite-kitty-file-transmission.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rewrite-kitty-file-transmission.js","sourceRoot":"","sources":["../../src/utils/rewrite-kitty-file-transmission.ts"],"names":[],"mappings":"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"}
|