dsh-git-worktree 0.10.0 → 0.12.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/CHANGELOG.md +61 -1
- package/README.en.md +27 -17
- package/README.md +27 -17
- package/lib/adapters/git.js +45 -8
- package/lib/adapters/git.js.map +1 -1
- package/lib/adapters/project-skill-io.js +7 -1
- package/lib/adapters/project-skill-io.js.map +1 -1
- package/lib/adapters/project-skill-snapshot.d.ts +10 -0
- package/lib/adapters/project-skill-snapshot.js +182 -0
- package/lib/adapters/project-skill-snapshot.js.map +1 -0
- package/lib/adapters/project-skills.d.ts +18 -3
- package/lib/adapters/project-skills.js +102 -13
- package/lib/adapters/project-skills.js.map +1 -1
- package/lib/adapters/registry.js +4 -32
- package/lib/adapters/registry.js.map +1 -1
- package/lib/client/WorktreeCreateRow.js +14 -2
- package/lib/client/WorktreeCreateRow.js.map +1 -1
- package/lib/client/actions.d.ts +34 -1
- package/lib/client/actions.js +41 -0
- package/lib/client/actions.js.map +1 -1
- package/lib/client/index.d.ts +6 -1
- package/lib/client/index.js +11 -2
- package/lib/client/index.js.map +1 -1
- package/lib/client/pre-session/controller.js +5 -0
- package/lib/client/pre-session/controller.js.map +1 -1
- package/lib/client/review-console/PreflightStatus.js +5 -2
- package/lib/client/review-console/PreflightStatus.js.map +1 -1
- package/lib/client/review-console/ReviewActions.js +47 -46
- package/lib/client/review-console/ReviewActions.js.map +1 -1
- package/lib/client/review-console/ReviewDetailsModal.js +13 -3
- package/lib/client/review-console/ReviewDetailsModal.js.map +1 -1
- package/lib/client/review-console/review-console.styles.js +22 -11
- package/lib/client/review-console/review-console.styles.js.map +1 -1
- package/lib/client/target-console/TargetStatusAction.js +11 -9
- package/lib/client/target-console/TargetStatusAction.js.map +1 -1
- package/lib/client/target-console/WorktreeReviewStatus.js +7 -7
- package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -1
- package/lib/client/workspace-desktop.d.ts +15 -0
- package/lib/client/workspace-desktop.js +95 -0
- package/lib/client/workspace-desktop.js.map +1 -0
- package/lib/client/workspace-sidebar/index.js +6 -3
- package/lib/client/workspace-sidebar/index.js.map +1 -1
- package/lib/client.js +1598 -454
- package/lib/commit-message.d.ts +2 -0
- package/lib/commit-message.js +5 -0
- package/lib/commit-message.js.map +1 -0
- package/lib/console-host/control-plane.js +6 -5
- package/lib/console-host/control-plane.js.map +1 -1
- package/lib/console-host/review-diff.js +9 -4
- package/lib/console-host/review-diff.js.map +1 -1
- package/lib/console-remote/schemas.d.ts +1 -1
- package/lib/console-remote/schemas.js +2 -1
- package/lib/console-remote/schemas.js.map +1 -1
- package/lib/creation-failure.d.ts +6 -0
- package/lib/creation-failure.js +9 -0
- package/lib/creation-failure.js.map +1 -1
- package/lib/host-compat.js +2 -1
- package/lib/host-compat.js.map +1 -1
- package/lib/i18n/client-messages.d.ts +16 -4
- package/lib/i18n/client-messages.js +5 -5
- package/lib/i18n/client-messages.js.map +1 -1
- package/lib/i18n/host-messages.d.ts +3 -7
- package/lib/i18n/host-messages.js +3 -7
- package/lib/i18n/host-messages.js.map +1 -1
- package/lib/index.d.ts +9 -9
- package/lib/ports.d.ts +1 -1
- package/lib/session-checkout-apply.js +12 -8
- package/lib/session-checkout-apply.js.map +1 -1
- package/lib/session-checkout-module.js +16 -8
- package/lib/session-checkout-module.js.map +1 -1
- package/lib/workspace-provider-lifecycle.js +31 -6
- package/lib/workspace-provider-lifecycle.js.map +1 -1
- package/package.json +43 -41
- package/scripts/check-publish.mjs +2 -0
- package/scripts/workspace-sidebar-resources.mjs +25 -0
- package/scripts/workspace-sidebar-upstream-alpha.mjs +18 -15
- package/scripts/workspace-sidebar-upstream-next.mjs +14 -17
- package/scripts/workspace-sidebar-upstream.mjs +20 -5
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { lstat, open, readdir, readlink, realpath } from 'node:fs/promises';
|
|
3
|
+
import { dirname, isAbsolute, join, relative, parse, sep } from 'node:path';
|
|
4
|
+
import { createHash } from 'node:crypto';
|
|
5
|
+
const fail = (message, path) => new Error(`Project Skills: ${message}: ${path}`);
|
|
6
|
+
const stamp = (s) => `${s.dev}:${s.ino}:${s.mode}:${s.size}:${s.mtimeMs}:${s.ctimeMs}`;
|
|
7
|
+
/** Source-only resolver. Destination IO deliberately continues to reject links.
|
|
8
|
+
* Like project-skill-io, this detects races in a trusted local filesystem; Node
|
|
9
|
+
* does not offer openat/O_BENEATH for atomic adversarial ancestor containment.
|
|
10
|
+
*/
|
|
11
|
+
export async function snapshotSkillLinks(source, roots, boundary) {
|
|
12
|
+
const root = await realpath(boundary.root);
|
|
13
|
+
if (await realpath(source) !== root)
|
|
14
|
+
throw fail('snapshot source is not the Git root', source);
|
|
15
|
+
const metadata = await Promise.all(boundary.metadata.map(path => realpath(path)));
|
|
16
|
+
const observed = new Map();
|
|
17
|
+
const links = [];
|
|
18
|
+
const files = [];
|
|
19
|
+
const directories = [];
|
|
20
|
+
const sourcePaths = new Set();
|
|
21
|
+
let entries = 0, bytes = 0;
|
|
22
|
+
function contained(path, container) {
|
|
23
|
+
const rel = relative(container, path);
|
|
24
|
+
return rel === '' || (!isAbsolute(rel) && rel !== '..' && !rel.startsWith(`..${sep}`));
|
|
25
|
+
}
|
|
26
|
+
function safe(path, logical) {
|
|
27
|
+
if (!contained(path, root))
|
|
28
|
+
throw fail('link escapes Git repository', logical);
|
|
29
|
+
const parts = relative(root, path).split(sep);
|
|
30
|
+
if (parts.length > 67)
|
|
31
|
+
throw fail('source path exceeds depth limit', logical);
|
|
32
|
+
if (parts.some(part => part.toLowerCase() === '.git') || metadata.some(dir => contained(path, dir)))
|
|
33
|
+
throw fail('link enters Git metadata', logical);
|
|
34
|
+
if (parts.some(part => /[\\:\x00-\x1f]/.test(part)))
|
|
35
|
+
throw fail('unsupported source path', logical);
|
|
36
|
+
}
|
|
37
|
+
async function observe(path, logical) {
|
|
38
|
+
let stat;
|
|
39
|
+
try {
|
|
40
|
+
stat = await lstat(path);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (error.code === 'ENOENT')
|
|
44
|
+
throw fail('dangling link or missing source', logical);
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
const value = stamp(stat);
|
|
48
|
+
if (observed.has(path) && observed.get(path) !== value)
|
|
49
|
+
throw fail('source changed during snapshot', logical);
|
|
50
|
+
observed.set(path, value);
|
|
51
|
+
if (stat.isFile() || stat.isSymbolicLink())
|
|
52
|
+
sourcePaths.add(relative(root, path).split(sep).join('/'));
|
|
53
|
+
return stat;
|
|
54
|
+
}
|
|
55
|
+
async function resolvePath(path, logical, chain = new Set()) {
|
|
56
|
+
safe(path, logical);
|
|
57
|
+
let current = root;
|
|
58
|
+
for (const part of relative(root, path).split(sep).filter(Boolean)) {
|
|
59
|
+
current = join(current, part);
|
|
60
|
+
safe(current, logical);
|
|
61
|
+
const stat = await observe(current, logical);
|
|
62
|
+
if (stat.isSymbolicLink()) {
|
|
63
|
+
if (chain.has(current) || chain.size >= 64)
|
|
64
|
+
throw fail('cyclic link or link depth limit', logical);
|
|
65
|
+
const next = new Set(chain).add(current);
|
|
66
|
+
const target = await readlink(current);
|
|
67
|
+
let targetPath = isAbsolute(target) ? parse(target).root : dirname(current);
|
|
68
|
+
// Keep `..` in traversal order; normalizing it before resolving an
|
|
69
|
+
// intermediate link could read a different path or hide a boundary hop.
|
|
70
|
+
for (const segment of target.slice(isAbsolute(target) ? parse(target).root.length : 0).split(sep)) {
|
|
71
|
+
if (!segment || segment === '.')
|
|
72
|
+
continue;
|
|
73
|
+
if (segment === '..') {
|
|
74
|
+
targetPath = dirname(targetPath);
|
|
75
|
+
safe(targetPath, logical);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
const candidate = join(targetPath, segment);
|
|
79
|
+
// Absolute targets must enter the root through its literal prefix.
|
|
80
|
+
if (isAbsolute(target) && contained(root, candidate) && !contained(candidate, root)) {
|
|
81
|
+
targetPath = candidate;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
targetPath = await resolvePath(candidate, logical, next);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
safe(targetPath, logical);
|
|
88
|
+
current = targetPath;
|
|
89
|
+
}
|
|
90
|
+
else if (!stat.isFile() && !stat.isDirectory())
|
|
91
|
+
throw fail('special file is not supported', logical);
|
|
92
|
+
}
|
|
93
|
+
return current;
|
|
94
|
+
}
|
|
95
|
+
// Record a physically checked-out link only until the first expanded alias.
|
|
96
|
+
async function walk(logical, physical, depth, ancestors, expanded) {
|
|
97
|
+
if (++entries > 10000 || depth > 64)
|
|
98
|
+
throw fail('Skill tree exceeds the inspection limit', logical);
|
|
99
|
+
if (logical.split('/').some(part => !part || part === '.' || part === '..' || /[\\:\x00-\x1f]/.test(part)))
|
|
100
|
+
throw fail('unsupported Skill path', logical);
|
|
101
|
+
safe(physical, logical);
|
|
102
|
+
const original = await observe(physical, logical);
|
|
103
|
+
if (original.isSymbolicLink() && !expanded) {
|
|
104
|
+
links.push({ path: logical, target: await readlink(physical) });
|
|
105
|
+
expanded = true;
|
|
106
|
+
}
|
|
107
|
+
const path = await resolvePath(physical, logical);
|
|
108
|
+
const stat = await observe(path, logical);
|
|
109
|
+
if (depth === 0 && !stat.isDirectory())
|
|
110
|
+
throw fail('Skill root must resolve to a directory', logical);
|
|
111
|
+
if (stat.isDirectory()) {
|
|
112
|
+
if (ancestors.has(path))
|
|
113
|
+
throw fail('cyclic directory link', logical);
|
|
114
|
+
const next = new Set(ancestors).add(path);
|
|
115
|
+
const names = (await readdir(path)).sort();
|
|
116
|
+
if (!names.length)
|
|
117
|
+
directories.push(logical);
|
|
118
|
+
for (const name of names)
|
|
119
|
+
await walk(`${logical}/${name}`, join(path, name), depth + 1, next, expanded);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (!stat.isFile())
|
|
123
|
+
throw fail('special file is not supported', logical);
|
|
124
|
+
if (files.length >= 5000 || bytes + stat.size > 64 * 1024 * 1024)
|
|
125
|
+
throw fail('Skill snapshot exceeds the safety limit', logical);
|
|
126
|
+
const handle = await open(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0) | (constants.O_NONBLOCK ?? 0));
|
|
127
|
+
try {
|
|
128
|
+
const before = await handle.stat();
|
|
129
|
+
if (stamp(before) !== stamp(stat))
|
|
130
|
+
throw fail('source changed during snapshot', logical);
|
|
131
|
+
const buffer = Buffer.alloc(stat.size + 1);
|
|
132
|
+
let size = 0;
|
|
133
|
+
while (size < buffer.length) {
|
|
134
|
+
const read = await handle.read(buffer, size, buffer.length - size, size);
|
|
135
|
+
if (!read.bytesRead)
|
|
136
|
+
break;
|
|
137
|
+
size += read.bytesRead;
|
|
138
|
+
}
|
|
139
|
+
if (size !== stat.size || stamp(await handle.stat()) !== stamp(before) || stamp(await lstat(path)) !== stamp(before))
|
|
140
|
+
throw fail('source changed during snapshot', logical);
|
|
141
|
+
bytes += size;
|
|
142
|
+
const content = buffer.subarray(0, size);
|
|
143
|
+
files.push({ path: logical, content, hash: createHash('sha256').update(content).digest('hex'), mode: stat.mode & 0o777 });
|
|
144
|
+
sourcePaths.add(relative(root, path).split(sep).join('/'));
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
await handle.close();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
await observe(root, '.');
|
|
151
|
+
for (const logical of roots) {
|
|
152
|
+
// Only absent roots are optional; missing targets within a root are errors.
|
|
153
|
+
let parent = root;
|
|
154
|
+
const parts = logical.split('/');
|
|
155
|
+
let absent = false;
|
|
156
|
+
for (const [index, part] of parts.entries()) {
|
|
157
|
+
const path = join(parent, part);
|
|
158
|
+
try {
|
|
159
|
+
const stat = await lstat(path);
|
|
160
|
+
if (stat.isSymbolicLink() && index < parts.length - 1)
|
|
161
|
+
throw fail('link above Skill root is not supported', logical);
|
|
162
|
+
parent = path;
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
if (error.code === 'ENOENT') {
|
|
166
|
+
absent = true;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
;
|
|
170
|
+
throw error;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (!absent)
|
|
174
|
+
await walk(logical, join(root, logical), 0, new Set(), false);
|
|
175
|
+
}
|
|
176
|
+
for (const [path, expected] of observed) {
|
|
177
|
+
if (stamp(await lstat(path)) !== expected)
|
|
178
|
+
throw fail('source changed during snapshot', relative(root, path));
|
|
179
|
+
}
|
|
180
|
+
return { files, directories, links, sourcePaths: [...sourcePaths] };
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=project-skill-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-skill-snapshot.js","sourceRoot":"","sources":["../../src/adapters/project-skill-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
|
+
import { type SkillBoundary } from './project-skill-snapshot.js';
|
|
1
2
|
export declare const PROJECT_SKILL_ROOTS: readonly [".dsh/skills", ".agents/skills", ".claude/skills"];
|
|
2
3
|
interface Entry {
|
|
3
4
|
path: string;
|
|
4
5
|
hash: string;
|
|
5
6
|
mode: number;
|
|
6
7
|
}
|
|
8
|
+
interface SkillLink {
|
|
9
|
+
path: string;
|
|
10
|
+
target: string;
|
|
11
|
+
entry?: string;
|
|
12
|
+
}
|
|
7
13
|
export interface SkillSnapshot {
|
|
8
14
|
directories?: string[];
|
|
9
15
|
files: Array<Entry & {
|
|
10
16
|
content: Buffer;
|
|
11
17
|
}>;
|
|
18
|
+
links?: SkillLink[];
|
|
19
|
+
sourcePaths?: string[];
|
|
12
20
|
}
|
|
13
21
|
export interface CarriedSkillState {
|
|
14
22
|
paths: string[];
|
|
@@ -21,7 +29,7 @@ export declare class ProjectSkillStore {
|
|
|
21
29
|
private readonly directory;
|
|
22
30
|
constructor(directory: string);
|
|
23
31
|
private file;
|
|
24
|
-
snapshot(source: string): Promise<SkillSnapshot>;
|
|
32
|
+
snapshot(source: string, boundary?: SkillBoundary): Promise<SkillSnapshot>;
|
|
25
33
|
private load;
|
|
26
34
|
carry(snapshot: SkillSnapshot, target: string): Promise<void>;
|
|
27
35
|
scope(root: string): Promise<{
|
|
@@ -30,11 +38,18 @@ export declare class ProjectSkillStore {
|
|
|
30
38
|
} | null>;
|
|
31
39
|
paths(root: string): Promise<string[] | null>;
|
|
32
40
|
state(root: string, tracked?: ReadonlySet<string>): Promise<CarriedSkillState | null>;
|
|
41
|
+
/** Freeze aliases and restore only exact, provenance-backed tracked links in a temporary index. */
|
|
42
|
+
projection(root: string, index: Buffer | string, head: Buffer | string): Promise<{
|
|
43
|
+
remove: string[];
|
|
44
|
+
restore: string[];
|
|
45
|
+
links: string[];
|
|
46
|
+
} | null>;
|
|
47
|
+
private assertFrozenLinks;
|
|
33
48
|
assertRemovable(root: string, tracked: ReadonlySet<string>): Promise<void>;
|
|
34
49
|
forget(root: string): Promise<void>;
|
|
35
50
|
}
|
|
36
51
|
export declare function trackedSkillPaths(indexEntries: Buffer | string, headPaths?: Buffer | string): Set<string>;
|
|
37
|
-
/** Only
|
|
38
|
-
export declare function hasDeliverableStatus(output: string, auxiliary: ReadonlySet<string>, directories?: readonly string[]): boolean;
|
|
52
|
+
/** Only auxiliary ?? and validated materialization records are hidden. */
|
|
53
|
+
export declare function hasDeliverableStatus(output: string, auxiliary: ReadonlySet<string>, directories?: readonly string[], materialized?: ReadonlySet<string>): boolean;
|
|
39
54
|
export declare function assertSkillPath(root: string, path: string): Promise<void>;
|
|
40
55
|
export {};
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { createSkillDirectories, createSkillFiles, readSkillFiles } from './project-skill-io.js';
|
|
3
3
|
import { constants } from 'node:fs';
|
|
4
|
-
import { lstat, mkdir, open, readdir, realpath, rename, rm, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { lstat, mkdir, open, readdir, readlink, realpath, rename, rm, unlink, writeFile } from 'node:fs/promises';
|
|
5
|
+
import { snapshotSkillLinks } from './project-skill-snapshot.js';
|
|
5
6
|
import { join, resolve } from 'node:path';
|
|
6
7
|
export const PROJECT_SKILL_ROOTS = ['.dsh/skills', '.agents/skills', '.claude/skills'];
|
|
7
8
|
const MAX_FILES = 5000;
|
|
8
9
|
const MAX_BYTES = 64 * 1024 * 1024;
|
|
10
|
+
const beneath = (path, parent) => path === parent || path.startsWith(`${parent}/`);
|
|
11
|
+
const safeLinkPath = (path) => PROJECT_SKILL_ROOTS.includes(path) || safePath(path);
|
|
9
12
|
const digest = (data) => createHash('sha256').update(data).digest('hex');
|
|
10
13
|
const missing = (error) => error.code === 'ENOENT';
|
|
11
14
|
const failure = (message) => new Error(`Project Skills: ${message}`);
|
|
@@ -107,7 +110,7 @@ async function inventory(root, roots = PROJECT_SKILL_ROOTS, tracked = new Set(),
|
|
|
107
110
|
files.push({ path: relative, maxBytes: stat.size });
|
|
108
111
|
}
|
|
109
112
|
await identity(root);
|
|
110
|
-
for (const rootPath of roots)
|
|
113
|
+
for (const rootPath of [...new Set(roots)].filter(path => !roots.some(other => other !== path && beneath(path, other))))
|
|
111
114
|
await walk(rootPath, 0);
|
|
112
115
|
return (await readSkillFiles(root, rootIdentity, files)).map(file => ({ ...file, hash: digest(file.content) }));
|
|
113
116
|
}
|
|
@@ -118,7 +121,9 @@ export class ProjectSkillStore {
|
|
|
118
121
|
this.directory = directory;
|
|
119
122
|
}
|
|
120
123
|
file(root) { return join(this.directory, `${digest(resolve(root))}.json`); }
|
|
121
|
-
async snapshot(source) {
|
|
124
|
+
async snapshot(source, boundary) {
|
|
125
|
+
if (boundary)
|
|
126
|
+
return snapshotSkillLinks(source, PROJECT_SKILL_ROOTS, boundary);
|
|
122
127
|
const directories = [];
|
|
123
128
|
return { files: await inventory(source, PROJECT_SKILL_ROOTS, new Set(), directories), directories };
|
|
124
129
|
}
|
|
@@ -139,6 +144,9 @@ export class ProjectSkillStore {
|
|
|
139
144
|
const value = JSON.parse(raw);
|
|
140
145
|
if (value.version !== 1 || value.root !== await realpath(root) || value.identity !== await identity(root)
|
|
141
146
|
|| (value.directories !== undefined && (!Array.isArray(value.directories) || value.directories.length > 10000 || value.directories.some(path => typeof path !== 'string' || !safePath(`${path}/.directory-check`))))
|
|
147
|
+
|| (value.links !== undefined && (!Array.isArray(value.links) || value.links.length > 10000
|
|
148
|
+
|| value.links.some(link => !link || !safeLinkPath(link.path) || typeof link.target !== 'string'
|
|
149
|
+
|| (link.entry !== undefined && (!/^120000 [0-9a-f]{40,64} 0\t/.test(link.entry) || link.entry.slice(link.entry.indexOf('\t') + 1) !== link.path)))))
|
|
142
150
|
|| value.phase !== 'ready' || !Array.isArray(value.files) || value.files.length > MAX_FILES
|
|
143
151
|
|| value.files.some(file => !file || typeof file.path !== 'string' || !safePath(file.path)
|
|
144
152
|
|| !/^[0-9a-f]{64}$/.test(file.hash) || !Number.isInteger(file.mode) || file.mode < 0 || file.mode > 0o777)
|
|
@@ -149,16 +157,42 @@ export class ProjectSkillStore {
|
|
|
149
157
|
async carry(snapshot, target) {
|
|
150
158
|
if (await this.load(target))
|
|
151
159
|
throw failure('Skill provenance already exists for this checkout');
|
|
152
|
-
if (!snapshot.files.length && !snapshot.directories?.length)
|
|
160
|
+
if (!snapshot.files.length && !snapshot.directories?.length && !snapshot.links?.length)
|
|
153
161
|
return;
|
|
154
162
|
const root = await realpath(target);
|
|
155
163
|
const rootIdentity = await identity(target);
|
|
156
164
|
const pending = [];
|
|
157
165
|
const existing = [];
|
|
166
|
+
const links = snapshot.links ?? [];
|
|
167
|
+
const replacing = [];
|
|
168
|
+
for (const link of links) {
|
|
169
|
+
if (!safeLinkPath(link.path) || !link.target || links.some(other => other !== link && beneath(link.path, other.path)))
|
|
170
|
+
throw failure('invalid or overlapping Skill links');
|
|
171
|
+
const parent = link.path.split('/').slice(0, -1).join('/');
|
|
172
|
+
if (parent && !await inspectPath(root, parent)) {
|
|
173
|
+
if (link.entry)
|
|
174
|
+
throw failure(`checked-out Skill link is missing: ${link.path}`);
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
try {
|
|
178
|
+
const stat = await lstat(join(root, link.path));
|
|
179
|
+
if (!stat.isSymbolicLink() || await readlink(join(root, link.path)) !== link.target)
|
|
180
|
+
throw failure(`checked-out Skill link conflicts with snapshot: ${link.path}`);
|
|
181
|
+
replacing.push(link);
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
if (!missing(error) || link.entry)
|
|
185
|
+
throw error;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
158
188
|
// Complete conflict preflight before creating any auxiliary file.
|
|
159
189
|
for (const file of snapshot.files) {
|
|
160
190
|
if (!safePath(file.path) || digest(file.content) !== file.hash)
|
|
161
191
|
throw failure('invalid Skill snapshot');
|
|
192
|
+
if (links.some(link => beneath(file.path, link.path))) {
|
|
193
|
+
pending.push(file);
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
162
196
|
if (await inspectPath(root, file.path)) {
|
|
163
197
|
if (!(await lstat(join(root, file.path))).isFile())
|
|
164
198
|
throw failure(`local Skill conflicts with checked-out content: ${file.path}`);
|
|
@@ -176,18 +210,27 @@ export class ProjectSkillStore {
|
|
|
176
210
|
for (const directory of snapshot.directories ?? []) {
|
|
177
211
|
if (!safePath(`${directory}/.directory-check`))
|
|
178
212
|
throw failure('invalid Skill directory');
|
|
179
|
-
if (!await inspectPath(root, directory))
|
|
213
|
+
if (links.some(link => beneath(directory, link.path)) || !await inspectPath(root, directory))
|
|
180
214
|
directories.push(directory);
|
|
181
215
|
else if (!(await lstat(join(root, directory))).isDirectory())
|
|
182
216
|
throw failure(`Skill directory conflicts with a file: ${directory}`);
|
|
183
217
|
}
|
|
184
|
-
if (!pending.length && !directories.length)
|
|
218
|
+
if (!pending.length && !directories.length && !links.length)
|
|
185
219
|
return;
|
|
186
|
-
const manifest = { version: 1, root, identity: rootIdentity, phase: 'copying', directories, files: pending.map(({ content: _, ...file }) => file) };
|
|
220
|
+
const manifest = { version: 1, root, identity: rootIdentity, phase: 'copying', directories, links, files: pending.map(({ content: _, ...file }) => file) };
|
|
187
221
|
await mkdir(this.directory, { recursive: true });
|
|
188
222
|
const manifestPath = this.file(target);
|
|
189
223
|
// Exclusive publication prevents an earlier uncertain attempt from being overwritten.
|
|
190
224
|
await writeFile(manifestPath, JSON.stringify(manifest), { flag: 'wx', mode: 0o600 });
|
|
225
|
+
for (const link of replacing) {
|
|
226
|
+
if (rootIdentity !== await identity(target))
|
|
227
|
+
throw failure('checkout changed before Skill materialization');
|
|
228
|
+
await inspectPath(root, link.path.split('/').slice(0, -1).join('/'));
|
|
229
|
+
const path = join(root, link.path);
|
|
230
|
+
if (!(await lstat(path)).isSymbolicLink() || await readlink(path) !== link.target)
|
|
231
|
+
throw failure(`Skill link changed before materialization: ${link.path}`);
|
|
232
|
+
await unlink(path);
|
|
233
|
+
}
|
|
191
234
|
await createSkillDirectories(root, rootIdentity, directories);
|
|
192
235
|
await createSkillFiles(root, rootIdentity, pending);
|
|
193
236
|
const copied = await readSkillFiles(root, rootIdentity, pending.map(file => ({ path: file.path, maxBytes: file.content.length })));
|
|
@@ -204,14 +247,14 @@ export class ProjectSkillStore {
|
|
|
204
247
|
}
|
|
205
248
|
async scope(root) {
|
|
206
249
|
const manifest = await this.load(root);
|
|
207
|
-
return manifest ? { paths: manifest.files.map(file => file.path), directories: ownedSkillDirectories(manifest.files, manifest.directories) } : null;
|
|
250
|
+
return manifest ? { paths: manifest.files.map(file => file.path), directories: [...ownedSkillDirectories(manifest.files, manifest.directories), ...(manifest.links ?? []).map(link => link.path)] } : null;
|
|
208
251
|
}
|
|
209
252
|
async paths(root) { return (await this.scope(root))?.paths ?? null; }
|
|
210
253
|
async state(root, tracked = new Set()) {
|
|
211
254
|
const manifest = await this.load(root);
|
|
212
255
|
if (!manifest)
|
|
213
256
|
return null;
|
|
214
|
-
const files = manifest.files.filter(file => !tracked.has(file.path));
|
|
257
|
+
const files = manifest.files.filter(file => !tracked.has(file.path) || manifest.links?.some(link => beneath(file.path, link.path)));
|
|
215
258
|
const hashes = [];
|
|
216
259
|
let modified = false;
|
|
217
260
|
const roots = [...ownedSkillDirectories(manifest.files, manifest.directories), ...files.filter(file => file.path.split('/').length === 3).map(file => file.path)];
|
|
@@ -220,7 +263,8 @@ export class ProjectSkillStore {
|
|
|
220
263
|
modified ||= !present;
|
|
221
264
|
hashes.push(`${directory}${present ? 'directory' : 'missing'}`);
|
|
222
265
|
}
|
|
223
|
-
const
|
|
266
|
+
const ignoredTracked = new Set([...tracked].filter(path => !manifest.links?.some(link => beneath(path, link.path))));
|
|
267
|
+
const current = await inventory(root, [...new Set([...roots, ...(manifest.links ?? []).map(link => link.path)])], ignoredTracked);
|
|
224
268
|
const currentByPath = new Map(current.map(file => [file.path, file]));
|
|
225
269
|
for (const file of files) {
|
|
226
270
|
const observed = currentByPath.get(file.path);
|
|
@@ -240,7 +284,48 @@ export class ProjectSkillStore {
|
|
|
240
284
|
}
|
|
241
285
|
return { paths, fingerprint: digest(hashes.join('\0')), modified };
|
|
242
286
|
}
|
|
287
|
+
/** Freeze aliases and restore only exact, provenance-backed tracked links in a temporary index. */
|
|
288
|
+
async projection(root, index, head) {
|
|
289
|
+
const manifest = await this.load(root);
|
|
290
|
+
if (!manifest)
|
|
291
|
+
return null;
|
|
292
|
+
const tracked = trackedSkillPaths(index, head);
|
|
293
|
+
const state = await this.state(root, tracked);
|
|
294
|
+
const linkPaths = (manifest.links ?? []).map(link => link.path);
|
|
295
|
+
const entries = new Set(index.toString().split('\0').filter(Boolean));
|
|
296
|
+
const headEntries = new Set(head.toString().split('\0').filter(Boolean));
|
|
297
|
+
for (const link of manifest.links ?? []) {
|
|
298
|
+
const treeEntry = link.entry?.replace(' 0\t', '\t').replace('120000 ', '120000 blob ');
|
|
299
|
+
if (link.entry && (!entries.has(link.entry) || !headEntries.has(treeEntry)))
|
|
300
|
+
throw failure(`tracked Skill link/index changed; retain checkout and resolve explicitly: ${link.path}`);
|
|
301
|
+
if ([...headEntries].some(entry => beneath(entry.slice(entry.indexOf('\t') + 1), link.path) && entry !== treeEntry))
|
|
302
|
+
throw failure(`materialized Skill HEAD changed; retain checkout and resolve explicitly: ${link.path}`);
|
|
303
|
+
if ([...entries].some(entry => beneath(entry.slice(entry.indexOf('\t') + 1), link.path) && entry !== link.entry))
|
|
304
|
+
throw failure(`materialized Skill was staged; retain checkout and resolve explicitly: ${link.path}`);
|
|
305
|
+
}
|
|
306
|
+
await this.assertFrozenLinks(root, manifest);
|
|
307
|
+
return { remove: state?.paths ?? [], restore: (manifest.links ?? []).flatMap(link => link.entry ? [link.entry] : []), links: linkPaths };
|
|
308
|
+
}
|
|
309
|
+
async assertFrozenLinks(root, manifest) {
|
|
310
|
+
for (const link of manifest.links ?? []) {
|
|
311
|
+
const expected = manifest.files.filter(file => beneath(file.path, link.path));
|
|
312
|
+
const emptyDirectories = [];
|
|
313
|
+
const current = await inventory(root, [link.path], new Set(), emptyDirectories);
|
|
314
|
+
const expectedDirectories = (manifest.directories ?? []).filter(path => beneath(path, link.path));
|
|
315
|
+
if (emptyDirectories.length !== expectedDirectories.length || emptyDirectories.some(path => !expectedDirectories.includes(path)))
|
|
316
|
+
throw failure(`materialized Skill directories changed: ${link.path}`);
|
|
317
|
+
if (current.length !== expected.length || current.some(file => !expected.some(before => before.path === file.path && before.hash === file.hash && before.mode === file.mode)))
|
|
318
|
+
throw failure(`materialized Skill snapshot changed; retain checkout and edit canonical source instead: ${link.path}`);
|
|
319
|
+
for (const directory of manifest.directories ?? []) {
|
|
320
|
+
if (beneath(directory, link.path) && (!await inspectPath(root, directory) || !(await lstat(join(root, directory))).isDirectory()))
|
|
321
|
+
throw failure(`materialized Skill directory changed: ${directory}`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
243
325
|
async assertRemovable(root, tracked) {
|
|
326
|
+
const manifest = await this.load(root);
|
|
327
|
+
if (manifest)
|
|
328
|
+
await this.assertFrozenLinks(root, manifest);
|
|
244
329
|
const state = await this.state(root, tracked);
|
|
245
330
|
if (!state)
|
|
246
331
|
return;
|
|
@@ -255,7 +340,7 @@ export class ProjectSkillStore {
|
|
|
255
340
|
async forget(root) { await rm(this.file(root), { force: true }); }
|
|
256
341
|
}
|
|
257
342
|
export function trackedSkillPaths(indexEntries, headPaths = '') {
|
|
258
|
-
const result = new Set(headPaths.toString().split('\0').filter(Boolean));
|
|
343
|
+
const result = new Set(headPaths.toString().split('\0').filter(Boolean).map(entry => entry.includes('\t') ? entry.slice(entry.indexOf('\t') + 1) : entry));
|
|
259
344
|
for (const entry of indexEntries.toString().split('\0')) {
|
|
260
345
|
const tab = entry.indexOf('\t');
|
|
261
346
|
if (tab >= 0)
|
|
@@ -263,13 +348,17 @@ export function trackedSkillPaths(indexEntries, headPaths = '') {
|
|
|
263
348
|
}
|
|
264
349
|
return result;
|
|
265
350
|
}
|
|
266
|
-
/** Only
|
|
267
|
-
export function hasDeliverableStatus(output, auxiliary, directories = []) {
|
|
351
|
+
/** Only auxiliary ?? and validated materialization records are hidden. */
|
|
352
|
+
export function hasDeliverableStatus(output, auxiliary, directories = [], materialized = new Set()) {
|
|
268
353
|
const entries = output.split('\0');
|
|
269
354
|
for (let i = 0; i < entries.length; i++) {
|
|
270
355
|
const entry = entries[i];
|
|
271
356
|
if (!entry)
|
|
272
357
|
continue;
|
|
358
|
+
// Exact unchanged provenance-backed type/deletion records only. Renames,
|
|
359
|
+
// staged changes and ordinary tracked edits are never directory-excluded.
|
|
360
|
+
if ((entry.startsWith(' D ') || entry.startsWith(' T ')) && materialized.has(entry.slice(3)))
|
|
361
|
+
continue;
|
|
273
362
|
if (!entry.startsWith('?? '))
|
|
274
363
|
return true;
|
|
275
364
|
const path = entry.slice(3);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-skills.js","sourceRoot":"","sources":["../../src/adapters/project-skills.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project-skills.js","sourceRoot":"","sources":["../../src/adapters/project-skills.ts"],"names":[],"mappings":"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"}
|
package/lib/adapters/registry.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isValidCommitMessage } from '../commit-message.js';
|
|
1
2
|
import { hostMessage } from '../i18n/host.js';
|
|
2
3
|
/**
|
|
3
4
|
* Durable registry adapter: the session-checkout registry (version 2) as one
|
|
@@ -79,7 +80,7 @@ function isPreviousReview(value) {
|
|
|
79
80
|
&& isBoundedText(value.reviewId, 200)
|
|
80
81
|
&& Number.isSafeInteger(value.iteration) && value.iteration >= 1
|
|
81
82
|
&& isBoundedText(value.summary, 1000)
|
|
82
|
-
&&
|
|
83
|
+
&& isValidCommitMessage(value.suggestedCommitMessage)
|
|
83
84
|
&& Array.isArray(value.changedFiles) && value.changedFiles.length <= 50
|
|
84
85
|
&& value.changedFiles.every(isSafeRelativePath);
|
|
85
86
|
}
|
|
@@ -96,7 +97,7 @@ function isCheckpoint(value) {
|
|
|
96
97
|
&& isOid(value.commitOid)
|
|
97
98
|
&& isOid(value.parentOid)
|
|
98
99
|
&& isBoundedText(value.summary, 1000)
|
|
99
|
-
&&
|
|
100
|
+
&& isValidCommitMessage(value.commitMessage)
|
|
100
101
|
&& (value.validationStatus === 'passed' || value.validationStatus === 'failed' || value.validationStatus === 'partial' || value.validationStatus === 'not_run')
|
|
101
102
|
&& Array.isArray(value.changedFiles) && value.changedFiles.length <= 500
|
|
102
103
|
&& value.changedFiles.every(isSafeRelativePath);
|
|
@@ -230,7 +231,7 @@ function isJournal(value) {
|
|
|
230
231
|
&& (value.checkpointSequence === undefined || (Number.isSafeInteger(value.checkpointSequence) && value.checkpointSequence >= 1))
|
|
231
232
|
&& (value.checkpointRequestId === undefined || (isBoundedText(value.checkpointRequestId, 200) && !/[\r\n]/u.test(value.checkpointRequestId)))
|
|
232
233
|
&& (value.checkpointRequestedRevision === undefined || (Number.isSafeInteger(value.checkpointRequestedRevision) && value.checkpointRequestedRevision >= 0))
|
|
233
|
-
&& (value.checkpointMessage === undefined ||
|
|
234
|
+
&& (value.checkpointMessage === undefined || isValidCommitMessage(value.checkpointMessage))
|
|
234
235
|
&& (value.checkpointIndexTreeOid === undefined || isOid(value.checkpointIndexTreeOid))
|
|
235
236
|
&& (value.parentOid === undefined || isOid(value.parentOid))
|
|
236
237
|
&& (value.retention === undefined || value.retention === 'cleanup' || value.retention === 'retain_24h' || value.retention === 'retain_3d' || value.retention === 'retain_manual')
|
|
@@ -319,30 +320,6 @@ function isRegistry(value) {
|
|
|
319
320
|
return Object.values(value.sessionBindings).every(isSessionBinding)
|
|
320
321
|
&& Object.values(value.managedCheckouts).every(isManagedCheckout);
|
|
321
322
|
}
|
|
322
|
-
function repairOversizedPreviousReviewCommitMessage(value) {
|
|
323
|
-
if (!isRecord(value) || value.version !== 2 || !isRecord(value.managedCheckouts))
|
|
324
|
-
return null;
|
|
325
|
-
let repaired = false;
|
|
326
|
-
const managedCheckouts = Object.fromEntries(Object.entries(value.managedCheckouts).map(([checkoutId, checkout]) => {
|
|
327
|
-
if (!isRecord(checkout) || !isRecord(checkout.previousReview))
|
|
328
|
-
return [checkoutId, checkout];
|
|
329
|
-
const message = checkout.previousReview.suggestedCommitMessage;
|
|
330
|
-
if (typeof message !== 'string' || message.length <= 500)
|
|
331
|
-
return [checkoutId, checkout];
|
|
332
|
-
repaired = true;
|
|
333
|
-
return [checkoutId, {
|
|
334
|
-
...checkout,
|
|
335
|
-
previousReview: {
|
|
336
|
-
...checkout.previousReview,
|
|
337
|
-
suggestedCommitMessage: message.slice(0, 500).replace(/[\uD800-\uDBFF]$/u, ''),
|
|
338
|
-
},
|
|
339
|
-
}];
|
|
340
|
-
}));
|
|
341
|
-
if (!repaired)
|
|
342
|
-
return null;
|
|
343
|
-
const candidate = { ...value, managedCheckouts };
|
|
344
|
-
return isRegistry(candidate) ? candidate : null;
|
|
345
|
-
}
|
|
346
323
|
function migrateLegacyRegistry(value) {
|
|
347
324
|
if (!isRecord(value)
|
|
348
325
|
|| value.version !== 1
|
|
@@ -407,11 +384,6 @@ export class AtomicJsonCheckoutRegistry {
|
|
|
407
384
|
const value = readJsonFileSafe(this.path);
|
|
408
385
|
if (value && isRegistry(value))
|
|
409
386
|
return value;
|
|
410
|
-
const repaired = repairOversizedPreviousReviewCommitMessage(value);
|
|
411
|
-
if (repaired) {
|
|
412
|
-
this.write(repaired);
|
|
413
|
-
return repaired;
|
|
414
|
-
}
|
|
415
387
|
const migrated = migrateLegacyRegistry(value);
|
|
416
388
|
if (migrated) {
|
|
417
389
|
this.write(migrated);
|