@lesliechan721/aw 0.1.0-beta.23 → 0.1.0-beta.24
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/scripts/aw-skill-eval-materializer.js +12 -63
- package/dist/scripts/aw-skill-eval-materializer.js.map +1 -1
- package/dist/src/commands/aw-capabilities.d.ts +1 -1
- package/dist/src/commands/aw-capabilities.js +2 -1
- package/dist/src/commands/aw-capabilities.js.map +1 -1
- package/dist/src/commands/rebuild-integration.d.ts +25 -0
- package/dist/src/commands/rebuild-integration.js +154 -6
- package/dist/src/commands/rebuild-integration.js.map +1 -1
- package/dist/src/commands/review-inspection.d.ts +71 -12
- package/dist/src/commands/review-inspection.js +485 -61
- package/dist/src/commands/review-inspection.js.map +1 -1
- package/dist/src/commands/review-preparation.d.ts +49 -0
- package/dist/src/commands/review-preparation.js +427 -0
- package/dist/src/commands/review-preparation.js.map +1 -0
- package/dist/src/generators/local-plugin.d.ts +2 -1
- package/dist/src/generators/local-plugin.js +40 -34
- package/dist/src/generators/local-plugin.js.map +1 -1
- package/dist/src/index.js +146 -20
- package/dist/src/index.js.map +1 -1
- package/dist/src/portable/materializer.d.ts +1 -0
- package/dist/src/portable/materializer.js +51 -11
- package/dist/src/portable/materializer.js.map +1 -1
- package/dist/src/review/review-profile.d.ts +17 -0
- package/dist/src/review/review-profile.js +177 -0
- package/dist/src/review/review-profile.js.map +1 -0
- package/dist/src/review/review-selection.d.ts +30 -0
- package/dist/src/review/review-selection.js +527 -0
- package/dist/src/review/review-selection.js.map +1 -0
- package/dist/src/review/review-types.d.ts +68 -0
- package/dist/src/review/review-types.js +16 -0
- package/dist/src/review/review-types.js.map +1 -0
- package/dist/src/review/skill-materialization.d.ts +13 -0
- package/dist/src/review/skill-materialization.js +72 -0
- package/dist/src/review/skill-materialization.js.map +1 -0
- package/dist/src/review/source-binding.d.ts +21 -9
- package/dist/src/review/source-binding.js +58 -18
- package/dist/src/review/source-binding.js.map +1 -1
- package/dist/src/tui/console-app-v4.js +2 -1
- package/dist/src/tui/console-app-v4.js.map +1 -1
- package/dist/src/tui/controller-runtime.js +5 -2
- package/dist/src/tui/controller-runtime.js.map +1 -1
- package/dist/src/tui/model.d.ts +1 -0
- package/dist/src/tui/model.js +32 -3
- package/dist/src/tui/model.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { calculateCatalogWorkspaceSourceIdentity } from '@lesliechan721/aw-plugin-core';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import { materializeReviewNativeSkills } from './rebuild-integration.js';
|
|
5
|
+
import { resolveReviewSelection } from '../review/review-selection.js';
|
|
6
|
+
import { ReviewSelectionError, } from '../review/review-types.js';
|
|
7
|
+
import { createIsolatedSkillEnv, prepareSkillPluginBundle, } from '../review/skill-materialization.js';
|
|
8
|
+
import { AW_SOURCE_BINDING_FILENAME, writeAwSourceBinding, } from '../review/source-binding.js';
|
|
9
|
+
import { materializePortableSkills } from '../portable/materializer.js';
|
|
10
|
+
import { writePluginConfigStore } from '../utils/plugin-config.js';
|
|
11
|
+
import { canonicalizePathThroughExistingAncestor, getCodexHome, resolveAwHome, resolveClaudePaths, resolveCodexPaths, resolveRepoRoot, } from '../utils/paths.js';
|
|
12
|
+
class ReviewPreparationError extends Error {
|
|
13
|
+
code;
|
|
14
|
+
exitCode;
|
|
15
|
+
issuePath;
|
|
16
|
+
constructor(code, message, exitCode, issuePath = null) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = 'ReviewPreparationError';
|
|
19
|
+
this.code = code;
|
|
20
|
+
this.exitCode = exitCode;
|
|
21
|
+
this.issuePath = issuePath;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function isPathInsideOrEqual(root, candidate) {
|
|
25
|
+
const relative = path.relative(root, candidate);
|
|
26
|
+
return relative === '' || (!relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));
|
|
27
|
+
}
|
|
28
|
+
function pathsOverlap(left, right) {
|
|
29
|
+
return isPathInsideOrEqual(left, right) || isPathInsideOrEqual(right, left);
|
|
30
|
+
}
|
|
31
|
+
async function resolvePhysicalPath(target) {
|
|
32
|
+
let current = path.resolve(target);
|
|
33
|
+
const suffix = [];
|
|
34
|
+
while (true) {
|
|
35
|
+
const info = await fs.lstat(current).catch((error) => {
|
|
36
|
+
if (error.code === 'ENOENT')
|
|
37
|
+
return null;
|
|
38
|
+
throw error;
|
|
39
|
+
});
|
|
40
|
+
if (info) {
|
|
41
|
+
if (info.isSymbolicLink()) {
|
|
42
|
+
throw new ReviewPreparationError('unsafeOutput', `Output path contains a symbolic link: ${current}.`, 2, current);
|
|
43
|
+
}
|
|
44
|
+
if (!info.isDirectory()) {
|
|
45
|
+
throw new ReviewPreparationError('unsafeOutput', `Output parent is not a regular directory: ${current}.`, 2, current);
|
|
46
|
+
}
|
|
47
|
+
return path.join(await fs.realpath(current), ...suffix);
|
|
48
|
+
}
|
|
49
|
+
const parent = path.dirname(current);
|
|
50
|
+
if (parent === current) {
|
|
51
|
+
throw new ReviewPreparationError('unsafeOutput', 'Output path has no existing directory ancestor.', 2, path.resolve(target));
|
|
52
|
+
}
|
|
53
|
+
suffix.unshift(path.basename(current));
|
|
54
|
+
current = parent;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function installationRoots(options) {
|
|
58
|
+
const repoRoot = await resolveRepoRoot(options.cwd);
|
|
59
|
+
const roots = [
|
|
60
|
+
resolveAwHome(options.env),
|
|
61
|
+
getCodexHome(options.env),
|
|
62
|
+
path.join(repoRoot, '.agents'),
|
|
63
|
+
resolveCodexPaths(options.cwd, 'project', options.env).configDir,
|
|
64
|
+
resolveCodexPaths(options.cwd, 'user', options.env).configDir,
|
|
65
|
+
resolveClaudePaths(options.cwd, 'project', options.env).configDir,
|
|
66
|
+
resolveClaudePaths(options.cwd, 'user', options.env).configDir,
|
|
67
|
+
];
|
|
68
|
+
return [...new Set(await Promise.all(roots.map(canonicalizePathThroughExistingAncestor)))];
|
|
69
|
+
}
|
|
70
|
+
async function assertSafeOutput(options) {
|
|
71
|
+
const target = await resolvePhysicalPath(options.target);
|
|
72
|
+
const existing = await fs.lstat(target).catch((error) => {
|
|
73
|
+
if (error.code === 'ENOENT')
|
|
74
|
+
return null;
|
|
75
|
+
throw error;
|
|
76
|
+
});
|
|
77
|
+
if (existing) {
|
|
78
|
+
throw new ReviewPreparationError('unsafeOutput', `Review output already exists: ${target}.`, 2, target);
|
|
79
|
+
}
|
|
80
|
+
const sourceRoots = await Promise.all(options.selection.workspace.plugins.map((plugin) => fs.realpath(plugin.rootDir)));
|
|
81
|
+
const blockedRoots = [
|
|
82
|
+
...sourceRoots,
|
|
83
|
+
...await installationRoots(options),
|
|
84
|
+
];
|
|
85
|
+
if (target === path.parse(target).root
|
|
86
|
+
|| blockedRoots.some((root) => pathsOverlap(root, target))) {
|
|
87
|
+
throw new ReviewPreparationError('unsafeOutput', 'Review output is too broad or overlaps source or installation content.', 2, target);
|
|
88
|
+
}
|
|
89
|
+
await fs.ensureDir(path.dirname(target));
|
|
90
|
+
const rechecked = await resolvePhysicalPath(target);
|
|
91
|
+
if (rechecked !== target) {
|
|
92
|
+
throw new ReviewPreparationError('unsafeOutput', 'Review output path changed during validation.', 2, target);
|
|
93
|
+
}
|
|
94
|
+
return target;
|
|
95
|
+
}
|
|
96
|
+
function preparedPluginIdentity(options) {
|
|
97
|
+
const sourceId = options.plugin.sourceId ?? 'review-source';
|
|
98
|
+
return {
|
|
99
|
+
...options.plugin,
|
|
100
|
+
sourceId,
|
|
101
|
+
sourceIdentity: options.plugin.sourceIdentity ?? options.sourceIdentity,
|
|
102
|
+
catalogLogicalIdentity: options.plugin.catalogLogicalIdentity ?? options.workspaceIdentity,
|
|
103
|
+
pluginId: options.plugin.pluginId ?? `${sourceId}/${options.plugin.manifest.name}`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function selectedProfile(selection) {
|
|
107
|
+
if (selection.profiles.length !== 1) {
|
|
108
|
+
throw new ReviewPreparationError('unsupportedProfile', 'Review preparation requires exactly one resolved platform and scope profile.', 2, selection.target.path);
|
|
109
|
+
}
|
|
110
|
+
return selection.profiles[0];
|
|
111
|
+
}
|
|
112
|
+
function targetReceipt(selection) {
|
|
113
|
+
return selection.target.kind === 'catalog'
|
|
114
|
+
? null
|
|
115
|
+
: { kind: selection.target.kind, path: selection.target.path };
|
|
116
|
+
}
|
|
117
|
+
function failedReceipt(options) {
|
|
118
|
+
return {
|
|
119
|
+
schemaVersion: 1,
|
|
120
|
+
command: 'review:prepare',
|
|
121
|
+
ok: false,
|
|
122
|
+
target: options.target,
|
|
123
|
+
sourceBindingPath: null,
|
|
124
|
+
skills: [],
|
|
125
|
+
issues: options.issues,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function sameResolvedInput(before, beforeProfile, after) {
|
|
129
|
+
if (after.sourceIdentity !== before.sourceIdentity
|
|
130
|
+
|| after.target.kind !== before.target.kind
|
|
131
|
+
|| after.target.path !== before.target.path
|
|
132
|
+
|| after.profiles.length !== 1)
|
|
133
|
+
return false;
|
|
134
|
+
const afterProfile = after.profiles[0];
|
|
135
|
+
const skillIdentity = (profile) => JSON.stringify(profile.skills.map((skill) => [
|
|
136
|
+
skill.pluginName,
|
|
137
|
+
skill.name,
|
|
138
|
+
skill.targetId,
|
|
139
|
+
skill.delivery,
|
|
140
|
+
skill.configScope,
|
|
141
|
+
]).sort());
|
|
142
|
+
return JSON.stringify(afterProfile.profile) === JSON.stringify(beforeProfile.profile)
|
|
143
|
+
&& skillIdentity(afterProfile) === skillIdentity(beforeProfile);
|
|
144
|
+
}
|
|
145
|
+
async function resolveSelection(options) {
|
|
146
|
+
return resolveReviewSelection({
|
|
147
|
+
cwd: options.cwd,
|
|
148
|
+
target: options.target,
|
|
149
|
+
...(options.workspaceRoot ? { workspaceRoot: options.workspaceRoot } : {}),
|
|
150
|
+
...(options.skills ? { skills: options.skills } : {}),
|
|
151
|
+
platform: options.platform,
|
|
152
|
+
scope: options.scope,
|
|
153
|
+
...(options.configFile ? { configFile: options.configFile } : {}),
|
|
154
|
+
env: options.env,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
async function writeIsolatedConfig(options) {
|
|
158
|
+
for (const config of options.profile.pluginConfigs) {
|
|
159
|
+
const plugin = options.plugins.get(config.pluginName);
|
|
160
|
+
if (!plugin) {
|
|
161
|
+
throw new Error(`Review config references unresolved plugin "${config.pluginName}".`);
|
|
162
|
+
}
|
|
163
|
+
await writePluginConfigStore({
|
|
164
|
+
sourceId: plugin.sourceId,
|
|
165
|
+
sourceIdentity: plugin.sourceIdentity,
|
|
166
|
+
logicalIdentity: plugin.catalogLogicalIdentity,
|
|
167
|
+
pluginName: config.pluginName,
|
|
168
|
+
scope: config.scope,
|
|
169
|
+
cwd: options.cwd,
|
|
170
|
+
values: config.overrides,
|
|
171
|
+
env: options.env,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async function prepareSelectedSkills(options) {
|
|
176
|
+
const pluginNames = new Set(options.profile.skills.map((skill) => skill.pluginName));
|
|
177
|
+
if (pluginNames.size !== 1) {
|
|
178
|
+
throw new Error('One review preparation output must contain Skills from exactly one plugin.');
|
|
179
|
+
}
|
|
180
|
+
const pluginName = [...pluginNames][0];
|
|
181
|
+
const sourcePlugin = options.selection.workspace.plugins.find((plugin) => plugin.manifest.name === pluginName);
|
|
182
|
+
if (!sourcePlugin)
|
|
183
|
+
throw new Error(`Selected plugin "${pluginName}" is unresolved.`);
|
|
184
|
+
let prepared;
|
|
185
|
+
let portable;
|
|
186
|
+
try {
|
|
187
|
+
prepared = await prepareSkillPluginBundle({
|
|
188
|
+
plugin: sourcePlugin,
|
|
189
|
+
plugins: options.selection.workspace.plugins,
|
|
190
|
+
workRoot: path.join(options.workRoot, 'bundle'),
|
|
191
|
+
env: options.env,
|
|
192
|
+
});
|
|
193
|
+
const bundlePlugin = preparedPluginIdentity({
|
|
194
|
+
plugin: prepared.bundlePlugin,
|
|
195
|
+
sourceIdentity: options.selection.sourceIdentity,
|
|
196
|
+
workspaceIdentity: options.selection.workspace.workspaceIdentity,
|
|
197
|
+
});
|
|
198
|
+
const plugins = new Map(options.selection.workspace.plugins.map((plugin) => [
|
|
199
|
+
plugin.manifest.name,
|
|
200
|
+
preparedPluginIdentity({
|
|
201
|
+
plugin,
|
|
202
|
+
sourceIdentity: options.selection.sourceIdentity,
|
|
203
|
+
workspaceIdentity: options.selection.workspace.workspaceIdentity,
|
|
204
|
+
}),
|
|
205
|
+
]));
|
|
206
|
+
plugins.set(pluginName, bundlePlugin);
|
|
207
|
+
await writeIsolatedConfig({
|
|
208
|
+
profile: options.profile,
|
|
209
|
+
plugins,
|
|
210
|
+
cwd: options.cwd,
|
|
211
|
+
env: options.env,
|
|
212
|
+
});
|
|
213
|
+
if (options.profile.platform === 'agent-skills') {
|
|
214
|
+
const portableRoot = path.join(options.workRoot, 'portable');
|
|
215
|
+
portable = await materializePortableSkills({
|
|
216
|
+
plugins: [...plugins.values()],
|
|
217
|
+
pluginId: bundlePlugin.pluginId,
|
|
218
|
+
scope: options.profile.scope,
|
|
219
|
+
cwd: options.cwd,
|
|
220
|
+
env: options.env,
|
|
221
|
+
outputRoot: portableRoot,
|
|
222
|
+
inputMode: 'bundle',
|
|
223
|
+
selectedSkills: options.profile.skills.map((skill) => skill.name),
|
|
224
|
+
});
|
|
225
|
+
await fs.copy(path.join(portable.rootDir, 'skills'), path.join(options.outputRoot, 'skills'), {
|
|
226
|
+
overwrite: false,
|
|
227
|
+
errorOnExist: true,
|
|
228
|
+
dereference: false,
|
|
229
|
+
});
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
await materializeReviewNativeSkills({
|
|
233
|
+
plugin: bundlePlugin,
|
|
234
|
+
platform: options.profile.platform,
|
|
235
|
+
scope: options.profile.scope,
|
|
236
|
+
cwd: options.cwd,
|
|
237
|
+
env: options.env,
|
|
238
|
+
outputRoot: options.outputRoot,
|
|
239
|
+
skills: options.profile.skills.map((skill) => ({
|
|
240
|
+
skill: skill.name,
|
|
241
|
+
targetId: skill.targetId,
|
|
242
|
+
})),
|
|
243
|
+
scriptTimeoutMs: options.scriptTimeoutMs,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
finally {
|
|
247
|
+
await portable?.cleanup();
|
|
248
|
+
await prepared?.cleanup();
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function normalizeError(error) {
|
|
252
|
+
if (error instanceof ReviewPreparationError)
|
|
253
|
+
return error;
|
|
254
|
+
if (error instanceof ReviewSelectionError) {
|
|
255
|
+
return new ReviewPreparationError(error.code, error.message, error.exitCode);
|
|
256
|
+
}
|
|
257
|
+
return new ReviewPreparationError('materializationFailed', error instanceof Error ? error.message : String(error), 1);
|
|
258
|
+
}
|
|
259
|
+
export async function prepareReviewTarget(options) {
|
|
260
|
+
let selection;
|
|
261
|
+
let profile;
|
|
262
|
+
let stagingRoot;
|
|
263
|
+
let finalOutput;
|
|
264
|
+
let committed = false;
|
|
265
|
+
try {
|
|
266
|
+
selection = await resolveSelection(options);
|
|
267
|
+
if (selection.target.kind === 'catalog') {
|
|
268
|
+
throw new ReviewPreparationError('invalidArguments', 'Review preparation accepts a plugin or source Skill target.', 2, selection.target.path);
|
|
269
|
+
}
|
|
270
|
+
profile = selectedProfile(selection);
|
|
271
|
+
if (profile.skills.length === 0) {
|
|
272
|
+
throw new ReviewPreparationError('unsupportedProfile', 'The selected profile does not contain a Skill to prepare.', 2, selection.target.path);
|
|
273
|
+
}
|
|
274
|
+
const baseEnv = options.env ?? process.env;
|
|
275
|
+
finalOutput = await assertSafeOutput({
|
|
276
|
+
target: path.resolve(options.cwd, options.out),
|
|
277
|
+
selection,
|
|
278
|
+
cwd: options.cwd,
|
|
279
|
+
env: baseEnv,
|
|
280
|
+
});
|
|
281
|
+
stagingRoot = await fs.mkdtemp(path.join(path.dirname(finalOutput), `.aw-review-${path.basename(finalOutput)}-`));
|
|
282
|
+
const stagedOutput = path.join(stagingRoot, 'output');
|
|
283
|
+
const workRoot = path.join(stagingRoot, 'work');
|
|
284
|
+
const materializationCwd = path.join(stagingRoot, 'project');
|
|
285
|
+
const env = await createIsolatedSkillEnv(baseEnv, path.join(stagingRoot, 'environment'));
|
|
286
|
+
await fs.ensureDir(path.join(materializationCwd, '.git'));
|
|
287
|
+
await fs.ensureDir(stagedOutput);
|
|
288
|
+
await prepareSelectedSkills({
|
|
289
|
+
selection,
|
|
290
|
+
profile,
|
|
291
|
+
outputRoot: stagedOutput,
|
|
292
|
+
workRoot,
|
|
293
|
+
env,
|
|
294
|
+
cwd: materializationCwd,
|
|
295
|
+
scriptTimeoutMs: options.scriptTimeoutMs,
|
|
296
|
+
});
|
|
297
|
+
const artifacts = profile.skills.map((skill) => ({
|
|
298
|
+
kind: 'review-skill',
|
|
299
|
+
plugin: skill.pluginName,
|
|
300
|
+
skill: skill.name,
|
|
301
|
+
path: `skills/${skill.name}`,
|
|
302
|
+
}));
|
|
303
|
+
const writtenBinding = await writeAwSourceBinding({
|
|
304
|
+
rootDir: stagedOutput,
|
|
305
|
+
source: {
|
|
306
|
+
kind: 'workspace',
|
|
307
|
+
workspaceIdentity: selection.workspace.workspaceIdentity,
|
|
308
|
+
sourceIdentity: selection.sourceIdentity,
|
|
309
|
+
},
|
|
310
|
+
subject: {
|
|
311
|
+
plugin: profile.skills[0].pluginName,
|
|
312
|
+
...(selection.target.kind === 'skill'
|
|
313
|
+
? { skill: selection.target.skill ?? profile.skills[0].name }
|
|
314
|
+
: {}),
|
|
315
|
+
},
|
|
316
|
+
profile: profile.profile,
|
|
317
|
+
artifacts,
|
|
318
|
+
});
|
|
319
|
+
const rechecked = await resolveSelection(options).catch(() => {
|
|
320
|
+
throw new ReviewPreparationError('sourceChanged', 'Review source or config changed while output was staged.', 3, selection.target.path);
|
|
321
|
+
});
|
|
322
|
+
if (!sameResolvedInput(selection, profile, rechecked)) {
|
|
323
|
+
throw new ReviewPreparationError('sourceChanged', 'Review source or config changed while output was staged.', 3, selection.target.path);
|
|
324
|
+
}
|
|
325
|
+
const recheckedOutput = await assertSafeOutput({
|
|
326
|
+
target: finalOutput,
|
|
327
|
+
selection: rechecked,
|
|
328
|
+
cwd: options.cwd,
|
|
329
|
+
env: baseEnv,
|
|
330
|
+
});
|
|
331
|
+
if (recheckedOutput !== finalOutput) {
|
|
332
|
+
throw new ReviewPreparationError('unsafeOutput', 'Review output path changed while output was staged.', 2, finalOutput);
|
|
333
|
+
}
|
|
334
|
+
await fs.remove(workRoot);
|
|
335
|
+
await fs.remove(path.join(stagingRoot, 'environment'));
|
|
336
|
+
await fs.remove(materializationCwd);
|
|
337
|
+
await fs.rename(stagedOutput, finalOutput);
|
|
338
|
+
committed = true;
|
|
339
|
+
const successIssues = [];
|
|
340
|
+
await fs.remove(stagingRoot).catch((cleanupError) => {
|
|
341
|
+
successIssues.push({
|
|
342
|
+
code: 'cleanupResidue',
|
|
343
|
+
path: stagingRoot,
|
|
344
|
+
message: cleanupError instanceof Error ? cleanupError.message : String(cleanupError),
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
stagingRoot = undefined;
|
|
348
|
+
const sourceBindingPath = path.join(finalOutput, AW_SOURCE_BINDING_FILENAME);
|
|
349
|
+
const digests = new Map(writtenBinding.binding.artifacts
|
|
350
|
+
.filter((artifact) => artifact.kind === 'review-skill')
|
|
351
|
+
.map((artifact) => [`${artifact.plugin}\0${artifact.skill}`, artifact.digest]));
|
|
352
|
+
return {
|
|
353
|
+
exitCode: 0,
|
|
354
|
+
receipt: {
|
|
355
|
+
schemaVersion: 1,
|
|
356
|
+
command: 'review:prepare',
|
|
357
|
+
ok: true,
|
|
358
|
+
target: targetReceipt(selection),
|
|
359
|
+
sourceBindingPath,
|
|
360
|
+
skills: profile.skills.map((skill) => ({
|
|
361
|
+
skill: skill.name,
|
|
362
|
+
sourcePath: skill.sourcePath,
|
|
363
|
+
profile: {
|
|
364
|
+
platform: profile.platform,
|
|
365
|
+
scope: profile.scope,
|
|
366
|
+
inputDigest: profile.profile.inputDigest,
|
|
367
|
+
},
|
|
368
|
+
finalPath: path.join(finalOutput, 'skills', skill.name),
|
|
369
|
+
digest: digests.get(`${skill.pluginName}\0${skill.name}`) ?? null,
|
|
370
|
+
state: 'ready',
|
|
371
|
+
evidencePath: sourceBindingPath,
|
|
372
|
+
})),
|
|
373
|
+
issues: successIssues,
|
|
374
|
+
},
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
catch (caught) {
|
|
378
|
+
let error = normalizeError(caught);
|
|
379
|
+
if (selection && profile && stagingRoot && error.code !== 'sourceChanged') {
|
|
380
|
+
try {
|
|
381
|
+
const current = await resolveSelection(options);
|
|
382
|
+
if (!sameResolvedInput(selection, profile, current)) {
|
|
383
|
+
error = new ReviewPreparationError('sourceChanged', 'Review source or config changed while output was staged.', 3, selection.target.path);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
catch {
|
|
387
|
+
const currentIdentity = await calculateCatalogWorkspaceSourceIdentity(selection.workspace)
|
|
388
|
+
.catch(() => selection.sourceIdentity);
|
|
389
|
+
if (currentIdentity !== selection.sourceIdentity) {
|
|
390
|
+
error = new ReviewPreparationError('sourceChanged', 'Review source changed while output was staged.', 3, selection.target.path);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
const issues = [{
|
|
395
|
+
code: error.code,
|
|
396
|
+
path: error.issuePath,
|
|
397
|
+
message: error.message,
|
|
398
|
+
}];
|
|
399
|
+
if (!committed && finalOutput && await fs.pathExists(finalOutput)) {
|
|
400
|
+
issues.push({
|
|
401
|
+
code: 'unsafeOutput',
|
|
402
|
+
path: finalOutput,
|
|
403
|
+
message: 'Review output appeared while preparation was running; it was not modified.',
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
if (stagingRoot) {
|
|
407
|
+
try {
|
|
408
|
+
await fs.remove(stagingRoot);
|
|
409
|
+
}
|
|
410
|
+
catch (cleanupError) {
|
|
411
|
+
issues.push({
|
|
412
|
+
code: 'cleanupResidue',
|
|
413
|
+
path: stagingRoot,
|
|
414
|
+
message: cleanupError instanceof Error ? cleanupError.message : String(cleanupError),
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return {
|
|
419
|
+
exitCode: error.exitCode,
|
|
420
|
+
receipt: failedReceipt({
|
|
421
|
+
target: selection ? targetReceipt(selection) : null,
|
|
422
|
+
issues,
|
|
423
|
+
}),
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
//# sourceMappingURL=review-preparation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-preparation.js","sourceRoot":"","sources":["../../../src/commands/review-preparation.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,13 +33,14 @@ export interface PreparedPluginRuntimeContext {
|
|
|
33
33
|
export interface BundleLocalPluginOptions {
|
|
34
34
|
buildMode?: PluginBundleBuildMode;
|
|
35
35
|
stagingRunner?: PluginStagingRunner;
|
|
36
|
+
commandEnv?: NodeJS.ProcessEnv;
|
|
36
37
|
runtimeResolver?: CatalogRuntimeImportResolver;
|
|
37
38
|
preparedRuntimeContext?: PreparedPluginRuntimeContext;
|
|
38
39
|
runtimeSkillClosureValidation?: 'current' | 'historical';
|
|
39
40
|
strictRequirements?: boolean;
|
|
40
41
|
}
|
|
41
42
|
export declare function validateStagingPackageManager(packageRoot: string): Promise<string>;
|
|
42
|
-
export declare function prepareLocalPluginBundleSource(plugin: PluginMeta, options?: Pick<BundleLocalPluginOptions, 'buildMode' | 'stagingRunner' | 'runtimeResolver'>): Promise<{
|
|
43
|
+
export declare function prepareLocalPluginBundleSource(plugin: PluginMeta, options?: Pick<BundleLocalPluginOptions, 'buildMode' | 'stagingRunner' | 'commandEnv' | 'runtimeResolver'>): Promise<{
|
|
43
44
|
plugin: PluginMeta;
|
|
44
45
|
runtimeContext: PreparedPluginRuntimeContext;
|
|
45
46
|
cleanup(): Promise<void>;
|
|
@@ -99,34 +99,36 @@ async function resolveRuntimePnpmEntry(supportedPackageManager) {
|
|
|
99
99
|
const stats = await fs.stat(entryPath).catch(() => undefined);
|
|
100
100
|
return stats?.isFile() ? entryPath : undefined;
|
|
101
101
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
102
|
+
function createDefaultStagingRunner(commandEnv) {
|
|
103
|
+
return {
|
|
104
|
+
async installPackageRoot(packageRoot) {
|
|
105
|
+
const supportedPackageManager = await validateStagingPackageManager(packageRoot);
|
|
106
|
+
const fixedPnpmEntry = await resolveFixedPnpmEntry(supportedPackageManager, commandEnv)
|
|
107
|
+
?? await resolveRuntimePnpmEntry(supportedPackageManager);
|
|
108
|
+
if (!fixedPnpmEntry) {
|
|
109
|
+
throw new Error(`Cannot stage scripts.node.packageRoot: missing bundled ${supportedPackageManager} runtime dependency.`);
|
|
110
|
+
}
|
|
111
|
+
const args = [
|
|
112
|
+
fixedPnpmEntry,
|
|
113
|
+
'install',
|
|
114
|
+
'--frozen-lockfile',
|
|
115
|
+
'--ignore-scripts',
|
|
116
|
+
];
|
|
117
|
+
await execFileAsync(process.execPath, args, {
|
|
118
|
+
cwd: packageRoot,
|
|
119
|
+
env: commandEnv,
|
|
120
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
121
|
+
});
|
|
122
|
+
},
|
|
123
|
+
async runNodeBuild({ pluginRoot, scriptPath, args, env }) {
|
|
124
|
+
await execFileAsync(process.execPath, [path.join(pluginRoot, stripDotSlash(scriptPath)), ...args], {
|
|
125
|
+
cwd: pluginRoot,
|
|
126
|
+
env,
|
|
127
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
130
132
|
function stripDotSlash(value) {
|
|
131
133
|
return value.startsWith('./') ? value.slice(2) : value;
|
|
132
134
|
}
|
|
@@ -982,7 +984,7 @@ async function validateBuildImportProjectionSources(projections) {
|
|
|
982
984
|
}
|
|
983
985
|
}
|
|
984
986
|
}
|
|
985
|
-
async function createStagedPlugin(plugin, runner, resolver) {
|
|
987
|
+
async function createStagedPlugin(plugin, runner, resolver, commandEnv = process.env) {
|
|
986
988
|
const stagingRoot = await fs.mkdtemp(assertLocalPluginStagingPathForTests(path.join(os.tmpdir(), 'aw-plugin-staging-'), 'local plugin bundle staging root'));
|
|
987
989
|
const stagingPluginRoot = assertLocalPluginStagingPathForTests(path.join(stagingRoot, 'plugin'), 'local plugin staged plugin root');
|
|
988
990
|
try {
|
|
@@ -997,14 +999,14 @@ async function createStagedPlugin(plugin, runner, resolver) {
|
|
|
997
999
|
if (declaredBuildImports.length > 0 && !sourceBuild) {
|
|
998
1000
|
throw new Error(`Invalid plugin "${plugin.manifest.name}": buildConfig.buildImports requires scripts.node.build.`);
|
|
999
1001
|
}
|
|
1000
|
-
const buildEnv = { ...
|
|
1002
|
+
const buildEnv = { ...commandEnv };
|
|
1001
1003
|
const buildImportProvenance = [];
|
|
1002
1004
|
const buildImportProjections = [];
|
|
1003
1005
|
for (const buildImport of declaredBuildImports) {
|
|
1004
1006
|
if (!resolver) {
|
|
1005
1007
|
throw new Error(`Cannot resolve buildConfig.buildImports for plugin "${plugin.manifest.name}": catalog runtime import resolver is required.`);
|
|
1006
1008
|
}
|
|
1007
|
-
if (Object.hasOwn(
|
|
1009
|
+
if (Object.hasOwn(commandEnv, buildImport.env)) {
|
|
1008
1010
|
throw new Error(`Invalid buildConfig.buildImports env "${buildImport.env}": refusing to overwrite an existing environment variable.`);
|
|
1009
1011
|
}
|
|
1010
1012
|
const resolution = await resolver.resolve({
|
|
@@ -1096,13 +1098,15 @@ async function resolveBuildPlugin(plugin, options) {
|
|
|
1096
1098
|
cleanup: async () => { },
|
|
1097
1099
|
};
|
|
1098
1100
|
}
|
|
1099
|
-
return createStagedPlugin(plugin, options.stagingRunner, options.runtimeResolver);
|
|
1101
|
+
return createStagedPlugin(plugin, options.stagingRunner, options.runtimeResolver, options.commandEnv);
|
|
1100
1102
|
}
|
|
1101
1103
|
export async function prepareLocalPluginBundleSource(plugin, options = {}) {
|
|
1102
1104
|
await assertPluginInputTree(plugin.rootDir);
|
|
1103
1105
|
const buildOptions = {
|
|
1104
1106
|
buildMode: options.buildMode ?? 'staging',
|
|
1105
|
-
stagingRunner: options.stagingRunner
|
|
1107
|
+
stagingRunner: options.stagingRunner
|
|
1108
|
+
?? createDefaultStagingRunner(options.commandEnv ?? process.env),
|
|
1109
|
+
commandEnv: options.commandEnv,
|
|
1106
1110
|
runtimeResolver: options.runtimeResolver,
|
|
1107
1111
|
preparedRuntimeContext: undefined,
|
|
1108
1112
|
};
|
|
@@ -1137,7 +1141,9 @@ export async function bundleLocalPlugin(plugin, outputRoot, options = {}) {
|
|
|
1137
1141
|
const historicalComparison = options.runtimeSkillClosureValidation === 'historical';
|
|
1138
1142
|
const buildOptions = {
|
|
1139
1143
|
buildMode: options.buildMode ?? 'build-free',
|
|
1140
|
-
stagingRunner: options.stagingRunner
|
|
1144
|
+
stagingRunner: options.stagingRunner
|
|
1145
|
+
?? createDefaultStagingRunner(options.commandEnv ?? process.env),
|
|
1146
|
+
commandEnv: options.commandEnv,
|
|
1141
1147
|
runtimeResolver: options.runtimeResolver,
|
|
1142
1148
|
preparedRuntimeContext: options.preparedRuntimeContext,
|
|
1143
1149
|
};
|