@lesliechan721/aw 0.1.0-beta.23 → 0.1.0-beta.25

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.
Files changed (51) hide show
  1. package/dist/scripts/aw-skill-eval-materializer.d.ts +3 -1
  2. package/dist/scripts/aw-skill-eval-materializer.js +76 -79
  3. package/dist/scripts/aw-skill-eval-materializer.js.map +1 -1
  4. package/dist/src/commands/aw-capabilities.d.ts +1 -1
  5. package/dist/src/commands/aw-capabilities.js +2 -1
  6. package/dist/src/commands/aw-capabilities.js.map +1 -1
  7. package/dist/src/commands/rebuild-integration.d.ts +26 -0
  8. package/dist/src/commands/rebuild-integration.js +163 -6
  9. package/dist/src/commands/rebuild-integration.js.map +1 -1
  10. package/dist/src/commands/review-inspection.d.ts +71 -12
  11. package/dist/src/commands/review-inspection.js +485 -61
  12. package/dist/src/commands/review-inspection.js.map +1 -1
  13. package/dist/src/commands/review-preparation.d.ts +49 -0
  14. package/dist/src/commands/review-preparation.js +427 -0
  15. package/dist/src/commands/review-preparation.js.map +1 -0
  16. package/dist/src/commands/skill-eval.js +2 -0
  17. package/dist/src/commands/skill-eval.js.map +1 -1
  18. package/dist/src/eval/manifest-v1.d.ts +4 -0
  19. package/dist/src/eval/manifest-v1.js +34 -6
  20. package/dist/src/eval/manifest-v1.js.map +1 -1
  21. package/dist/src/generators/local-plugin.d.ts +2 -1
  22. package/dist/src/generators/local-plugin.js +40 -34
  23. package/dist/src/generators/local-plugin.js.map +1 -1
  24. package/dist/src/index.js +146 -20
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/portable/materializer.d.ts +1 -0
  27. package/dist/src/portable/materializer.js +51 -11
  28. package/dist/src/portable/materializer.js.map +1 -1
  29. package/dist/src/review/review-profile.d.ts +17 -0
  30. package/dist/src/review/review-profile.js +177 -0
  31. package/dist/src/review/review-profile.js.map +1 -0
  32. package/dist/src/review/review-selection.d.ts +30 -0
  33. package/dist/src/review/review-selection.js +527 -0
  34. package/dist/src/review/review-selection.js.map +1 -0
  35. package/dist/src/review/review-types.d.ts +68 -0
  36. package/dist/src/review/review-types.js +16 -0
  37. package/dist/src/review/review-types.js.map +1 -0
  38. package/dist/src/review/skill-materialization.d.ts +13 -0
  39. package/dist/src/review/skill-materialization.js +75 -0
  40. package/dist/src/review/skill-materialization.js.map +1 -0
  41. package/dist/src/review/source-binding.d.ts +21 -9
  42. package/dist/src/review/source-binding.js +84 -24
  43. package/dist/src/review/source-binding.js.map +1 -1
  44. package/dist/src/tui/console-app-v4.js +8 -2
  45. package/dist/src/tui/console-app-v4.js.map +1 -1
  46. package/dist/src/tui/controller-runtime.js +5 -2
  47. package/dist/src/tui/controller-runtime.js.map +1 -1
  48. package/dist/src/tui/model.d.ts +1 -0
  49. package/dist/src/tui/model.js +32 -3
  50. package/dist/src/tui/model.js.map +1 -1
  51. package/package.json +3 -3
@@ -0,0 +1,527 @@
1
+ import path from 'node:path';
2
+ import { calculateCatalogWorkspaceSourceIdentity, readCatalogWorkspace, resolveSupportedPlatforms, } from '@lesliechan721/aw-plugin-core';
3
+ import fs from 'fs-extra';
4
+ import { resolveCatalogWorkspaceRoot, } from '../commands/catalog-workspace-resolution.js';
5
+ import { CLI_RESERVED_IMPORTS } from '../utils/manifest.js';
6
+ import { resolvePluginMetaDependencyClosure } from '../utils/plugin-dependencies.js';
7
+ import { codexNativeRefreshKeys } from '../utils/plugin-config.js';
8
+ import { createReviewProfile, normalizeReviewProfileConfig, resolveReviewPluginProfileConfig, } from './review-profile.js';
9
+ import { ReviewSelectionError, } from './review-types.js';
10
+ function compareText(left, right) {
11
+ return left < right ? -1 : left > right ? 1 : 0;
12
+ }
13
+ function stripDotSlash(value) {
14
+ return value.replace(/^\.\//u, '');
15
+ }
16
+ function declarationKey(value) {
17
+ return [value.pluginName, value.name, value.platform, value.scope, value.targetId ?? 'static'].join('\0');
18
+ }
19
+ function isSkillTarget(target) {
20
+ return target.target === 'codex.skill'
21
+ || target.target === 'claude.skill'
22
+ || target.target === 'agent-skills.skill';
23
+ }
24
+ function targetPlatform(target) {
25
+ return target.target === 'agent-skills.skill'
26
+ ? 'agent-skills'
27
+ : target.target === 'codex.skill' ? 'codex' : 'claude';
28
+ }
29
+ function targetDelivery(target) {
30
+ if (target.target === 'agent-skills.skill')
31
+ return 'agent-skills';
32
+ if (target.target === 'codex.skill')
33
+ return target.delivery.mode;
34
+ return 'aw-extension';
35
+ }
36
+ async function directSkillDirectories(plugin, collection) {
37
+ const root = path.join(plugin.rootDir, stripDotSlash(collection));
38
+ const entries = await fs.readdir(root, { withFileTypes: true });
39
+ const skills = [];
40
+ for (const entry of entries.sort((left, right) => compareText(left.name, right.name))) {
41
+ const candidate = path.join(root, entry.name);
42
+ const info = await fs.lstat(candidate);
43
+ if (!entry.isDirectory() || !info.isDirectory() || info.isSymbolicLink()) {
44
+ throw new ReviewSelectionError('targetNotFound', `Skill collection contains an unsafe direct child: ${candidate}`);
45
+ }
46
+ skills.push({ name: entry.name, path: await fs.realpath(candidate) });
47
+ }
48
+ return skills;
49
+ }
50
+ async function canonicalDeclaredPaths(plugin, target) {
51
+ const declared = target.sourceDirs?.length
52
+ ? target.sourceDirs.map((entry) => path.join(plugin.rootDir, stripDotSlash(entry)))
53
+ : plugin.manifest.scripts?.artifacts?.render?.path
54
+ ? [path.join(plugin.rootDir, stripDotSlash(plugin.manifest.scripts.artifacts.render.path))]
55
+ : [plugin.manifestPath];
56
+ const result = [];
57
+ for (const candidate of declared) {
58
+ const real = await fs.realpath(candidate);
59
+ if (!result.includes(real))
60
+ result.push(real);
61
+ }
62
+ return result;
63
+ }
64
+ export async function resolveReviewDynamicSkillSource(options) {
65
+ const sourcePaths = await canonicalDeclaredPaths(options.plugin, options.target);
66
+ const sourceKind = options.target.target === 'agent-skills.skill'
67
+ && sourcePaths.some((sourcePath) => options.portableSkillPaths?.includes(sourcePath))
68
+ ? 'portable-source-skill'
69
+ : sourcePaths.some((sourcePath) => options.nativeSkillPaths?.includes(sourcePath))
70
+ ? 'source-skill'
71
+ : 'artifact-source';
72
+ return { sourcePath: sourcePaths[0], sourcePaths, sourceKind };
73
+ }
74
+ async function inventoryPluginSkills(plugin) {
75
+ const nativeSkills = plugin.manifest.skills
76
+ ? await directSkillDirectories(plugin, plugin.manifest.skills)
77
+ : [];
78
+ const portableSkills = plugin.manifest.distributions?.agentSkills?.skills
79
+ ? await directSkillDirectories(plugin, plugin.manifest.distributions.agentSkills.skills)
80
+ : [];
81
+ const declarations = [];
82
+ const dynamicProfiles = new Set((plugin.manifest.artifacts?.targets ?? [])
83
+ .filter(isSkillTarget)
84
+ .flatMap((target) => target.scopes.map((scope) => `${targetPlatform(target)}\0${scope}\0${target.skillKey}`)));
85
+ for (const platform of [...resolveSupportedPlatforms(plugin.manifest)].sort(compareText)) {
86
+ for (const skill of nativeSkills) {
87
+ for (const scope of ['project', 'user']) {
88
+ if (dynamicProfiles.has(`${platform}\0${scope}\0${skill.name}`))
89
+ continue;
90
+ declarations.push({
91
+ plugin,
92
+ pluginName: plugin.manifest.name,
93
+ name: skill.name,
94
+ sourcePath: skill.path,
95
+ sourcePaths: [skill.path],
96
+ sourceKind: 'source-skill',
97
+ targetId: null,
98
+ dynamic: false,
99
+ delivery: 'static',
100
+ configScope: scope,
101
+ configScopes: {},
102
+ refreshKeys: [],
103
+ platform,
104
+ scope,
105
+ });
106
+ }
107
+ }
108
+ }
109
+ if (plugin.manifest.distributions?.agentSkills) {
110
+ for (const skill of portableSkills) {
111
+ for (const scope of ['project', 'user']) {
112
+ if (dynamicProfiles.has(`agent-skills\0${scope}\0${skill.name}`))
113
+ continue;
114
+ declarations.push({
115
+ plugin,
116
+ pluginName: plugin.manifest.name,
117
+ name: skill.name,
118
+ sourcePath: skill.path,
119
+ sourcePaths: [skill.path],
120
+ sourceKind: 'portable-source-skill',
121
+ targetId: null,
122
+ dynamic: false,
123
+ delivery: 'static',
124
+ configScope: scope,
125
+ configScopes: {},
126
+ refreshKeys: [],
127
+ platform: 'agent-skills',
128
+ scope,
129
+ });
130
+ }
131
+ }
132
+ }
133
+ for (const target of plugin.manifest.artifacts?.targets ?? []) {
134
+ if (!isSkillTarget(target))
135
+ continue;
136
+ const { sourcePath, sourcePaths, sourceKind } = await resolveReviewDynamicSkillSource({
137
+ plugin,
138
+ target,
139
+ nativeSkillPaths: nativeSkills.map((skill) => skill.path),
140
+ portableSkillPaths: portableSkills.map((skill) => skill.path),
141
+ });
142
+ const refreshKeys = [...target.refreshKeys].sort(compareText);
143
+ const configScope = target.delivery?.mode === 'codex-native' ? 'user' : undefined;
144
+ const userOnlyKeys = codexNativeRefreshKeys(plugin.manifest);
145
+ for (const scope of target.scopes) {
146
+ const targetConfigScope = configScope ?? scope;
147
+ declarations.push({
148
+ plugin,
149
+ pluginName: plugin.manifest.name,
150
+ name: target.skillKey,
151
+ sourcePath,
152
+ sourcePaths,
153
+ sourceKind,
154
+ targetId: target.id,
155
+ dynamic: true,
156
+ delivery: targetDelivery(target),
157
+ configScope: targetConfigScope,
158
+ configScopes: Object.fromEntries(refreshKeys.map((key) => [
159
+ key,
160
+ userOnlyKeys.has(key) ? 'user' : targetConfigScope,
161
+ ])),
162
+ refreshKeys,
163
+ platform: targetPlatform(target),
164
+ scope,
165
+ });
166
+ }
167
+ }
168
+ return declarations.sort((left, right) => compareText(declarationKey(left), declarationKey(right)));
169
+ }
170
+ async function inventorySkills(plugins) {
171
+ return (await Promise.all(plugins.map(inventoryPluginSkills))).flat()
172
+ .sort((left, right) => compareText(declarationKey(left), declarationKey(right)));
173
+ }
174
+ async function canonicalTargetCandidate(cwd, target) {
175
+ if (target === 'catalog')
176
+ return null;
177
+ const candidate = path.resolve(cwd, target);
178
+ const info = await fs.lstat(candidate).catch(() => null);
179
+ if (!info)
180
+ return null;
181
+ if (info.isSymbolicLink() || (!info.isDirectory() && !info.isFile())) {
182
+ throw new ReviewSelectionError('targetNotFound', `Review target is unsafe: ${candidate}`);
183
+ }
184
+ return fs.realpath(candidate);
185
+ }
186
+ async function resolveWorkspace(options) {
187
+ const candidate = await canonicalTargetCandidate(options.cwd, options.target);
188
+ let resolution;
189
+ try {
190
+ resolution = await resolveCatalogWorkspaceRoot({
191
+ cwd: options.workspaceRoot === undefined && candidate !== null
192
+ ? (await fs.lstat(candidate)).isDirectory() ? candidate : path.dirname(candidate)
193
+ : options.cwd,
194
+ ...(options.workspaceRoot === undefined ? {} : { explicitRoot: options.workspaceRoot }),
195
+ mode: 'existing',
196
+ });
197
+ }
198
+ catch (error) {
199
+ throw new ReviewSelectionError('targetNotFound', error instanceof Error ? error.message : 'Catalog Workspace cannot be resolved.');
200
+ }
201
+ try {
202
+ return {
203
+ resolution,
204
+ workspace: await readCatalogWorkspace(resolution.workspaceRoot, {
205
+ reservedImports: CLI_RESERVED_IMPORTS,
206
+ }),
207
+ candidate,
208
+ };
209
+ }
210
+ catch (error) {
211
+ throw new ReviewSelectionError('targetNotFound', error instanceof Error ? error.message : 'Catalog Workspace is invalid.');
212
+ }
213
+ }
214
+ function uniqueSkillNames(skills) {
215
+ const result = [];
216
+ for (const skill of skills ?? []) {
217
+ if (skill.trim() === '') {
218
+ throw new ReviewSelectionError('invalidArguments', 'Skill names must be non-empty.');
219
+ }
220
+ if (!result.includes(skill))
221
+ result.push(skill);
222
+ }
223
+ return result.sort(compareText);
224
+ }
225
+ async function resolveTarget(options) {
226
+ if (options.target === 'catalog' || options.candidate === options.workspace.workspaceRoot) {
227
+ return {
228
+ kind: 'catalog',
229
+ path: options.workspace.workspaceRoot,
230
+ plugins: options.workspace.plugins,
231
+ };
232
+ }
233
+ const named = options.workspace.plugins.find((plugin) => plugin.manifest.name === options.target);
234
+ const plugin = named ?? options.workspace.plugins.find((entry) => entry.rootDir === options.candidate);
235
+ if (plugin)
236
+ return { kind: 'plugin', path: plugin.rootDir, plugins: [plugin] };
237
+ if (options.candidate === null) {
238
+ throw new ReviewSelectionError('targetNotFound', `Review target was not found: ${options.target}`);
239
+ }
240
+ const candidateInfo = await fs.lstat(options.candidate);
241
+ const candidateRoot = candidateInfo.isFile() && path.basename(options.candidate) === 'SKILL.md'
242
+ ? path.dirname(options.candidate)
243
+ : options.candidate;
244
+ const matching = options.declarations.filter((entry) => entry.sourcePaths.includes(candidateRoot)
245
+ || entry.sourcePaths.includes(options.candidate));
246
+ if (matching.length === 0) {
247
+ throw new ReviewSelectionError('targetNotFound', 'Review target is not a canonical Plugin, Catalog, source Skill, or declared artifact source.');
248
+ }
249
+ const names = [...new Set(matching.map((entry) => entry.name))].sort(compareText);
250
+ let skill;
251
+ if (names.length === 1) {
252
+ skill = names[0];
253
+ }
254
+ else {
255
+ const requested = options.skills.filter((entry) => names.includes(entry));
256
+ if (requested.length !== 1) {
257
+ throw new ReviewSelectionError('sourceSkillAmbiguous', `Source path maps to multiple Skills (${names.join(', ')}); select one with --skill.`);
258
+ }
259
+ skill = requested[0];
260
+ }
261
+ if (options.skills.some((entry) => entry !== skill)) {
262
+ throw new ReviewSelectionError('invalidArguments', `Source Skill target maps to "${skill}"; a different --skill cannot widen its scope.`);
263
+ }
264
+ const owners = [...new Map(matching.filter((entry) => entry.name === skill)
265
+ .map((entry) => [entry.pluginName, entry.plugin])).values()];
266
+ if (owners.length !== 1) {
267
+ throw new ReviewSelectionError('sourceSkillAmbiguous', 'Source Skill ownership is ambiguous.');
268
+ }
269
+ return {
270
+ kind: 'skill',
271
+ path: candidateRoot,
272
+ plugins: owners,
273
+ skill,
274
+ };
275
+ }
276
+ async function readReviewConfig(options) {
277
+ if (options.configFile !== undefined && options.config !== undefined) {
278
+ throw new ReviewSelectionError('invalidArguments', 'configFile and config cannot be used together.');
279
+ }
280
+ if (options.config !== undefined) {
281
+ try {
282
+ return normalizeReviewProfileConfig(options.config);
283
+ }
284
+ catch (error) {
285
+ throw new ReviewSelectionError('invalidConfig', error instanceof Error ? error.message : 'Review config is invalid.');
286
+ }
287
+ }
288
+ if (options.configFile === undefined)
289
+ return {};
290
+ const configPath = path.resolve(options.cwd, options.configFile);
291
+ try {
292
+ const info = await fs.lstat(configPath);
293
+ if (!info.isFile() || info.isSymbolicLink())
294
+ throw new Error('Config path must be a regular file.');
295
+ return normalizeReviewProfileConfig(await fs.readJson(configPath));
296
+ }
297
+ catch (error) {
298
+ throw new ReviewSelectionError('invalidConfig', `Cannot read Review config "${configPath}": ${error instanceof Error ? error.message : 'invalid file'}`);
299
+ }
300
+ }
301
+ function validateConfigPlugins(workspace, config) {
302
+ for (const pluginName of Object.keys(config)) {
303
+ const plugin = workspace.plugins.find((entry) => entry.manifest.name === pluginName);
304
+ if (!plugin) {
305
+ throw new ReviewSelectionError('invalidConfig', `Review config names unknown plugin "${pluginName}".`);
306
+ }
307
+ resolveReviewPluginProfileConfig({ plugin, scope: 'user', config, keys: [] });
308
+ }
309
+ }
310
+ function filterRequestedSkills(options) {
311
+ const pluginNames = new Set(options.target.plugins.map((plugin) => plugin.manifest.name));
312
+ let candidates = options.declarations.filter((entry) => pluginNames.has(entry.pluginName));
313
+ const requested = options.target.kind === 'skill' ? [options.target.skill] : options.skills;
314
+ for (const skill of requested) {
315
+ const owners = [...new Set(candidates.filter((entry) => entry.name === skill)
316
+ .map((entry) => entry.pluginName))];
317
+ if (owners.length === 0) {
318
+ throw new ReviewSelectionError('invalidArguments', `Selected Skill is not declared by the target: ${skill}`);
319
+ }
320
+ if (owners.length > 1) {
321
+ throw new ReviewSelectionError('invalidArguments', `Selected Skill name "${skill}" is owned by multiple target plugins: ${owners.sort(compareText).join(', ')}.`);
322
+ }
323
+ }
324
+ if (requested.length > 0) {
325
+ const selected = new Set(requested);
326
+ candidates = candidates.filter((entry) => selected.has(entry.name));
327
+ }
328
+ return candidates;
329
+ }
330
+ function runtimeExportSource(workspace, pluginName, exportName) {
331
+ const provider = workspace.plugins.find((plugin) => plugin.manifest.name === pluginName);
332
+ const entry = provider?.manifest.buildConfig?.runtimeExports?.find((item) => item.name === exportName);
333
+ return provider && entry ? path.join(provider.rootDir, stripDotSlash(entry.source)) : null;
334
+ }
335
+ function profileSources(options) {
336
+ const sources = new Set();
337
+ const closure = resolvePluginMetaDependencyClosure(options.workspace.plugins, [...new Set(options.skills.map((skill) => skill.pluginName))]);
338
+ for (const plugin of closure) {
339
+ sources.add(plugin.manifestPath);
340
+ const build = plugin.manifest.scripts?.node?.build?.path;
341
+ if (build)
342
+ sources.add(path.join(plugin.rootDir, stripDotSlash(build)));
343
+ for (const entry of plugin.manifest.buildConfig?.buildImports ?? []) {
344
+ const source = runtimeExportSource(options.workspace, entry.plugin, entry.export);
345
+ if (source)
346
+ sources.add(source);
347
+ }
348
+ }
349
+ for (const skill of options.skills) {
350
+ skill.sourcePaths.forEach((entry) => sources.add(entry));
351
+ if (!skill.dynamic) {
352
+ for (const entry of skill.plugin.manifest.buildConfig?.skillRuntimeFiles ?? []) {
353
+ const native = skill.platform !== 'agent-skills'
354
+ && (entry.platforms?.includes(skill.platform) ?? entry.distributions === undefined);
355
+ const portable = skill.platform === 'agent-skills'
356
+ && (entry.distributions?.includes('agent-skills') ?? false);
357
+ if (entry.skill !== skill.name || (!native && !portable))
358
+ continue;
359
+ if (entry.source)
360
+ sources.add(path.join(skill.plugin.rootDir, stripDotSlash(entry.source)));
361
+ if (entry.import) {
362
+ const source = runtimeExportSource(options.workspace, entry.import.plugin, entry.import.export);
363
+ if (source)
364
+ sources.add(source);
365
+ }
366
+ }
367
+ }
368
+ if (skill.targetId) {
369
+ const target = skill.plugin.manifest.artifacts?.targets?.find((entry) => entry.id === skill.targetId);
370
+ for (const entry of target?.runtimeImports ?? []) {
371
+ const source = runtimeExportSource(options.workspace, entry.plugin, entry.export);
372
+ if (source)
373
+ sources.add(source);
374
+ }
375
+ }
376
+ }
377
+ return [...sources].sort(compareText);
378
+ }
379
+ function buildProfile(options) {
380
+ const selectedSkills = options.skills.map(({ platform: _platform, scope: _scope, ...skill }) => skill);
381
+ const configKeys = new Map();
382
+ for (const skill of selectedSkills.filter((entry) => entry.dynamic)) {
383
+ for (const refreshKey of skill.refreshKeys) {
384
+ const scope = skill.configScopes[refreshKey] ?? skill.configScope;
385
+ const key = `${skill.pluginName}\0${scope}`;
386
+ const keys = configKeys.get(key) ?? new Set();
387
+ keys.add(refreshKey);
388
+ configKeys.set(key, keys);
389
+ }
390
+ }
391
+ const pluginConfigs = [];
392
+ for (const [key, keys] of [...configKeys].sort(([left], [right]) => compareText(left, right))) {
393
+ const [pluginName, configScope] = key.split('\0');
394
+ const plugin = options.workspace.plugins.find((entry) => entry.manifest.name === pluginName);
395
+ pluginConfigs.push(resolveReviewPluginProfileConfig({
396
+ plugin,
397
+ scope: configScope,
398
+ config: options.config,
399
+ keys: [...keys].sort(compareText),
400
+ }));
401
+ }
402
+ const effectiveConfig = {};
403
+ for (const entry of pluginConfigs) {
404
+ if (Object.keys(entry.overrides).length === 0)
405
+ continue;
406
+ effectiveConfig[entry.pluginName] = {
407
+ ...effectiveConfig[entry.pluginName],
408
+ ...entry.overrides,
409
+ };
410
+ }
411
+ const sources = profileSources({ workspace: options.workspace, skills: options.skills });
412
+ return {
413
+ profile: createReviewProfile({
414
+ platform: options.platform,
415
+ scope: options.scope,
416
+ config: effectiveConfig,
417
+ skills: selectedSkills,
418
+ pluginConfigs,
419
+ }),
420
+ platform: options.platform,
421
+ scope: options.scope,
422
+ skills: selectedSkills,
423
+ pluginConfigs,
424
+ sources,
425
+ };
426
+ }
427
+ function groupProfiles(options) {
428
+ const filtered = options.declarations.filter((entry) => (options.platform === undefined || entry.platform === options.platform)
429
+ && (options.scope === undefined || entry.scope === options.scope));
430
+ if (filtered.length === 0 && (options.platform !== undefined || options.scope !== undefined)) {
431
+ const requested = [options.platform, options.scope].filter(Boolean).join('/');
432
+ throw new ReviewSelectionError('unsupportedProfile', `The selected target does not support profile ${requested}.`);
433
+ }
434
+ const groups = new Map();
435
+ for (const entry of filtered) {
436
+ const key = `${entry.platform}\0${entry.scope}`;
437
+ const group = groups.get(key) ?? [];
438
+ if (!group.some((existing) => declarationKey(existing) === declarationKey(entry)))
439
+ group.push(entry);
440
+ groups.set(key, group);
441
+ }
442
+ return [...groups.entries()].sort(([left], [right]) => compareText(left, right)).map(([key, skills]) => {
443
+ const [platform, scope] = key.split('\0');
444
+ return buildProfile({ workspace: options.workspace, platform, scope, skills, config: options.config });
445
+ });
446
+ }
447
+ export async function resolveReviewSelection(options) {
448
+ void options.env;
449
+ if (options.platform !== undefined
450
+ && options.platform !== 'codex'
451
+ && options.platform !== 'claude'
452
+ && options.platform !== 'agent-skills') {
453
+ throw new ReviewSelectionError('invalidArguments', `Unsupported Review platform: ${options.platform}`);
454
+ }
455
+ if (options.scope !== undefined && options.scope !== 'project' && options.scope !== 'user') {
456
+ throw new ReviewSelectionError('invalidArguments', `Unsupported Review scope: ${options.scope}`);
457
+ }
458
+ const skills = uniqueSkillNames(options.skills);
459
+ const { resolution, workspace, candidate } = await resolveWorkspace(options);
460
+ const declarations = await inventorySkills(workspace.plugins);
461
+ const target = await resolveTarget({
462
+ workspace,
463
+ target: options.target,
464
+ candidate,
465
+ skills,
466
+ declarations,
467
+ });
468
+ try {
469
+ const config = await readReviewConfig(options);
470
+ validateConfigPlugins(workspace, config);
471
+ const selected = filterRequestedSkills({ target, declarations, skills });
472
+ const profiles = groupProfiles({
473
+ workspace,
474
+ declarations: selected,
475
+ platform: options.platform,
476
+ scope: options.scope,
477
+ config,
478
+ });
479
+ const sources = [...new Set(profiles.flatMap((profile) => profile.sources))].sort(compareText);
480
+ return {
481
+ workspace,
482
+ workspaceResolvedFrom: resolution.workspaceRootResolvedFrom,
483
+ sourceIdentity: await calculateCatalogWorkspaceSourceIdentity(workspace),
484
+ target,
485
+ profiles,
486
+ sources,
487
+ };
488
+ }
489
+ catch (error) {
490
+ if (error instanceof ReviewSelectionError)
491
+ throw error.withTarget(target);
492
+ throw new ReviewSelectionError('invalidArguments', error instanceof Error ? error.message : String(error)).withTarget(target);
493
+ }
494
+ }
495
+ export async function reviewBindingMatchesSelection(options) {
496
+ if (options.bindingProfile.platform !== options.requestedProfile.platform
497
+ || options.bindingProfile.scope !== options.requestedProfile.scope)
498
+ return false;
499
+ const resolveLeaf = (config) => {
500
+ const declarations = options.requestedProfile.skills.filter((entry) => entry.pluginName === options.pluginName && entry.name === options.skill);
501
+ if (declarations.length === 0)
502
+ return null;
503
+ const withProfile = declarations.map((entry) => ({
504
+ ...entry,
505
+ platform: options.requestedProfile.platform,
506
+ scope: options.requestedProfile.scope,
507
+ }));
508
+ return buildProfile({
509
+ workspace: options.workspace,
510
+ platform: options.requestedProfile.platform,
511
+ scope: options.requestedProfile.scope,
512
+ skills: withProfile,
513
+ config,
514
+ });
515
+ };
516
+ try {
517
+ const bound = resolveLeaf(options.bindingProfile.config);
518
+ const requested = resolveLeaf(options.requestedProfile.profile.config);
519
+ return bound !== null
520
+ && requested !== null
521
+ && bound.profile.inputDigest === requested.profile.inputDigest;
522
+ }
523
+ catch {
524
+ return false;
525
+ }
526
+ }
527
+ //# sourceMappingURL=review-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-selection.js","sourceRoot":"","sources":["../../../src/review/review-selection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { CatalogWorkspace, PlatformName, PluginConfigValue, PluginMeta, Scope } from '@lesliechan721/aw-plugin-core';
2
+ import type { CatalogWorkspaceResolvedFrom } from '../commands/catalog-workspace-resolution.js';
3
+ import type { PluginConfigSource } from '../utils/plugin-config.js';
4
+ export type ReviewPlatform = PlatformName | 'agent-skills';
5
+ export type ReviewProfileConfig = Record<string, Record<string, PluginConfigValue>>;
6
+ export interface ReviewProfile {
7
+ kind: 'review';
8
+ id: `${ReviewPlatform}-${Scope}`;
9
+ platform: ReviewPlatform;
10
+ scope: Scope;
11
+ inputDigest: string;
12
+ config: ReviewProfileConfig;
13
+ }
14
+ export type ReviewSkillSourceKind = 'source-skill' | 'portable-source-skill' | 'artifact-source';
15
+ export type ReviewSkillDelivery = 'static' | 'aw-extension' | 'codex-native' | 'agent-skills';
16
+ export interface ReviewSelectedSkill {
17
+ plugin: PluginMeta;
18
+ pluginName: string;
19
+ name: string;
20
+ sourcePath: string;
21
+ sourcePaths: string[];
22
+ sourceKind: ReviewSkillSourceKind;
23
+ targetId: string | null;
24
+ dynamic: boolean;
25
+ delivery: ReviewSkillDelivery;
26
+ configScope: Scope;
27
+ configScopes: Record<string, Scope>;
28
+ refreshKeys: string[];
29
+ }
30
+ export interface ReviewPluginProfileConfig {
31
+ plugin: PluginMeta;
32
+ pluginName: string;
33
+ scope: Scope;
34
+ overrides: Record<string, PluginConfigValue>;
35
+ values: Record<string, PluginConfigValue>;
36
+ sources: Record<string, PluginConfigSource>;
37
+ digest: string;
38
+ }
39
+ export interface ReviewResolvedProfile {
40
+ profile: ReviewProfile;
41
+ platform: ReviewPlatform;
42
+ scope: Scope;
43
+ skills: ReviewSelectedSkill[];
44
+ pluginConfigs: ReviewPluginProfileConfig[];
45
+ sources: string[];
46
+ }
47
+ export interface ReviewSelectionTarget {
48
+ kind: 'skill' | 'plugin' | 'catalog';
49
+ path: string;
50
+ plugins: PluginMeta[];
51
+ skill?: string;
52
+ }
53
+ export interface ReviewSelection {
54
+ workspace: CatalogWorkspace;
55
+ workspaceResolvedFrom: CatalogWorkspaceResolvedFrom;
56
+ sourceIdentity: string;
57
+ target: ReviewSelectionTarget;
58
+ profiles: ReviewResolvedProfile[];
59
+ sources: string[];
60
+ }
61
+ export type ReviewSelectionErrorCode = 'invalidArguments' | 'invalidConfig' | 'requiredConfigMissing' | 'sourceSkillAmbiguous' | 'targetNotFound' | 'unsupportedProfile';
62
+ export declare class ReviewSelectionError extends Error {
63
+ readonly code: ReviewSelectionErrorCode;
64
+ readonly exitCode: 2 | 3;
65
+ reviewTarget?: Pick<ReviewSelectionTarget, 'kind' | 'path'>;
66
+ constructor(code: ReviewSelectionErrorCode, message: string, exitCode?: 2 | 3);
67
+ withTarget(target: Pick<ReviewSelectionTarget, 'kind' | 'path'>): this;
68
+ }
@@ -0,0 +1,16 @@
1
+ export class ReviewSelectionError extends Error {
2
+ code;
3
+ exitCode;
4
+ reviewTarget;
5
+ constructor(code, message, exitCode = 2) {
6
+ super(`${code}: ${message}`);
7
+ this.name = 'ReviewSelectionError';
8
+ this.code = code;
9
+ this.exitCode = exitCode;
10
+ }
11
+ withTarget(target) {
12
+ this.reviewTarget ??= { kind: target.kind, path: target.path };
13
+ return this;
14
+ }
15
+ }
16
+ //# sourceMappingURL=review-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-types.js","sourceRoot":"","sources":["../../../src/review/review-types.ts"],"names":[],"mappings":"AA6FA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,CAA0B;IAC9B,QAAQ,CAAO;IACxB,YAAY,CAA+C;IAE3D,YAAY,IAA8B,EAAE,OAAe,EAAE,WAAkB,CAAC;QAC9E,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED,UAAU,CAAC,MAAoD;QAC7D,IAAI,CAAC,YAAY,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;QAC9D,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}