opena2a-cli 0.7.1 → 0.8.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 +51 -603
- package/dist/adapters/docker.d.ts.map +1 -1
- package/dist/adapters/docker.js +5 -2
- package/dist/adapters/docker.js.map +1 -1
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +1 -0
- package/dist/adapters/registry.js.map +1 -1
- package/dist/adapters/types.d.ts +2 -0
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/commands/create/index.d.ts +21 -0
- package/dist/commands/create/index.d.ts.map +1 -0
- package/dist/commands/create/index.js +44 -0
- package/dist/commands/create/index.js.map +1 -0
- package/dist/commands/create/skill.d.ts +35 -0
- package/dist/commands/create/skill.d.ts.map +1 -0
- package/dist/commands/create/skill.js +250 -0
- package/dist/commands/create/skill.js.map +1 -0
- package/dist/commands/create/templates.d.ts +47 -0
- package/dist/commands/create/templates.d.ts.map +1 -0
- package/dist/commands/create/templates.js +392 -0
- package/dist/commands/create/templates.js.map +1 -0
- package/dist/commands/detect.js +2 -2
- package/dist/commands/detect.js.map +1 -1
- package/dist/commands/guard-harden.d.ts +15 -0
- package/dist/commands/guard-harden.d.ts.map +1 -0
- package/dist/commands/guard-harden.js +242 -0
- package/dist/commands/guard-harden.js.map +1 -0
- package/dist/commands/guard.d.ts +3 -1
- package/dist/commands/guard.d.ts.map +1 -1
- package/dist/commands/guard.js +25 -1
- package/dist/commands/guard.js.map +1 -1
- package/dist/commands/identity.d.ts +5 -0
- package/dist/commands/identity.d.ts.map +1 -1
- package/dist/commands/identity.js +515 -11
- package/dist/commands/identity.js.map +1 -1
- package/dist/commands/login.d.ts +24 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +238 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/mcp-audit.d.ts.map +1 -1
- package/dist/commands/mcp-audit.js +4 -0
- package/dist/commands/mcp-audit.js.map +1 -1
- package/dist/index.js +124 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/registry-client.d.ts +59 -0
- package/dist/lib/registry-client.d.ts.map +1 -0
- package/dist/lib/registry-client.js +169 -0
- package/dist/lib/registry-client.js.map +1 -0
- package/dist/semantic/command-index.json +27 -0
- package/dist/shield/status.d.ts.map +1 -1
- package/dist/shield/status.js +22 -1
- package/dist/shield/status.js.map +1 -1
- package/dist/util/aim-client.d.ts +141 -0
- package/dist/util/aim-client.d.ts.map +1 -0
- package/dist/util/aim-client.js +225 -0
- package/dist/util/aim-client.js.map +1 -0
- package/dist/util/auth.d.ts +23 -0
- package/dist/util/auth.d.ts.map +1 -0
- package/dist/util/auth.js +54 -0
- package/dist/util/auth.js.map +1 -0
- package/dist/util/server-url.d.ts +15 -0
- package/dist/util/server-url.d.ts.map +1 -0
- package/dist/util/server-url.js +42 -0
- package/dist/util/server-url.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/adapters/docker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhF,qBAAa,aAAc,YAAW,OAAO;IAC3C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;gBAEnB,MAAM,EAAE,aAAa;IAI3B,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/adapters/docker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhF,qBAAa,aAAc,YAAW,OAAO;IAC3C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;gBAEnB,MAAM,EAAE,aAAa;IAI3B,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAoD5C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAOtC"}
|
package/dist/adapters/docker.js
CHANGED
|
@@ -16,8 +16,11 @@ class DockerAdapter {
|
|
|
16
16
|
if (options.args.includes('--interactive') || options.args.includes('-it')) {
|
|
17
17
|
dockerArgs.push('-it');
|
|
18
18
|
}
|
|
19
|
-
// Map
|
|
20
|
-
|
|
19
|
+
// Map port ranges from adapter config, or fall back to a default
|
|
20
|
+
const ports = this.config.ports ?? ['3000:3000'];
|
|
21
|
+
for (const mapping of ports) {
|
|
22
|
+
dockerArgs.push('-p', mapping);
|
|
23
|
+
}
|
|
21
24
|
dockerArgs.push(image);
|
|
22
25
|
dockerArgs.push(...options.args.filter(a => a !== '--interactive' && a !== '-it'));
|
|
23
26
|
return new Promise((resolve) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/adapters/docker.ts"],"names":[],"mappings":";;;AAAA,2DAA2C;AAG3C,MAAa,aAAa;IACf,MAAM,CAAgB;IAE/B,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAmB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,2BAA2B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5F,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEnC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3E,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/adapters/docker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAgD1D,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAElE;AAED,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,EAAE,CAE1E"}
|
|
@@ -33,6 +33,7 @@ exports.ADAPTER_REGISTRY = {
|
|
|
33
33
|
name: 'train',
|
|
34
34
|
method: 'docker',
|
|
35
35
|
image: 'opena2a/dvaa',
|
|
36
|
+
ports: ['3001-3008:3001-3008', '3010-3013:3010-3013', '3020-3021:3020-3021', '9000:9000'],
|
|
36
37
|
description: 'Launch vulnerable AI agent for training (DVAA)',
|
|
37
38
|
},
|
|
38
39
|
crypto: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":";;;AAoDA,gCAEC;AAED,oCAEC;AAED,kDAEC;AA5DY,QAAA,gBAAgB,GAAkC;IAC7D,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,aAAa;QAC1B,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,0DAA0D;KACxE;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,qDAAqD;KACnE;IACD,0EAA0E;IAC1E,iGAAiG;IACjG,wFAAwF;IACxF,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,UAAU;QACnB,WAAW,EAAE,UAAU;QACvB,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE,wDAAwD;KACtE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,cAAc;QACrB,KAAK,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,WAAW,CAAC;QACzF,WAAW,EAAE,gDAAgD;KAC9D;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,aAAa;QAC3B,WAAW,EAAE,yDAAyD;KACvE;IACD,4EAA4E;IAC5E,oFAAoF;IACpF,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,eAAe;QAC5B,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,yCAAyC;KACvD;IACD,iFAAiF;CAClF,CAAC;AAEF,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,wBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,YAAY;IAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,wBAAgB,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,mBAAmB,CAAC,MAAqB;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,wBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AAC1E,CAAC"}
|
package/dist/adapters/types.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export interface AdapterConfig {
|
|
|
12
12
|
pythonModule?: string;
|
|
13
13
|
/** Subcommand to prepend to args (e.g. broker/dlp share secretless-ai but differ by subcommand) */
|
|
14
14
|
subcommand?: string;
|
|
15
|
+
/** Port mappings for docker() adapters (e.g. ['3001-3008:3001-3008']) */
|
|
16
|
+
ports?: string[];
|
|
15
17
|
/** Description shown in help text */
|
|
16
18
|
description: string;
|
|
17
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* opena2a create -- Scaffolding command for secure skills and components.
|
|
3
|
+
*
|
|
4
|
+
* Currently supports:
|
|
5
|
+
* - `create skill [name]` -- interactive wizard to scaffold a signed skill
|
|
6
|
+
*/
|
|
7
|
+
export interface CreateOptions {
|
|
8
|
+
type: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
template?: string;
|
|
11
|
+
output?: string;
|
|
12
|
+
noSign?: boolean;
|
|
13
|
+
ci?: boolean;
|
|
14
|
+
format?: string;
|
|
15
|
+
verbose?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function create(opts: CreateOptions): Promise<number>;
|
|
18
|
+
export declare const _internals: {
|
|
19
|
+
SUPPORTED_TYPES: string[];
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/create/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAQD,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BjE;AAID,eAAO,MAAM,UAAU;;CAEtB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* opena2a create -- Scaffolding command for secure skills and components.
|
|
4
|
+
*
|
|
5
|
+
* Currently supports:
|
|
6
|
+
* - `create skill [name]` -- interactive wizard to scaffold a signed skill
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports._internals = void 0;
|
|
10
|
+
exports.create = create;
|
|
11
|
+
const colors_js_1 = require("../../util/colors.js");
|
|
12
|
+
// --- Supported types ---
|
|
13
|
+
const SUPPORTED_TYPES = ['skill'];
|
|
14
|
+
// --- Main ---
|
|
15
|
+
async function create(opts) {
|
|
16
|
+
const typeLower = opts.type.toLowerCase();
|
|
17
|
+
if (!SUPPORTED_TYPES.includes(typeLower)) {
|
|
18
|
+
process.stderr.write((0, colors_js_1.red)(`Unknown type: ${opts.type}\n`));
|
|
19
|
+
process.stderr.write(`Supported types: ${SUPPORTED_TYPES.join(', ')}\n`);
|
|
20
|
+
process.stderr.write((0, colors_js_1.dim)(`Example: opena2a create skill my-skill\n`));
|
|
21
|
+
return 1;
|
|
22
|
+
}
|
|
23
|
+
switch (typeLower) {
|
|
24
|
+
case 'skill': {
|
|
25
|
+
const { createSkill } = await import('./skill.js');
|
|
26
|
+
return createSkill({
|
|
27
|
+
name: opts.name,
|
|
28
|
+
template: opts.template,
|
|
29
|
+
output: opts.output,
|
|
30
|
+
noSign: opts.noSign,
|
|
31
|
+
ci: opts.ci,
|
|
32
|
+
format: opts.format,
|
|
33
|
+
verbose: opts.verbose,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
default:
|
|
37
|
+
return 1;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// --- Testable internals ---
|
|
41
|
+
exports._internals = {
|
|
42
|
+
SUPPORTED_TYPES,
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/create/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAuBH,wBA0BC;AA/CD,oDAAgD;AAehD,0BAA0B;AAE1B,MAAM,eAAe,GAAG,CAAC,OAAO,CAAC,CAAC;AAElC,eAAe;AAER,KAAK,UAAU,MAAM,CAAC,IAAmB;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAE1C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,eAAG,EAAC,iBAAiB,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,eAAG,EAAC,0CAA0C,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YACnD,OAAO,WAAW,CAAC;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,6BAA6B;AAEhB,QAAA,UAAU,GAAG;IACxB,eAAe;CAChB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill creation wizard for `opena2a create skill`.
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds a secure skill directory with SKILL.md (YAML frontmatter),
|
|
5
|
+
* HEARTBEAT.md, example code, vitest test, and GitHub Action template.
|
|
6
|
+
* Signs the skill via ConfigGuard after scaffolding.
|
|
7
|
+
*/
|
|
8
|
+
export interface SkillCreateOptions {
|
|
9
|
+
name?: string;
|
|
10
|
+
template?: string;
|
|
11
|
+
output?: string;
|
|
12
|
+
noSign?: boolean;
|
|
13
|
+
ci?: boolean;
|
|
14
|
+
format?: string;
|
|
15
|
+
verbose?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface SkillCreateResult {
|
|
18
|
+
directory: string;
|
|
19
|
+
files: string[];
|
|
20
|
+
signed: boolean;
|
|
21
|
+
warnings: string[];
|
|
22
|
+
}
|
|
23
|
+
export declare function createSkill(opts: SkillCreateOptions): Promise<number>;
|
|
24
|
+
declare function getDefaultPermissionPath(capability: string, permission: string): string;
|
|
25
|
+
export declare const _internals: {
|
|
26
|
+
CI_DEFAULTS: {
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
capabilities: string[];
|
|
30
|
+
template: string;
|
|
31
|
+
};
|
|
32
|
+
getDefaultPermissionPath: typeof getDefaultPermissionPath;
|
|
33
|
+
};
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../../src/commands/create/skill.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAaD,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuM3E;AAID,iBAAS,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAchF;AAID,eAAO,MAAM,UAAU;;;;sBAnOD,MAAM,EAAE;;;;CAsO7B,CAAC"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Skill creation wizard for `opena2a create skill`.
|
|
4
|
+
*
|
|
5
|
+
* Scaffolds a secure skill directory with SKILL.md (YAML frontmatter),
|
|
6
|
+
* HEARTBEAT.md, example code, vitest test, and GitHub Action template.
|
|
7
|
+
* Signs the skill via ConfigGuard after scaffolding.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports._internals = void 0;
|
|
44
|
+
exports.createSkill = createSkill;
|
|
45
|
+
const fs = __importStar(require("node:fs"));
|
|
46
|
+
const path = __importStar(require("node:path"));
|
|
47
|
+
const colors_js_1 = require("../../util/colors.js");
|
|
48
|
+
const templates_js_1 = require("./templates.js");
|
|
49
|
+
// --- CI defaults ---
|
|
50
|
+
const CI_DEFAULTS = {
|
|
51
|
+
name: 'my-skill',
|
|
52
|
+
description: 'A new OpenA2A skill',
|
|
53
|
+
capabilities: [],
|
|
54
|
+
template: 'basic',
|
|
55
|
+
};
|
|
56
|
+
// --- Main ---
|
|
57
|
+
async function createSkill(opts) {
|
|
58
|
+
const isJson = opts.format === 'json';
|
|
59
|
+
const isCi = opts.ci || !!process.env.CI;
|
|
60
|
+
let skillName;
|
|
61
|
+
let description;
|
|
62
|
+
let selectedCapabilities;
|
|
63
|
+
let selectedPermissions;
|
|
64
|
+
let templateName;
|
|
65
|
+
if (isCi) {
|
|
66
|
+
// Non-interactive mode: use defaults or CLI args
|
|
67
|
+
skillName = opts.name ?? CI_DEFAULTS.name;
|
|
68
|
+
description = CI_DEFAULTS.description;
|
|
69
|
+
selectedCapabilities = CI_DEFAULTS.capabilities;
|
|
70
|
+
selectedPermissions = {};
|
|
71
|
+
templateName = opts.template ?? CI_DEFAULTS.template;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Interactive wizard
|
|
75
|
+
const prompts = await import('@inquirer/prompts');
|
|
76
|
+
skillName = opts.name ?? await prompts.input({
|
|
77
|
+
message: 'Skill name:',
|
|
78
|
+
default: 'my-skill',
|
|
79
|
+
validate: (v) => /^[a-z0-9][a-z0-9-]*$/.test(v) || 'Use lowercase alphanumeric with hyphens',
|
|
80
|
+
});
|
|
81
|
+
description = await prompts.input({
|
|
82
|
+
message: 'Description:',
|
|
83
|
+
default: `A new OpenA2A skill`,
|
|
84
|
+
});
|
|
85
|
+
const capChoices = templates_js_1.CAPABILITY_CHOICES.map(c => ({
|
|
86
|
+
name: `${c.name} -- ${c.description}`,
|
|
87
|
+
value: c.value,
|
|
88
|
+
}));
|
|
89
|
+
const selectedCaps = await prompts.checkbox({
|
|
90
|
+
message: 'Capabilities (space to select, enter to confirm):',
|
|
91
|
+
choices: capChoices,
|
|
92
|
+
});
|
|
93
|
+
// Build capability strings and permissions from selections
|
|
94
|
+
selectedCapabilities = [];
|
|
95
|
+
selectedPermissions = {};
|
|
96
|
+
for (const capValue of selectedCaps) {
|
|
97
|
+
const capDef = templates_js_1.CAPABILITY_CHOICES.find(c => c.value === capValue);
|
|
98
|
+
if (!capDef)
|
|
99
|
+
continue;
|
|
100
|
+
const permChoices = capDef.permissions.map(p => ({
|
|
101
|
+
name: `${capValue}:${p}`,
|
|
102
|
+
value: p,
|
|
103
|
+
}));
|
|
104
|
+
const selectedPerms = await prompts.checkbox({
|
|
105
|
+
message: `${capDef.name} permissions:`,
|
|
106
|
+
choices: permChoices,
|
|
107
|
+
});
|
|
108
|
+
for (const perm of selectedPerms) {
|
|
109
|
+
selectedCapabilities.push(`${capValue}:${perm}`);
|
|
110
|
+
}
|
|
111
|
+
if (selectedPerms.length > 0) {
|
|
112
|
+
selectedPermissions[capValue] = {};
|
|
113
|
+
for (const perm of selectedPerms) {
|
|
114
|
+
const defaultPath = getDefaultPermissionPath(capValue, perm);
|
|
115
|
+
const pathInput = await prompts.input({
|
|
116
|
+
message: `${capValue}:${perm} allowed paths/hosts (comma-separated):`,
|
|
117
|
+
default: defaultPath,
|
|
118
|
+
});
|
|
119
|
+
selectedPermissions[capValue][perm] = pathInput.split(',').map((s) => s.trim());
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const templateChoices = templates_js_1.TEMPLATE_NAMES.map(t => {
|
|
124
|
+
const tmpl = (0, templates_js_1.getTemplate)(t);
|
|
125
|
+
return { name: `${t} -- ${tmpl?.description ?? ''}`, value: t };
|
|
126
|
+
});
|
|
127
|
+
templateName = opts.template ?? await prompts.select({
|
|
128
|
+
message: 'Template:',
|
|
129
|
+
choices: templateChoices,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
// Apply template defaults for capabilities/permissions if none selected and template has them
|
|
133
|
+
const template = (0, templates_js_1.getTemplate)(templateName);
|
|
134
|
+
if (template && selectedCapabilities.length === 0 && template.capabilities.length > 0) {
|
|
135
|
+
selectedCapabilities = [...template.capabilities];
|
|
136
|
+
selectedPermissions = JSON.parse(JSON.stringify(template.permissions));
|
|
137
|
+
}
|
|
138
|
+
// Determine output directory
|
|
139
|
+
const outputDir = path.resolve(opts.output ?? path.join(process.cwd(), skillName));
|
|
140
|
+
// Create directory
|
|
141
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
142
|
+
const createdFiles = [];
|
|
143
|
+
const warnings = [];
|
|
144
|
+
// 1. Generate SKILL.md
|
|
145
|
+
const bodyContent = template?.skillMdBody ?? `## Overview\n\n${description}`;
|
|
146
|
+
const skillMdContent = (0, templates_js_1.generateSkillMd)({
|
|
147
|
+
name: skillName,
|
|
148
|
+
description,
|
|
149
|
+
capabilities: selectedCapabilities,
|
|
150
|
+
permissions: selectedPermissions,
|
|
151
|
+
bodyContent,
|
|
152
|
+
});
|
|
153
|
+
fs.writeFileSync(path.join(outputDir, 'SKILL.md'), skillMdContent, 'utf-8');
|
|
154
|
+
createdFiles.push('SKILL.md');
|
|
155
|
+
// 2. Generate HEARTBEAT.md
|
|
156
|
+
const heartbeatContent = (0, templates_js_1.generateHeartbeatMd)(skillName);
|
|
157
|
+
fs.writeFileSync(path.join(outputDir, 'HEARTBEAT.md'), heartbeatContent, 'utf-8');
|
|
158
|
+
createdFiles.push('HEARTBEAT.md');
|
|
159
|
+
// 3. Generate example code
|
|
160
|
+
const exampleCode = template?.exampleCode ?? `export async function run(input: unknown) {\n return { status: "ok", input };\n}\n`;
|
|
161
|
+
fs.writeFileSync(path.join(outputDir, 'index.ts'), exampleCode, 'utf-8');
|
|
162
|
+
createdFiles.push('index.ts');
|
|
163
|
+
// 4. Generate test file
|
|
164
|
+
const testContent = (0, templates_js_1.generateTestFile)(skillName, selectedCapabilities);
|
|
165
|
+
fs.writeFileSync(path.join(outputDir, 'skill.test.ts'), testContent, 'utf-8');
|
|
166
|
+
createdFiles.push('skill.test.ts');
|
|
167
|
+
// 5. Generate GitHub Action
|
|
168
|
+
const ghDir = path.join(outputDir, '.github', 'workflows');
|
|
169
|
+
fs.mkdirSync(ghDir, { recursive: true });
|
|
170
|
+
const actionContent = (0, templates_js_1.generateGitHubAction)(skillName);
|
|
171
|
+
fs.writeFileSync(path.join(ghDir, 'skill-verify.yml'), actionContent, 'utf-8');
|
|
172
|
+
createdFiles.push('.github/workflows/skill-verify.yml');
|
|
173
|
+
// 6. Permission boundary validation
|
|
174
|
+
const dangerMatches = (0, templates_js_1.validatePermissionBoundaries)(skillMdContent);
|
|
175
|
+
for (const dm of dangerMatches) {
|
|
176
|
+
warnings.push(`[${dm.severity.toUpperCase()}] ${dm.id}: ${dm.message}`);
|
|
177
|
+
}
|
|
178
|
+
// 7. Sign skill files (unless --no-sign)
|
|
179
|
+
let signed = false;
|
|
180
|
+
if (!opts.noSign) {
|
|
181
|
+
try {
|
|
182
|
+
const { signSkillFiles, signHeartbeatFiles } = await import('../guard-signing.js');
|
|
183
|
+
await signSkillFiles(outputDir);
|
|
184
|
+
await signHeartbeatFiles(outputDir);
|
|
185
|
+
signed = true;
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
warnings.push('Could not auto-sign skill files. Run: opena2a guard sign --skills --heartbeats');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Output results
|
|
192
|
+
const result = {
|
|
193
|
+
directory: outputDir,
|
|
194
|
+
files: createdFiles,
|
|
195
|
+
signed,
|
|
196
|
+
warnings,
|
|
197
|
+
};
|
|
198
|
+
if (isJson) {
|
|
199
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
process.stdout.write('\n' + (0, colors_js_1.bold)('Skill created') + '\n\n');
|
|
203
|
+
process.stdout.write(` ${(0, colors_js_1.dim)('Directory:')} ${outputDir}\n`);
|
|
204
|
+
process.stdout.write(` ${(0, colors_js_1.dim)('Template:')} ${templateName}\n\n`);
|
|
205
|
+
process.stdout.write((0, colors_js_1.dim)(' Files:') + '\n');
|
|
206
|
+
for (const f of createdFiles) {
|
|
207
|
+
process.stdout.write(` ${(0, colors_js_1.green)('+')} ${f}\n`);
|
|
208
|
+
}
|
|
209
|
+
if (signed) {
|
|
210
|
+
process.stdout.write(`\n ${(0, colors_js_1.green)('Signed')} SKILL.md and HEARTBEAT.md\n`);
|
|
211
|
+
}
|
|
212
|
+
else if (opts.noSign) {
|
|
213
|
+
process.stdout.write(`\n ${(0, colors_js_1.dim)('Signing skipped (--no-sign)')}\n`);
|
|
214
|
+
}
|
|
215
|
+
if (warnings.length > 0) {
|
|
216
|
+
process.stdout.write(`\n ${(0, colors_js_1.yellow)('Warnings:')}\n`);
|
|
217
|
+
for (const w of warnings) {
|
|
218
|
+
process.stdout.write(` ${(0, colors_js_1.yellow)('!')} ${w}\n`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
process.stdout.write(`\n ${(0, colors_js_1.dim)('Next steps:')}\n`);
|
|
222
|
+
process.stdout.write(` cd ${skillName}\n`);
|
|
223
|
+
process.stdout.write(` opena2a guard verify --skills ${(0, colors_js_1.dim)('# verify signature')}\n`);
|
|
224
|
+
process.stdout.write(` opena2a scan secure ${(0, colors_js_1.dim)('# security scan')}\n`);
|
|
225
|
+
process.stdout.write('\n');
|
|
226
|
+
}
|
|
227
|
+
return warnings.some(w => w.startsWith('[CRITICAL]')) ? 1 : 0;
|
|
228
|
+
}
|
|
229
|
+
// --- Helpers ---
|
|
230
|
+
function getDefaultPermissionPath(capability, permission) {
|
|
231
|
+
switch (`${capability}:${permission}`) {
|
|
232
|
+
case 'filesystem:read': return '/data/**';
|
|
233
|
+
case 'filesystem:write': return '/data/output/**';
|
|
234
|
+
case 'network:outbound': return 'https://api.example.com';
|
|
235
|
+
case 'network:inbound': return 'localhost:8080';
|
|
236
|
+
case 'credential:read': return 'vault://default';
|
|
237
|
+
case 'credential:rotate': return 'vault://default';
|
|
238
|
+
case 'tool:invoke': return 'opena2a/*';
|
|
239
|
+
case 'tool:chain': return 'opena2a/*';
|
|
240
|
+
case 'compute:local': return 'cpu:4,memory:512m';
|
|
241
|
+
case 'compute:remote': return 'https://compute.example.com';
|
|
242
|
+
default: return '*';
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// --- Testable internals ---
|
|
246
|
+
exports._internals = {
|
|
247
|
+
CI_DEFAULTS,
|
|
248
|
+
getDefaultPermissionPath,
|
|
249
|
+
};
|
|
250
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/commands/create/skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill templates for the `opena2a create skill` wizard.
|
|
3
|
+
*
|
|
4
|
+
* Each template defines default capabilities, permissions, SKILL.md content,
|
|
5
|
+
* and an example code stub.
|
|
6
|
+
*/
|
|
7
|
+
export interface SkillTemplate {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
capabilities: string[];
|
|
11
|
+
permissions: Record<string, Record<string, string[]>>;
|
|
12
|
+
skillMdBody: string;
|
|
13
|
+
exampleCode: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const TEMPLATES: Record<string, SkillTemplate>;
|
|
16
|
+
export declare const TEMPLATE_NAMES: string[];
|
|
17
|
+
export declare function getTemplate(name: string): SkillTemplate | undefined;
|
|
18
|
+
export interface CapabilityChoice {
|
|
19
|
+
name: string;
|
|
20
|
+
value: string;
|
|
21
|
+
description: string;
|
|
22
|
+
permissions: string[];
|
|
23
|
+
}
|
|
24
|
+
export declare const CAPABILITY_CHOICES: CapabilityChoice[];
|
|
25
|
+
export interface DangerPattern {
|
|
26
|
+
id: string;
|
|
27
|
+
pattern: RegExp;
|
|
28
|
+
severity: 'high' | 'critical';
|
|
29
|
+
message: string;
|
|
30
|
+
}
|
|
31
|
+
export declare const DANGER_PATTERNS: DangerPattern[];
|
|
32
|
+
/**
|
|
33
|
+
* Validate SKILL.md content against known danger patterns.
|
|
34
|
+
* Returns an array of matched patterns (empty if safe).
|
|
35
|
+
*/
|
|
36
|
+
export declare function validatePermissionBoundaries(skillMdContent: string): DangerPattern[];
|
|
37
|
+
export declare function generateSkillMd(opts: {
|
|
38
|
+
name: string;
|
|
39
|
+
description: string;
|
|
40
|
+
capabilities: string[];
|
|
41
|
+
permissions: Record<string, Record<string, string[]>>;
|
|
42
|
+
bodyContent: string;
|
|
43
|
+
}): string;
|
|
44
|
+
export declare function generateHeartbeatMd(skillName: string): string;
|
|
45
|
+
export declare function generateTestFile(skillName: string, capabilities: string[]): string;
|
|
46
|
+
export declare function generateGitHubAction(skillName: string): string;
|
|
47
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/commands/create/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AA6ID,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAInD,CAAC;AAEF,eAAO,MAAM,cAAc,UAAyB,CAAC;AAErD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEnE;AAID,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EA+BhD,CAAC;AAIF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,eAAe,EAAE,aAAa,EA+B1C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa,EAAE,CAQpF;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACtD,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAyCT;AAID,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAc7D;AAID,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,CAiElF;AAID,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAqC9D"}
|