@monotykamary/localterm-server 2.0.4 → 2.1.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 (44) hide show
  1. package/dist/constants.d.ts +2 -0
  2. package/dist/constants.d.ts.map +1 -1
  3. package/dist/constants.js +11 -0
  4. package/dist/constants.js.map +1 -1
  5. package/dist/git-diff.d.ts +2 -1
  6. package/dist/git-diff.d.ts.map +1 -1
  7. package/dist/git-diff.js +353 -551
  8. package/dist/git-diff.js.map +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +5 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/utils/run-git.d.ts +7 -0
  13. package/dist/utils/run-git.d.ts.map +1 -0
  14. package/dist/utils/run-git.js +44 -0
  15. package/dist/utils/run-git.js.map +1 -0
  16. package/package.json +1 -3
  17. package/dist/cdp/open-background-tab.d.ts +0 -33
  18. package/dist/cdp/open-background-tab.d.ts.map +0 -1
  19. package/dist/cdp/open-background-tab.js +0 -98
  20. package/dist/cdp/open-background-tab.js.map +0 -1
  21. package/dist/finding-store.d.ts +0 -21
  22. package/dist/finding-store.d.ts.map +0 -1
  23. package/dist/finding-store.js +0 -155
  24. package/dist/finding-store.js.map +0 -1
  25. package/dist/utils/compute-patch.d.ts +0 -7
  26. package/dist/utils/compute-patch.d.ts.map +0 -1
  27. package/dist/utils/compute-patch.js +0 -74
  28. package/dist/utils/compute-patch.js.map +0 -1
  29. package/dist/utils/parse-osc-finding.d.ts +0 -7
  30. package/dist/utils/parse-osc-finding.d.ts.map +0 -1
  31. package/dist/utils/parse-osc-finding.js +0 -55
  32. package/dist/utils/parse-osc-finding.js.map +0 -1
  33. package/dist/utils/reconcile-file-stats.d.ts +0 -7
  34. package/dist/utils/reconcile-file-stats.d.ts.map +0 -1
  35. package/dist/utils/reconcile-file-stats.js +0 -45
  36. package/dist/utils/reconcile-file-stats.js.map +0 -1
  37. package/dist/utils/resolve-cwd-for-pid.d.ts +0 -2
  38. package/dist/utils/resolve-cwd-for-pid.d.ts.map +0 -1
  39. package/dist/utils/resolve-cwd-for-pid.js +0 -29
  40. package/dist/utils/resolve-cwd-for-pid.js.map +0 -1
  41. package/dist/utils/rewrite-kitty-file-transmission.d.ts +0 -2
  42. package/dist/utils/rewrite-kitty-file-transmission.d.ts.map +0 -1
  43. package/dist/utils/rewrite-kitty-file-transmission.js +0 -147
  44. package/dist/utils/rewrite-kitty-file-transmission.js.map +0 -1
@@ -1,155 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import fs from "node:fs";
3
- import path from "node:path";
4
- import { FINDING_RESOLVED_PRUNE_AGE_MS, FINDINGS_FILE_VERSION, MAX_AUTOMATION_FINDING_DEDUP_KEY_LENGTH, MAX_AUTOMATION_FINDING_TITLE_LENGTH, MAX_AUTOMATION_FINDINGS_TOTAL, } from "./constants.js";
5
- import { findingsFileSchema } from "./schemas.js";
6
- export class FindingStore {
7
- filePath;
8
- findings = [];
9
- constructor(filePath) {
10
- this.filePath = filePath;
11
- this.load();
12
- }
13
- list(state) {
14
- if (state === undefined)
15
- return [...this.findings];
16
- return this.findings.filter((finding) => finding.state === state);
17
- }
18
- get(id) {
19
- return this.findings.find((finding) => finding.id === id) ?? null;
20
- }
21
- findByDedupKey(automationId, dedupKey) {
22
- return (this.findings.find((finding) => finding.automationId === automationId &&
23
- finding.dedupKey === dedupKey &&
24
- (finding.state === "open" || finding.state === "resolved")) ?? null);
25
- }
26
- findOpenByAutomation(automationId) {
27
- return this.findings.filter((finding) => finding.automationId === automationId && finding.state === "open");
28
- }
29
- size() {
30
- return this.findings.length;
31
- }
32
- openCount() {
33
- return this.findings.filter((finding) => finding.state === "open").length;
34
- }
35
- upsert(automationId, severity, title, dedupKey, sourceRunId, now = Date.now()) {
36
- const existing = this.findByDedupKey(automationId, dedupKey);
37
- if (existing) {
38
- existing.severity = severity;
39
- existing.title = title.slice(0, MAX_AUTOMATION_FINDING_TITLE_LENGTH);
40
- existing.sourceRunId = sourceRunId;
41
- existing.lastSeenAt = now;
42
- existing.runCount += 1;
43
- if (existing.state === "resolved") {
44
- existing.state = "open";
45
- existing.resolvedAt = null;
46
- existing.resolvedCount += 1;
47
- }
48
- this.persist();
49
- return existing;
50
- }
51
- const finding = {
52
- id: randomUUID(),
53
- automationId,
54
- severity,
55
- title: title.slice(0, MAX_AUTOMATION_FINDING_TITLE_LENGTH),
56
- dedupKey: dedupKey.slice(0, MAX_AUTOMATION_FINDING_DEDUP_KEY_LENGTH),
57
- sourceRunId,
58
- firstSeenAt: now,
59
- lastSeenAt: now,
60
- runCount: 1,
61
- state: severity === "clear" ? "dismissed" : "open",
62
- resolvedAt: null,
63
- resolvedCount: 0,
64
- read: false,
65
- };
66
- this.findings.unshift(finding);
67
- if (this.findings.length > MAX_AUTOMATION_FINDINGS_TOTAL) {
68
- this.findings = this.findings.slice(0, MAX_AUTOMATION_FINDINGS_TOTAL);
69
- }
70
- this.persist();
71
- return finding;
72
- }
73
- resolve(id, now = Date.now()) {
74
- const index = this.findings.findIndex((finding) => finding.id === id);
75
- if (index === -1)
76
- return null;
77
- const finding = this.findings[index];
78
- if (finding.state !== "open")
79
- return null;
80
- finding.state = "resolved";
81
- finding.resolvedAt = now;
82
- this.persist();
83
- return finding;
84
- }
85
- resolveAllByAutomation(automationId, now = Date.now()) {
86
- let resolvedCount = 0;
87
- for (const finding of this.findings) {
88
- if (finding.automationId !== automationId || finding.state !== "open")
89
- continue;
90
- finding.state = "resolved";
91
- finding.resolvedAt = now;
92
- resolvedCount += 1;
93
- }
94
- if (resolvedCount > 0)
95
- this.persist();
96
- return resolvedCount;
97
- }
98
- dismiss(id) {
99
- const index = this.findings.findIndex((finding) => finding.id === id);
100
- if (index === -1)
101
- return null;
102
- const finding = this.findings[index];
103
- finding.state = "dismissed";
104
- this.persist();
105
- return finding;
106
- }
107
- markRead(id) {
108
- const finding = this.get(id);
109
- if (!finding || finding.state !== "open")
110
- return null;
111
- finding.read = true;
112
- this.persist();
113
- return finding;
114
- }
115
- pruneResolved(now = Date.now()) {
116
- const cutoff = now - FINDING_RESOLVED_PRUNE_AGE_MS;
117
- const before = this.findings.length;
118
- this.findings = this.findings.filter((finding) => finding.state !== "resolved" || (finding.resolvedAt ?? 0) >= cutoff);
119
- const pruned = before - this.findings.length;
120
- if (pruned > 0)
121
- this.persist();
122
- return pruned;
123
- }
124
- load() {
125
- let raw;
126
- try {
127
- raw = fs.readFileSync(this.filePath, "utf8");
128
- }
129
- catch {
130
- return;
131
- }
132
- let json;
133
- try {
134
- json = JSON.parse(raw);
135
- }
136
- catch {
137
- console.warn(`findings file invalid; starting with an empty list (${this.filePath})`);
138
- return;
139
- }
140
- const parsed = findingsFileSchema.safeParse(json);
141
- if (parsed.success) {
142
- this.findings = parsed.data.findings;
143
- return;
144
- }
145
- console.warn(`findings file invalid; starting with an empty list (${this.filePath})`);
146
- }
147
- persist() {
148
- fs.mkdirSync(path.dirname(this.filePath), { recursive: true });
149
- const payload = { version: FINDINGS_FILE_VERSION, findings: this.findings };
150
- const tmpPath = `${this.filePath}.tmp`;
151
- fs.writeFileSync(tmpPath, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
152
- fs.renameSync(tmpPath, this.filePath);
153
- }
154
- }
155
- //# sourceMappingURL=finding-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"finding-store.js","sourceRoot":"","sources":["../src/finding-store.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export interface PatchResult {
2
- patchText: string;
3
- additions: number;
4
- deletions: number;
5
- }
6
- export declare const computePatchFromContents: (oldContent: string | null, newContent: string | null, oldPath: string | null, newPath: string | null, _oldMode?: string | null, newMode?: string | null, oldId?: string | null, newId?: string | null, isRename?: boolean) => PatchResult;
7
- //# sourceMappingURL=compute-patch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compute-patch.d.ts","sourceRoot":"","sources":["../../src/utils/compute-patch.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,eAAO,MAAM,wBAAwB,GACnC,YAAY,MAAM,GAAG,IAAI,EACzB,YAAY,MAAM,GAAG,IAAI,EACzB,SAAS,MAAM,GAAG,IAAI,EACtB,SAAS,MAAM,GAAG,IAAI,EACtB,WAAU,MAAM,GAAG,IAAW,EAC9B,UAAS,MAAM,GAAG,IAAW,EAC7B,QAAO,MAAM,GAAG,IAAW,EAC3B,QAAO,MAAM,GAAG,IAAW,EAC3B,kBAAgB,KACf,WAwEF,CAAC"}
@@ -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,7 +0,0 @@
1
- export interface ParsedFinding {
2
- severity: "info" | "warn" | "error" | "clear";
3
- title: string;
4
- dedupKey: string | null;
5
- }
6
- export declare const parseOscFindingsFromChunk: (data: string) => ParsedFinding[];
7
- //# sourceMappingURL=parse-osc-finding.d.ts.map
@@ -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,2 +0,0 @@
1
- export declare const resolveCwdForPid: (pid: number) => Promise<string | null>;
2
- //# sourceMappingURL=resolve-cwd-for-pid.d.ts.map
@@ -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,2 +0,0 @@
1
- export declare const createKittyFileRewriter: () => ((data: string) => string);
2
- //# sourceMappingURL=rewrite-kitty-file-transmission.d.ts.map
@@ -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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"}