@lesliechan721/aw-plugin-core 0.1.0-beta.8 → 0.1.0-beta.9
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/aw-capabilities.d.ts +1 -1
- package/dist/aw-capabilities.js +3 -2
- package/dist/aw-capabilities.js.map +1 -1
- package/dist/catalog-workspace-resolution.d.ts +3 -10
- package/dist/catalog-workspace-resolution.js +4 -73
- package/dist/catalog-workspace-resolution.js.map +1 -1
- package/dist/generated/plugin-manifest-v2.d.ts +13 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/manifest-contract.js +21 -2
- package/dist/manifest-contract.js.map +1 -1
- package/dist/manifest.d.ts +1 -1
- package/dist/manifest.js +1 -1
- package/dist/plugin-authoring-capabilities.js +2 -1
- package/dist/plugin-authoring-capabilities.js.map +1 -1
- package/dist/plugin-requirements.d.ts +2 -1
- package/dist/plugin-requirements.js +132 -272
- package/dist/plugin-requirements.js.map +1 -1
- package/dist/types.d.ts +13 -9
- package/dist/workspace.d.ts +8 -16
- package/dist/workspace.js +103 -236
- package/dist/workspace.js.map +1 -1
- package/package.json +1 -1
- package/schemas/plugin-manifest-v2.json +27 -3
- package/dist/plugin-release.d.ts +0 -30
- package/dist/plugin-release.js +0 -187
- package/dist/plugin-release.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const AW_CAPABILITY_IDS: readonly ["aw.plugin-manifest.v2", "aw.plugin-skills.v1", "aw.plugin-build-config.v1", "aw.plugin-config.v1", "aw.plugin-lifecycle.v1", "aw.dynamic-artifacts.v2", "aw.portable-skills.v1", "aw.runtime-imports.v1", "aw.skill-validation.v1", "aw.
|
|
1
|
+
export declare const AW_CAPABILITY_IDS: readonly ["aw.plugin-manifest.v2", "aw.plugin-skills.v1", "aw.plugin-build-config.v1", "aw.plugin-config.v1", "aw.plugin-lifecycle.v1", "aw.dynamic-artifacts.v2", "aw.portable-skills.v1", "aw.runtime-imports.v1", "aw.skill-validation.v1", "aw.skill-eval.v2", "aw.plugin-authoring.v1", "aw.catalog-authoring.v1", "aw.catalog-source.v2", "aw.catalog-dev-source.v1", "aw.catalog-publication.v1", "aw.review-publication.v1", "aw.catalog-snapshot.v6", "aw.self-check.v1"];
|
|
2
2
|
export type RegisteredAwCapabilityId = typeof AW_CAPABILITY_IDS[number];
|
|
3
3
|
export type AwCapabilityId = string;
|
|
4
4
|
export interface AwCapabilitySupport {
|
package/dist/aw-capabilities.js
CHANGED
|
@@ -9,13 +9,14 @@ export const AW_CAPABILITY_IDS = [
|
|
|
9
9
|
'aw.portable-skills.v1',
|
|
10
10
|
'aw.runtime-imports.v1',
|
|
11
11
|
'aw.skill-validation.v1',
|
|
12
|
+
'aw.skill-eval.v2',
|
|
12
13
|
'aw.plugin-authoring.v1',
|
|
13
|
-
'aw.catalog-context.v1',
|
|
14
14
|
'aw.catalog-authoring.v1',
|
|
15
15
|
'aw.catalog-source.v2',
|
|
16
16
|
'aw.catalog-dev-source.v1',
|
|
17
17
|
'aw.catalog-publication.v1',
|
|
18
|
-
'aw.
|
|
18
|
+
'aw.review-publication.v1',
|
|
19
|
+
'aw.catalog-snapshot.v6',
|
|
19
20
|
'aw.self-check.v1',
|
|
20
21
|
];
|
|
21
22
|
const CAPABILITY_ID_PATTERN = /^aw\.[a-z0-9]+(?:-[a-z0-9]+)*(?:\.[a-z0-9]+(?:-[a-z0-9]+)*)*\.v[1-9][0-9]*$/u;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aw-capabilities.js","sourceRoot":"","sources":["../src/aw-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,uBAAuB;IACvB,qBAAqB;IACrB,2BAA2B;IAC3B,qBAAqB;IACrB,wBAAwB;IACxB,yBAAyB;IACzB,uBAAuB;IACvB,uBAAuB;IACvB,wBAAwB;IACxB,wBAAwB;IACxB,
|
|
1
|
+
{"version":3,"file":"aw-capabilities.js","sourceRoot":"","sources":["../src/aw-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
workspaceRootResolvedFrom: CatalogWorkspaceResolvedFrom;
|
|
5
|
-
}
|
|
6
|
-
export declare function resolveCatalogWorkspaceRoot(options: {
|
|
7
|
-
cwd: string;
|
|
8
|
-
explicitRoot?: string;
|
|
9
|
-
mode: 'existing' | 'initialize';
|
|
10
|
-
}): Promise<CatalogWorkspaceResolution>;
|
|
1
|
+
export declare function findNearestCatalogWorkspaceRoot(options: {
|
|
2
|
+
from: string;
|
|
3
|
+
}): Promise<string | null>;
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { execFile } from 'node:child_process';
|
|
2
1
|
import path from 'node:path';
|
|
3
|
-
import { promisify } from 'node:util';
|
|
4
2
|
import fs from 'fs-extra';
|
|
5
|
-
import { CATALOG_WORKSPACE_MARKER_FILENAME } from './workspace.js';
|
|
6
|
-
const execFileAsync = promisify(execFile);
|
|
3
|
+
import { CATALOG_WORKSPACE_MARKER_FILENAME, readCatalogWorkspaceMarker, } from './workspace.js';
|
|
7
4
|
async function startDirectory(value) {
|
|
8
5
|
const resolved = path.resolve(value);
|
|
9
6
|
const stat = await fs.lstat(resolved).catch((error) => {
|
|
@@ -15,37 +12,8 @@ async function startDirectory(value) {
|
|
|
15
12
|
throw new Error(`Catalog Workspace discovery path must not be a symbolic link: ${resolved}`);
|
|
16
13
|
return stat?.isFile() ? path.dirname(resolved) : resolved;
|
|
17
14
|
}
|
|
18
|
-
async function
|
|
19
|
-
|
|
20
|
-
const stat = await fs.lstat(markerPath).catch((error) => {
|
|
21
|
-
if (error.code === 'ENOENT')
|
|
22
|
-
return null;
|
|
23
|
-
throw error;
|
|
24
|
-
});
|
|
25
|
-
if (!stat?.isFile() || stat.isSymbolicLink()) {
|
|
26
|
-
throw new Error(`Invalid Catalog Workspace marker: ${markerPath}`);
|
|
27
|
-
}
|
|
28
|
-
let marker;
|
|
29
|
-
try {
|
|
30
|
-
marker = await fs.readJson(markerPath);
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
throw new Error(`Invalid Catalog Workspace marker: ${markerPath}`);
|
|
34
|
-
}
|
|
35
|
-
const record = marker;
|
|
36
|
-
if (!record
|
|
37
|
-
|| typeof record !== 'object'
|
|
38
|
-
|| Array.isArray(record)
|
|
39
|
-
|| Object.keys(record).sort().join('\0') !== ['kind', 'schemaVersion', 'workspaceIdentity'].join('\0')
|
|
40
|
-
|| record.schemaVersion !== 1
|
|
41
|
-
|| record.kind !== 'aw-catalog-workspace'
|
|
42
|
-
|| typeof record.workspaceIdentity !== 'string'
|
|
43
|
-
|| record.workspaceIdentity.trim() === '') {
|
|
44
|
-
throw new Error(`Invalid Catalog Workspace marker: ${markerPath}`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
async function findAncestorWorkspace(from) {
|
|
48
|
-
let current = await startDirectory(from);
|
|
15
|
+
export async function findNearestCatalogWorkspaceRoot(options) {
|
|
16
|
+
let current = await startDirectory(options.from);
|
|
49
17
|
for (;;) {
|
|
50
18
|
const markerPath = path.join(current, CATALOG_WORKSPACE_MARKER_FILENAME);
|
|
51
19
|
const markerStat = await fs.lstat(markerPath).catch((error) => {
|
|
@@ -54,7 +22,7 @@ async function findAncestorWorkspace(from) {
|
|
|
54
22
|
throw error;
|
|
55
23
|
});
|
|
56
24
|
if (markerStat) {
|
|
57
|
-
await
|
|
25
|
+
await readCatalogWorkspaceMarker(current);
|
|
58
26
|
return fs.realpath(current);
|
|
59
27
|
}
|
|
60
28
|
const parent = path.dirname(current);
|
|
@@ -63,41 +31,4 @@ async function findAncestorWorkspace(from) {
|
|
|
63
31
|
current = parent;
|
|
64
32
|
}
|
|
65
33
|
}
|
|
66
|
-
async function findGitWorktreeRoot(cwd) {
|
|
67
|
-
try {
|
|
68
|
-
const env = { ...process.env };
|
|
69
|
-
delete env.GIT_DIR;
|
|
70
|
-
delete env.GIT_WORK_TREE;
|
|
71
|
-
delete env.GIT_COMMON_DIR;
|
|
72
|
-
env.GIT_OPTIONAL_LOCKS = '0';
|
|
73
|
-
const result = await execFileAsync('git', ['rev-parse', '--show-toplevel'], {
|
|
74
|
-
cwd: await startDirectory(cwd),
|
|
75
|
-
env,
|
|
76
|
-
encoding: 'utf8',
|
|
77
|
-
});
|
|
78
|
-
return fs.realpath(result.stdout.trim());
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
export async function resolveCatalogWorkspaceRoot(options) {
|
|
85
|
-
if (options.explicitRoot !== undefined) {
|
|
86
|
-
const workspaceRoot = path.resolve(options.cwd, options.explicitRoot);
|
|
87
|
-
if (options.mode === 'existing')
|
|
88
|
-
await validateMarker(workspaceRoot);
|
|
89
|
-
return { workspaceRoot, workspaceRootResolvedFrom: 'explicit' };
|
|
90
|
-
}
|
|
91
|
-
const ancestor = await findAncestorWorkspace(options.cwd);
|
|
92
|
-
if (ancestor) {
|
|
93
|
-
return { workspaceRoot: ancestor, workspaceRootResolvedFrom: 'workspace-marker' };
|
|
94
|
-
}
|
|
95
|
-
if (options.mode === 'existing') {
|
|
96
|
-
throw new Error(`Catalog Workspace marker not found from: ${path.resolve(options.cwd)}`);
|
|
97
|
-
}
|
|
98
|
-
const gitRoot = await findGitWorktreeRoot(options.cwd);
|
|
99
|
-
if (gitRoot)
|
|
100
|
-
return { workspaceRoot: gitRoot, workspaceRootResolvedFrom: 'git-worktree' };
|
|
101
|
-
return { workspaceRoot: await startDirectory(options.cwd), workspaceRootResolvedFrom: 'cwd' };
|
|
102
|
-
}
|
|
103
34
|
//# sourceMappingURL=catalog-workspace-resolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-workspace-resolution.js","sourceRoot":"","sources":["../src/catalog-workspace-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"catalog-workspace-resolution.js","sourceRoot":"","sources":["../src/catalog-workspace-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,MAAM,UAAU,CAAA;AAEzB,OAAO,EACL,iCAAiC,EACjC,0BAA0B,GAC3B,MAAM,gBAAgB,CAAA;AAEvB,KAAK,UAAU,cAAc,CAAC,KAAa;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAA4B,EAAE,EAAE;QAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAA;QACxC,MAAM,KAAK,CAAA;IACb,CAAC,CAAC,CAAA;IACF,IAAI,IAAI,EAAE,cAAc,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,QAAQ,EAAE,CAAC,CAAA;IACxH,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,OAErD;IACC,IAAI,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,SAAS,CAAC;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAA;QACxE,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,KAA4B,EAAE,EAAE;YACnF,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAA;YACxC,MAAM,KAAK,CAAA;QACb,CAAC,CAAC,CAAA;QACF,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAA;YACzC,OAAO,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC7B,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACpC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QACnC,OAAO,GAAG,MAAM,CAAA;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -13,6 +13,7 @@ export type PluginPath = string;
|
|
|
13
13
|
* via the `definition` "stringArray".
|
|
14
14
|
*/
|
|
15
15
|
export type StringArray = string[];
|
|
16
|
+
export type Capabilities = string[];
|
|
16
17
|
/**
|
|
17
18
|
* This interface was referenced by `PluginManifestSourceV2`'s JSON-Schema
|
|
18
19
|
* via the `definition` "lifecycleDefinition".
|
|
@@ -202,6 +203,8 @@ export interface ArtifactTarget {
|
|
|
202
203
|
providerPluginId: string;
|
|
203
204
|
providerVersion: Semver;
|
|
204
205
|
source: string;
|
|
206
|
+
requiredCapabilities: Capabilities;
|
|
207
|
+
capabilitySetDigest: string;
|
|
205
208
|
};
|
|
206
209
|
}[];
|
|
207
210
|
}
|
|
@@ -236,6 +239,7 @@ export interface BuildConfig {
|
|
|
236
239
|
runtimeExports?: {
|
|
237
240
|
name: string;
|
|
238
241
|
source: string;
|
|
242
|
+
requires: RuntimeExportRequires;
|
|
239
243
|
}[];
|
|
240
244
|
buildImports?: {
|
|
241
245
|
plugin: string;
|
|
@@ -272,6 +276,15 @@ export interface FileRules {
|
|
|
272
276
|
include: StringArray;
|
|
273
277
|
exclude: StringArray;
|
|
274
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* This interface was referenced by `PluginManifestSourceV2`'s JSON-Schema
|
|
281
|
+
* via the `definition` "runtimeExportRequires".
|
|
282
|
+
*/
|
|
283
|
+
export interface RuntimeExportRequires {
|
|
284
|
+
aw: {
|
|
285
|
+
capabilities: Capabilities;
|
|
286
|
+
};
|
|
287
|
+
}
|
|
275
288
|
/**
|
|
276
289
|
* This interface was referenced by `PluginManifestSourceV2`'s JSON-Schema
|
|
277
290
|
* via the `definition` "importReference".
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAE7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mCAAmC,CAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAE7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mCAAmC,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { isDeepStrictEqual } from 'node:util';
|
|
3
3
|
import fs from 'fs-extra';
|
|
4
|
-
import { normalizeAwCapabilities } from './aw-capabilities.js';
|
|
4
|
+
import { computeAwCapabilitySetDigest, normalizeAwCapabilities, } from './aw-capabilities.js';
|
|
5
5
|
import { normalizePluginManifestSchemaVersion, PLUGIN_MANIFEST_SCHEMA_VERSION, SOURCE_PLUGIN_MANIFEST_CONTRACT_VERSION, } from './manifest.js';
|
|
6
6
|
import { readJsonFile } from './read-json.js';
|
|
7
7
|
import { parsePermissionCommand } from './permission-command.js';
|
|
@@ -615,15 +615,20 @@ function normalizeRuntimeExports(pluginRoot, value, fieldName) {
|
|
|
615
615
|
return value.map((entry, index) => {
|
|
616
616
|
const entryField = `${fieldName}[${index}]`;
|
|
617
617
|
const input = assertObject(entry, entryField);
|
|
618
|
-
assertAllowedKeys(input, entryField, ['name', 'source']);
|
|
618
|
+
assertAllowedKeys(input, entryField, ['name', 'source', 'requires']);
|
|
619
619
|
const name = normalizeRuntimeExportName(input.name, `${entryField}.name`);
|
|
620
620
|
if (names.has(name)) {
|
|
621
621
|
throw new Error(`Invalid ${fieldName}: duplicate export name "${name}".`);
|
|
622
622
|
}
|
|
623
623
|
names.add(name);
|
|
624
|
+
const requires = normalizePluginRequirements(input.requires, `${entryField}.requires`, { allowMissing: false });
|
|
625
|
+
if (requires.aw.capabilities === undefined) {
|
|
626
|
+
throw new Error(`Invalid ${entryField}.requires.aw.capabilities: expected an array.`);
|
|
627
|
+
}
|
|
624
628
|
return {
|
|
625
629
|
name,
|
|
626
630
|
source: normalizeCanonicalPluginFilePath(pluginRoot, input.source, `${entryField}.source`),
|
|
631
|
+
requires: { aw: { capabilities: requires.aw.capabilities } },
|
|
627
632
|
};
|
|
628
633
|
});
|
|
629
634
|
}
|
|
@@ -1390,13 +1395,24 @@ function normalizeArtifactRuntimeImports(value, fieldName, reservedImports) {
|
|
|
1390
1395
|
const resolvedInput = assertObject(input.resolved, `${entryField}.resolved`);
|
|
1391
1396
|
assertAllowedKeys(resolvedInput, `${entryField}.resolved`, [
|
|
1392
1397
|
'path', 'digest', 'providerPluginId', 'providerVersion', 'source',
|
|
1398
|
+
'requiredCapabilities', 'capabilitySetDigest',
|
|
1393
1399
|
]);
|
|
1400
|
+
if (!Array.isArray(resolvedInput.requiredCapabilities)) {
|
|
1401
|
+
throw new Error(`Invalid ${entryField}.resolved.requiredCapabilities: expected an array.`);
|
|
1402
|
+
}
|
|
1403
|
+
const requiredCapabilities = normalizeAwCapabilities(resolvedInput.requiredCapabilities, `${entryField}.resolved.requiredCapabilities`);
|
|
1404
|
+
const capabilitySetDigest = ensureDigestString(resolvedInput.capabilitySetDigest, `${entryField}.resolved.capabilitySetDigest`);
|
|
1405
|
+
if (capabilitySetDigest !== computeAwCapabilitySetDigest(requiredCapabilities)) {
|
|
1406
|
+
throw new Error(`Invalid ${entryField}.resolved.capabilitySetDigest: digest does not match requiredCapabilities.`);
|
|
1407
|
+
}
|
|
1394
1408
|
resolved = {
|
|
1395
1409
|
path: normalizePluginChildPath('', ensureString(resolvedInput.path, `${entryField}.resolved.path`), `${entryField}.resolved.path`),
|
|
1396
1410
|
digest: ensureDigestString(resolvedInput.digest, `${entryField}.resolved.digest`),
|
|
1397
1411
|
providerPluginId: ensureString(resolvedInput.providerPluginId, `${entryField}.resolved.providerPluginId`),
|
|
1398
1412
|
providerVersion: assertStrictSemVer(resolvedInput.providerVersion, `${entryField}.resolved.providerVersion`),
|
|
1399
1413
|
source: ensureString(resolvedInput.source, `${entryField}.resolved.source`),
|
|
1414
|
+
requiredCapabilities,
|
|
1415
|
+
capabilitySetDigest,
|
|
1400
1416
|
};
|
|
1401
1417
|
}
|
|
1402
1418
|
return {
|
|
@@ -2520,6 +2536,9 @@ export function createBundleSourceManifest(plugin, requiredCapabilities) {
|
|
|
2520
2536
|
return {
|
|
2521
2537
|
...plugin.manifest,
|
|
2522
2538
|
buildConfig,
|
|
2539
|
+
distributions: plugin.manifest.distributions
|
|
2540
|
+
? structuredClone(plugin.manifest.distributions)
|
|
2541
|
+
: undefined,
|
|
2523
2542
|
requires: requiredCapabilities === undefined
|
|
2524
2543
|
? structuredClone(plugin.manifest.requires)
|
|
2525
2544
|
: { aw: { capabilities: normalizeAwCapabilities(requiredCapabilities) } },
|