@monotykamary/localterm-server 2.66.8 → 2.66.10
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/agent-git-status.d.ts +3 -0
- package/dist/agent-git-status.d.ts.map +1 -0
- package/dist/agent-git-status.js +46 -0
- package/dist/agent-git-status.js.map +1 -0
- package/dist/agent-log-utils.d.ts +18 -0
- package/dist/agent-log-utils.d.ts.map +1 -0
- package/dist/agent-log-utils.js +123 -0
- package/dist/agent-log-utils.js.map +1 -0
- package/dist/agent-models.d.ts +4 -0
- package/dist/agent-models.d.ts.map +1 -0
- package/dist/agent-models.js +100 -0
- package/dist/agent-models.js.map +1 -0
- package/dist/agent-runner.d.ts +3 -5
- package/dist/agent-runner.d.ts.map +1 -1
- package/dist/agent-runner.js +8 -522
- package/dist/agent-runner.js.map +1 -1
- package/dist/agent-session-reader.d.ts +3 -0
- package/dist/agent-session-reader.d.ts.map +1 -0
- package/dist/agent-session-reader.js +113 -0
- package/dist/agent-session-reader.js.map +1 -0
- package/dist/build-pty-environment.d.ts +8 -0
- package/dist/build-pty-environment.d.ts.map +1 -0
- package/dist/build-pty-environment.js +44 -0
- package/dist/build-pty-environment.js.map +1 -0
- package/dist/caffeinate-automatic-detector.d.ts +57 -0
- package/dist/caffeinate-automatic-detector.d.ts.map +1 -0
- package/dist/caffeinate-automatic-detector.js +275 -0
- package/dist/caffeinate-automatic-detector.js.map +1 -0
- package/dist/caffeinate-battery-guard.d.ts +35 -0
- package/dist/caffeinate-battery-guard.d.ts.map +1 -0
- package/dist/caffeinate-battery-guard.js +190 -0
- package/dist/caffeinate-battery-guard.js.map +1 -0
- package/dist/caffeinate-manager.d.ts +5 -31
- package/dist/caffeinate-manager.d.ts.map +1 -1
- package/dist/caffeinate-manager.js +55 -400
- package/dist/caffeinate-manager.js.map +1 -1
- package/dist/cdp/cdp-client.d.ts +4 -70
- package/dist/cdp/cdp-client.d.ts.map +1 -1
- package/dist/cdp/cdp-client.js +58 -418
- package/dist/cdp/cdp-client.js.map +1 -1
- package/dist/cdp/cdp-connection.d.ts +72 -0
- package/dist/cdp/cdp-connection.d.ts.map +1 -0
- package/dist/cdp/cdp-connection.js +272 -0
- package/dist/cdp/cdp-connection.js.map +1 -0
- package/dist/cdp/constants.d.ts +6 -0
- package/dist/cdp/constants.d.ts.map +1 -0
- package/dist/cdp/constants.js +9 -0
- package/dist/cdp/constants.js.map +1 -0
- package/dist/cdp/target-registry.d.ts +41 -0
- package/dist/cdp/target-registry.d.ts.map +1 -0
- package/dist/cdp/target-registry.js +118 -0
- package/dist/cdp/target-registry.js.map +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/git-branch-metadata.d.ts +11 -0
- package/dist/git-branch-metadata.d.ts.map +1 -0
- package/dist/git-branch-metadata.js +85 -0
- package/dist/git-branch-metadata.js.map +1 -0
- package/dist/git-diff-cache.d.ts +13 -0
- package/dist/git-diff-cache.d.ts.map +1 -0
- package/dist/git-diff-cache.js +32 -0
- package/dist/git-diff-cache.js.map +1 -0
- package/dist/git-diff-parser.d.ts +15 -0
- package/dist/git-diff-parser.d.ts.map +1 -0
- package/dist/git-diff-parser.js +196 -0
- package/dist/git-diff-parser.js.map +1 -0
- package/dist/git-diff-service.d.ts +10 -0
- package/dist/git-diff-service.d.ts.map +1 -0
- package/dist/git-diff-service.js +395 -0
- package/dist/git-diff-service.js.map +1 -0
- package/dist/git-diff.d.ts +8 -41
- package/dist/git-diff.d.ts.map +1 -1
- package/dist/git-diff.js +5 -944
- package/dist/git-diff.js.map +1 -1
- package/dist/github-pr.d.ts +32 -0
- package/dist/github-pr.d.ts.map +1 -0
- package/dist/github-pr.js +266 -0
- package/dist/github-pr.js.map +1 -0
- package/dist/pi-binary-resolver.d.ts +6 -0
- package/dist/pi-binary-resolver.d.ts.map +1 -0
- package/dist/pi-binary-resolver.js +70 -0
- package/dist/pi-binary-resolver.js.map +1 -0
- package/dist/pi-rpc-client.d.ts +14 -0
- package/dist/pi-rpc-client.d.ts.map +1 -0
- package/dist/pi-rpc-client.js +87 -0
- package/dist/pi-rpc-client.js.map +1 -0
- package/dist/session-client-hub.d.ts +57 -0
- package/dist/session-client-hub.d.ts.map +1 -0
- package/dist/session-client-hub.js +435 -0
- package/dist/session-client-hub.js.map +1 -0
- package/dist/session-command-executor.d.ts +14 -0
- package/dist/session-command-executor.d.ts.map +1 -0
- package/dist/session-command-executor.js +207 -0
- package/dist/session-command-executor.js.map +1 -0
- package/dist/session-git-event-bridge.d.ts +16 -0
- package/dist/session-git-event-bridge.d.ts.map +1 -0
- package/dist/session-git-event-bridge.js +56 -0
- package/dist/session-git-event-bridge.js.map +1 -0
- package/dist/session-lifecycle-policy.d.ts +15 -0
- package/dist/session-lifecycle-policy.d.ts.map +1 -0
- package/dist/session-lifecycle-policy.js +105 -0
- package/dist/session-lifecycle-policy.js.map +1 -0
- package/dist/session-manager.d.ts +11 -42
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +72 -987
- package/dist/session-manager.js.map +1 -1
- package/dist/session-output-coordinator.d.ts +21 -0
- package/dist/session-output-coordinator.d.ts.map +1 -0
- package/dist/session-output-coordinator.js +134 -0
- package/dist/session-output-coordinator.js.map +1 -0
- package/dist/session-output-transport.d.ts +22 -0
- package/dist/session-output-transport.d.ts.map +1 -0
- package/dist/session-output-transport.js +160 -0
- package/dist/session-output-transport.js.map +1 -0
- package/dist/session.d.ts +0 -4
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +11 -258
- package/dist/session.js.map +1 -1
- package/dist/shell-hook-builder.d.ts +16 -0
- package/dist/shell-hook-builder.d.ts.map +1 -0
- package/dist/shell-hook-builder.js +230 -0
- package/dist/shell-hook-builder.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import fsPromises from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { GIT_BINARY_SNIFF_BYTES, GIT_EMPTY_TREE_HASH, GIT_MAX_PATCH_BYTES_PER_FILE, GIT_MAX_TOTAL_PATCH_BYTES, GIT_MAX_UNTRACKED_FILE_BYTES, GIT_MAX_UNTRACKED_FILES, } from "./constants.js";
|
|
5
|
+
import { getCurrentBranch, isGitRepo, resolveDefaultBase, verifyRef, } from "./git-branch-metadata.js";
|
|
6
|
+
import { readDiffCache, writeDiffCache } from "./git-diff-cache.js";
|
|
7
|
+
import { buildUntrackedPatch, countLines, indexPatchesByPath, parseNameStatusZ, parseNumstatZ, } from "./git-diff-parser.js";
|
|
8
|
+
import { detectPrDeduped, readPrCache } from "./github-pr.js";
|
|
9
|
+
import { runGit } from "./utils/run-git.js";
|
|
10
|
+
const WORKING_OPTIONS = { mode: "working" };
|
|
11
|
+
const EMPTY_SUMMARY = {
|
|
12
|
+
isRepo: false,
|
|
13
|
+
files: 0,
|
|
14
|
+
additions: 0,
|
|
15
|
+
deletions: 0,
|
|
16
|
+
binaries: 0,
|
|
17
|
+
branch: null,
|
|
18
|
+
};
|
|
19
|
+
const runGitText = async (cwd, args) => {
|
|
20
|
+
const result = await runGit(cwd, args);
|
|
21
|
+
return result.stdout.toString("utf8");
|
|
22
|
+
};
|
|
23
|
+
// `git diff` flags shared by every diff invocation so numstat, name-status and
|
|
24
|
+
// patch all walk the same diff queue (same rename detection, same file order).
|
|
25
|
+
const DIFF_RENAME_FLAG = "--find-renames";
|
|
26
|
+
// working mode compares against HEAD (or the empty tree when the branch is
|
|
27
|
+
// unborn). branch mode compares against the merge-base of HEAD and the base
|
|
28
|
+
// ref, so only changes since the branches diverged are shown.
|
|
29
|
+
const resolveDiffBaseRef = async (cwd) => {
|
|
30
|
+
const result = await runGit(cwd, ["rev-parse", "--verify", "-q", "HEAD"]);
|
|
31
|
+
return result.exitCode === 0 ? "HEAD" : GIT_EMPTY_TREE_HASH;
|
|
32
|
+
};
|
|
33
|
+
const resolveEffectiveBaseRef = async (cwd, options) => {
|
|
34
|
+
if (options.mode !== "branch")
|
|
35
|
+
return resolveDiffBaseRef(cwd);
|
|
36
|
+
let baseRef = options.base?.trim() || null;
|
|
37
|
+
if (baseRef && !(await verifyRef(cwd, baseRef)))
|
|
38
|
+
baseRef = null;
|
|
39
|
+
// No explicit user override: a fork PR compares against its upstream base
|
|
40
|
+
// (the PR's base repo's default branch), not the fork's own default. The PR is
|
|
41
|
+
// read from the per-(cwd, branch) cache populated by getGitBranchPr — no GitHub
|
|
42
|
+
// round-trip in the warm case, so the diff stays local and the cache's branch
|
|
43
|
+
// key means a branch switch naturally misses. A cold cache (the viewer opened
|
|
44
|
+
// branch mode before getGitBranchPr landed, or a refresh raced it) resolves the
|
|
45
|
+
// PR inline via detectPrDeduped — which shares any in-flight getGitBranchPr
|
|
46
|
+
// call — rather than silently falling back to the fork's origin, which would
|
|
47
|
+
// mismatch the PR's base. A cached null (known no-PR) skips; so does a PR whose
|
|
48
|
+
// base resolves no usable ref; both degrade to the repo default below.
|
|
49
|
+
if (!baseRef) {
|
|
50
|
+
const currentBranch = await getCurrentBranch(cwd);
|
|
51
|
+
if (currentBranch) {
|
|
52
|
+
let cachedPr = readPrCache(cwd, currentBranch);
|
|
53
|
+
if (cachedPr === undefined) {
|
|
54
|
+
await detectPrDeduped(cwd);
|
|
55
|
+
cachedPr = readPrCache(cwd, currentBranch);
|
|
56
|
+
}
|
|
57
|
+
// detectPr resolved (and fetched, if needed) the base ref alongside the
|
|
58
|
+
// GitHub call, so the diff path reads it warm — no remote resolution here.
|
|
59
|
+
if (cachedPr?.baseRef)
|
|
60
|
+
baseRef = cachedPr.baseRef;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (!baseRef)
|
|
64
|
+
baseRef = (await resolveDefaultBase(cwd))?.ref ?? null;
|
|
65
|
+
if (!baseRef)
|
|
66
|
+
return null;
|
|
67
|
+
const mergeBase = await runGit(cwd, ["merge-base", baseRef, "HEAD"]);
|
|
68
|
+
if (mergeBase.exitCode === 0)
|
|
69
|
+
return mergeBase.stdout.toString("utf8").trim();
|
|
70
|
+
if (!(await verifyRef(cwd, baseRef)))
|
|
71
|
+
return null;
|
|
72
|
+
return runGitText(cwd, ["rev-parse", "--verify", baseRef]);
|
|
73
|
+
};
|
|
74
|
+
const readUntrackedFile = async (cwd, filePath) => {
|
|
75
|
+
const absolutePath = path.join(cwd, filePath);
|
|
76
|
+
try {
|
|
77
|
+
const stat = await fsPromises.stat(absolutePath);
|
|
78
|
+
if (!stat.isFile())
|
|
79
|
+
return null;
|
|
80
|
+
const bytesToRead = Math.min(stat.size, GIT_MAX_UNTRACKED_FILE_BYTES);
|
|
81
|
+
const buffer = Buffer.alloc(bytesToRead);
|
|
82
|
+
const handle = await fsPromises.open(absolutePath, "r");
|
|
83
|
+
try {
|
|
84
|
+
const { buffer: readBuffer } = await handle.read(buffer, 0, bytesToRead, 0);
|
|
85
|
+
const sniffEnd = Math.min(readBuffer.length, GIT_BINARY_SNIFF_BYTES);
|
|
86
|
+
const binary = readBuffer.subarray(0, sniffEnd).includes(0);
|
|
87
|
+
const truncated = stat.size > GIT_MAX_UNTRACKED_FILE_BYTES;
|
|
88
|
+
const content = binary ? null : truncated ? null : readBuffer.toString("utf8");
|
|
89
|
+
const lines = binary ? 0 : content ? countLines(content) : 0;
|
|
90
|
+
return { path: filePath, binary, lines, content, truncated };
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
await handle.close();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const collectUntrackedFiles = async (cwd) => {
|
|
101
|
+
const result = await runGit(cwd, ["ls-files", "--others", "--exclude-standard", "-z"]);
|
|
102
|
+
if (result.exitCode !== 0)
|
|
103
|
+
return [];
|
|
104
|
+
const paths = result.stdout.toString("utf8").split("\0").filter(Boolean);
|
|
105
|
+
const files = [];
|
|
106
|
+
for (const filePath of paths) {
|
|
107
|
+
if (files.length >= GIT_MAX_UNTRACKED_FILES)
|
|
108
|
+
break;
|
|
109
|
+
const file = await readUntrackedFile(cwd, filePath);
|
|
110
|
+
if (file)
|
|
111
|
+
files.push(file);
|
|
112
|
+
}
|
|
113
|
+
return files;
|
|
114
|
+
};
|
|
115
|
+
// One full diff pass for `(cwd)` against `baseRef`. Three parallel `git diff`
|
|
116
|
+
// invocations (numstat for counts+binary, name-status for the status letter +
|
|
117
|
+
// rename old path, patch for the body) walk the same diff queue. numstat and
|
|
118
|
+
// name-status are NUL-delimited and unambiguous; they're the source of truth
|
|
119
|
+
// for the file list. The patch output is keyed by path rather than paired
|
|
120
|
+
// positionally, because a single numstat entry can span several `diff --git`
|
|
121
|
+
// blocks (a symlink is deleted as mode 120000 and re-added as a regular file:
|
|
122
|
+
// git emits that as a deletion + an addition sharing one path, so there's no
|
|
123
|
+
// 1:1 with numstat entries). Untracked files are folded in from `ls-files`
|
|
124
|
+
// with synthesized patches (git's own diff never lists untracked files).
|
|
125
|
+
const buildDiffCache = async (cwd, baseRef) => {
|
|
126
|
+
const [numstatRes, nameStatusRes, patchRes] = await Promise.all([
|
|
127
|
+
runGit(cwd, [
|
|
128
|
+
"-c",
|
|
129
|
+
"core.quotepath=false",
|
|
130
|
+
"diff",
|
|
131
|
+
DIFF_RENAME_FLAG,
|
|
132
|
+
"--numstat",
|
|
133
|
+
"-z",
|
|
134
|
+
baseRef,
|
|
135
|
+
]),
|
|
136
|
+
runGit(cwd, [
|
|
137
|
+
"-c",
|
|
138
|
+
"core.quotepath=false",
|
|
139
|
+
"diff",
|
|
140
|
+
DIFF_RENAME_FLAG,
|
|
141
|
+
"--name-status",
|
|
142
|
+
"-z",
|
|
143
|
+
baseRef,
|
|
144
|
+
]),
|
|
145
|
+
runGit(cwd, ["-c", "core.quotepath=false", "diff", DIFF_RENAME_FLAG, "--patch", baseRef]),
|
|
146
|
+
]);
|
|
147
|
+
if (numstatRes.exitCode !== 0 || patchRes.exitCode !== 0)
|
|
148
|
+
return null;
|
|
149
|
+
const numstat = parseNumstatZ(numstatRes.stdout.toString("utf8"));
|
|
150
|
+
const statuses = parseNameStatusZ(nameStatusRes.stdout.toString("utf8"));
|
|
151
|
+
const patchesByPath = indexPatchesByPath(patchRes.stdout.toString("utf8"));
|
|
152
|
+
const untracked = await collectUntrackedFiles(cwd);
|
|
153
|
+
const fileMeta = [];
|
|
154
|
+
const filePatchByPath = new Map();
|
|
155
|
+
const fileBinaryByPath = new Map();
|
|
156
|
+
const filePatchOmittedByPath = new Map();
|
|
157
|
+
let totalPatchBytes = 0;
|
|
158
|
+
let additions = 0;
|
|
159
|
+
let deletions = 0;
|
|
160
|
+
let binaries = 0;
|
|
161
|
+
for (let index = 0; index < numstat.length; index += 1) {
|
|
162
|
+
const entry = numstat[index];
|
|
163
|
+
const status = statuses.get(entry.path) ?? "modified";
|
|
164
|
+
const oldPath = status === "renamed" ? entry.oldPath : null;
|
|
165
|
+
let patchText = null;
|
|
166
|
+
let patchOmitted = false;
|
|
167
|
+
if (entry.binary) {
|
|
168
|
+
binaries += 1;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
const rawPatch = patchesByPath.get(entry.path) ?? null;
|
|
172
|
+
if (rawPatch === null ||
|
|
173
|
+
rawPatch.length > GIT_MAX_PATCH_BYTES_PER_FILE ||
|
|
174
|
+
totalPatchBytes + rawPatch.length > GIT_MAX_TOTAL_PATCH_BYTES) {
|
|
175
|
+
patchOmitted = true;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
patchText = rawPatch;
|
|
179
|
+
totalPatchBytes += rawPatch.length;
|
|
180
|
+
}
|
|
181
|
+
additions += entry.additions;
|
|
182
|
+
deletions += entry.deletions;
|
|
183
|
+
}
|
|
184
|
+
fileMeta.push({
|
|
185
|
+
path: entry.path,
|
|
186
|
+
oldPath,
|
|
187
|
+
status,
|
|
188
|
+
additions: entry.additions,
|
|
189
|
+
deletions: entry.deletions,
|
|
190
|
+
binary: entry.binary,
|
|
191
|
+
});
|
|
192
|
+
filePatchByPath.set(entry.path, patchText);
|
|
193
|
+
fileBinaryByPath.set(entry.path, entry.binary);
|
|
194
|
+
filePatchOmittedByPath.set(entry.path, patchOmitted);
|
|
195
|
+
}
|
|
196
|
+
for (const file of untracked) {
|
|
197
|
+
const patch = file.binary
|
|
198
|
+
? null
|
|
199
|
+
: file.truncated || file.content === null
|
|
200
|
+
? null
|
|
201
|
+
: buildUntrackedPatch(file.content);
|
|
202
|
+
let patchOmitted = file.truncated;
|
|
203
|
+
if (patch !== null) {
|
|
204
|
+
if (patch.length > GIT_MAX_PATCH_BYTES_PER_FILE ||
|
|
205
|
+
totalPatchBytes + patch.length > GIT_MAX_TOTAL_PATCH_BYTES) {
|
|
206
|
+
patchOmitted = true;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
totalPatchBytes += patch.length;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const fileAdditions = file.binary ? 0 : file.lines;
|
|
213
|
+
if (file.binary)
|
|
214
|
+
binaries += 1;
|
|
215
|
+
additions += fileAdditions;
|
|
216
|
+
fileMeta.push({
|
|
217
|
+
path: file.path,
|
|
218
|
+
oldPath: null,
|
|
219
|
+
status: "untracked",
|
|
220
|
+
additions: fileAdditions,
|
|
221
|
+
deletions: 0,
|
|
222
|
+
binary: file.binary,
|
|
223
|
+
});
|
|
224
|
+
filePatchByPath.set(file.path, patchOmitted ? null : patch);
|
|
225
|
+
fileBinaryByPath.set(file.path, file.binary);
|
|
226
|
+
filePatchOmittedByPath.set(file.path, patchOmitted);
|
|
227
|
+
}
|
|
228
|
+
const summary = {
|
|
229
|
+
isRepo: true,
|
|
230
|
+
files: fileMeta.length,
|
|
231
|
+
additions,
|
|
232
|
+
deletions,
|
|
233
|
+
binaries,
|
|
234
|
+
branch: await getCurrentBranch(cwd),
|
|
235
|
+
};
|
|
236
|
+
return {
|
|
237
|
+
summary,
|
|
238
|
+
fileMeta,
|
|
239
|
+
filePatchByPath,
|
|
240
|
+
fileBinaryByPath,
|
|
241
|
+
filePatchOmittedByPath,
|
|
242
|
+
builtAt: Date.now(),
|
|
243
|
+
};
|
|
244
|
+
};
|
|
245
|
+
const ensureDiffCache = async (cwd, options) => {
|
|
246
|
+
// Read the cache before resolving the base ref — that resolution does git work
|
|
247
|
+
// (rev-parse + merge-base) on every call, so for the per-file patch endpoint
|
|
248
|
+
// (where the cache is warm on nearly every request) checking first keeps it a
|
|
249
|
+
// pure map lookup with no subprocess.
|
|
250
|
+
const cached = readDiffCache(cwd, options.mode, options.base ?? null);
|
|
251
|
+
if (cached)
|
|
252
|
+
return cached;
|
|
253
|
+
const baseRef = await resolveEffectiveBaseRef(cwd, options);
|
|
254
|
+
if (baseRef === null)
|
|
255
|
+
return null;
|
|
256
|
+
const cache = await buildDiffCache(cwd, baseRef);
|
|
257
|
+
if (cache)
|
|
258
|
+
writeDiffCache(cwd, options.mode, options.base ?? null, cache);
|
|
259
|
+
return cache;
|
|
260
|
+
};
|
|
261
|
+
export const getGitDiffSummary = async (cwd, options = WORKING_OPTIONS) => {
|
|
262
|
+
const cached = readDiffCache(cwd, options.mode, options.base ?? null);
|
|
263
|
+
if (cached)
|
|
264
|
+
return cached.summary;
|
|
265
|
+
if (!(await isGitRepo(cwd)))
|
|
266
|
+
return EMPTY_SUMMARY;
|
|
267
|
+
try {
|
|
268
|
+
const baseRef = await resolveEffectiveBaseRef(cwd, options);
|
|
269
|
+
if (baseRef === null)
|
|
270
|
+
return { ...EMPTY_SUMMARY, isRepo: true };
|
|
271
|
+
const branch = await getCurrentBranch(cwd);
|
|
272
|
+
// Summary is pushed on every git-dirty signal, so it stays on the cheap
|
|
273
|
+
// numstat-only path (no patch) unless a cache is already warm.
|
|
274
|
+
const numstatRes = await runGit(cwd, [
|
|
275
|
+
"-c",
|
|
276
|
+
"core.quotepath=false",
|
|
277
|
+
"diff",
|
|
278
|
+
DIFF_RENAME_FLAG,
|
|
279
|
+
"--numstat",
|
|
280
|
+
"-z",
|
|
281
|
+
baseRef,
|
|
282
|
+
]);
|
|
283
|
+
if (numstatRes.exitCode !== 0)
|
|
284
|
+
return { ...EMPTY_SUMMARY, isRepo: true };
|
|
285
|
+
let additions = 0;
|
|
286
|
+
let deletions = 0;
|
|
287
|
+
let binaries = 0;
|
|
288
|
+
let fileCount = 0;
|
|
289
|
+
for (const entry of parseNumstatZ(numstatRes.stdout.toString("utf8"))) {
|
|
290
|
+
fileCount += 1;
|
|
291
|
+
if (entry.binary) {
|
|
292
|
+
binaries += 1;
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
additions += entry.additions;
|
|
296
|
+
deletions += entry.deletions;
|
|
297
|
+
}
|
|
298
|
+
const untracked = await collectUntrackedFiles(cwd);
|
|
299
|
+
for (const file of untracked) {
|
|
300
|
+
fileCount += 1;
|
|
301
|
+
if (file.binary) {
|
|
302
|
+
binaries += 1;
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
additions += file.lines;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return { isRepo: true, files: fileCount, additions, deletions, binaries, branch };
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return { ...EMPTY_SUMMARY, isRepo: true };
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
export const getGitDiff = async (cwd, options = WORKING_OPTIONS) => {
|
|
315
|
+
const cached = readDiffCache(cwd, options.mode, options.base ?? null);
|
|
316
|
+
if (cached) {
|
|
317
|
+
return { isRepo: true, files: mapCacheFiles(cached) };
|
|
318
|
+
}
|
|
319
|
+
if (!(await isGitRepo(cwd)))
|
|
320
|
+
return { isRepo: false, files: [] };
|
|
321
|
+
const cache = await ensureDiffCache(cwd, options);
|
|
322
|
+
if (!cache)
|
|
323
|
+
return { isRepo: true, files: [] };
|
|
324
|
+
return { isRepo: true, files: mapCacheFiles(cache) };
|
|
325
|
+
};
|
|
326
|
+
const mapCacheFiles = (cache) => cache.fileMeta.map((meta) => ({
|
|
327
|
+
path: meta.path,
|
|
328
|
+
oldPath: meta.oldPath,
|
|
329
|
+
status: meta.status,
|
|
330
|
+
additions: meta.additions,
|
|
331
|
+
deletions: meta.deletions,
|
|
332
|
+
binary: meta.binary,
|
|
333
|
+
patch: cache.filePatchByPath.get(meta.path) ?? null,
|
|
334
|
+
patchOmitted: cache.filePatchOmittedByPath.get(meta.path) ?? false,
|
|
335
|
+
}));
|
|
336
|
+
export const getGitDiffFiles = async (cwd, options = WORKING_OPTIONS) => {
|
|
337
|
+
const cached = readDiffCache(cwd, options.mode, options.base ?? null);
|
|
338
|
+
if (cached)
|
|
339
|
+
return { isRepo: true, files: cached.fileMeta };
|
|
340
|
+
if (!(await isGitRepo(cwd)))
|
|
341
|
+
return { isRepo: false, files: [] };
|
|
342
|
+
const cache = await ensureDiffCache(cwd, options);
|
|
343
|
+
if (!cache)
|
|
344
|
+
return { isRepo: true, files: [] };
|
|
345
|
+
return { isRepo: true, files: cache.fileMeta };
|
|
346
|
+
};
|
|
347
|
+
export const getGitDiffFilePatch = async (cwd, requestedPath, options = WORKING_OPTIONS) => {
|
|
348
|
+
const empty = { patch: null, patchOmitted: false, binary: false };
|
|
349
|
+
const cache = await ensureDiffCache(cwd, options);
|
|
350
|
+
if (!cache)
|
|
351
|
+
return empty;
|
|
352
|
+
// O(1) lookup: the full diff pass that the per-file patch needs was already
|
|
353
|
+
// computed once for this (cwd, mode, base) and cached. This was the O(N²)
|
|
354
|
+
// regression — each per-file request re-ran the whole-tree diff + a jsdiff
|
|
355
|
+
// for every file. Now it's a map lookup.
|
|
356
|
+
if (cache.filePatchByPath.has(requestedPath)) {
|
|
357
|
+
return {
|
|
358
|
+
patch: cache.filePatchByPath.get(requestedPath) ?? null,
|
|
359
|
+
patchOmitted: cache.filePatchOmittedByPath.get(requestedPath) ?? false,
|
|
360
|
+
binary: cache.fileBinaryByPath.get(requestedPath) ?? false,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
// An untracked path the cache didn't cover (created between the cache build
|
|
364
|
+
// and this request) falls back to synthesizing from the working tree.
|
|
365
|
+
return getGitDiffFilePatchFromWorkingTree(cwd, requestedPath);
|
|
366
|
+
};
|
|
367
|
+
const getGitDiffFilePatchFromWorkingTree = async (cwd, requestedPath) => {
|
|
368
|
+
const empty = { patch: null, patchOmitted: false, binary: false };
|
|
369
|
+
const absolutePath = path.join(cwd, requestedPath);
|
|
370
|
+
try {
|
|
371
|
+
const stat = fs.statSync(absolutePath);
|
|
372
|
+
if (!stat.isFile())
|
|
373
|
+
return empty;
|
|
374
|
+
const bytesToRead = Math.min(stat.size, GIT_MAX_UNTRACKED_FILE_BYTES);
|
|
375
|
+
const buffer = Buffer.alloc(bytesToRead);
|
|
376
|
+
const handle = fs.openSync(absolutePath, "r");
|
|
377
|
+
fs.readSync(handle, buffer, 0, bytesToRead, 0);
|
|
378
|
+
fs.closeSync(handle);
|
|
379
|
+
const sniffEnd = Math.min(buffer.length, GIT_BINARY_SNIFF_BYTES);
|
|
380
|
+
if (buffer.subarray(0, sniffEnd).includes(0)) {
|
|
381
|
+
return { patch: null, patchOmitted: false, binary: true };
|
|
382
|
+
}
|
|
383
|
+
const truncated = stat.size > GIT_MAX_UNTRACKED_FILE_BYTES;
|
|
384
|
+
const content = truncated ? null : buffer.toString("utf8");
|
|
385
|
+
const patch = truncated || content === null ? null : buildUntrackedPatch(content);
|
|
386
|
+
if (patch !== null && patch.length > GIT_MAX_PATCH_BYTES_PER_FILE) {
|
|
387
|
+
return { patch: null, patchOmitted: true, binary: false };
|
|
388
|
+
}
|
|
389
|
+
return { patch, patchOmitted: truncated, binary: false };
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
return empty;
|
|
393
|
+
}
|
|
394
|
+
};
|
|
395
|
+
//# sourceMappingURL=git-diff-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-diff-service.js","sourceRoot":"","sources":["../src/git-diff-service.ts"],"names":[],"mappings":"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"}
|
package/dist/git-diff.d.ts
CHANGED
|
@@ -1,42 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export interface NumstatEntry {
|
|
10
|
-
path: string;
|
|
11
|
-
oldPath: string | null;
|
|
12
|
-
additions: number;
|
|
13
|
-
deletions: number;
|
|
14
|
-
binary: boolean;
|
|
15
|
-
}
|
|
16
|
-
export declare const parseNumstatZ: (raw: string) => NumstatEntry[];
|
|
17
|
-
export declare const parseNameStatusZ: (raw: string) => Map<string, GitDiffFileStatus>;
|
|
18
|
-
export declare const getGitDiffSummary: (cwd: string, options?: GitDiffOptions) => Promise<GitDiffSummary>;
|
|
19
|
-
export declare const getGitDiff: (cwd: string, options?: GitDiffOptions) => Promise<GitDiffResponse>;
|
|
20
|
-
export declare const getGitDiffFiles: (cwd: string, options?: GitDiffOptions) => Promise<GitDiffFileListResponse>;
|
|
21
|
-
export declare const getGitDiffFilePatch: (cwd: string, requestedPath: string, options?: GitDiffOptions) => Promise<GitDiffFilePatch>;
|
|
22
|
-
interface PrApiData {
|
|
23
|
-
number: number;
|
|
24
|
-
title: string;
|
|
25
|
-
baseRefName: string;
|
|
26
|
-
url: string | null;
|
|
27
|
-
state: GitBranchPrState;
|
|
28
|
-
isDraft: boolean;
|
|
29
|
-
mergeable: GitBranchPrMergeable;
|
|
30
|
-
headOwner: string | null;
|
|
31
|
-
baseRepoFullName: string | null;
|
|
32
|
-
mergedAt: string | null;
|
|
33
|
-
}
|
|
34
|
-
export interface PrFetcher {
|
|
35
|
-
list(slug: string, branch: string, state: string, perPage: number): Promise<PrApiData[]>;
|
|
36
|
-
}
|
|
37
|
-
export declare const setPrFetcher: (fetcher: PrFetcher) => void;
|
|
38
|
-
export declare const listGithubRemoteSlugs: (cwd: string) => Promise<string[]>;
|
|
39
|
-
export declare const getGitBranchInfo: (cwd: string) => Promise<GitBranchInfo>;
|
|
40
|
-
export declare const getGitBranchPr: (cwd: string) => Promise<GitBranchPr | null>;
|
|
41
|
-
export {};
|
|
1
|
+
export { getGitBranchInfo } from "./git-branch-metadata.js";
|
|
2
|
+
export { invalidateGitDiffCache } from "./git-diff-cache.js";
|
|
3
|
+
export { buildUntrackedPatch, parseNameStatusZ, parseNumstatZ, splitPatchByFile, } from "./git-diff-parser.js";
|
|
4
|
+
export { getGitDiff, getGitDiffFilePatch, getGitDiffFiles, getGitDiffSummary, } from "./git-diff-service.js";
|
|
5
|
+
export { getGitBranchPr, listGithubRemoteSlugs, setPrFetcher } from "./github-pr.js";
|
|
6
|
+
export type { NumstatEntry } from "./git-diff-parser.js";
|
|
7
|
+
export type { GitDiffOptions } from "./git-diff-service.js";
|
|
8
|
+
export type { PrFetcher } from "./github-pr.js";
|
|
42
9
|
//# sourceMappingURL=git-diff.d.ts.map
|
package/dist/git-diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-diff.d.ts","sourceRoot":"","sources":["../src/git-diff.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git-diff.d.ts","sourceRoot":"","sources":["../src/git-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACrF,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|