@lesliechan721/aw-plugin-core 0.1.0-beta.10 → 0.1.0-beta.11
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 +1 -1
- package/dist/aw-capabilities.js.map +1 -1
- package/dist/generated/plugin-manifest-v3.d.ts +33 -16
- package/dist/manifest-contract.js +72 -5
- 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.d.ts +1 -1
- package/dist/plugin-authoring-capabilities.js +11 -7
- package/dist/plugin-authoring-capabilities.js.map +1 -1
- package/dist/plugin-config.js +43 -17
- package/dist/plugin-config.js.map +1 -1
- package/dist/plugin-requirements.js +2 -2
- package/dist/plugin-requirements.js.map +1 -1
- package/dist/plugin-script-contract.d.ts +2 -2
- package/dist/plugin-script-contract.js +2 -2
- package/dist/plugin-script-contract.js.map +1 -1
- package/dist/types.d.ts +21 -6
- package/package.json +6 -3
- package/schemas/plugin-manifest-v3.json +33 -17
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const AW_CAPABILITY_IDS: readonly ["aw.plugin-manifest.v3", "aw.plugin-skills.v1", "aw.plugin-build-config.v1", "aw.plugin-config.v2", "aw.plugin-
|
|
1
|
+
export declare const AW_CAPABILITY_IDS: readonly ["aw.plugin-manifest.v3", "aw.plugin-skills.v1", "aw.plugin-build-config.v1", "aw.plugin-config.v2", "aw.plugin-pre-apply.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.v7", "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
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"aw-capabilities.js","sourceRoot":"","sources":["../src/aw-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,6 +84,11 @@ export type ArtifactRuntimeImports = {
|
|
|
84
84
|
* via the `definition` "configField".
|
|
85
85
|
*/
|
|
86
86
|
export type ConfigField = (ConfigStringField | ConfigNumberField | ConfigBooleanField | ConfigObjectField);
|
|
87
|
+
/**
|
|
88
|
+
* This interface was referenced by `PluginManifestSourceV3`'s JSON-Schema
|
|
89
|
+
* via the `definition` "configStringField".
|
|
90
|
+
*/
|
|
91
|
+
export type ConfigStringField = (ConfigPlainStringField | ConfigSensitiveStringField);
|
|
87
92
|
/**
|
|
88
93
|
* This interface was referenced by `PluginManifestSourceV3`'s JSON-Schema
|
|
89
94
|
* via the `definition` "configObjectField".
|
|
@@ -348,7 +353,7 @@ export interface ImportReference {
|
|
|
348
353
|
* via the `definition` "scripts".
|
|
349
354
|
*/
|
|
350
355
|
export interface Scripts {
|
|
351
|
-
|
|
356
|
+
preApply?: PreApply;
|
|
352
357
|
helpers?: {
|
|
353
358
|
config: string;
|
|
354
359
|
};
|
|
@@ -365,9 +370,9 @@ export interface Scripts {
|
|
|
365
370
|
}
|
|
366
371
|
/**
|
|
367
372
|
* This interface was referenced by `PluginManifestSourceV3`'s JSON-Schema
|
|
368
|
-
* via the `definition` "
|
|
373
|
+
* via the `definition` "preApply".
|
|
369
374
|
*/
|
|
370
|
-
export interface
|
|
375
|
+
export interface PreApply {
|
|
371
376
|
path: PluginPath;
|
|
372
377
|
timeoutMs?: number;
|
|
373
378
|
}
|
|
@@ -400,15 +405,15 @@ export interface Config {
|
|
|
400
405
|
}
|
|
401
406
|
/**
|
|
402
407
|
* This interface was referenced by `PluginManifestSourceV3`'s JSON-Schema
|
|
403
|
-
* via the `definition` "
|
|
408
|
+
* via the `definition` "configPlainStringField".
|
|
404
409
|
*/
|
|
405
|
-
export interface
|
|
410
|
+
export interface ConfigPlainStringField {
|
|
406
411
|
type: "string";
|
|
407
412
|
title?: string;
|
|
408
413
|
description?: string;
|
|
409
414
|
default?: string;
|
|
410
415
|
required?: boolean;
|
|
411
|
-
sensitive?:
|
|
416
|
+
sensitive?: false;
|
|
412
417
|
choices?: ConfigStringChoices;
|
|
413
418
|
validation?: ConfigStringValidation;
|
|
414
419
|
}
|
|
@@ -441,6 +446,18 @@ export interface ConfigStringValidation {
|
|
|
441
446
|
pattern?: string;
|
|
442
447
|
format?: ("identifier" | "slug" | "semver" | "url" | "hostname" | "email");
|
|
443
448
|
}
|
|
449
|
+
/**
|
|
450
|
+
* This interface was referenced by `PluginManifestSourceV3`'s JSON-Schema
|
|
451
|
+
* via the `definition` "configSensitiveStringField".
|
|
452
|
+
*/
|
|
453
|
+
export interface ConfigSensitiveStringField {
|
|
454
|
+
type: "string";
|
|
455
|
+
title?: string;
|
|
456
|
+
description?: string;
|
|
457
|
+
required?: boolean;
|
|
458
|
+
sensitive: true;
|
|
459
|
+
validation?: ConfigStringValidation;
|
|
460
|
+
}
|
|
444
461
|
/**
|
|
445
462
|
* This interface was referenced by `PluginManifestSourceV3`'s JSON-Schema
|
|
446
463
|
* via the `definition` "configNumberField".
|
|
@@ -451,7 +468,7 @@ export interface ConfigNumberField {
|
|
|
451
468
|
description?: string;
|
|
452
469
|
default?: number;
|
|
453
470
|
required?: boolean;
|
|
454
|
-
sensitive?:
|
|
471
|
+
sensitive?: never;
|
|
455
472
|
choices?: ConfigNumberChoices;
|
|
456
473
|
validation?: ConfigNumberValidation;
|
|
457
474
|
}
|
|
@@ -494,7 +511,7 @@ export interface ConfigBooleanField {
|
|
|
494
511
|
description?: string;
|
|
495
512
|
default?: boolean;
|
|
496
513
|
required?: boolean;
|
|
497
|
-
sensitive?:
|
|
514
|
+
sensitive?: never;
|
|
498
515
|
choices?: ConfigBooleanChoices;
|
|
499
516
|
}
|
|
500
517
|
/**
|
|
@@ -528,7 +545,7 @@ export interface ConfigFixedObjectField {
|
|
|
528
545
|
[k: string]: ConfigScalar;
|
|
529
546
|
};
|
|
530
547
|
required?: boolean;
|
|
531
|
-
sensitive?:
|
|
548
|
+
sensitive?: never;
|
|
532
549
|
choices?: ConfigObjectChoices;
|
|
533
550
|
properties: {
|
|
534
551
|
[k: string]: ConfigScalarChildField;
|
|
@@ -566,7 +583,7 @@ export interface ConfigStringChildField {
|
|
|
566
583
|
title?: string;
|
|
567
584
|
description?: string;
|
|
568
585
|
required?: boolean;
|
|
569
|
-
sensitive?:
|
|
586
|
+
sensitive?: never;
|
|
570
587
|
choices?: ConfigStringChoices;
|
|
571
588
|
validation?: ConfigStringValidation;
|
|
572
589
|
}
|
|
@@ -579,7 +596,7 @@ export interface ConfigNumberChildField {
|
|
|
579
596
|
title?: string;
|
|
580
597
|
description?: string;
|
|
581
598
|
required?: boolean;
|
|
582
|
-
sensitive?:
|
|
599
|
+
sensitive?: never;
|
|
583
600
|
choices?: ConfigNumberChoices;
|
|
584
601
|
validation?: ConfigNumberValidation;
|
|
585
602
|
}
|
|
@@ -592,7 +609,7 @@ export interface ConfigBooleanChildField {
|
|
|
592
609
|
title?: string;
|
|
593
610
|
description?: string;
|
|
594
611
|
required?: boolean;
|
|
595
|
-
sensitive?:
|
|
612
|
+
sensitive?: never;
|
|
596
613
|
choices?: ConfigBooleanChoices;
|
|
597
614
|
}
|
|
598
615
|
/**
|
|
@@ -616,7 +633,7 @@ export interface ConfigKeyValueObjectField {
|
|
|
616
633
|
[k: string]: ConfigScalar;
|
|
617
634
|
};
|
|
618
635
|
required?: boolean;
|
|
619
|
-
sensitive?:
|
|
636
|
+
sensitive?: never;
|
|
620
637
|
choices?: ConfigObjectChoices;
|
|
621
638
|
additionalProperties: ConfigScalarDynamicField;
|
|
622
639
|
validation?: ConfigObjectValidation;
|
|
@@ -629,7 +646,7 @@ export interface ConfigStringDynamicField {
|
|
|
629
646
|
type: "string";
|
|
630
647
|
title?: string;
|
|
631
648
|
description?: string;
|
|
632
|
-
sensitive?:
|
|
649
|
+
sensitive?: never;
|
|
633
650
|
choices?: ConfigStringChoices;
|
|
634
651
|
validation?: ConfigStringValidation;
|
|
635
652
|
}
|
|
@@ -641,7 +658,7 @@ export interface ConfigNumberDynamicField {
|
|
|
641
658
|
type: "number";
|
|
642
659
|
title?: string;
|
|
643
660
|
description?: string;
|
|
644
|
-
sensitive?:
|
|
661
|
+
sensitive?: never;
|
|
645
662
|
choices?: ConfigNumberChoices;
|
|
646
663
|
validation?: ConfigNumberValidation;
|
|
647
664
|
}
|
|
@@ -653,6 +670,6 @@ export interface ConfigBooleanDynamicField {
|
|
|
653
670
|
type: "boolean";
|
|
654
671
|
title?: string;
|
|
655
672
|
description?: string;
|
|
656
|
-
sensitive?:
|
|
673
|
+
sensitive?: never;
|
|
657
674
|
choices?: ConfigBooleanChoices;
|
|
658
675
|
}
|
|
@@ -887,7 +887,7 @@ function normalizeScriptEntry(pluginRoot, value, fieldName) {
|
|
|
887
887
|
: ensureStringArray(input.args, `${fieldName}.args`),
|
|
888
888
|
};
|
|
889
889
|
}
|
|
890
|
-
function
|
|
890
|
+
function normalizePreApplyScript(pluginRoot, value, fieldName) {
|
|
891
891
|
const input = assertObject(value, fieldName);
|
|
892
892
|
assertAllowedKeys(input, fieldName, ['path', 'timeoutMs']);
|
|
893
893
|
const scriptPath = normalizePluginScriptPath(pluginRoot, input.path, `${fieldName}.path`);
|
|
@@ -1028,10 +1028,10 @@ function normalizeArtifactScripts(pluginRoot, value, fieldName) {
|
|
|
1028
1028
|
}
|
|
1029
1029
|
function normalizePluginScripts(pluginRoot, value, fieldName) {
|
|
1030
1030
|
const input = assertObject(value, fieldName);
|
|
1031
|
-
assertAllowedKeys(input, fieldName, ['
|
|
1031
|
+
assertAllowedKeys(input, fieldName, ['preApply', 'helpers', 'node', 'artifacts', 'tests']);
|
|
1032
1032
|
const output = {};
|
|
1033
|
-
if (input.
|
|
1034
|
-
output.
|
|
1033
|
+
if (input.preApply !== undefined) {
|
|
1034
|
+
output.preApply = normalizePreApplyScript(pluginRoot, input.preApply, `${fieldName}.preApply`);
|
|
1035
1035
|
}
|
|
1036
1036
|
if (input.helpers !== undefined) {
|
|
1037
1037
|
output.helpers = normalizeScriptHelpers(pluginRoot, input.helpers, `${fieldName}.helpers`);
|
|
@@ -1176,6 +1176,27 @@ function normalizeArtifactRefreshKeys(value, fieldName, schema) {
|
|
|
1176
1176
|
}
|
|
1177
1177
|
return normalized;
|
|
1178
1178
|
}
|
|
1179
|
+
function configFieldContainsSensitiveValue(field) {
|
|
1180
|
+
if (field.sensitive === true)
|
|
1181
|
+
return true;
|
|
1182
|
+
if (field.type !== 'object')
|
|
1183
|
+
return false;
|
|
1184
|
+
return ((field.properties
|
|
1185
|
+
? Object.values(field.properties).some((child) => child.sensitive === true)
|
|
1186
|
+
: false)
|
|
1187
|
+
|| (field.additionalProperties !== false && field.additionalProperties?.sensitive === true));
|
|
1188
|
+
}
|
|
1189
|
+
function assertCodexNativeRefreshKeysAreNotSensitive(options) {
|
|
1190
|
+
if (options.delivery?.mode !== 'codex-native')
|
|
1191
|
+
return;
|
|
1192
|
+
for (const [index, key] of options.refreshKeys.entries()) {
|
|
1193
|
+
const field = options.schema?.fields[key];
|
|
1194
|
+
if (field && configFieldContainsSensitiveValue(field)) {
|
|
1195
|
+
throw new Error(`codexNativeRenderSensitiveRefreshKey: Invalid ${options.fieldName}[${index}]: ` +
|
|
1196
|
+
`codex-native renderers cannot read sensitive config field "${key}".`);
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1179
1200
|
function normalizeCodexSkillDelivery(value, fieldName) {
|
|
1180
1201
|
const input = assertObject(value, fieldName);
|
|
1181
1202
|
const mode = ensureString(input.mode, `${fieldName}.mode`);
|
|
@@ -1347,6 +1368,13 @@ function normalizeArtifactTargetEntry(pluginRoot, entry, fieldName, schema, rese
|
|
|
1347
1368
|
if (!portable && input.runtimeImports !== undefined) {
|
|
1348
1369
|
throw new Error(`Invalid ${fieldName}.runtimeImports: runtimeImports are only supported for agent-skills.skill targets.`);
|
|
1349
1370
|
}
|
|
1371
|
+
const refreshKeys = normalizeArtifactRefreshKeys(input.refreshKeys, `${fieldName}.refreshKeys`, schema);
|
|
1372
|
+
assertCodexNativeRefreshKeysAreNotSensitive({
|
|
1373
|
+
delivery,
|
|
1374
|
+
refreshKeys,
|
|
1375
|
+
schema,
|
|
1376
|
+
fieldName: `${fieldName}.refreshKeys`,
|
|
1377
|
+
});
|
|
1350
1378
|
return {
|
|
1351
1379
|
id,
|
|
1352
1380
|
platform,
|
|
@@ -1356,7 +1384,7 @@ function normalizeArtifactTargetEntry(pluginRoot, entry, fieldName, schema, rese
|
|
|
1356
1384
|
kind,
|
|
1357
1385
|
projectManagedKind,
|
|
1358
1386
|
states: normalizeArtifactStates(input.states, `${fieldName}.states`),
|
|
1359
|
-
refreshKeys
|
|
1387
|
+
refreshKeys,
|
|
1360
1388
|
delivery,
|
|
1361
1389
|
requiresCodexProjectConfig: input.requiresCodexProjectConfig === undefined
|
|
1362
1390
|
? undefined
|
|
@@ -1415,6 +1443,44 @@ function normalizeArtifacts(pluginRoot, value, fieldName, schema, reservedImport
|
|
|
1415
1443
|
})();
|
|
1416
1444
|
return { targets };
|
|
1417
1445
|
}
|
|
1446
|
+
function canonicalScopeSet(scopes) {
|
|
1447
|
+
return [...scopes].sort().join(',');
|
|
1448
|
+
}
|
|
1449
|
+
function assertCodexSharedNativeScopeConsistency(manifest) {
|
|
1450
|
+
if (!supportsPlatform(manifest, 'codex'))
|
|
1451
|
+
return;
|
|
1452
|
+
const nativeComponents = [];
|
|
1453
|
+
if (manifest.skills) {
|
|
1454
|
+
nativeComponents.push({ key: 'skills', scopes: ['project', 'user'] });
|
|
1455
|
+
}
|
|
1456
|
+
if (manifest.mcpServers) {
|
|
1457
|
+
nativeComponents.push({ key: 'mcpServers', scopes: ['project', 'user'] });
|
|
1458
|
+
}
|
|
1459
|
+
if (resolvePlatformHookDefinitions(manifest, 'codex').length > 0) {
|
|
1460
|
+
nativeComponents.push({ key: 'hooks', scopes: ['project', 'user'] });
|
|
1461
|
+
}
|
|
1462
|
+
if (manifest.apps) {
|
|
1463
|
+
nativeComponents.push({ key: 'apps', scopes: ['project', 'user'] });
|
|
1464
|
+
}
|
|
1465
|
+
for (const [index, target] of (manifest.artifacts?.targets ?? []).entries()) {
|
|
1466
|
+
if (target.delivery?.mode === 'codex-native') {
|
|
1467
|
+
nativeComponents.push({
|
|
1468
|
+
key: `artifacts.targets[${index}]`,
|
|
1469
|
+
scopes: [...target.scopes],
|
|
1470
|
+
});
|
|
1471
|
+
}
|
|
1472
|
+
}
|
|
1473
|
+
const expected = nativeComponents[0];
|
|
1474
|
+
if (!expected)
|
|
1475
|
+
return;
|
|
1476
|
+
const expectedScopes = canonicalScopeSet(expected.scopes);
|
|
1477
|
+
const mismatch = nativeComponents.find((component) => canonicalScopeSet(component.scopes) !== expectedScopes);
|
|
1478
|
+
if (mismatch) {
|
|
1479
|
+
throw new Error(`codexSharedNativeScopeMismatch: Codex native component scope sets must match exactly; ` +
|
|
1480
|
+
`${expected.key} has {${expectedScopes}} but ${mismatch.key} has ` +
|
|
1481
|
+
`{${canonicalScopeSet(mismatch.scopes)}}.`);
|
|
1482
|
+
}
|
|
1483
|
+
}
|
|
1418
1484
|
function normalizePlatformAgentOverrides(value, fieldName, normalizer) {
|
|
1419
1485
|
const input = assertObject(value, fieldName);
|
|
1420
1486
|
assertAllowedKeys(input, fieldName, ['claude', 'codex']);
|
|
@@ -1872,6 +1938,7 @@ export function validatePluginManifest(pluginRoot, rawManifest, options = {}) {
|
|
|
1872
1938
|
throw new Error('Invalid artifacts.targets: agent-skills targets require distributions.agentSkills declaration.');
|
|
1873
1939
|
}
|
|
1874
1940
|
assertManifestPlatformSupport(manifest.name, manifest);
|
|
1941
|
+
assertCodexSharedNativeScopeConsistency(manifest);
|
|
1875
1942
|
return manifest;
|
|
1876
1943
|
}
|
|
1877
1944
|
async function validateDeclaredNativeAssets(pluginRoot, manifest) {
|