@shapeshift-labs/frontier-swarm-codex 0.5.123 → 0.5.124
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/apply.d.ts.map +1 -1
- package/dist/apply.js +10 -248
- package/dist/apply.js.map +1 -1
- package/dist/cli-args.d.ts +2 -2
- package/dist/codex-workspace-changes.d.ts +6 -17
- package/dist/codex-workspace-changes.d.ts.map +1 -1
- package/dist/codex-workspace-changes.js +13 -82
- package/dist/codex-workspace-changes.js.map +1 -1
- package/dist/codex-workspace.d.ts +3 -3
- package/dist/codex-workspace.d.ts.map +1 -1
- package/dist/codex-workspace.js +16 -241
- package/dist/codex-workspace.js.map +1 -1
- package/dist/collect-bundle-staleness.d.ts.map +1 -1
- package/dist/collect-bundle-staleness.js +18 -15
- package/dist/collect-bundle-staleness.js.map +1 -1
- package/dist/collect-workspace-proof.js +2 -2
- package/dist/collect-workspace-proof.js.map +1 -1
- package/dist/common.d.ts +0 -7
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +0 -15
- package/dist/common.js.map +1 -1
- package/dist/score.d.ts.map +1 -1
- package/dist/score.js +16 -10
- package/dist/score.js.map +1 -1
- package/dist/semantic-import-base.d.ts.map +1 -1
- package/dist/semantic-import-base.js +12 -15
- package/dist/semantic-import-base.js.map +1 -1
- package/dist/types-apply-lease.d.ts +2 -25
- package/dist/types-apply-lease.d.ts.map +1 -1
- package/dist/types-collection.d.ts +4 -3
- package/dist/types-collection.d.ts.map +1 -1
- package/dist/types-workspace.d.ts +12 -126
- package/dist/types-workspace.d.ts.map +1 -1
- package/dist/workspace-link-repair.d.ts.map +1 -1
- package/dist/workspace-link-repair.js +2 -161
- package/dist/workspace-link-repair.js.map +1 -1
- package/package.json +3 -2
- package/dist/codex-workspace-change-paths.d.ts +0 -20
- package/dist/codex-workspace-change-paths.d.ts.map +0 -1
- package/dist/codex-workspace-change-paths.js +0 -215
- package/dist/codex-workspace-change-paths.js.map +0 -1
- package/dist/codex-workspace-restore.d.ts +0 -15
- package/dist/codex-workspace-restore.d.ts.map +0 -1
- package/dist/codex-workspace-restore.js +0 -66
- package/dist/codex-workspace-restore.js.map +0 -1
- package/dist/codex-workspace-write-fence.d.ts +0 -21
- package/dist/codex-workspace-write-fence.d.ts.map +0 -1
- package/dist/codex-workspace-write-fence.js +0 -155
- package/dist/codex-workspace-write-fence.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shapeshift-labs/frontier-swarm-codex",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.124",
|
|
4
4
|
"description": "Node Codex CLI runner adapter for Frontier swarm plans with resource allocation.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -64,7 +64,8 @@
|
|
|
64
64
|
],
|
|
65
65
|
"dependencies": {
|
|
66
66
|
"@shapeshift-labs/frontier-run": "0.1.0",
|
|
67
|
-
"@shapeshift-labs/frontier-swarm": "0.5.
|
|
67
|
+
"@shapeshift-labs/frontier-swarm": "0.5.26",
|
|
68
|
+
"@shapeshift-labs/frontier-swarm-git": "0.1.2"
|
|
68
69
|
},
|
|
69
70
|
"optionalDependencies": {
|
|
70
71
|
"@shapeshift-labs/frontier-lang": "0.4.89"
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { FrontierCodexSwarmRunOptions, FrontierCodexWorkspaceIgnoredChangedPathReason, FrontierCodexWorkspaceIgnoredChangedPathReasonCode, FrontierCodexWorkspacePlan } from './index.js';
|
|
2
|
-
export type FrontierCodexWorkspaceFileSnapshot = Map<string, string>;
|
|
3
|
-
export interface FrontierCodexChangedPathCollection {
|
|
4
|
-
observedChangedPaths: string[];
|
|
5
|
-
changedPaths: string[];
|
|
6
|
-
ignoredChangedPaths: string[];
|
|
7
|
-
ignoredChangedPathReasons: FrontierCodexWorkspaceIgnoredChangedPathReason[];
|
|
8
|
-
}
|
|
9
|
-
export declare function emptyChangedPathCollection(): FrontierCodexChangedPathCollection;
|
|
10
|
-
export declare function shouldSnapshotWorkspaceChanges(plan: FrontierCodexWorkspacePlan, options: FrontierCodexSwarmRunOptions): boolean;
|
|
11
|
-
export declare function snapshotWorkspaceFiles(root: string): Promise<FrontierCodexWorkspaceFileSnapshot>;
|
|
12
|
-
export declare function collectChangedPaths(cwd: string, baseline: FrontierCodexWorkspaceFileSnapshot | undefined, plan: FrontierCodexWorkspacePlan): Promise<FrontierCodexChangedPathCollection>;
|
|
13
|
-
export declare function filterWorkspaceChangedPaths(paths: readonly string[], plan: FrontierCodexWorkspacePlan): FrontierCodexChangedPathCollection;
|
|
14
|
-
export declare function mergeWorkspaceChangedPathCollections(collections: readonly FrontierCodexChangedPathCollection[]): FrontierCodexChangedPathCollection;
|
|
15
|
-
export declare function createIgnoredWorkspaceChangedPathReasons(paths: readonly string[], plan: FrontierCodexWorkspacePlan): FrontierCodexWorkspaceIgnoredChangedPathReason[];
|
|
16
|
-
export declare function getIgnoredWorkspaceChangedPathReason(file: string, plan: FrontierCodexWorkspacePlan): FrontierCodexWorkspaceIgnoredChangedPathReasonCode | undefined;
|
|
17
|
-
export declare function normalizeWorkspaceChangedPath(file: string, plan: FrontierCodexWorkspacePlan): string | undefined;
|
|
18
|
-
export declare function uniqueWorkspaceChangedPaths(paths: readonly string[], plan: FrontierCodexWorkspacePlan): string[];
|
|
19
|
-
export declare function snapshotContainsWorkspacePath(snapshot: FrontierCodexWorkspaceFileSnapshot, file: string): boolean;
|
|
20
|
-
//# sourceMappingURL=codex-workspace-change-paths.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-workspace-change-paths.d.ts","sourceRoot":"","sources":["../src/codex-workspace-change-paths.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,4BAA4B,EAC5B,8CAA8C,EAC9C,kDAAkD,EAClD,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,kCAAkC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErE,MAAM,WAAW,kCAAkC;IACjD,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,yBAAyB,EAAE,8CAA8C,EAAE,CAAC;CAC7E;AAED,wBAAgB,0BAA0B,IAAI,kCAAkC,CAO/E;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAE/H;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAItG;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,kCAAkC,GAAG,SAAS,EACxD,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,kCAAkC,CAAC,CAI7C;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,EAAE,0BAA0B,GAC/B,kCAAkC,CAEpC;AAED,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,SAAS,kCAAkC,EAAE,GACzD,kCAAkC,CAapC;AAED,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,EAAE,0BAA0B,GAC/B,8CAA8C,EAAE,CAOlD;AAED,wBAAgB,oCAAoC,CAClD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,0BAA0B,GAC/B,kDAAkD,GAAG,SAAS,CAShE;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,GAAG,MAAM,GAAG,SAAS,CAOhH;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,0BAA0B,GAAG,MAAM,EAAE,CAUhH;AAED,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,kCAAkC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjH"}
|
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
|
-
import fs from 'node:fs/promises';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { getWorkspaceNoisePathReason, isWorkspaceNoisePath, normalizeWorkspacePath, runProcess, workspacePathMatches, uniqueWorkspacePaths } from './common.js';
|
|
5
|
-
export function emptyChangedPathCollection() {
|
|
6
|
-
return {
|
|
7
|
-
observedChangedPaths: [],
|
|
8
|
-
changedPaths: [],
|
|
9
|
-
ignoredChangedPaths: [],
|
|
10
|
-
ignoredChangedPathReasons: []
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
export function shouldSnapshotWorkspaceChanges(plan, options) {
|
|
14
|
-
return options.collectGitStatus !== false && (plan.mode === 'copy' || plan.mode === 'snapshot');
|
|
15
|
-
}
|
|
16
|
-
export async function snapshotWorkspaceFiles(root) {
|
|
17
|
-
const snapshot = new Map();
|
|
18
|
-
await walkWorkspaceFiles(root, root, snapshot);
|
|
19
|
-
return snapshot;
|
|
20
|
-
}
|
|
21
|
-
export async function collectChangedPaths(cwd, baseline, plan) {
|
|
22
|
-
if (!baseline)
|
|
23
|
-
return filterWorkspaceChangedPaths(await gitChangedPaths(cwd), plan);
|
|
24
|
-
const after = await snapshotWorkspaceFiles(cwd);
|
|
25
|
-
return filterWorkspaceChangedPathsFromSnapshots(diffWorkspaceFiles(baseline, after), plan, baseline, after);
|
|
26
|
-
}
|
|
27
|
-
export function filterWorkspaceChangedPaths(paths, plan) {
|
|
28
|
-
return filterWorkspaceChangedPathsWithEmptyMarkers(paths, plan, new Set());
|
|
29
|
-
}
|
|
30
|
-
export function mergeWorkspaceChangedPathCollections(collections) {
|
|
31
|
-
const ignoredReasonByKey = new Map();
|
|
32
|
-
for (const collection of collections) {
|
|
33
|
-
for (const reason of collection.ignoredChangedPathReasons) {
|
|
34
|
-
ignoredReasonByKey.set(`${reason.path}:${reason.reasonCode}`, reason);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return {
|
|
38
|
-
observedChangedPaths: uniqueWorkspacePaths(collections.flatMap((collection) => collection.observedChangedPaths)),
|
|
39
|
-
changedPaths: uniqueWorkspacePaths(collections.flatMap((collection) => collection.changedPaths)),
|
|
40
|
-
ignoredChangedPaths: uniqueWorkspacePaths(collections.flatMap((collection) => collection.ignoredChangedPaths)),
|
|
41
|
-
ignoredChangedPathReasons: Array.from(ignoredReasonByKey.values())
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
export function createIgnoredWorkspaceChangedPathReasons(paths, plan) {
|
|
45
|
-
const reasons = [];
|
|
46
|
-
for (const file of uniqueWorkspaceChangedPaths(paths, plan)) {
|
|
47
|
-
const reasonCode = getIgnoredWorkspaceChangedPathReason(file, plan);
|
|
48
|
-
if (reasonCode)
|
|
49
|
-
reasons.push({ path: file, reasonCode });
|
|
50
|
-
}
|
|
51
|
-
return reasons;
|
|
52
|
-
}
|
|
53
|
-
export function getIgnoredWorkspaceChangedPathReason(file, plan) {
|
|
54
|
-
if (plan.mode !== 'copy' && plan.mode !== 'snapshot')
|
|
55
|
-
return undefined;
|
|
56
|
-
const noiseReason = getWorkspaceNoisePathReason(file);
|
|
57
|
-
if (noiseReason)
|
|
58
|
-
return noiseReason;
|
|
59
|
-
if (isGeneratedWorkspaceSetupFile(file) && !isExplicitWorkspaceInput(file, plan))
|
|
60
|
-
return 'generated_setup';
|
|
61
|
-
if (plan.excludes.some((entry) => workspacePathMatches(file, entry)))
|
|
62
|
-
return 'workspace_exclude';
|
|
63
|
-
if (plan.artifactIncludes.some((entry) => workspacePathMatches(file, entry)))
|
|
64
|
-
return 'artifact_include';
|
|
65
|
-
if (plan.linkPaths.some((entry) => workspacePathMatches(file, entry)))
|
|
66
|
-
return 'linked_path';
|
|
67
|
-
return undefined;
|
|
68
|
-
}
|
|
69
|
-
export function normalizeWorkspaceChangedPath(file, plan) {
|
|
70
|
-
const value = String(file ?? '').trim();
|
|
71
|
-
if (!value)
|
|
72
|
-
return undefined;
|
|
73
|
-
if (path.isAbsolute(value)) {
|
|
74
|
-
return normalizeWorkspacePath(path.relative(plan.path, value).replace(/\\/g, '/'));
|
|
75
|
-
}
|
|
76
|
-
return normalizeWorkspacePath(value);
|
|
77
|
-
}
|
|
78
|
-
export function uniqueWorkspaceChangedPaths(paths, plan) {
|
|
79
|
-
const out = [];
|
|
80
|
-
const seen = new Set();
|
|
81
|
-
for (const file of paths) {
|
|
82
|
-
const normalized = normalizeWorkspaceChangedPath(file, plan);
|
|
83
|
-
if (!normalized || seen.has(normalized))
|
|
84
|
-
continue;
|
|
85
|
-
seen.add(normalized);
|
|
86
|
-
out.push(normalized);
|
|
87
|
-
}
|
|
88
|
-
return out;
|
|
89
|
-
}
|
|
90
|
-
export function snapshotContainsWorkspacePath(snapshot, file) {
|
|
91
|
-
if (snapshot.has(file))
|
|
92
|
-
return true;
|
|
93
|
-
const prefix = file.replace(/\/$/, '') + '/';
|
|
94
|
-
for (const entry of snapshot.keys()) {
|
|
95
|
-
if (entry.startsWith(prefix))
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
function filterWorkspaceChangedPathsFromSnapshots(paths, plan, before, after) {
|
|
101
|
-
return filterWorkspaceChangedPathsWithEmptyMarkers(paths, plan, deletedChildEmptyDirectoryMarkers(paths, before, after));
|
|
102
|
-
}
|
|
103
|
-
function filterWorkspaceChangedPathsWithEmptyMarkers(paths, plan, emptyDirectoryMarkers) {
|
|
104
|
-
const observedChangedPaths = uniqueWorkspaceChangedPaths(paths, plan);
|
|
105
|
-
const changedPaths = [];
|
|
106
|
-
const ignoredChangedPaths = [];
|
|
107
|
-
const ignoredChangedPathReasons = [];
|
|
108
|
-
for (const file of observedChangedPaths) {
|
|
109
|
-
const reasonCode = emptyDirectoryMarkers.has(file)
|
|
110
|
-
? 'empty_directory_marker'
|
|
111
|
-
: getIgnoredWorkspaceChangedPathReason(file, plan);
|
|
112
|
-
if (reasonCode) {
|
|
113
|
-
ignoredChangedPaths.push(file);
|
|
114
|
-
ignoredChangedPathReasons.push({ path: file, reasonCode });
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
changedPaths.push(file);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return { observedChangedPaths, changedPaths, ignoredChangedPaths, ignoredChangedPathReasons };
|
|
121
|
-
}
|
|
122
|
-
function deletedChildEmptyDirectoryMarkers(paths, before, after) {
|
|
123
|
-
const out = new Set();
|
|
124
|
-
const changed = uniqueWorkspacePaths(paths);
|
|
125
|
-
const beforePaths = Array.from(before.keys());
|
|
126
|
-
for (const file of changed) {
|
|
127
|
-
const marker = after.get(file);
|
|
128
|
-
if (!marker?.startsWith('empty-dir'))
|
|
129
|
-
continue;
|
|
130
|
-
if (before.has(file))
|
|
131
|
-
continue;
|
|
132
|
-
const prefix = file.replace(/\/+$/, '') + '/';
|
|
133
|
-
if (beforePaths.some((candidate) => candidate.startsWith(prefix)))
|
|
134
|
-
out.add(file);
|
|
135
|
-
}
|
|
136
|
-
return out;
|
|
137
|
-
}
|
|
138
|
-
async function gitChangedPaths(cwd) {
|
|
139
|
-
const result = await runProcess('git', ['status', '--porcelain'], { cwd, allowFailure: true });
|
|
140
|
-
if (result.status !== 0)
|
|
141
|
-
return [];
|
|
142
|
-
return result.stdout.split(/\r?\n/).filter(Boolean).flatMap((line) => {
|
|
143
|
-
const value = line.slice(3);
|
|
144
|
-
return value.includes(' -> ') ? value.split(' -> ') : [value];
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
function isGeneratedWorkspaceSetupFile(file) {
|
|
148
|
-
return file === 'loom.json' || file === '.loomignore' || file === '.gitignore';
|
|
149
|
-
}
|
|
150
|
-
function isExplicitWorkspaceInput(file, plan) {
|
|
151
|
-
const inputs = [...plan.includes, ...plan.artifactIncludes, ...plan.requiredIncludes, ...plan.optionalIncludes];
|
|
152
|
-
return inputs.some((entry) => file === entry || file.startsWith(entry.replace(/\/$/, '') + '/'));
|
|
153
|
-
}
|
|
154
|
-
async function walkWorkspaceFiles(root, current, snapshot) {
|
|
155
|
-
let entries;
|
|
156
|
-
try {
|
|
157
|
-
entries = await fs.readdir(current);
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
for (const entry of entries) {
|
|
163
|
-
const absolute = path.join(current, entry);
|
|
164
|
-
const relative = path.relative(root, absolute).replace(/\\/g, '/');
|
|
165
|
-
const stat = await fs.lstat(absolute).catch(() => undefined);
|
|
166
|
-
if (!stat)
|
|
167
|
-
continue;
|
|
168
|
-
if (stat.isSymbolicLink()) {
|
|
169
|
-
const target = await fs.readlink(absolute).catch(() => '');
|
|
170
|
-
snapshot.set(relative, `link:${target}`);
|
|
171
|
-
continue;
|
|
172
|
-
}
|
|
173
|
-
if (stat.isDirectory()) {
|
|
174
|
-
if (isWorkspaceNoisePath(relative)) {
|
|
175
|
-
snapshot.set(relative, snapshotMarker('ignored-dir'));
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
const beforeSize = snapshot.size;
|
|
179
|
-
await walkWorkspaceFiles(root, absolute, snapshot);
|
|
180
|
-
if (relative && snapshot.size === beforeSize)
|
|
181
|
-
snapshot.set(relative, snapshotMarker('empty-dir'));
|
|
182
|
-
continue;
|
|
183
|
-
}
|
|
184
|
-
if (stat.isFile()) {
|
|
185
|
-
snapshot.set(relative, isWorkspaceNoisePath(relative)
|
|
186
|
-
? await snapshotFileMarker('ignored-file', absolute, stat)
|
|
187
|
-
: await snapshotFileMarker('file', absolute, stat));
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
async function snapshotFileMarker(kind, absolute, stat) {
|
|
192
|
-
try {
|
|
193
|
-
const hash = createHash('sha256').update(await fs.readFile(absolute)).digest('hex');
|
|
194
|
-
return `${kind}:${stat.size}:${hash}`;
|
|
195
|
-
}
|
|
196
|
-
catch {
|
|
197
|
-
return `${kind}:${stat.size}:unreadable`;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
function snapshotMarker(kind) {
|
|
201
|
-
return kind;
|
|
202
|
-
}
|
|
203
|
-
function diffWorkspaceFiles(before, after) {
|
|
204
|
-
const changed = new Set();
|
|
205
|
-
for (const [file, marker] of after) {
|
|
206
|
-
if (before.get(file) !== marker)
|
|
207
|
-
changed.add(file);
|
|
208
|
-
}
|
|
209
|
-
for (const file of before.keys()) {
|
|
210
|
-
if (!after.has(file))
|
|
211
|
-
changed.add(file);
|
|
212
|
-
}
|
|
213
|
-
return Array.from(changed).sort();
|
|
214
|
-
}
|
|
215
|
-
//# sourceMappingURL=codex-workspace-change-paths.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-workspace-change-paths.js","sourceRoot":"","sources":["../src/codex-workspace-change-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type FrontierCodexWorkspaceFileSnapshot } from './codex-workspace-change-paths.js';
|
|
2
|
-
import type { FrontierCodexWorkspacePlan } from './index.js';
|
|
3
|
-
export interface FrontierCodexWorkspaceRestoreRecord {
|
|
4
|
-
path: string;
|
|
5
|
-
action: 'restored' | 'deleted' | 'missing' | 'skipped';
|
|
6
|
-
reason: string;
|
|
7
|
-
}
|
|
8
|
-
export declare function restoreWorkspaceChangedPaths(input: {
|
|
9
|
-
workspace: string;
|
|
10
|
-
sourceRoot: string;
|
|
11
|
-
workspacePlan: FrontierCodexWorkspacePlan;
|
|
12
|
-
baseline?: FrontierCodexWorkspaceFileSnapshot;
|
|
13
|
-
changedPaths: readonly string[];
|
|
14
|
-
}): Promise<FrontierCodexWorkspaceRestoreRecord[]>;
|
|
15
|
-
//# sourceMappingURL=codex-workspace-restore.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-workspace-restore.d.ts","sourceRoot":"","sources":["../src/codex-workspace-restore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,KAAK,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AAC3H,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,mCAAmC;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACvD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,4BAA4B,CAAC,KAAK,EAAE;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,EAAE,kCAAkC,CAAC;IAC9C,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,GAAG,OAAO,CAAC,mCAAmC,EAAE,CAAC,CAwCjD"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { pathExists, uniqueWorkspacePaths } from './common.js';
|
|
4
|
-
import { snapshotContainsWorkspacePath } from './codex-workspace-change-paths.js';
|
|
5
|
-
export async function restoreWorkspaceChangedPaths(input) {
|
|
6
|
-
const paths = uniqueWorkspacePaths(input.changedPaths);
|
|
7
|
-
if (!paths.length)
|
|
8
|
-
return [];
|
|
9
|
-
if (input.workspacePlan.mode !== 'copy' && input.workspacePlan.mode !== 'snapshot') {
|
|
10
|
-
return paths.map((file) => ({
|
|
11
|
-
path: file,
|
|
12
|
-
action: 'skipped',
|
|
13
|
-
reason: `workspace mode ${input.workspacePlan.mode} is not isolated`
|
|
14
|
-
}));
|
|
15
|
-
}
|
|
16
|
-
const records = [];
|
|
17
|
-
for (const file of paths) {
|
|
18
|
-
const source = path.join(input.sourceRoot, file);
|
|
19
|
-
const target = path.join(input.workspace, file);
|
|
20
|
-
const sourceExists = await pathExists(source);
|
|
21
|
-
const targetExists = await pathExists(target);
|
|
22
|
-
const existedAtBaseline = input.baseline ? snapshotContainsWorkspacePath(input.baseline, file) : undefined;
|
|
23
|
-
if (input.baseline && !existedAtBaseline) {
|
|
24
|
-
if (targetExists) {
|
|
25
|
-
await fs.rm(target, { recursive: true, force: true });
|
|
26
|
-
await pruneUnauthorizedEmptyParents(input.workspace, file, input.baseline);
|
|
27
|
-
records.push({ path: file, action: 'deleted', reason: 'removed unauthorized new path' });
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
records.push({ path: file, action: 'missing', reason: 'path absent in workspace baseline and workspace' });
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
else if (sourceExists) {
|
|
34
|
-
await fs.rm(target, { recursive: true, force: true });
|
|
35
|
-
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
36
|
-
await fs.cp(source, target, { recursive: true, force: true, verbatimSymlinks: true });
|
|
37
|
-
records.push({ path: file, action: 'restored', reason: 'restored from source root' });
|
|
38
|
-
}
|
|
39
|
-
else if (targetExists) {
|
|
40
|
-
await fs.rm(target, { recursive: true, force: true });
|
|
41
|
-
if (input.baseline)
|
|
42
|
-
await pruneUnauthorizedEmptyParents(input.workspace, file, input.baseline);
|
|
43
|
-
records.push({ path: file, action: 'deleted', reason: 'removed unauthorized path missing from source root' });
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
records.push({ path: file, action: 'missing', reason: 'path absent in source and workspace' });
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return records;
|
|
50
|
-
}
|
|
51
|
-
async function pruneUnauthorizedEmptyParents(workspace, file, baseline) {
|
|
52
|
-
let current = path.dirname(file);
|
|
53
|
-
while (current && current !== '.' && !path.isAbsolute(current)) {
|
|
54
|
-
if (snapshotContainsWorkspacePath(baseline, current))
|
|
55
|
-
return;
|
|
56
|
-
const absolute = path.join(workspace, current);
|
|
57
|
-
try {
|
|
58
|
-
await fs.rmdir(absolute);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
current = path.dirname(current);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=codex-workspace-restore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-workspace-restore.js","sourceRoot":"","sources":["../src/codex-workspace-restore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAA2C,MAAM,mCAAmC,CAAC;AAS3H,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,KAMlD;IACC,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC7B,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACnF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,kBAAkB,KAAK,CAAC,aAAa,CAAC,IAAI,kBAAkB;SACrE,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM,OAAO,GAA0C,EAAE,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3G,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzC,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtD,MAAM,6BAA6B,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC3E,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;YAC3F,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iDAAiD,EAAE,CAAC,CAAC;YAC7G,CAAC;QACH,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAAC;QACxF,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,IAAI,KAAK,CAAC,QAAQ;gBAAE,MAAM,6BAA6B,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/F,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,oDAAoD,EAAE,CAAC,CAAC;QAChH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,6BAA6B,CAC1C,SAAiB,EACjB,IAAY,EACZ,QAA4C;IAE5C,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,OAAO,IAAI,OAAO,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,IAAI,6BAA6B,CAAC,QAAQ,EAAE,OAAO,CAAC;YAAE,OAAO;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { FrontierCodexWorkspacePlan, FrontierCodexWorkspaceWriteFenceSummary } from './index.js';
|
|
2
|
-
export interface FrontierCodexWorkspaceWriteFenceRecord {
|
|
3
|
-
path: string;
|
|
4
|
-
absolutePath: string;
|
|
5
|
-
kind: 'file' | 'directory';
|
|
6
|
-
originalMode: number;
|
|
7
|
-
fencedMode: number;
|
|
8
|
-
}
|
|
9
|
-
export interface FrontierCodexWorkspaceWriteFenceState {
|
|
10
|
-
summary: FrontierCodexWorkspaceWriteFenceSummary;
|
|
11
|
-
records: FrontierCodexWorkspaceWriteFenceRecord[];
|
|
12
|
-
}
|
|
13
|
-
export declare function applyWorkspacePreExecWriteFence(input: {
|
|
14
|
-
workspace: string;
|
|
15
|
-
workspacePlan: FrontierCodexWorkspacePlan;
|
|
16
|
-
allowedWrites: readonly string[];
|
|
17
|
-
writableRoots?: readonly string[];
|
|
18
|
-
enabled?: boolean;
|
|
19
|
-
}): Promise<FrontierCodexWorkspaceWriteFenceState>;
|
|
20
|
-
export declare function restoreWorkspacePreExecWriteFence(state: FrontierCodexWorkspaceWriteFenceState): Promise<FrontierCodexWorkspaceWriteFenceSummary>;
|
|
21
|
-
//# sourceMappingURL=codex-workspace-write-fence.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-workspace-write-fence.d.ts","sourceRoot":"","sources":["../src/codex-workspace-write-fence.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,0BAA0B,EAAE,uCAAuC,EAAE,MAAM,YAAY,CAAC;AAEtG,MAAM,WAAW,sCAAsC;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qCAAqC;IACpD,OAAO,EAAE,uCAAuC,CAAC;IACjD,OAAO,EAAE,sCAAsC,EAAE,CAAC;CACnD;AASD,wBAAsB,+BAA+B,CAAC,KAAK,EAAE;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,0BAA0B,CAAC;IAC1C,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAgBjD;AAED,wBAAsB,iCAAiC,CACrD,KAAK,EAAE,qCAAqC,GAC3C,OAAO,CAAC,uCAAuC,CAAC,CAYlD"}
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { normalizeWorkspacePath, shouldPruneWorkspaceWriteFenceTraversal } from './common.js';
|
|
4
|
-
const WRITE_FENCE_LIMITATIONS = [
|
|
5
|
-
'chmod-readonly is a best-effort pre-exec fence, not a security sandbox',
|
|
6
|
-
'a worker running as the same OS user can chmod owned paths back to writable',
|
|
7
|
-
'workspace root and allowed-write ancestors may remain writable so allowed new files can be created',
|
|
8
|
-
'symlinks and heavyweight dependency/run artifact trees are not traversed; strict post-exec restore is the durable enforcement'
|
|
9
|
-
];
|
|
10
|
-
export async function applyWorkspacePreExecWriteFence(input) {
|
|
11
|
-
const writableRoots = uniqueWriteFenceRoots(input.writableRoots ?? input.allowedWrites);
|
|
12
|
-
const skipped = skippedWriteFenceReason(input.enabled !== false, input.workspacePlan);
|
|
13
|
-
if (skipped)
|
|
14
|
-
return { records: [], summary: createWriteFenceSummary({ mode: 'none', skippedReason: skipped, writableRoots }) };
|
|
15
|
-
const records = [];
|
|
16
|
-
await walkWorkspaceWriteFence(input.workspace, input.workspace, writableRoots, records);
|
|
17
|
-
return {
|
|
18
|
-
records,
|
|
19
|
-
summary: createWriteFenceSummary({
|
|
20
|
-
mode: 'chmod-readonly',
|
|
21
|
-
applied: records.length > 0,
|
|
22
|
-
lockedPathCount: records.length,
|
|
23
|
-
sampleLockedPaths: records.slice(0, 20).map((entry) => entry.path),
|
|
24
|
-
writableRoots
|
|
25
|
-
})
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
export async function restoreWorkspacePreExecWriteFence(state) {
|
|
29
|
-
let restoredPathCount = 0;
|
|
30
|
-
let failedRestoreCount = 0;
|
|
31
|
-
for (const record of [...state.records].reverse()) {
|
|
32
|
-
try {
|
|
33
|
-
await fs.chmod(record.absolutePath, record.originalMode);
|
|
34
|
-
restoredPathCount += 1;
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
failedRestoreCount += 1;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return { ...state.summary, restoredPathCount, failedRestoreCount };
|
|
41
|
-
}
|
|
42
|
-
async function walkWorkspaceWriteFence(root, current, allowedWrites, records) {
|
|
43
|
-
const entries = await fs.readdir(current, { withFileTypes: true }).catch(() => []);
|
|
44
|
-
for (const entry of entries) {
|
|
45
|
-
const absolute = path.join(current, entry.name);
|
|
46
|
-
const relative = path.relative(root, absolute).replace(/\\/g, '/');
|
|
47
|
-
if (!relative || entry.isSymbolicLink())
|
|
48
|
-
continue;
|
|
49
|
-
if (entry.isDirectory()) {
|
|
50
|
-
if (shouldPruneWorkspaceWriteFenceTraversal(relative)) {
|
|
51
|
-
await fenceWorkspacePath(absolute, relative, 'directory', allowedWrites, records);
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
await walkWorkspaceWriteFence(root, absolute, allowedWrites, records);
|
|
55
|
-
await fenceWorkspacePath(absolute, relative, 'directory', allowedWrites, records);
|
|
56
|
-
}
|
|
57
|
-
else if (entry.isFile()) {
|
|
58
|
-
await fenceWorkspacePath(absolute, relative, 'file', allowedWrites, records);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
async function fenceWorkspacePath(absolutePath, relativePath, kind, allowedWrites, records) {
|
|
63
|
-
const keepWritable = kind === 'directory'
|
|
64
|
-
? allowedWrites.some((entry) => writeEntryCoversDirectory(relativePath, entry))
|
|
65
|
-
: allowedWrites.some((entry) => writeEntryCoversFile(relativePath, entry));
|
|
66
|
-
if (keepWritable)
|
|
67
|
-
return;
|
|
68
|
-
const stat = await fs.lstat(absolutePath).catch(() => undefined);
|
|
69
|
-
if (!stat)
|
|
70
|
-
return;
|
|
71
|
-
const originalMode = stat.mode & 0o7777;
|
|
72
|
-
const fencedMode = originalMode & ~0o222;
|
|
73
|
-
if (fencedMode === originalMode)
|
|
74
|
-
return;
|
|
75
|
-
await fs.chmod(absolutePath, fencedMode).catch(() => { });
|
|
76
|
-
const after = await fs.lstat(absolutePath).catch(() => undefined);
|
|
77
|
-
if (!after || (after.mode & 0o222) !== 0)
|
|
78
|
-
return;
|
|
79
|
-
records.push({ path: relativePath, absolutePath, kind, originalMode, fencedMode });
|
|
80
|
-
}
|
|
81
|
-
function writeEntryCoversFile(file, entry) {
|
|
82
|
-
const parsed = parseWriteFenceEntry(entry);
|
|
83
|
-
if (!parsed)
|
|
84
|
-
return false;
|
|
85
|
-
if (parsed.all)
|
|
86
|
-
return true;
|
|
87
|
-
return file === parsed.prefix || file.startsWith(parsed.prefix + '/');
|
|
88
|
-
}
|
|
89
|
-
function writeEntryCoversDirectory(directory, entry) {
|
|
90
|
-
const parsed = parseWriteFenceEntry(entry);
|
|
91
|
-
if (!parsed)
|
|
92
|
-
return false;
|
|
93
|
-
if (parsed.all)
|
|
94
|
-
return true;
|
|
95
|
-
return directory === parsed.prefix
|
|
96
|
-
|| directory.startsWith(parsed.prefix + '/')
|
|
97
|
-
|| parsed.prefix.startsWith(directory + '/');
|
|
98
|
-
}
|
|
99
|
-
function parseWriteFenceEntry(entry) {
|
|
100
|
-
const raw = String(entry ?? '').trim().replace(/\\/g, '/').replace(/\/+$/, '');
|
|
101
|
-
if (!raw || raw.includes('\0') || path.isAbsolute(raw) || path.win32.isAbsolute(raw))
|
|
102
|
-
return undefined;
|
|
103
|
-
if (raw === '*' || raw === '**' || raw === '**/*')
|
|
104
|
-
return { all: true };
|
|
105
|
-
const starIndex = raw.indexOf('*');
|
|
106
|
-
const staticPart = writeFenceStaticRoot(raw, starIndex);
|
|
107
|
-
const prefix = normalizeWorkspacePath(staticPart);
|
|
108
|
-
return prefix ? { all: false, prefix } : undefined;
|
|
109
|
-
}
|
|
110
|
-
function writeFenceStaticRoot(raw, starIndex) {
|
|
111
|
-
if (starIndex < 0)
|
|
112
|
-
return raw.replace(/\/+$/, '');
|
|
113
|
-
const staticPart = raw.slice(0, starIndex);
|
|
114
|
-
if (staticPart.endsWith('/'))
|
|
115
|
-
return staticPart.replace(/\/+$/, '');
|
|
116
|
-
const segmentEnd = staticPart.lastIndexOf('/');
|
|
117
|
-
if (segmentEnd < 0)
|
|
118
|
-
return '';
|
|
119
|
-
return staticPart.slice(0, segmentEnd).replace(/\/+$/, '');
|
|
120
|
-
}
|
|
121
|
-
function skippedWriteFenceReason(enabled, plan) {
|
|
122
|
-
if (!enabled)
|
|
123
|
-
return 'worker execution skipped';
|
|
124
|
-
if (plan.allowedWritePolicy.mode !== 'strict')
|
|
125
|
-
return 'allowed write policy is audit';
|
|
126
|
-
if (plan.mode !== 'copy' && plan.mode !== 'snapshot')
|
|
127
|
-
return `workspace mode ${plan.mode} is not isolated`;
|
|
128
|
-
return undefined;
|
|
129
|
-
}
|
|
130
|
-
function createWriteFenceSummary(input) {
|
|
131
|
-
return {
|
|
132
|
-
mode: input.mode,
|
|
133
|
-
applied: input.applied ?? false,
|
|
134
|
-
...(input.skippedReason ? { skippedReason: input.skippedReason } : {}),
|
|
135
|
-
lockedPathCount: input.lockedPathCount ?? 0,
|
|
136
|
-
restoredPathCount: 0,
|
|
137
|
-
failedRestoreCount: 0,
|
|
138
|
-
sampleLockedPaths: input.sampleLockedPaths ?? [],
|
|
139
|
-
writableRoots: uniqueWriteFenceRoots(input.writableRoots),
|
|
140
|
-
limitations: WRITE_FENCE_LIMITATIONS
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
function uniqueWriteFenceRoots(values) {
|
|
144
|
-
const out = [];
|
|
145
|
-
const seen = new Set();
|
|
146
|
-
for (const value of values) {
|
|
147
|
-
const root = String(value ?? '').trim();
|
|
148
|
-
if (!root || seen.has(root))
|
|
149
|
-
continue;
|
|
150
|
-
seen.add(root);
|
|
151
|
-
out.push(root);
|
|
152
|
-
}
|
|
153
|
-
return out;
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=codex-workspace-write-fence.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-workspace-write-fence.js","sourceRoot":"","sources":["../src/codex-workspace-write-fence.ts"],"names":[],"mappings":"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"}
|