nawabari 0.1.0 → 0.2.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.
package/dist/git.js CHANGED
@@ -2,44 +2,94 @@ import { execFileSync } from "node:child_process";
2
2
  import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import { SessionRegistryError } from "./errors.js";
5
- export const defaultGit = {
6
- run(args, cwd) {
5
+ import { CHECKPOINT_MAX_PATHS } from "./operation-authorization.js";
6
+ export const GIT_COMMAND_TIMEOUT_MS = 10_000;
7
+ export const GIT_COMMAND_MAX_OUTPUT_BYTES = 64 * 1024;
8
+ const MAX_ERROR_DETAIL_LENGTH = 4_096;
9
+ export function createGitCommandRunner(options = {}) {
10
+ const executable = options.executable ?? "git";
11
+ const timeoutMs = options.timeoutMs ?? GIT_COMMAND_TIMEOUT_MS;
12
+ const maxOutputBytes = options.maxOutputBytes ?? GIT_COMMAND_MAX_OUTPUT_BYTES;
13
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1) {
14
+ throw new RangeError("Git command timeout must be a positive safe integer");
15
+ }
16
+ if (!Number.isSafeInteger(maxOutputBytes) || maxOutputBytes < 1) {
17
+ throw new RangeError("Git command output limit must be a positive safe integer");
18
+ }
19
+ const execute = (args, cwd) => {
20
+ const command = args.map((argument) => boundedDetail(argument)).join(" ");
7
21
  try {
8
- return execFileSync("git", [...args], {
22
+ return String(execFileSync(executable, [...args], {
9
23
  cwd,
10
24
  encoding: "utf8",
25
+ maxBuffer: maxOutputBytes,
11
26
  stdio: ["ignore", "pipe", "pipe"],
12
- timeout: 10_000,
27
+ timeout: timeoutMs,
13
28
  env: {
14
29
  ...process.env,
30
+ ...options.env,
15
31
  GIT_TERMINAL_PROMPT: "0",
16
32
  GIT_OPTIONAL_LOCKS: "0",
17
33
  },
18
- }).trim();
34
+ }));
19
35
  }
20
36
  catch (error) {
21
- throw new SessionRegistryError("GIT_COMMAND_FAILED", `git ${args.join(" ")} failed in ${cwd}`, { command: args.join(" "), cwd }, error);
37
+ throw gitProcessError(error, command, cwd);
22
38
  }
23
- },
24
- };
39
+ };
40
+ return Object.freeze({
41
+ run(args, cwd) {
42
+ return execute(args, cwd).trim();
43
+ },
44
+ runRaw(args, cwd) {
45
+ return execute(args, cwd);
46
+ },
47
+ });
48
+ }
49
+ export const defaultGit = createGitCommandRunner();
25
50
  export function resolveRepositoryContext(options = {}) {
26
- const cwd = canonicalDirectory(options.cwd ?? process.cwd(), "REPOSITORY_IDENTITY_AMBIGUOUS");
51
+ const cwd = canonicalDirectory(options.cwd ?? process.cwd(), "REPOSITORY_IDENTITY_AMBIGUOUS", "MISSING_WORKTREE");
27
52
  const git = options.git ?? defaultGit;
28
53
  let worktreePath;
29
54
  let commonGitDirectory;
30
55
  try {
31
56
  worktreePath = canonicalDirectory(git.run(["rev-parse", "--show-toplevel"], cwd), "REPOSITORY_IDENTITY_AMBIGUOUS");
32
57
  const commonGitDirectoryOutput = git.run(["rev-parse", "--git-common-dir"], cwd);
58
+ if (commonGitDirectoryOutput.length === 0) {
59
+ throw new SessionRegistryError("REPOSITORY_IDENTITY_AMBIGUOUS", "Git returned an empty common directory");
60
+ }
33
61
  const commonGitDirectoryPath = path.isAbsolute(commonGitDirectoryOutput)
34
62
  ? commonGitDirectoryOutput
35
63
  : path.resolve(cwd, commonGitDirectoryOutput);
36
64
  commonGitDirectory = canonicalDirectory(commonGitDirectoryPath, "REPOSITORY_IDENTITY_AMBIGUOUS");
65
+ const gitDirectoryOutput = git.run(["rev-parse", "--git-dir"], cwd);
66
+ if (gitDirectoryOutput.length === 0) {
67
+ throw new SessionRegistryError("REPOSITORY_IDENTITY_AMBIGUOUS", "Git returned an empty Git directory");
68
+ }
69
+ const gitDirectoryPath = path.isAbsolute(gitDirectoryOutput)
70
+ ? gitDirectoryOutput
71
+ : path.resolve(cwd, gitDirectoryOutput);
72
+ const gitDirectory = canonicalDirectory(gitDirectoryPath, "REPOSITORY_IDENTITY_AMBIGUOUS");
73
+ if (!isPathInside(commonGitDirectory, gitDirectory)) {
74
+ throw new SessionRegistryError("REPOSITORY_IDENTITY_AMBIGUOUS", "Git worktree metadata is outside the repository common directory", { commonGitDirectory, gitDirectory });
75
+ }
37
76
  }
38
77
  catch (error) {
39
- if (error instanceof SessionRegistryError && error.code === "REPOSITORY_IDENTITY_AMBIGUOUS") {
78
+ if (error instanceof SessionRegistryError) {
79
+ if (error.code === "REPOSITORY_IDENTITY_AMBIGUOUS" ||
80
+ error.code === "GIT_SPAWN_FAILED" ||
81
+ error.code === "GIT_TIMEOUT" ||
82
+ error.code === "GIT_OUTPUT_LIMIT" ||
83
+ error.code === "PHYSICAL_OBSERVATION_UNAVAILABLE") {
84
+ throw error;
85
+ }
86
+ if (error.code === "GIT_COMMAND_FAILED" &&
87
+ (error.details.exitCode === undefined || error.details.exitCode === 128)) {
88
+ throw new SessionRegistryError("NOT_A_GIT_REPOSITORY", `Could not resolve a repository from ${cwd}`, { cwd }, error);
89
+ }
40
90
  throw error;
41
91
  }
42
- throw new SessionRegistryError("NOT_A_GIT_REPOSITORY", `Could not resolve a repository from ${cwd}`, { cwd }, error);
92
+ throw new SessionRegistryError("PHYSICAL_OBSERVATION_UNAVAILABLE", `Could not observe repository identity from ${cwd}`, { cwd }, error);
43
93
  }
44
94
  return Object.freeze({
45
95
  repositoryId: commonGitDirectory,
@@ -47,47 +97,256 @@ export function resolveRepositoryContext(options = {}) {
47
97
  worktreePath,
48
98
  });
49
99
  }
100
+ function readBranchOrDetached(git, cwd) {
101
+ try {
102
+ return readCurrentBranch(git, cwd);
103
+ }
104
+ catch (error) {
105
+ if (error instanceof SessionRegistryError &&
106
+ error.code === "WORKTREE_IDENTITY_AMBIGUOUS" &&
107
+ error.details.reason === "detached-head") {
108
+ throw new SessionRegistryError("DETACHED_HEAD", `The worktree at ${cwd} has no branch`, { worktree: cwd }, error);
109
+ }
110
+ throw error;
111
+ }
112
+ }
50
113
  export function resolveWorktreeIdentity(options = {}) {
51
- const repository = options.repository ?? resolveRepositoryContext(options);
114
+ let context;
115
+ try {
116
+ context = verifyPhysicalExecutionContext(options);
117
+ }
118
+ catch (error) {
119
+ // Keep the pre-#37 public resolver code while the reusable verifier exposes
120
+ // the more precise detached-head reason to governed callers.
121
+ if (error instanceof SessionRegistryError && error.code === "DETACHED_HEAD") {
122
+ throw new SessionRegistryError("WORKTREE_IDENTITY_AMBIGUOUS", error.message, error.details, error);
123
+ }
124
+ throw error;
125
+ }
126
+ return Object.freeze({
127
+ worktreeId: context.worktreeId,
128
+ worktreePath: context.worktreePath,
129
+ branchId: context.branchId,
130
+ branchName: context.branchName,
131
+ headId: context.headId,
132
+ });
133
+ }
134
+ /**
135
+ * Verify the physical repository/worktree facts used by governed operations.
136
+ * Every identity in the returned value is observed from Git or canonicalized
137
+ * filesystem state; caller values are expectations only.
138
+ */
139
+ export function verifyPhysicalExecutionContext(options = {}) {
52
140
  const git = options.git ?? defaultGit;
53
- const branchName = options.branchName ?? readCurrentBranch(git, repository.worktreePath);
141
+ const targetPath = options.worktreePath ?? options.cwd ?? options.repository?.worktreePath ?? process.cwd();
142
+ const expectedWorktreePath = options.expectedWorktreePath ??
143
+ options.worktreePath ??
144
+ (options.cwd === undefined && options.repository !== undefined ? options.repository.worktreePath : undefined);
145
+ assertDirectoryPath(targetPath);
146
+ const repository = resolveRepositoryContext({ cwd: targetPath, git });
147
+ if (options.repository !== undefined && repository.repositoryId !== options.repository.repositoryId) {
148
+ throw new SessionRegistryError("REPOSITORY_MISMATCH", "The observed Git common directory does not match the expected repository", {
149
+ expectedRepositoryId: options.repository.repositoryId,
150
+ actualRepositoryId: repository.repositoryId,
151
+ });
152
+ }
153
+ if (expectedWorktreePath !== undefined) {
154
+ const expected = canonicalDirectory(expectedWorktreePath, "WORKTREE_IDENTITY_AMBIGUOUS", "MISSING_WORKTREE");
155
+ if (expected !== repository.worktreePath) {
156
+ throw new SessionRegistryError("WORKTREE_MISMATCH", "The observed Git worktree does not match the expected worktree", { expectedWorktree: expected, actualWorktree: repository.worktreePath });
157
+ }
158
+ }
159
+ const branchName = readBranchOrDetached(git, repository.worktreePath);
54
160
  const branchId = normalizeBranchId(branchName);
161
+ const headId = readCurrentHead(git, repository.worktreePath);
162
+ const worktrees = listGitWorktrees(git, repository.worktreePath);
163
+ const matches = worktrees.filter((worktree) => worktree.worktreePath === repository.worktreePath);
164
+ if (matches.length === 0) {
165
+ throw new SessionRegistryError("MISSING_WORKTREE", "Git did not report the current worktree", {
166
+ worktree: repository.worktreePath,
167
+ });
168
+ }
169
+ if (matches.length > 1) {
170
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", "Git reported multiple entries for the current worktree", {
171
+ worktree: repository.worktreePath,
172
+ });
173
+ }
174
+ const worktree = matches[0];
175
+ if (worktree.prunable) {
176
+ throw new SessionRegistryError("MISSING_WORKTREE", "Git marks the current worktree as prunable", {
177
+ worktree: repository.worktreePath,
178
+ prunable: true,
179
+ });
180
+ }
181
+ if (worktree.branchName !== branchName) {
182
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", "Git worktree inventory disagrees with the current branch", {
183
+ worktree: repository.worktreePath,
184
+ inventoryBranch: worktree.branchName ?? "<detached>",
185
+ currentBranch: branchName,
186
+ });
187
+ }
188
+ try {
189
+ normalizeBranchId(worktree.branchName);
190
+ }
191
+ catch (error) {
192
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", "Git worktree inventory contains an invalid branch identity", { worktree: repository.worktreePath, branch: worktree.branchName }, error);
193
+ }
194
+ const finalBranchName = readBranchOrDetached(git, repository.worktreePath);
195
+ const finalHeadId = readCurrentHead(git, repository.worktreePath);
196
+ if (finalBranchName !== branchName || finalHeadId !== headId) {
197
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", "The repository/worktree identity changed during physical observation", {
198
+ worktree: repository.worktreePath,
199
+ initialBranch: branchName,
200
+ finalBranch: finalBranchName,
201
+ initialHead: headId,
202
+ finalHead: finalHeadId,
203
+ });
204
+ }
205
+ if (options.branchName !== undefined && normalizeBranchId(options.branchName) !== branchId) {
206
+ throw new SessionRegistryError("BRANCH_MISMATCH", "The observed Git branch does not match the expected branch", {
207
+ expectedBranch: options.branchName,
208
+ actualBranch: branchName,
209
+ });
210
+ }
55
211
  return Object.freeze({
212
+ repositoryId: repository.repositoryId,
213
+ commonGitDirectory: repository.commonGitDirectory,
56
214
  worktreeId: repository.worktreePath,
57
215
  worktreePath: repository.worktreePath,
58
216
  branchId,
59
- branchName: branchId.slice("refs/heads/".length),
217
+ branchName,
218
+ headId,
219
+ worktree,
220
+ worktrees,
60
221
  });
61
222
  }
62
223
  /** Read the repository's local worktree inventory without consulting a remote. */
63
224
  export function listGitWorktrees(git, cwd) {
64
- const output = git.run(["worktree", "list", "--porcelain"], cwd);
225
+ let output;
226
+ try {
227
+ output = git.run(["worktree", "list", "--porcelain"], cwd);
228
+ }
229
+ catch (error) {
230
+ if (error instanceof SessionRegistryError)
231
+ throw error;
232
+ throw new SessionRegistryError("PHYSICAL_OBSERVATION_UNAVAILABLE", "Could not observe Git worktrees", { cwd }, error);
233
+ }
65
234
  const entries = [];
66
235
  let currentPath;
67
236
  let currentBranch = null;
237
+ let currentPrunable = false;
68
238
  const flush = () => {
69
239
  if (currentPath === undefined)
70
240
  return;
71
- entries.push(Object.freeze({ worktreePath: canonicalListedPath(currentPath), branchName: currentBranch }));
241
+ const worktreePath = canonicalListedPath(currentPath);
242
+ if (entries.some((entry) => entry.worktreePath === worktreePath)) {
243
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", `Git reported the worktree more than once: ${worktreePath}`, {
244
+ worktree: worktreePath,
245
+ });
246
+ }
247
+ entries.push(Object.freeze({
248
+ worktreePath,
249
+ branchName: currentBranch,
250
+ prunable: currentPrunable,
251
+ }));
72
252
  currentPath = undefined;
73
253
  currentBranch = null;
254
+ currentPrunable = false;
74
255
  };
75
256
  for (const line of output.split(/\r?\n/u)) {
76
257
  if (line.startsWith("worktree ")) {
77
258
  flush();
78
259
  currentPath = line.slice("worktree ".length);
260
+ if (currentPath.length === 0) {
261
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", "Git reported an empty worktree path");
262
+ }
79
263
  continue;
80
264
  }
81
265
  if (line.startsWith("branch ")) {
82
266
  const branchId = line.slice("branch ".length);
83
267
  if (branchId.startsWith("refs/heads/")) {
268
+ if (currentBranch !== null) {
269
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", "Git reported multiple branches for one worktree");
270
+ }
84
271
  currentBranch = branchId.slice("refs/heads/".length);
85
272
  }
273
+ continue;
274
+ }
275
+ if (line === "prunable" || line.startsWith("prunable ")) {
276
+ currentPrunable = true;
86
277
  }
87
278
  }
88
279
  flush();
89
280
  return entries;
90
281
  }
282
+ /**
283
+ * Capture only the paths Git currently exposes as changed, staged, unstaged,
284
+ * or untracked. This is evidence, not an OS-level write monitor.
285
+ */
286
+ export function captureGitCheckpoint(git, cwd) {
287
+ let output;
288
+ try {
289
+ const run = git.runRaw ?? git.run;
290
+ output = run(["status", "--porcelain=v1", "--untracked-files=all", "--ignored=no", "-z"], cwd);
291
+ }
292
+ catch (error) {
293
+ if (error instanceof SessionRegistryError)
294
+ throw error;
295
+ throw new SessionRegistryError("PHYSICAL_OBSERVATION_UNAVAILABLE", "Could not observe Git checkpoint paths", {
296
+ cwd,
297
+ }, error);
298
+ }
299
+ const changed = new Set();
300
+ const staged = new Set();
301
+ const unstaged = new Set();
302
+ const untracked = new Set();
303
+ const records = output.split("\u0000");
304
+ for (let index = 0; index < records.length; index += 1) {
305
+ const record = records[index];
306
+ if (record.length === 0)
307
+ continue;
308
+ if (record.length < 4 || record[2] !== " ") {
309
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", "Git returned an invalid status record", { cwd });
310
+ }
311
+ const indexStatus = record[0];
312
+ const worktreeStatus = record[1];
313
+ const paths = [record.slice(3)];
314
+ if (indexStatus === "R" || indexStatus === "C") {
315
+ const source = records[index + 1];
316
+ if (source === undefined || source.length === 0) {
317
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", "Git returned an incomplete rename status record", {
318
+ cwd,
319
+ });
320
+ }
321
+ index += 1;
322
+ paths.push(source);
323
+ }
324
+ for (const resource of paths) {
325
+ if (resource.length === 0 || resource.includes("\u0000")) {
326
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", "Git returned an invalid changed path", { cwd });
327
+ }
328
+ changed.add(resource);
329
+ if (indexStatus !== " " && indexStatus !== "?")
330
+ staged.add(resource);
331
+ if (worktreeStatus !== " " && worktreeStatus !== "?")
332
+ unstaged.add(resource);
333
+ if (indexStatus === "?" && worktreeStatus === "?")
334
+ untracked.add(resource);
335
+ if (changed.size > CHECKPOINT_MAX_PATHS) {
336
+ throw new SessionRegistryError("GIT_OUTPUT_LIMIT", "Git checkpoint contains too many paths", {
337
+ cwd,
338
+ maxPaths: CHECKPOINT_MAX_PATHS,
339
+ });
340
+ }
341
+ }
342
+ }
343
+ return Object.freeze({
344
+ changed: sortGitPaths(changed),
345
+ staged: sortGitPaths(staged),
346
+ unstaged: sortGitPaths(unstaged),
347
+ untracked: sortGitPaths(untracked),
348
+ });
349
+ }
91
350
  export function normalizeBranchId(branchName) {
92
351
  const trimmed = branchName.trim();
93
352
  if (trimmed !== branchName) {
@@ -102,8 +361,10 @@ export function normalizeBranchId(branchName) {
102
361
  if (shortName.length === 0 ||
103
362
  shortName.startsWith("/") ||
104
363
  shortName.endsWith("/") ||
364
+ shortName.startsWith("-") ||
105
365
  shortName.includes("..") ||
106
366
  shortName === "@" ||
367
+ shortName.endsWith("@") ||
107
368
  shortName.includes("@{") ||
108
369
  shortName.endsWith(".") ||
109
370
  shortName.endsWith(".lock") ||
@@ -114,35 +375,87 @@ export function normalizeBranchId(branchName) {
114
375
  }
115
376
  return normalized;
116
377
  }
117
- function canonicalListedPath(candidate) {
118
- const resolved = path.resolve(candidate);
119
- try {
120
- return fs.realpathSync.native(resolved);
121
- }
122
- catch {
123
- return resolved;
124
- }
125
- }
126
378
  export function readCurrentBranch(git, cwd) {
127
379
  try {
128
380
  const branchName = git.run(["symbolic-ref", "--quiet", "--short", "HEAD"], cwd);
129
381
  if (branchName.length === 0) {
130
- throw new SessionRegistryError("WORKTREE_IDENTITY_AMBIGUOUS", `The worktree at ${cwd} has no branch`, { cwd });
382
+ throw new SessionRegistryError("WORKTREE_IDENTITY_AMBIGUOUS", `The worktree at ${cwd} has no branch`, {
383
+ cwd,
384
+ reason: "detached-head",
385
+ });
131
386
  }
132
387
  return branchName;
133
388
  }
134
389
  catch (error) {
135
- if (error instanceof SessionRegistryError && error.code === "WORKTREE_IDENTITY_AMBIGUOUS") {
390
+ if (error instanceof SessionRegistryError) {
391
+ if (error.code === "GIT_SPAWN_FAILED" || error.code === "GIT_TIMEOUT" || error.code === "GIT_OUTPUT_LIMIT") {
392
+ throw error;
393
+ }
394
+ if (error.code === "WORKTREE_IDENTITY_AMBIGUOUS")
395
+ throw error;
396
+ if (error.code === "GIT_COMMAND_FAILED" &&
397
+ (error.details.exitCode === undefined || error.details.exitCode === 1 || error.details.exitCode === 128)) {
398
+ throw new SessionRegistryError("WORKTREE_IDENTITY_AMBIGUOUS", `Could not resolve the current branch for ${cwd}`, { cwd, reason: "detached-head" }, error);
399
+ }
136
400
  throw error;
137
401
  }
138
- throw new SessionRegistryError("WORKTREE_IDENTITY_AMBIGUOUS", `Could not resolve the current branch for ${cwd}`, { cwd }, error);
402
+ throw new SessionRegistryError("PHYSICAL_OBSERVATION_UNAVAILABLE", `Could not observe the current branch for ${cwd}`, {
403
+ cwd,
404
+ }, error);
405
+ }
406
+ }
407
+ export function readCurrentHead(git, cwd) {
408
+ try {
409
+ const head = git.run(["rev-parse", "--verify", "HEAD"], cwd);
410
+ if (!/^[0-9a-f]{40,64}$/u.test(head)) {
411
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", `Git returned an invalid HEAD for ${cwd}`, { cwd });
412
+ }
413
+ return head;
414
+ }
415
+ catch (error) {
416
+ if (error instanceof SessionRegistryError) {
417
+ if (error.code === "GIT_SPAWN_FAILED" || error.code === "GIT_TIMEOUT" || error.code === "GIT_OUTPUT_LIMIT") {
418
+ throw error;
419
+ }
420
+ if (error.code === "GIT_STATE_AMBIGUOUS")
421
+ throw error;
422
+ if (error.code === "GIT_COMMAND_FAILED" &&
423
+ (error.details.exitCode === undefined || error.details.exitCode === 128)) {
424
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", `Could not resolve HEAD for ${cwd}`, { cwd, reason: "head-unavailable" }, error);
425
+ }
426
+ throw error;
427
+ }
428
+ throw new SessionRegistryError("PHYSICAL_OBSERVATION_UNAVAILABLE", `Could not observe HEAD for ${cwd}`, { cwd }, error);
429
+ }
430
+ }
431
+ function canonicalListedPath(candidate) {
432
+ let resolved;
433
+ try {
434
+ resolved = path.resolve(candidate);
435
+ }
436
+ catch (error) {
437
+ throw new SessionRegistryError("GIT_STATE_AMBIGUOUS", "Git reported an invalid worktree path", {}, error);
438
+ }
439
+ try {
440
+ return fs.realpathSync.native(resolved);
441
+ }
442
+ catch (error) {
443
+ if (isNodeError(error) && error.code === "ENOENT")
444
+ return resolved;
445
+ throw new SessionRegistryError("PHYSICAL_OBSERVATION_UNAVAILABLE", `Could not canonicalize the Git worktree path: ${resolved}`, { worktree: resolved }, error);
139
446
  }
140
447
  }
141
- function canonicalDirectory(candidate, errorCode) {
448
+ function canonicalDirectory(candidate, errorCode, missingCode) {
142
449
  if (candidate.trim().length === 0) {
143
450
  throw new SessionRegistryError(errorCode, "Git returned an empty directory identity");
144
451
  }
145
- const resolved = path.resolve(candidate);
452
+ let resolved;
453
+ try {
454
+ resolved = path.resolve(candidate);
455
+ }
456
+ catch (error) {
457
+ throw new SessionRegistryError(errorCode, "Git returned an invalid directory identity", {}, error);
458
+ }
146
459
  try {
147
460
  const stat = fs.statSync(resolved);
148
461
  if (!stat.isDirectory()) {
@@ -151,7 +464,79 @@ function canonicalDirectory(candidate, errorCode) {
151
464
  return fs.realpathSync.native(resolved);
152
465
  }
153
466
  catch (error) {
467
+ if (missingCode !== undefined && isNodeError(error) && error.code === "ENOENT") {
468
+ throw new SessionRegistryError(missingCode, `The worktree path is missing: ${resolved}`, { worktree: resolved }, error);
469
+ }
154
470
  throw new SessionRegistryError(errorCode, `Could not resolve directory identity: ${resolved}`, { path: resolved }, error);
155
471
  }
156
472
  }
473
+ function isNodeError(error) {
474
+ return error instanceof Error && "code" in error && typeof error.code === "string";
475
+ }
476
+ function assertDirectoryPath(candidate) {
477
+ let resolved;
478
+ try {
479
+ resolved = path.resolve(candidate);
480
+ }
481
+ catch (error) {
482
+ throw new SessionRegistryError("PHYSICAL_OBSERVATION_UNAVAILABLE", "Could not resolve the worktree path", { worktree: boundedDetail(candidate) }, error);
483
+ }
484
+ try {
485
+ const stat = fs.statSync(resolved);
486
+ if (!stat.isDirectory()) {
487
+ throw new SessionRegistryError("MISSING_WORKTREE", `The worktree path is not a directory: ${resolved}`, {
488
+ worktree: resolved,
489
+ });
490
+ }
491
+ }
492
+ catch (error) {
493
+ if (error instanceof SessionRegistryError)
494
+ throw error;
495
+ if (isNodeError(error) && (error.code === "ENOENT" || error.code === "ENOTDIR")) {
496
+ throw new SessionRegistryError("MISSING_WORKTREE", `The worktree path is missing: ${resolved}`, { worktree: resolved }, error);
497
+ }
498
+ throw new SessionRegistryError("PHYSICAL_OBSERVATION_UNAVAILABLE", `Could not inspect the worktree path: ${resolved}`, { worktree: resolved }, error);
499
+ }
500
+ }
501
+ function isPathInside(root, candidate) {
502
+ return candidate === root || candidate.startsWith(`${root}${path.sep}`);
503
+ }
504
+ function sortGitPaths(paths) {
505
+ return Object.freeze([...paths].sort((left, right) => (left < right ? -1 : left > right ? 1 : 0)));
506
+ }
507
+ function boundedDetail(value) {
508
+ const text = typeof value === "string" ? value : String(value);
509
+ return text.length > MAX_ERROR_DETAIL_LENGTH ? `${text.slice(0, MAX_ERROR_DETAIL_LENGTH)}…` : text;
510
+ }
511
+ function gitProcessError(error, command, cwd) {
512
+ const candidate = error;
513
+ const details = {
514
+ command: boundedDetail(command),
515
+ cwd: boundedDetail(cwd),
516
+ };
517
+ if (typeof candidate.status === "number")
518
+ details.exitCode = candidate.status;
519
+ if (typeof candidate.signal === "string")
520
+ details.signal = candidate.signal;
521
+ if (typeof candidate.stderr === "string" && candidate.stderr.length > 0) {
522
+ details.stderr = boundedDetail(candidate.stderr);
523
+ }
524
+ let code;
525
+ if (candidate.code === "ERR_CHILD_PROCESS_STDIO_MAXBUFFER" || candidate.code === "ENOBUFS") {
526
+ code = "GIT_OUTPUT_LIMIT";
527
+ }
528
+ else if (candidate.code === "ETIMEDOUT") {
529
+ code = "GIT_TIMEOUT";
530
+ }
531
+ else if (candidate.killed === true) {
532
+ code = "GIT_TIMEOUT";
533
+ }
534
+ else if ((candidate.status === undefined || candidate.status === null) &&
535
+ (candidate.code === "ENOENT" || candidate.code === "EACCES" || candidate.code === "ENOTDIR")) {
536
+ code = "GIT_SPAWN_FAILED";
537
+ }
538
+ else
539
+ code = "GIT_COMMAND_FAILED";
540
+ return new SessionRegistryError(code, `git ${command} failed in ${cwd}`, details, error);
541
+ }
157
542
  //# sourceMappingURL=git.js.map
package/dist/git.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}