humanish 0.15.0 → 0.15.2
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 +33 -31
- package/dist/claude-agent-sdk.js +14 -7
- package/dist/claude-agent-sdk.js.map +1 -1
- package/dist/codex-app-server-ui.d.ts +1 -1
- package/dist/codex-app-server-ui.js +69 -39
- package/dist/codex-app-server-ui.js.map +1 -1
- package/dist/codex-app-server.d.ts +3 -0
- package/dist/codex-app-server.js +15 -8
- package/dist/codex-app-server.js.map +1 -1
- package/dist/concurrent-shared-world-lab.js +18 -16
- package/dist/concurrent-shared-world-lab.js.map +1 -1
- package/dist/core/git-state.d.ts +2 -0
- package/dist/core/git-state.js +152 -17
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/git-workspace.d.ts +31 -0
- package/dist/core/git-workspace.js +447 -0
- package/dist/core/git-workspace.js.map +1 -0
- package/dist/cua-actor-lab.d.ts +3 -2
- package/dist/cua-actor-lab.js +34 -23
- package/dist/cua-actor-lab.js.map +1 -1
- package/dist/e2b-terminal-lab.js +111 -46
- package/dist/e2b-terminal-lab.js.map +1 -1
- package/dist/feedback.js +139 -101
- package/dist/feedback.js.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.js +108 -22
- package/dist/init.js.map +1 -1
- package/dist/lab-config.d.ts +5 -0
- package/dist/lab-config.js +38 -0
- package/dist/lab-config.js.map +1 -1
- package/dist/labs.js +258 -52
- package/dist/labs.js.map +1 -1
- package/dist/observer-assets.js +3 -2
- package/dist/observer-assets.js.map +1 -1
- package/dist/observer-static.js +131 -17
- package/dist/observer-static.js.map +1 -1
- package/dist/observer.js +263 -66
- package/dist/observer.js.map +1 -1
- package/dist/openai-responses-cu.js +18 -4
- package/dist/openai-responses-cu.js.map +1 -1
- package/dist/oss-lab.js +59 -14
- package/dist/oss-lab.js.map +1 -1
- package/dist/oss-meta-lab.d.ts +2 -4
- package/dist/oss-meta-lab.js +117 -477
- package/dist/oss-meta-lab.js.map +1 -1
- package/dist/program.js +23 -21
- package/dist/program.js.map +1 -1
- package/dist/run-paths.d.ts +56 -0
- package/dist/run-paths.js +340 -0
- package/dist/run-paths.js.map +1 -0
- package/dist/run.d.ts +14 -4
- package/dist/run.js +595 -306
- package/dist/run.js.map +1 -1
- package/dist/scripted-browser-actor.d.ts +7 -4
- package/dist/scripted-browser-actor.js +154 -41
- package/dist/scripted-browser-actor.js.map +1 -1
- package/dist/scripted-browser-lab.js +95 -45
- package/dist/scripted-browser-lab.js.map +1 -1
- package/dist/selected-output-paths.d.ts +49 -0
- package/dist/selected-output-paths.js +354 -0
- package/dist/selected-output-paths.js.map +1 -0
- package/dist/shared-world-lab.js +13 -12
- package/dist/shared-world-lab.js.map +1 -1
- package/dist/source-archive.js +44 -1
- package/dist/source-archive.js.map +1 -1
- package/docs/architecture/oss-lab-poc.md +8 -0
- package/docs/assets/humanish-observer-hero.png +0 -0
- package/docs/contracts/policy.md +7 -1
- package/docs/goals/current.md +20 -1
- package/docs/product/open-source-install-experience.md +9 -1
- package/docs/ramp/README.md +14 -7
- package/package.json +1 -1
package/dist/core/git-state.js
CHANGED
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import { inspectVerifiedGitWorkspace } from "./git-workspace.js";
|
|
2
4
|
export const GIT_STATE_SCHEMA = "humanish.git-state.v1";
|
|
5
|
+
const DEFAULT_GIT_COMMAND_TIMEOUT_MS = 15_000;
|
|
3
6
|
export async function captureGitState(cwd, options = {}) {
|
|
4
7
|
const capturedAt = toIsoString(options.capturedAt ?? new Date());
|
|
5
|
-
const
|
|
6
|
-
|
|
8
|
+
const inspection = await inspectVerifiedGitWorkspace(cwd);
|
|
9
|
+
if (inspection.status === "unsafe") {
|
|
10
|
+
return unavailableState(capturedAt, inspection.note);
|
|
11
|
+
}
|
|
12
|
+
if (inspection.status === "missing") {
|
|
13
|
+
return missingState(capturedAt);
|
|
14
|
+
}
|
|
15
|
+
const commandTimeoutMs = normalizeCommandTimeout(options.commandTimeoutMs);
|
|
16
|
+
const runner = options.runner
|
|
17
|
+
? (args, commandCwd) => runGitRunnerWithDeadline(options.runner, args, commandCwd, commandTimeoutMs)
|
|
18
|
+
: (args) => runGitCommand(args, inspection.workspace, commandTimeoutMs);
|
|
19
|
+
const commandCwd = inspection.workspace.worktreeRoot;
|
|
20
|
+
const inside = await runner(["rev-parse", "--is-inside-work-tree"], commandCwd);
|
|
21
|
+
if (inside.timedOut) {
|
|
22
|
+
return unavailableState(capturedAt, "Git work-tree detection timed out.");
|
|
23
|
+
}
|
|
7
24
|
if (inside.exitCode === null) {
|
|
8
25
|
return unavailableState(capturedAt, "Git command could not be started.");
|
|
9
26
|
}
|
|
@@ -20,16 +37,39 @@ export async function captureGitState(cwd, options = {}) {
|
|
|
20
37
|
note: "No git work tree was detected."
|
|
21
38
|
};
|
|
22
39
|
}
|
|
23
|
-
const statusOutput = await runner([
|
|
40
|
+
const statusOutput = await runner([
|
|
41
|
+
"status",
|
|
42
|
+
"--porcelain=v1",
|
|
43
|
+
"--untracked-files=all",
|
|
44
|
+
"--ignore-submodules=all"
|
|
45
|
+
], commandCwd);
|
|
46
|
+
if (statusOutput.timedOut) {
|
|
47
|
+
return unavailableState(capturedAt, "Git status capture timed out.");
|
|
48
|
+
}
|
|
24
49
|
if (statusOutput.exitCode === null) {
|
|
25
50
|
return unavailableState(capturedAt, "Git status command could not be started.");
|
|
26
51
|
}
|
|
27
52
|
if (statusOutput.exitCode !== 0) {
|
|
28
53
|
return unavailableState(capturedAt, "Git status could not be captured.");
|
|
29
54
|
}
|
|
30
|
-
const headOutput = await runner(["rev-parse", "--short=12", "HEAD"],
|
|
55
|
+
const headOutput = await runner(["rev-parse", "--short=12", "HEAD"], commandCwd);
|
|
56
|
+
if (headOutput.timedOut) {
|
|
57
|
+
return unavailableState(capturedAt, "Git HEAD capture timed out.");
|
|
58
|
+
}
|
|
59
|
+
if (headOutput.exitCode === null) {
|
|
60
|
+
return unavailableState(capturedAt, "Git HEAD command could not be started.");
|
|
61
|
+
}
|
|
31
62
|
const shortSha = headOutput.exitCode === 0 ? normalizeNullableText(headOutput.stdout) : null;
|
|
32
|
-
const
|
|
63
|
+
const symbolicRef = await runner(["symbolic-ref", "--quiet", "HEAD"], commandCwd);
|
|
64
|
+
if (symbolicRef.timedOut) {
|
|
65
|
+
return unavailableState(capturedAt, "Git ref-state capture timed out.");
|
|
66
|
+
}
|
|
67
|
+
if (symbolicRef.exitCode === null) {
|
|
68
|
+
return unavailableState(capturedAt, "Git ref-state command could not be started.");
|
|
69
|
+
}
|
|
70
|
+
const refState = symbolicRef.exitCode === 0
|
|
71
|
+
? "attached"
|
|
72
|
+
: shortSha === null ? "unborn" : "detached";
|
|
33
73
|
const changes = summarizePorcelainStatus(statusOutput.stdout);
|
|
34
74
|
const status = changes.total === 0 ? "clean" : "dirty";
|
|
35
75
|
return {
|
|
@@ -72,34 +112,62 @@ export function summarizePorcelainStatus(output) {
|
|
|
72
112
|
total: lines.length
|
|
73
113
|
};
|
|
74
114
|
}
|
|
75
|
-
async function
|
|
76
|
-
const symbolicRef = await runner(["symbolic-ref", "--quiet", "HEAD"], cwd);
|
|
77
|
-
if (symbolicRef.exitCode === 0) {
|
|
78
|
-
return "attached";
|
|
79
|
-
}
|
|
80
|
-
return shortSha === null ? "unborn" : "detached";
|
|
81
|
-
}
|
|
82
|
-
async function runGitCommand(args, cwd) {
|
|
115
|
+
async function runGitCommand(args, workspace, timeoutMs) {
|
|
83
116
|
return await new Promise((resolve) => {
|
|
84
|
-
const child = spawn("git",
|
|
85
|
-
|
|
117
|
+
const child = spawn("git", [
|
|
118
|
+
`--git-dir=${workspace.gitDir}`,
|
|
119
|
+
`--work-tree=${workspace.worktreeRoot}`,
|
|
120
|
+
"-c",
|
|
121
|
+
"core.fsmonitor=false",
|
|
122
|
+
"-c",
|
|
123
|
+
"core.untrackedCache=false",
|
|
124
|
+
"-c",
|
|
125
|
+
`core.excludesFile=${os.devNull}`,
|
|
126
|
+
"-c",
|
|
127
|
+
`core.attributesFile=${os.devNull}`,
|
|
128
|
+
"-c",
|
|
129
|
+
"core.alternateRefsCommand=",
|
|
130
|
+
"-c",
|
|
131
|
+
"core.alternateRefsPrefixes=",
|
|
132
|
+
...workspace.configOverrides.flatMap((override) => ["-c", override]),
|
|
133
|
+
...args
|
|
134
|
+
], {
|
|
135
|
+
cwd: workspace.worktreeRoot,
|
|
136
|
+
env: isolatedGitEnvironment(process.env),
|
|
86
137
|
stdio: ["ignore", "pipe", "pipe"]
|
|
87
138
|
});
|
|
88
139
|
const stdout = [];
|
|
89
140
|
const stderr = [];
|
|
141
|
+
let settled = false;
|
|
142
|
+
const finish = (result) => {
|
|
143
|
+
if (settled)
|
|
144
|
+
return;
|
|
145
|
+
settled = true;
|
|
146
|
+
clearTimeout(timer);
|
|
147
|
+
resolve(result);
|
|
148
|
+
};
|
|
149
|
+
const timer = setTimeout(() => {
|
|
150
|
+
child.kill("SIGKILL");
|
|
151
|
+
finish({
|
|
152
|
+
exitCode: null,
|
|
153
|
+
stdout: stdout.join(""),
|
|
154
|
+
stderr: "Git command timed out.",
|
|
155
|
+
timedOut: true
|
|
156
|
+
});
|
|
157
|
+
}, timeoutMs);
|
|
90
158
|
child.stdout.setEncoding("utf8");
|
|
91
159
|
child.stderr.setEncoding("utf8");
|
|
92
160
|
child.stdout.on("data", (chunk) => stdout.push(chunk));
|
|
93
161
|
child.stderr.on("data", (chunk) => stderr.push(chunk));
|
|
94
162
|
child.on("error", (error) => {
|
|
95
|
-
|
|
163
|
+
finish({
|
|
96
164
|
exitCode: null,
|
|
97
165
|
stdout: stdout.join(""),
|
|
98
166
|
stderr: error.message
|
|
99
167
|
});
|
|
100
168
|
});
|
|
101
169
|
child.on("close", (exitCode) => {
|
|
102
|
-
|
|
170
|
+
finish({
|
|
103
171
|
exitCode,
|
|
104
172
|
stdout: stdout.join(""),
|
|
105
173
|
stderr: stderr.join("")
|
|
@@ -107,6 +175,60 @@ async function runGitCommand(args, cwd) {
|
|
|
107
175
|
});
|
|
108
176
|
});
|
|
109
177
|
}
|
|
178
|
+
async function runGitRunnerWithDeadline(runner, args, cwd, timeoutMs) {
|
|
179
|
+
return await new Promise((resolve) => {
|
|
180
|
+
let settled = false;
|
|
181
|
+
const finish = (result) => {
|
|
182
|
+
if (settled)
|
|
183
|
+
return;
|
|
184
|
+
settled = true;
|
|
185
|
+
clearTimeout(timer);
|
|
186
|
+
resolve(result);
|
|
187
|
+
};
|
|
188
|
+
const timer = setTimeout(() => {
|
|
189
|
+
finish({
|
|
190
|
+
exitCode: null,
|
|
191
|
+
stdout: "",
|
|
192
|
+
stderr: "Git command timed out.",
|
|
193
|
+
timedOut: true
|
|
194
|
+
});
|
|
195
|
+
}, timeoutMs);
|
|
196
|
+
void runner(args, cwd).then(finish, (error) => {
|
|
197
|
+
finish({
|
|
198
|
+
exitCode: null,
|
|
199
|
+
stdout: "",
|
|
200
|
+
stderr: error instanceof Error ? error.message : String(error)
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
function isolatedGitEnvironment(source) {
|
|
206
|
+
const isolated = {};
|
|
207
|
+
for (const [name, value] of Object.entries(source)) {
|
|
208
|
+
if (!name.toUpperCase().startsWith("GIT_")) {
|
|
209
|
+
isolated[name] = value;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
...isolated,
|
|
214
|
+
GIT_ATTR_NOSYSTEM: "1",
|
|
215
|
+
GIT_CONFIG_GLOBAL: os.devNull,
|
|
216
|
+
GIT_CONFIG_NOSYSTEM: "1",
|
|
217
|
+
GIT_NO_LAZY_FETCH: "1",
|
|
218
|
+
GIT_NO_REPLACE_OBJECTS: "1",
|
|
219
|
+
GIT_OPTIONAL_LOCKS: "0",
|
|
220
|
+
GIT_TERMINAL_PROMPT: "0"
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
function normalizeCommandTimeout(value) {
|
|
224
|
+
if (value === undefined) {
|
|
225
|
+
return DEFAULT_GIT_COMMAND_TIMEOUT_MS;
|
|
226
|
+
}
|
|
227
|
+
if (!Number.isSafeInteger(value) || value < 1) {
|
|
228
|
+
throw new Error("Git command timeout must be a positive safe integer.");
|
|
229
|
+
}
|
|
230
|
+
return value;
|
|
231
|
+
}
|
|
110
232
|
function unavailableState(capturedAt, note) {
|
|
111
233
|
return {
|
|
112
234
|
schema: GIT_STATE_SCHEMA,
|
|
@@ -120,6 +242,19 @@ function unavailableState(capturedAt, note) {
|
|
|
120
242
|
note
|
|
121
243
|
};
|
|
122
244
|
}
|
|
245
|
+
function missingState(capturedAt) {
|
|
246
|
+
return {
|
|
247
|
+
schema: GIT_STATE_SCHEMA,
|
|
248
|
+
status: "missing",
|
|
249
|
+
capturedAt,
|
|
250
|
+
head: {
|
|
251
|
+
shortSha: null,
|
|
252
|
+
refState: "unknown"
|
|
253
|
+
},
|
|
254
|
+
changes: emptyChanges(),
|
|
255
|
+
note: "No git work tree was detected."
|
|
256
|
+
};
|
|
257
|
+
}
|
|
123
258
|
function emptyChanges() {
|
|
124
259
|
return {
|
|
125
260
|
staged: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-state.js","sourceRoot":"","sources":["../../src/core/git-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"git-state.js","sourceRoot":"","sources":["../../src/core/git-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EACL,2BAA2B,EAE5B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAiCxD,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,UAII,EAAE;IAEN,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAqB,OAAO,CAAC,MAAM;QAC7C,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,wBAAwB,CAAC,OAAO,CAAC,MAAO,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,CAAC;QACrG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE,UAAU,CAAC,CAAC;IAEhF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,gBAAgB,CAAC,UAAU,EAAE,oCAAoC,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC7B,OAAO,gBAAgB,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QAC7D,OAAO;YACL,MAAM,EAAE,gBAAgB;YACxB,MAAM,EAAE,SAAS;YACjB,UAAU;YACV,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,SAAS;aACpB;YACD,OAAO,EAAE,YAAY,EAAE;YACvB,IAAI,EAAE,gCAAgC;SACvC,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC;QAChC,QAAQ;QACR,gBAAgB;QAChB,uBAAuB;QACvB,yBAAyB;KAC1B,EAAE,UAAU,CAAC,CAAC;IACf,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC1B,OAAO,gBAAgB,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACnC,OAAO,gBAAgB,CAAC,UAAU,EAAE,0CAA0C,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,gBAAgB,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;IACjF,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,gBAAgB,CAAC,UAAU,EAAE,6BAA6B,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO,gBAAgB,CAAC,UAAU,EAAE,wCAAwC,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7F,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,CAAC,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;IAClF,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzB,OAAO,gBAAgB,CAAC,UAAU,EAAE,kCAAkC,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,WAAW,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAClC,OAAO,gBAAgB,CAAC,UAAU,EAAE,6CAA6C,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,QAAQ,GAAgB,WAAW,CAAC,QAAQ,KAAK,CAAC;QACtD,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IAC9C,MAAM,OAAO,GAAG,wBAAwB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAmB,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAEvE,OAAO;QACL,MAAM,EAAE,gBAAgB;QACxB,MAAM;QACN,UAAU;QACV,IAAI,EAAE;YACJ,QAAQ;YACR,QAAQ;SACT;QACD,OAAO;QACP,IAAI,EAAE,MAAM,KAAK,OAAO;YACtB,CAAC,CAAC,0FAA0F;YAC5F,CAAC,CAAC,wGAAwG;KAC7G,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACnC,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAEtC,IAAI,WAAW,KAAK,GAAG,IAAI,cAAc,KAAK,GAAG,EAAE,CAAC;YAClD,SAAS,IAAI,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,WAAW,KAAK,GAAG,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;QAED,IAAI,cAAc,KAAK,GAAG,EAAE,CAAC;YAC3B,QAAQ,IAAI,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,QAAQ;QACR,SAAS;QACT,KAAK,EAAE,KAAK,CAAC,MAAM;KACpB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,IAAc,EACd,SAA+B,EAC/B,SAAiB;IAEjB,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;YACzB,aAAa,SAAS,CAAC,MAAM,EAAE;YAC/B,eAAe,SAAS,CAAC,YAAY,EAAE;YACvC,IAAI;YACJ,sBAAsB;YACtB,IAAI;YACJ,2BAA2B;YAC3B,IAAI;YACJ,qBAAqB,EAAE,CAAC,OAAO,EAAE;YACjC,IAAI;YACJ,uBAAuB,EAAE,CAAC,OAAO,EAAE;YACnC,IAAI;YACJ,4BAA4B;YAC5B,IAAI;YACJ,6BAA6B;YAC7B,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACpE,GAAG,IAAI;SACR,EAAE;YACD,GAAG,EAAE,SAAS,CAAC,YAAY;YAC3B,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC;YACxC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QACH,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,MAAwB,EAAQ,EAAE;YAChD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,CAAC;gBACL,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YACjC,MAAM,CAAC;gBACL,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,EAAE,KAAK,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC7B,MAAM,CAAC;gBACL,QAAQ;gBACR,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;aACxB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,MAAwB,EACxB,IAAc,EACd,GAAW,EACX,SAAiB;IAEjB,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACnC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,MAAwB,EAAQ,EAAE;YAChD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC;gBACL,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAc,EAAE,EAAE;YACrD,MAAM,CAAC;gBACL,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC/D,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAyB;IACvD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO;QACL,GAAG,QAAQ;QACX,iBAAiB,EAAE,GAAG;QACtB,iBAAiB,EAAE,EAAE,CAAC,OAAO;QAC7B,mBAAmB,EAAE,GAAG;QACxB,iBAAiB,EAAE,GAAG;QACtB,sBAAsB,EAAE,GAAG;QAC3B,kBAAkB,EAAE,GAAG;QACvB,mBAAmB,EAAE,GAAG;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAyB;IACxD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,8BAA8B,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAkB,EAAE,IAAY;IACxD,OAAO;QACL,MAAM,EAAE,gBAAgB;QACxB,MAAM,EAAE,aAAa;QACrB,UAAU;QACV,IAAI,EAAE;YACJ,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,SAAS;SACpB;QACD,OAAO,EAAE,YAAY,EAAE;QACvB,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB;IACtC,OAAO;QACL,MAAM,EAAE,gBAAgB;QACxB,MAAM,EAAE,SAAS;QACjB,UAAU;QACV,IAAI,EAAE;YACJ,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,SAAS;SACpB;QACD,OAAO,EAAE,YAAY,EAAE;QACvB,IAAI,EAAE,gCAAgC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY;IACnB,OAAO;QACL,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,CAAC;QACZ,KAAK,EAAE,CAAC;KACT,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AACrD,CAAC;AAED,SAAS,WAAW,CAAC,KAAoB;IACvC,MAAM,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAE7D,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const GIT_METADATA_INSPECTION_FAILED_NOTE = "Git metadata could not be inspected safely.";
|
|
2
|
+
export declare const GIT_METADATA_CONTAINMENT_FAILED_NOTE = "Git metadata failed containment validation.";
|
|
3
|
+
export interface VerifiedGitWorkspace {
|
|
4
|
+
readonly commonDir: string;
|
|
5
|
+
readonly configOverrides: readonly string[];
|
|
6
|
+
readonly gitDir: string;
|
|
7
|
+
readonly kind: "directory" | "linked-worktree";
|
|
8
|
+
readonly trustRoot: string;
|
|
9
|
+
readonly worktreeRoot: string;
|
|
10
|
+
}
|
|
11
|
+
export type GitWorkspaceInspection = {
|
|
12
|
+
readonly status: "missing";
|
|
13
|
+
} | {
|
|
14
|
+
readonly note: typeof GIT_METADATA_INSPECTION_FAILED_NOTE | typeof GIT_METADATA_CONTAINMENT_FAILED_NOTE;
|
|
15
|
+
readonly status: "unsafe";
|
|
16
|
+
readonly worktreeRoot: string;
|
|
17
|
+
} | {
|
|
18
|
+
readonly status: "verified";
|
|
19
|
+
readonly workspace: VerifiedGitWorkspace;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Resolve one physical Git worktree without trusting ambient Git discovery.
|
|
23
|
+
*
|
|
24
|
+
* A regular `.git` file is accepted only for Git's exact linked-worktree
|
|
25
|
+
* topology: `<common>/.git/worktrees/<name>` plus single-link `commondir` and
|
|
26
|
+
* `gitdir` backpointer files. Arbitrary `gitdir:` redirects (including valid
|
|
27
|
+
* separate-git-dir repositories) are deliberately unavailable because they
|
|
28
|
+
* delegate metadata authority outside the selected project without a
|
|
29
|
+
* verifiable backlink.
|
|
30
|
+
*/
|
|
31
|
+
export declare function inspectVerifiedGitWorkspace(cwdInput: string): Promise<GitWorkspaceInspection>;
|