@xioflow/kernel 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -13
- package/dist/capability/check.d.ts +32 -0
- package/dist/capability/check.d.ts.map +1 -0
- package/dist/capability/check.js +136 -0
- package/dist/capability/check.js.map +1 -0
- package/dist/capability/index.d.ts +3 -0
- package/dist/capability/index.d.ts.map +1 -0
- package/dist/capability/index.js +3 -0
- package/dist/capability/index.js.map +1 -0
- package/dist/capability/path-utils.d.ts +11 -0
- package/dist/capability/path-utils.d.ts.map +1 -0
- package/dist/capability/path-utils.js +46 -0
- package/dist/capability/path-utils.js.map +1 -0
- package/dist/confinement/bubblewrap.d.ts +8 -0
- package/dist/confinement/bubblewrap.d.ts.map +1 -0
- package/dist/confinement/bubblewrap.js +45 -0
- package/dist/confinement/bubblewrap.js.map +1 -0
- package/dist/confinement/detector.d.ts +4 -0
- package/dist/confinement/detector.d.ts.map +1 -0
- package/dist/confinement/detector.js +35 -0
- package/dist/confinement/detector.js.map +1 -0
- package/dist/confinement/index.d.ts +5 -0
- package/dist/confinement/index.d.ts.map +1 -0
- package/dist/confinement/index.js +5 -0
- package/dist/confinement/index.js.map +1 -0
- package/dist/confinement/sandbox-exec.d.ts +8 -0
- package/dist/confinement/sandbox-exec.d.ts.map +1 -0
- package/dist/confinement/sandbox-exec.js +30 -0
- package/dist/confinement/sandbox-exec.js.map +1 -0
- package/dist/confinement/srt.d.ts +8 -0
- package/dist/confinement/srt.d.ts.map +1 -0
- package/dist/confinement/srt.js +41 -0
- package/dist/confinement/srt.js.map +1 -0
- package/dist/domain.d.ts +26 -2
- package/dist/domain.d.ts.map +1 -1
- package/dist/domain.js +192 -18
- package/dist/domain.js.map +1 -1
- package/dist/driver/node-driver.d.ts.map +1 -1
- package/dist/driver/node-driver.js +46 -36
- package/dist/driver/node-driver.js.map +1 -1
- package/dist/driver/types.d.ts +13 -0
- package/dist/driver/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/quick-run.d.ts.map +1 -1
- package/dist/quick-run.js +5 -12
- package/dist/quick-run.js.map +1 -1
- package/dist/recovery/engine.d.ts +7 -0
- package/dist/recovery/engine.d.ts.map +1 -1
- package/dist/recovery/engine.js +174 -4
- package/dist/recovery/engine.js.map +1 -1
- package/dist/snapshot/git-shadow.d.ts +49 -0
- package/dist/snapshot/git-shadow.d.ts.map +1 -0
- package/dist/snapshot/git-shadow.js +359 -0
- package/dist/snapshot/git-shadow.js.map +1 -0
- package/dist/store/schema.d.ts +1 -1
- package/dist/store/schema.d.ts.map +1 -1
- package/dist/store/schema.js +31 -0
- package/dist/store/schema.js.map +1 -1
- package/dist/store/sqlite.d.ts +14 -1
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +145 -58
- package/dist/store/sqlite.js.map +1 -1
- package/dist/supervisor/drainer.d.ts +17 -0
- package/dist/supervisor/drainer.d.ts.map +1 -0
- package/dist/supervisor/drainer.js +200 -0
- package/dist/supervisor/drainer.js.map +1 -0
- package/dist/supervisor/service.d.ts +24 -0
- package/dist/supervisor/service.d.ts.map +1 -0
- package/dist/supervisor/service.js +588 -0
- package/dist/supervisor/service.js.map +1 -0
- package/dist/supervisor/supervisor.d.ts +61 -4
- package/dist/supervisor/supervisor.d.ts.map +1 -1
- package/dist/supervisor/supervisor.js +572 -204
- package/dist/supervisor/supervisor.js.map +1 -1
- package/dist/testing/contract-suite.d.ts.map +1 -1
- package/dist/testing/contract-suite.js +570 -2
- package/dist/testing/contract-suite.js.map +1 -1
- package/dist/types.d.ts +155 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import util from 'node:util';
|
|
5
|
+
import { execFile } from 'node:child_process';
|
|
6
|
+
import { UnsupportedCapabilityError, } from '../types.js';
|
|
7
|
+
const execFileAsync = util.promisify(execFile);
|
|
8
|
+
async function resolveRealPath(p) {
|
|
9
|
+
try {
|
|
10
|
+
return await fs.promises.realpath(p);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return path.resolve(p);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export class GitShadowSnapshotDriver {
|
|
17
|
+
name = 'git-shadow';
|
|
18
|
+
coverage = 'worktree_non_ignored';
|
|
19
|
+
timeoutMs;
|
|
20
|
+
snapshotRepos = new Map();
|
|
21
|
+
worktreeRepos = new Map();
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this.timeoutMs = options?.execGitTimeoutMs ?? 15000;
|
|
24
|
+
}
|
|
25
|
+
async git(cwd, args, env) {
|
|
26
|
+
try {
|
|
27
|
+
const mergedEnv = env ? { ...process.env, ...env } : process.env;
|
|
28
|
+
return await execFileAsync('git', args, {
|
|
29
|
+
cwd,
|
|
30
|
+
env: mergedEnv,
|
|
31
|
+
timeout: this.timeoutMs,
|
|
32
|
+
maxBuffer: 50 * 1024 * 1024,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
const msg = err.stderr || err.stdout || err.message;
|
|
37
|
+
throw new Error(`git ${args[0]} failed: ${msg}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async assertGitRepo(cwd) {
|
|
41
|
+
try {
|
|
42
|
+
const realCwd = await resolveRealPath(cwd);
|
|
43
|
+
const { stdout: rootOut } = await this.git(realCwd, ['rev-parse', '--show-toplevel']);
|
|
44
|
+
const repoRoot = await resolveRealPath(rootOut.trim());
|
|
45
|
+
const { stdout: commonOut } = await this.git(realCwd, ['rev-parse', '--git-common-dir']);
|
|
46
|
+
const rawCommon = commonOut.trim();
|
|
47
|
+
const commonDir = path.isAbsolute(rawCommon)
|
|
48
|
+
? await resolveRealPath(rawCommon)
|
|
49
|
+
: await resolveRealPath(path.resolve(repoRoot, rawCommon));
|
|
50
|
+
return { repoRoot, commonDir };
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
throw new UnsupportedCapabilityError('snapshot:git-shadow', process.platform);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async capture(roots, options) {
|
|
57
|
+
if (!roots || roots.length === 0) {
|
|
58
|
+
throw new Error('capture requires at least one root directory');
|
|
59
|
+
}
|
|
60
|
+
const realRoots = await Promise.all(roots.map((r) => resolveRealPath(r)));
|
|
61
|
+
const { repoRoot } = await this.assertGitRepo(realRoots[0]);
|
|
62
|
+
const snapshotId = options?.id || `snap-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
63
|
+
const tempDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'xio-git-shadow-index-'));
|
|
64
|
+
const indexFile = path.join(tempDir, 'index');
|
|
65
|
+
const env = { GIT_INDEX_FILE: indexFile };
|
|
66
|
+
try {
|
|
67
|
+
// 1. 若存在有效 HEAD,将 HEAD 的 tree 读入临时 index 作为基线
|
|
68
|
+
let hasHead = false;
|
|
69
|
+
try {
|
|
70
|
+
await this.git(repoRoot, ['rev-parse', '--verify', 'HEAD'], env);
|
|
71
|
+
hasHead = true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
hasHead = false;
|
|
75
|
+
}
|
|
76
|
+
if (hasHead) {
|
|
77
|
+
await this.git(repoRoot, ['read-tree', 'HEAD'], env);
|
|
78
|
+
}
|
|
79
|
+
// 2. 将指定 roots 的工作区改动加入临时 index
|
|
80
|
+
const addArgs = ['add', '-A'];
|
|
81
|
+
if (options?.includeIgnored) {
|
|
82
|
+
addArgs.push('-f');
|
|
83
|
+
}
|
|
84
|
+
addArgs.push('--');
|
|
85
|
+
for (const r of realRoots) {
|
|
86
|
+
const rel = path.relative(repoRoot, r) || '.';
|
|
87
|
+
addArgs.push(rel);
|
|
88
|
+
}
|
|
89
|
+
await this.git(repoRoot, addArgs, env);
|
|
90
|
+
// 3. 写入 tree
|
|
91
|
+
const { stdout: treeOut } = await this.git(repoRoot, ['write-tree'], env);
|
|
92
|
+
const treeFingerprint = treeOut.trim();
|
|
93
|
+
// 4. 统计树大小与大小限制检查
|
|
94
|
+
let treeSizeBytes;
|
|
95
|
+
try {
|
|
96
|
+
const { stdout: lsTreeOut } = await this.git(repoRoot, ['ls-tree', '-r', '-l', treeFingerprint]);
|
|
97
|
+
let total = 0;
|
|
98
|
+
for (const line of lsTreeOut.split('\n')) {
|
|
99
|
+
const parts = line.trim().split(/\s+/);
|
|
100
|
+
if (parts.length >= 4 && parts[1] === 'blob') {
|
|
101
|
+
const size = parseInt(parts[3], 10);
|
|
102
|
+
if (!isNaN(size))
|
|
103
|
+
total += size;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
treeSizeBytes = total;
|
|
107
|
+
}
|
|
108
|
+
catch (sizeErr) {
|
|
109
|
+
// 调用方设了大小上限却无法统计大小时,不能静默跳过上限检查
|
|
110
|
+
if (options?.maxTreeSizeBytes) {
|
|
111
|
+
throw new Error(`Cannot enforce maxTreeSizeBytes=${options.maxTreeSizeBytes}: failed to measure snapshot tree size: ${sizeErr?.message ?? String(sizeErr)}`);
|
|
112
|
+
}
|
|
113
|
+
treeSizeBytes = undefined;
|
|
114
|
+
}
|
|
115
|
+
if (options?.maxTreeSizeBytes && treeSizeBytes !== undefined && treeSizeBytes > options.maxTreeSizeBytes) {
|
|
116
|
+
throw new Error(`Snapshot tree size (${treeSizeBytes} bytes) exceeds limit of ${options.maxTreeSizeBytes} bytes`);
|
|
117
|
+
}
|
|
118
|
+
// 5. 创建独立提交对象(防 gc)并写入私有 ref
|
|
119
|
+
const commitEnv = {
|
|
120
|
+
...env,
|
|
121
|
+
GIT_AUTHOR_NAME: 'xioflow Snapshot',
|
|
122
|
+
GIT_AUTHOR_EMAIL: 'snapshot@xioflow.local',
|
|
123
|
+
GIT_COMMITTER_NAME: 'xioflow Snapshot',
|
|
124
|
+
GIT_COMMITTER_EMAIL: 'snapshot@xioflow.local',
|
|
125
|
+
};
|
|
126
|
+
const { stdout: commitOut } = await this.git(repoRoot, ['commit-tree', treeFingerprint, '-m', `xioflow snapshot ${snapshotId}`], commitEnv);
|
|
127
|
+
const commitHash = commitOut.trim();
|
|
128
|
+
const refName = `refs/xioflow/snapshots/${snapshotId}`;
|
|
129
|
+
await this.git(repoRoot, ['update-ref', refName, commitHash]);
|
|
130
|
+
this.snapshotRepos.set(snapshotId, repoRoot);
|
|
131
|
+
const ref = {
|
|
132
|
+
id: snapshotId,
|
|
133
|
+
domainId: options?.domainId || 'default',
|
|
134
|
+
opId: options?.opId || 'default-op',
|
|
135
|
+
driver: this.name,
|
|
136
|
+
roots: realRoots,
|
|
137
|
+
coverage: options?.includeIgnored ? 'full_tree' : 'worktree_non_ignored',
|
|
138
|
+
treeFingerprint,
|
|
139
|
+
commitHash,
|
|
140
|
+
createdAt: new Date().toISOString(),
|
|
141
|
+
treeSizeBytes,
|
|
142
|
+
};
|
|
143
|
+
return ref;
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
await fs.promises.rm(tempDir, { recursive: true, force: true }).catch(() => { });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async fingerprint(roots, options) {
|
|
150
|
+
if (!roots || roots.length === 0) {
|
|
151
|
+
throw new Error('fingerprint requires at least one root directory');
|
|
152
|
+
}
|
|
153
|
+
const against = options?.against;
|
|
154
|
+
const realRoots = await Promise.all(roots.map((r) => resolveRealPath(r)));
|
|
155
|
+
const { repoRoot } = await this.assertGitRepo(realRoots[0]);
|
|
156
|
+
const tempDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'xio-git-shadow-fp-'));
|
|
157
|
+
const indexFile = path.join(tempDir, 'index');
|
|
158
|
+
const env = { GIT_INDEX_FILE: indexFile };
|
|
159
|
+
try {
|
|
160
|
+
// 与 capture 保持一致:只有"没有 HEAD(空仓库)"才跳过基线;read-tree 本身失败必须暴露,
|
|
161
|
+
// 否则会得到一个与 capture 口径不同的指纹,回滚核验会给出错误结论
|
|
162
|
+
if (against) {
|
|
163
|
+
// 以快照树为基线:roots 之外的条目与快照逐字相同,只有 roots 内的差异会改变指纹
|
|
164
|
+
await this.git(repoRoot, ['read-tree', against.treeFingerprint], env);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
const hasHead = await this.git(repoRoot, ['rev-parse', '--verify', 'HEAD'], env).then(() => true, () => false);
|
|
168
|
+
if (hasHead) {
|
|
169
|
+
await this.git(repoRoot, ['read-tree', 'HEAD'], env);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const addArgs = ['add', '-A'];
|
|
173
|
+
if (against?.coverage === 'full_tree') {
|
|
174
|
+
// 与 capture(includeIgnored: true) 同口径
|
|
175
|
+
addArgs.push('-f');
|
|
176
|
+
}
|
|
177
|
+
addArgs.push('--');
|
|
178
|
+
for (const r of realRoots) {
|
|
179
|
+
const rel = path.relative(repoRoot, r) || '.';
|
|
180
|
+
addArgs.push(rel);
|
|
181
|
+
}
|
|
182
|
+
await this.git(repoRoot, addArgs, env);
|
|
183
|
+
const { stdout } = await this.git(repoRoot, ['write-tree'], env);
|
|
184
|
+
return stdout.trim();
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
await fs.promises.rm(tempDir, { recursive: true, force: true }).catch(() => { });
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async restore(snapshot, _options) {
|
|
191
|
+
const unrestoredPaths = [];
|
|
192
|
+
if (!snapshot.roots || snapshot.roots.length === 0) {
|
|
193
|
+
throw new Error('Snapshot contains no root paths');
|
|
194
|
+
}
|
|
195
|
+
const realRoots = await Promise.all(snapshot.roots.map((r) => resolveRealPath(r)));
|
|
196
|
+
const { repoRoot } = await this.assertGitRepo(realRoots[0]);
|
|
197
|
+
const tempDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'xio-git-shadow-restore-'));
|
|
198
|
+
const indexFile = path.join(tempDir, 'index');
|
|
199
|
+
const env = { GIT_INDEX_FILE: indexFile };
|
|
200
|
+
try {
|
|
201
|
+
// 1. 读取快照树到临时 index
|
|
202
|
+
const treeOrCommit = snapshot.commitHash || snapshot.treeFingerprint;
|
|
203
|
+
await this.git(repoRoot, ['read-tree', treeOrCommit], env);
|
|
204
|
+
// 快照树 = HEAD 基线 + roots 内的工作区改动,roots 之外的条目只是 HEAD 的副本,
|
|
205
|
+
// 因此所有读取与写回都必须限定在 roots 内,否则会把用户在 roots 之外未提交的改动覆盖回 HEAD。
|
|
206
|
+
const rootPathspecs = realRoots.map((r) => path.relative(repoRoot, r) || '.');
|
|
207
|
+
const splitZ = (out) => out.split('\0').filter(Boolean);
|
|
208
|
+
// 2. 以快照口径算出 roots 当前的树,只处理与快照有差异的路径:
|
|
209
|
+
// 全量 checkout-index 会在 roots=仓库根时重写整个仓库(mtime 全变,触发 watcher / 增量构建)。
|
|
210
|
+
const currentTree = await this.fingerprint(snapshot.roots, { against: snapshot });
|
|
211
|
+
const { stdout: diffOut } = await this.git(repoRoot, [
|
|
212
|
+
'diff-tree',
|
|
213
|
+
'-r',
|
|
214
|
+
'-z',
|
|
215
|
+
'--no-renames',
|
|
216
|
+
'--name-status',
|
|
217
|
+
currentTree,
|
|
218
|
+
snapshot.treeFingerprint,
|
|
219
|
+
'--',
|
|
220
|
+
...rootPathspecs,
|
|
221
|
+
]);
|
|
222
|
+
// -z 输出为 status\0path\0 交替;-z 避免非 ASCII 路径被引号转义
|
|
223
|
+
const diffFields = splitZ(diffOut);
|
|
224
|
+
const toCheckout = [];
|
|
225
|
+
const toDelete = [];
|
|
226
|
+
for (let i = 0; i + 1 < diffFields.length; i += 2) {
|
|
227
|
+
const status = diffFields[i];
|
|
228
|
+
const rel = diffFields[i + 1];
|
|
229
|
+
// current → snapshot 方向:D 表示快照里没有、当前有
|
|
230
|
+
if (status === 'D')
|
|
231
|
+
toDelete.push(rel);
|
|
232
|
+
else
|
|
233
|
+
toCheckout.push(rel);
|
|
234
|
+
}
|
|
235
|
+
// 3. 删除候选只能是未被忽略的文件(tracked + untracked):
|
|
236
|
+
// 严格尊重 .gitignore,绝不能动被忽略文件(如 .env, node_modules),full_tree 快照也一样
|
|
237
|
+
let deletable = toDelete;
|
|
238
|
+
if (toDelete.length > 0 && snapshot.coverage === 'full_tree') {
|
|
239
|
+
const { stdout: liveFilesOut } = await this.git(repoRoot, [
|
|
240
|
+
'ls-files',
|
|
241
|
+
'-z',
|
|
242
|
+
'--exclude-standard',
|
|
243
|
+
'-c',
|
|
244
|
+
'-o',
|
|
245
|
+
'--',
|
|
246
|
+
...rootPathspecs,
|
|
247
|
+
]);
|
|
248
|
+
const liveFiles = new Set(splitZ(liveFilesOut));
|
|
249
|
+
deletable = toDelete.filter((rel) => liveFiles.has(rel));
|
|
250
|
+
}
|
|
251
|
+
// 4. 清理「在工作区中未被忽略、但不在快照中」的文件
|
|
252
|
+
for (const liveRel of deletable) {
|
|
253
|
+
const absPath = path.resolve(repoRoot, liveRel);
|
|
254
|
+
const inScope = realRoots.some((root) => absPath === root || absPath.startsWith(root + path.sep));
|
|
255
|
+
if (inScope) {
|
|
256
|
+
try {
|
|
257
|
+
await fs.promises.access(absPath, fs.constants.W_OK);
|
|
258
|
+
await fs.promises.unlink(absPath);
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
unrestoredPaths.push(absPath);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// 5. 通过临时 index 只检出与快照有差异的文件(分批传参,避免超长 argv)
|
|
266
|
+
const CHECKOUT_BATCH = 500;
|
|
267
|
+
for (let i = 0; i < toCheckout.length; i += CHECKOUT_BATCH) {
|
|
268
|
+
const batch = toCheckout.slice(i, i + CHECKOUT_BATCH);
|
|
269
|
+
try {
|
|
270
|
+
await this.git(repoRoot, ['checkout-index', '-f', '--', ...batch], env);
|
|
271
|
+
}
|
|
272
|
+
catch (checkoutErr) {
|
|
273
|
+
const before = unrestoredPaths.length;
|
|
274
|
+
const lines = (checkoutErr.message || '').split('\n');
|
|
275
|
+
for (const line of lines) {
|
|
276
|
+
const match = line.match(/unable to (?:create|unlink|write) file '?([^':]+)'?/i);
|
|
277
|
+
if (match) {
|
|
278
|
+
unrestoredPaths.push(path.resolve(repoRoot, match[1].trim()));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (unrestoredPaths.length === before) {
|
|
282
|
+
throw checkoutErr;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return { unrestoredPaths };
|
|
287
|
+
}
|
|
288
|
+
finally {
|
|
289
|
+
await fs.promises.rm(tempDir, { recursive: true, force: true }).catch(() => { });
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
async prune(snapshotIds, options) {
|
|
293
|
+
for (const id of snapshotIds) {
|
|
294
|
+
// 内存映射在宿主重启后为空;此时必须由调用方给出 repoRoot,不能静默跳过让快照 ref 永久残留
|
|
295
|
+
const repoRoot = options?.repoRoot || this.snapshotRepos.get(id);
|
|
296
|
+
if (!repoRoot) {
|
|
297
|
+
throw new Error(`Cannot prune snapshot ${id}: source repository root unknown (pass options.repoRoot, e.g. SnapshotRef.roots[0])`);
|
|
298
|
+
}
|
|
299
|
+
const refName = `refs/xioflow/snapshots/${id}`;
|
|
300
|
+
const { repoRoot: resolvedRoot } = await this.assertGitRepo(repoRoot);
|
|
301
|
+
// 仓库已确认存在后,只把"ref 本来就不存在"视为已清理;删除失败原样抛出
|
|
302
|
+
const exists = await this.git(resolvedRoot, ['show-ref', '--verify', '--quiet', refName]).then(() => true, () => false);
|
|
303
|
+
if (exists) {
|
|
304
|
+
await this.git(resolvedRoot, ['update-ref', '-d', refName]);
|
|
305
|
+
}
|
|
306
|
+
this.snapshotRepos.delete(id);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* 从 linked worktree 自身反查所属仓库的 git common dir(不依赖进程内存映射,宿主重启后仍可用)
|
|
311
|
+
*/
|
|
312
|
+
async resolveWorktreeCommonDir(worktreePath) {
|
|
313
|
+
const { stdout } = await this.git(worktreePath, ['rev-parse', '--git-common-dir']);
|
|
314
|
+
const raw = stdout.trim();
|
|
315
|
+
return path.isAbsolute(raw) ? raw : path.resolve(worktreePath, raw);
|
|
316
|
+
}
|
|
317
|
+
async materialize(snapshotId, newRoot, options) {
|
|
318
|
+
const rawPath = path.resolve(newRoot);
|
|
319
|
+
const repoRoot = options?.repoRoot || this.snapshotRepos.get(snapshotId);
|
|
320
|
+
if (!repoRoot) {
|
|
321
|
+
throw new Error(`Cannot materialize snapshot ${snapshotId}: source repository root unknown`);
|
|
322
|
+
}
|
|
323
|
+
const refName = `refs/xioflow/snapshots/${snapshotId}`;
|
|
324
|
+
await this.git(repoRoot, ['worktree', 'add', '--detach', rawPath, refName]);
|
|
325
|
+
const realWorktreePath = await resolveRealPath(rawPath);
|
|
326
|
+
this.worktreeRepos.set(rawPath, repoRoot);
|
|
327
|
+
this.worktreeRepos.set(realWorktreePath, repoRoot);
|
|
328
|
+
return { worktreePath: rawPath };
|
|
329
|
+
}
|
|
330
|
+
async dematerialize(newRoot, options) {
|
|
331
|
+
const rawPath = path.resolve(newRoot);
|
|
332
|
+
let realPath;
|
|
333
|
+
try {
|
|
334
|
+
realPath = await resolveRealPath(newRoot);
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
realPath = rawPath;
|
|
338
|
+
}
|
|
339
|
+
const repoRoot = options?.repoRoot ||
|
|
340
|
+
this.worktreeRepos.get(realPath) ||
|
|
341
|
+
this.worktreeRepos.get(rawPath);
|
|
342
|
+
const args = ['worktree', 'remove'];
|
|
343
|
+
if (options?.force) {
|
|
344
|
+
args.push('--force');
|
|
345
|
+
}
|
|
346
|
+
args.push(realPath);
|
|
347
|
+
if (repoRoot) {
|
|
348
|
+
await this.git(repoRoot, args);
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
// 宿主重启后映射为空:从 worktree 自身反查仓库,而不是猜测父目录是仓库
|
|
352
|
+
const commonDir = await this.resolveWorktreeCommonDir(realPath);
|
|
353
|
+
await this.git(path.dirname(realPath), [`--git-dir=${commonDir}`, ...args]);
|
|
354
|
+
}
|
|
355
|
+
this.worktreeRepos.delete(realPath);
|
|
356
|
+
this.worktreeRepos.delete(rawPath);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=git-shadow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-shadow.js","sourceRoot":"","sources":["../../src/snapshot/git-shadow.ts"],"names":[],"mappings":"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"}
|
package/dist/store/schema.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* xioflow 数据库 Schema 定义与初始化迁移
|
|
3
3
|
*/
|
|
4
|
-
export declare const SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS owners (\n domain_id TEXT PRIMARY KEY,\n owner_id TEXT NOT NULL,\n epoch INTEGER NOT NULL,\n heartbeat_at TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n hostname TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS tasks (\n id TEXT PRIMARY KEY,\n domain_id TEXT NOT NULL,\n name TEXT NOT NULL,\n created_at TEXT NOT NULL,\n meta TEXT\n);\n\nCREATE TABLE IF NOT EXISTS runs (\n id TEXT PRIMARY KEY,\n task_id TEXT NOT NULL,\n domain_id TEXT NOT NULL,\n owner TEXT NOT NULL,\n status TEXT NOT NULL,\n termination_reason TEXT,\n started_at TEXT NOT NULL,\n ended_at TEXT,\n config_snapshot TEXT,\n FOREIGN KEY(task_id) REFERENCES tasks(id)\n);\n\nCREATE TABLE IF NOT EXISTS operations (\n id TEXT PRIMARY KEY,\n run_id TEXT NOT NULL,\n domain_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n name TEXT NOT NULL,\n input_fingerprint TEXT NOT NULL,\n status TEXT NOT NULL,\n required_resources TEXT NOT NULL,\n timeout_ms INTEGER,\n resource_budget TEXT,\n output_ref TEXT,\n process_identity TEXT,\n result TEXT,\n FOREIGN KEY(run_id) REFERENCES runs(id)\n);\n\nCREATE TABLE IF NOT EXISTS resource_leases (\n resource_id TEXT NOT NULL,\n operation_id TEXT NOT NULL,\n domain_id TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n budget TEXT,\n PRIMARY KEY (resource_id, operation_id)\n);\n\nCREATE TABLE IF NOT EXISTS journal_events (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n domain_id TEXT NOT NULL,\n run_id TEXT,\n operation_id TEXT,\n type TEXT NOT NULL,\n payload TEXT NOT NULL,\n timestamp TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_runs_task_id ON runs(task_id);\nCREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status);\nCREATE INDEX IF NOT EXISTS idx_operations_run_id ON operations(run_id);\nCREATE INDEX IF NOT EXISTS idx_operations_status ON operations(status);\nCREATE INDEX IF NOT EXISTS idx_resource_leases_op ON resource_leases(operation_id);\nCREATE INDEX IF NOT EXISTS idx_journal_events_domain ON journal_events(domain_id);\n";
|
|
4
|
+
export declare const SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS owners (\n domain_id TEXT PRIMARY KEY,\n owner_id TEXT NOT NULL,\n epoch INTEGER NOT NULL,\n heartbeat_at TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n hostname TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS tasks (\n id TEXT PRIMARY KEY,\n domain_id TEXT NOT NULL,\n name TEXT NOT NULL,\n created_at TEXT NOT NULL,\n meta TEXT\n);\n\nCREATE TABLE IF NOT EXISTS runs (\n id TEXT PRIMARY KEY,\n task_id TEXT NOT NULL,\n domain_id TEXT NOT NULL,\n owner TEXT NOT NULL,\n status TEXT NOT NULL,\n termination_reason TEXT,\n started_at TEXT NOT NULL,\n ended_at TEXT,\n config_snapshot TEXT,\n FOREIGN KEY(task_id) REFERENCES tasks(id)\n);\n\nCREATE TABLE IF NOT EXISTS operations (\n id TEXT PRIMARY KEY,\n run_id TEXT NOT NULL,\n domain_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n name TEXT NOT NULL,\n input_fingerprint TEXT NOT NULL,\n status TEXT NOT NULL,\n required_resources TEXT NOT NULL,\n mutation_roots TEXT,\n capability_id TEXT,\n timeout_ms INTEGER,\n resource_budget TEXT,\n output_ref TEXT,\n process_identity TEXT,\n result TEXT,\n FOREIGN KEY(run_id) REFERENCES runs(id)\n);\n\nCREATE TABLE IF NOT EXISTS resource_leases (\n resource_id TEXT NOT NULL,\n operation_id TEXT NOT NULL,\n domain_id TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n budget TEXT,\n PRIMARY KEY (resource_id, operation_id)\n);\n\nCREATE TABLE IF NOT EXISTS journal_events (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n domain_id TEXT NOT NULL,\n run_id TEXT,\n operation_id TEXT,\n type TEXT NOT NULL,\n payload TEXT NOT NULL,\n timestamp TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS snapshots (\n id TEXT PRIMARY KEY,\n domain_id TEXT NOT NULL,\n op_id TEXT NOT NULL,\n driver TEXT NOT NULL,\n roots TEXT NOT NULL,\n coverage TEXT NOT NULL,\n tree_fingerprint TEXT NOT NULL,\n commit_hash TEXT,\n journal_seq INTEGER,\n created_at TEXT NOT NULL,\n tree_size_bytes INTEGER\n);\n\nCREATE TABLE IF NOT EXISTS capabilities (\n id TEXT PRIMARY KEY,\n domain_id TEXT NOT NULL,\n parent_id TEXT,\n issued_by TEXT NOT NULL,\n scope TEXT NOT NULL,\n epoch INTEGER NOT NULL,\n expires_at TEXT NOT NULL,\n created_at TEXT NOT NULL,\n revoked_at TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_runs_task_id ON runs(task_id);\nCREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status);\nCREATE INDEX IF NOT EXISTS idx_operations_run_id ON operations(run_id);\nCREATE INDEX IF NOT EXISTS idx_operations_status ON operations(status);\nCREATE INDEX IF NOT EXISTS idx_resource_leases_op ON resource_leases(operation_id);\nCREATE INDEX IF NOT EXISTS idx_journal_events_domain ON journal_events(domain_id);\nCREATE INDEX IF NOT EXISTS idx_snapshots_domain ON snapshots(domain_id);\nCREATE INDEX IF NOT EXISTS idx_snapshots_journal_seq ON snapshots(journal_seq);\nCREATE INDEX IF NOT EXISTS idx_capabilities_domain ON capabilities(domain_id);\n";
|
|
5
5
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,UAAU,81FAwGtB,CAAC"}
|
package/dist/store/schema.js
CHANGED
|
@@ -41,6 +41,8 @@ CREATE TABLE IF NOT EXISTS operations (
|
|
|
41
41
|
input_fingerprint TEXT NOT NULL,
|
|
42
42
|
status TEXT NOT NULL,
|
|
43
43
|
required_resources TEXT NOT NULL,
|
|
44
|
+
mutation_roots TEXT,
|
|
45
|
+
capability_id TEXT,
|
|
44
46
|
timeout_ms INTEGER,
|
|
45
47
|
resource_budget TEXT,
|
|
46
48
|
output_ref TEXT,
|
|
@@ -68,11 +70,40 @@ CREATE TABLE IF NOT EXISTS journal_events (
|
|
|
68
70
|
timestamp TEXT NOT NULL
|
|
69
71
|
);
|
|
70
72
|
|
|
73
|
+
CREATE TABLE IF NOT EXISTS snapshots (
|
|
74
|
+
id TEXT PRIMARY KEY,
|
|
75
|
+
domain_id TEXT NOT NULL,
|
|
76
|
+
op_id TEXT NOT NULL,
|
|
77
|
+
driver TEXT NOT NULL,
|
|
78
|
+
roots TEXT NOT NULL,
|
|
79
|
+
coverage TEXT NOT NULL,
|
|
80
|
+
tree_fingerprint TEXT NOT NULL,
|
|
81
|
+
commit_hash TEXT,
|
|
82
|
+
journal_seq INTEGER,
|
|
83
|
+
created_at TEXT NOT NULL,
|
|
84
|
+
tree_size_bytes INTEGER
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
CREATE TABLE IF NOT EXISTS capabilities (
|
|
88
|
+
id TEXT PRIMARY KEY,
|
|
89
|
+
domain_id TEXT NOT NULL,
|
|
90
|
+
parent_id TEXT,
|
|
91
|
+
issued_by TEXT NOT NULL,
|
|
92
|
+
scope TEXT NOT NULL,
|
|
93
|
+
epoch INTEGER NOT NULL,
|
|
94
|
+
expires_at TEXT NOT NULL,
|
|
95
|
+
created_at TEXT NOT NULL,
|
|
96
|
+
revoked_at TEXT
|
|
97
|
+
);
|
|
98
|
+
|
|
71
99
|
CREATE INDEX IF NOT EXISTS idx_runs_task_id ON runs(task_id);
|
|
72
100
|
CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status);
|
|
73
101
|
CREATE INDEX IF NOT EXISTS idx_operations_run_id ON operations(run_id);
|
|
74
102
|
CREATE INDEX IF NOT EXISTS idx_operations_status ON operations(status);
|
|
75
103
|
CREATE INDEX IF NOT EXISTS idx_resource_leases_op ON resource_leases(operation_id);
|
|
76
104
|
CREATE INDEX IF NOT EXISTS idx_journal_events_domain ON journal_events(domain_id);
|
|
105
|
+
CREATE INDEX IF NOT EXISTS idx_snapshots_domain ON snapshots(domain_id);
|
|
106
|
+
CREATE INDEX IF NOT EXISTS idx_snapshots_journal_seq ON snapshots(journal_seq);
|
|
107
|
+
CREATE INDEX IF NOT EXISTS idx_capabilities_domain ON capabilities(domain_id);
|
|
77
108
|
`;
|
|
78
109
|
//# sourceMappingURL=schema.js.map
|
package/dist/store/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwGzB,CAAC"}
|
package/dist/store/sqlite.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Task, Run, Operation, OperationResult, OperationStatus, KernelRunStatus, TerminationReason, ResourceLease, JournalEvent, OwnerRecord, ResourceBudget } from '../types.js';
|
|
1
|
+
import { Task, Run, Operation, OperationResult, OperationStatus, KernelRunStatus, TerminationReason, ResourceLease, JournalEvent, OwnerRecord, ResourceBudget, SnapshotRef, Capability } from '../types.js';
|
|
2
2
|
export declare class SqliteStore {
|
|
3
3
|
private db;
|
|
4
4
|
private currentEpoch;
|
|
@@ -44,6 +44,7 @@ export declare class SqliteStore {
|
|
|
44
44
|
updateOperationResult(opId: string, result: OperationResult): void;
|
|
45
45
|
recordOperationResult(opId: string, result: OperationResult, releaseResources?: boolean): void;
|
|
46
46
|
recordReplay(domainId: string, opId: string, mode: 'joined' | 'recorded' | 'indeterminate', callingRunId: string): void;
|
|
47
|
+
private mapOperationRow;
|
|
47
48
|
getOperation(id: string): (Operation & {
|
|
48
49
|
domainId: string;
|
|
49
50
|
}) | null;
|
|
@@ -61,8 +62,20 @@ export declare class SqliteStore {
|
|
|
61
62
|
})[];
|
|
62
63
|
releaseResourceLease(operationId: string, resourceId?: string): void;
|
|
63
64
|
recordEventAndTransitionState(event: Omit<JournalEvent, 'seq'>): number;
|
|
65
|
+
recordJournalEvent(event: Omit<JournalEvent, 'seq'>): number;
|
|
64
66
|
getJournalEvents(domainId: string, fromSeq?: number): JournalEvent[];
|
|
65
67
|
getEventsByRun(runId: string): JournalEvent[];
|
|
68
|
+
recordSnapshot(snapshot: SnapshotRef): void;
|
|
69
|
+
getSnapshot(id: string): SnapshotRef | null;
|
|
70
|
+
findSnapshotAtOrBefore(domainId: string, seq: number): SnapshotRef | null;
|
|
71
|
+
listSnapshots(domainId: string): SnapshotRef[];
|
|
72
|
+
deleteSnapshot(id: string): void;
|
|
73
|
+
private mapSnapshotRow;
|
|
74
|
+
recordCapability(capability: Capability): void;
|
|
75
|
+
getCapability(id: string): Capability | null;
|
|
76
|
+
listCapabilities(domainId: string): Capability[];
|
|
77
|
+
revokeCapability(id: string, domainId: string, revokedAt: string): void;
|
|
78
|
+
private mapCapabilityRow;
|
|
66
79
|
close(): void;
|
|
67
80
|
}
|
|
68
81
|
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/store/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,IAAI,EACJ,GAAG,EACH,SAAS,EACT,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAAc,
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/store/sqlite.ts"],"names":[],"mappings":"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"}
|