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/README.md +213 -5
- package/dist/cli.js +320 -6
- package/dist/cli.js.map +1 -1
- package/dist/contract.d.ts +9 -0
- package/dist/contract.js +172 -0
- package/dist/contract.js.map +1 -0
- package/dist/domain/doctor.d.ts +1 -1
- package/dist/domain/doctor.js +99 -90
- package/dist/domain/doctor.js.map +1 -1
- package/dist/domain/errors.d.ts +1 -1
- package/dist/domain/errors.js +5 -1
- package/dist/domain/errors.js.map +1 -1
- package/dist/domain/session-backend.d.ts +11 -1
- package/dist/domain/session-backend.js +247 -3
- package/dist/domain/session-backend.js.map +1 -1
- package/dist/domain/session.d.ts +131 -0
- package/dist/domain/session.js +6 -0
- package/dist/domain/session.js.map +1 -1
- package/dist/errors.d.ts +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/git.d.ts +40 -0
- package/dist/git.js +415 -30
- package/dist/git.js.map +1 -1
- package/dist/operation-authorization.d.ts +73 -0
- package/dist/operation-authorization.js +42 -0
- package/dist/operation-authorization.js.map +1 -0
- package/dist/presentation.js +49 -19
- package/dist/presentation.js.map +1 -1
- package/dist/resource-claims.d.ts +65 -0
- package/dist/resource-claims.js +398 -0
- package/dist/resource-claims.js.map +1 -0
- package/dist/session-registry.d.ts +215 -1
- package/dist/session-registry.js +1749 -185
- package/dist/session-registry.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
6
|
-
|
|
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(
|
|
22
|
+
return String(execFileSync(executable, [...args], {
|
|
9
23
|
cwd,
|
|
10
24
|
encoding: "utf8",
|
|
25
|
+
maxBuffer: maxOutputBytes,
|
|
11
26
|
stdio: ["ignore", "pipe", "pipe"],
|
|
12
|
-
timeout:
|
|
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
|
-
})
|
|
34
|
+
}));
|
|
19
35
|
}
|
|
20
36
|
catch (error) {
|
|
21
|
-
throw
|
|
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
|
|
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("
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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`, {
|
|
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
|
|
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("
|
|
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
|
-
|
|
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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"}
|