ai-trust 0.5.0 → 0.7.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.
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Narrative fetch helper — GET /api/v1/trust/narrative.
3
+ *
4
+ * Brief: opena2a-org/briefs/check-rich-context-skills-mcp-v1.md (§8 task 3a).
5
+ *
6
+ * Returns the parsed `PackageNarrative` shape, or `null` on any
7
+ * non-success response (404 narrative_not_available, 4xx, 5xx, network
8
+ * timeout). Always best-effort — the caller falls back to the legacy
9
+ * check block + v1 footer when the registry has no fresh narrative.
10
+ *
11
+ * Wire shape mirrors `packageNarrativeResponse` from the Registry's
12
+ * `internal/interfaces/http/handlers/package_narrative_handler.go`.
13
+ * Inner JSON fields (`hardcodedSecrets`, `skillNarrative`, `mcpNarrative`,
14
+ * `verdictReasoning`, `nextSteps`) ship as opaque JSON values; the
15
+ * adapter parses + validates them before they reach cli-ui renderers.
16
+ */
17
+ /**
18
+ * Wire shape for `GET /api/v1/trust/narrative`. Inner JSON fields are
19
+ * left as `unknown` because the registry handler ships them as raw
20
+ * `json.RawMessage` — the adapter is responsible for shape validation.
21
+ */
22
+ export interface FetchedPackageNarrative {
23
+ artifactType: "skill" | "mcp";
24
+ packageName: string;
25
+ packageVersion: string;
26
+ schemaVersion: number;
27
+ generatedAt: string;
28
+ summary: string;
29
+ hardcodedSecrets: unknown;
30
+ skillNarrative?: unknown;
31
+ mcpNarrative?: unknown;
32
+ verdictReasoning: unknown;
33
+ nextSteps: unknown;
34
+ }
35
+ export interface NarrativeFetchOptions {
36
+ registryUrl: string;
37
+ artifactType: "skill" | "mcp";
38
+ name: string;
39
+ version: string;
40
+ userAgent: string;
41
+ /** Override timeout (defaults to 5000ms). */
42
+ timeoutMs?: number;
43
+ }
44
+ /**
45
+ * Fetch a fresh narrative for the given (type, name, version) tuple.
46
+ * Returns null on 404 (no narrative available) or any error condition.
47
+ * Never throws.
48
+ */
49
+ export declare function fetchNarrative(options: NarrativeFetchOptions): Promise<FetchedPackageNarrative | null>;
50
+ //# sourceMappingURL=narrative-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrative-fetch.d.ts","sourceRoot":"","sources":["../../src/check/narrative-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,OAAO,GAAG,KAAK,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,GAAG,KAAK,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAqCzC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Narrative fetch helper — GET /api/v1/trust/narrative.
3
+ *
4
+ * Brief: opena2a-org/briefs/check-rich-context-skills-mcp-v1.md (§8 task 3a).
5
+ *
6
+ * Returns the parsed `PackageNarrative` shape, or `null` on any
7
+ * non-success response (404 narrative_not_available, 4xx, 5xx, network
8
+ * timeout). Always best-effort — the caller falls back to the legacy
9
+ * check block + v1 footer when the registry has no fresh narrative.
10
+ *
11
+ * Wire shape mirrors `packageNarrativeResponse` from the Registry's
12
+ * `internal/interfaces/http/handlers/package_narrative_handler.go`.
13
+ * Inner JSON fields (`hardcodedSecrets`, `skillNarrative`, `mcpNarrative`,
14
+ * `verdictReasoning`, `nextSteps`) ship as opaque JSON values; the
15
+ * adapter parses + validates them before they reach cli-ui renderers.
16
+ */
17
+ const NARRATIVE_FETCH_TIMEOUT_MS = 5000;
18
+ /**
19
+ * Fetch a fresh narrative for the given (type, name, version) tuple.
20
+ * Returns null on 404 (no narrative available) or any error condition.
21
+ * Never throws.
22
+ */
23
+ export async function fetchNarrative(options) {
24
+ const { registryUrl, artifactType, name, version, userAgent } = options;
25
+ const timeoutMs = options.timeoutMs ?? NARRATIVE_FETCH_TIMEOUT_MS;
26
+ const url = new URL("/api/v1/trust/narrative", registryUrl);
27
+ url.searchParams.set("type", artifactType);
28
+ url.searchParams.set("name", name);
29
+ url.searchParams.set("version", version);
30
+ const controller = new AbortController();
31
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
32
+ try {
33
+ const res = await fetch(url.toString(), {
34
+ method: "GET",
35
+ headers: {
36
+ accept: "application/json",
37
+ "user-agent": userAgent,
38
+ },
39
+ signal: controller.signal,
40
+ });
41
+ if (!res.ok) {
42
+ // 404 narrative_not_available is the documented "graceful
43
+ // degrade" signal. Any other 4xx / 5xx is also treated as a
44
+ // miss — caller falls back to legacy block.
45
+ return null;
46
+ }
47
+ const body = (await res.json());
48
+ const parsed = validateWireShape(body);
49
+ return parsed;
50
+ }
51
+ catch {
52
+ // Network error, JSON parse error, abort timeout — all degrade to
53
+ // null and let the caller render the legacy block.
54
+ return null;
55
+ }
56
+ finally {
57
+ clearTimeout(timer);
58
+ }
59
+ }
60
+ /**
61
+ * Minimal shape validation. The handler ships well-formed responses,
62
+ * so this is defense-in-depth. Returns null when required top-level
63
+ * fields are missing or the artifactType isn't skill/mcp.
64
+ */
65
+ function validateWireShape(body) {
66
+ const artifactType = body.artifactType;
67
+ if (artifactType !== "skill" && artifactType !== "mcp")
68
+ return null;
69
+ if (typeof body.packageName !== "string" || body.packageName.length === 0) {
70
+ return null;
71
+ }
72
+ if (typeof body.packageVersion !== "string" ||
73
+ body.packageVersion.length === 0) {
74
+ return null;
75
+ }
76
+ if (typeof body.schemaVersion !== "number")
77
+ return null;
78
+ if (typeof body.generatedAt !== "string")
79
+ return null;
80
+ if (typeof body.summary !== "string")
81
+ return null;
82
+ return {
83
+ artifactType,
84
+ packageName: body.packageName,
85
+ packageVersion: body.packageVersion,
86
+ schemaVersion: body.schemaVersion,
87
+ generatedAt: body.generatedAt,
88
+ summary: body.summary,
89
+ hardcodedSecrets: body.hardcodedSecrets,
90
+ // Wire shape uses `skill` / `mcp` (matches the registry handler's
91
+ // `json:"skill,omitempty"` tag); the typed value carries the same
92
+ // payload as the internal `SkillNarrative` / `McpNarrative` fields.
93
+ skillNarrative: body.skill,
94
+ mcpNarrative: body.mcp,
95
+ verdictReasoning: body.verdictReasoning,
96
+ nextSteps: body.nextSteps,
97
+ };
98
+ }
99
+ //# sourceMappingURL=narrative-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrative-fetch.js","sourceRoot":"","sources":["../../src/check/narrative-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Terminal-side renderer for `RenderedRichBlock` — applies HMA's
3
+ * chalk palette to the structured tone-tagged output produced by
4
+ * `renderCheckRichBlock` from `@opena2a/cli-ui`.
5
+ *
6
+ * Brief: opena2a-org/briefs/check-rich-context-skills-mcp-v1.md (§3).
7
+ *
8
+ * cli-ui returns tone-tagged lines (no chalk imports); this module
9
+ * paints them in HMA's terminal style and writes to stdout. ai-trust
10
+ * has a parallel module — the dividers, indents, and labels are
11
+ * byte-identical across CLIs (parity F12 / F13).
12
+ */
13
+ import type { RenderedRichBlock } from "@opena2a/cli-ui";
14
+ type ColorFn = (s: string) => string;
15
+ /**
16
+ * Color palette interface — kept structural so callers can pass HMA's
17
+ * existing `colors` object without dragging chalk into this module's
18
+ * imports.
19
+ */
20
+ export interface RichBlockPalette {
21
+ reset: string;
22
+ dim: ColorFn;
23
+ bold: ColorFn;
24
+ white: ColorFn;
25
+ green: ColorFn;
26
+ yellow: ColorFn;
27
+ red: ColorFn;
28
+ brightRed: ColorFn;
29
+ cyan: ColorFn;
30
+ }
31
+ export interface PrintRichBlockOptions {
32
+ palette: RichBlockPalette;
33
+ /** Width of section divider rule. Defaults to 62 chars. */
34
+ dividerWidth?: number;
35
+ }
36
+ /**
37
+ * Print the rich block to stdout. The input is the typed render output
38
+ * from cli-ui; this function only translates tones to ANSI and writes.
39
+ */
40
+ export declare function printRichBlock(block: RenderedRichBlock, options: PrintRichBlockOptions): void;
41
+ export {};
42
+ //# sourceMappingURL=render-rich-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-rich-block.d.ts","sourceRoot":"","sources":["../../src/check/render-rich-block.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,KAAK,OAAO,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAErC;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,qBAAqB,GAC7B,IAAI,CAoBN"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Terminal-side renderer for `RenderedRichBlock` — applies HMA's
3
+ * chalk palette to the structured tone-tagged output produced by
4
+ * `renderCheckRichBlock` from `@opena2a/cli-ui`.
5
+ *
6
+ * Brief: opena2a-org/briefs/check-rich-context-skills-mcp-v1.md (§3).
7
+ *
8
+ * cli-ui returns tone-tagged lines (no chalk imports); this module
9
+ * paints them in HMA's terminal style and writes to stdout. ai-trust
10
+ * has a parallel module — the dividers, indents, and labels are
11
+ * byte-identical across CLIs (parity F12 / F13).
12
+ */
13
+ /**
14
+ * Print the rich block to stdout. The input is the typed render output
15
+ * from cli-ui; this function only translates tones to ANSI and writes.
16
+ */
17
+ export function printRichBlock(block, options) {
18
+ const { palette } = options;
19
+ const dividerWidth = options.dividerWidth ?? 62;
20
+ // -- Header --------------------------------------------------------------
21
+ console.log();
22
+ console.log(` ${palette.bold(palette.white(block.header.name))}`);
23
+ for (const line of block.header.metaLines) {
24
+ console.log(` ${paintTone(line.text, line.tone, palette)}`);
25
+ }
26
+ // -- Sections ------------------------------------------------------------
27
+ for (const section of block.sections) {
28
+ printDivider(section.divider, section.dividerTone, palette, dividerWidth);
29
+ for (const line of section.lines) {
30
+ const indent = " " + " ".repeat(line.indent);
31
+ console.log(`${indent}${paintTone(line.text, line.tone, palette)}`);
32
+ }
33
+ }
34
+ console.log();
35
+ }
36
+ function printDivider(label, tone, palette, width) {
37
+ const dashCount = Math.max(1, width - label.length - 4);
38
+ const labelPainted = paintTone(label, tone, palette);
39
+ const dashesLeft = palette.dim("──");
40
+ const dashesRight = palette.dim("─".repeat(dashCount));
41
+ console.log();
42
+ console.log(` ${dashesLeft} ${palette.bold(labelPainted)} ${dashesRight}`);
43
+ }
44
+ function paintTone(text, tone, palette) {
45
+ switch (tone) {
46
+ case "good":
47
+ return palette.green(text);
48
+ case "warning":
49
+ return palette.yellow(text);
50
+ case "critical":
51
+ return palette.brightRed(text);
52
+ case "dim":
53
+ return palette.dim(text);
54
+ case "default":
55
+ default:
56
+ return text;
57
+ }
58
+ }
59
+ //# sourceMappingURL=render-rich-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-rich-block.js","sourceRoot":"","sources":["../../src/check/render-rich-block.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA6BH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAwB,EACxB,OAA8B;IAE9B,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAEhD,2EAA2E;IAC3E,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IACnE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,2EAA2E;IAC3E,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC1E,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CACnB,KAAa,EACb,IAA0D,EAC1D,OAAyB,EACzB,KAAa;IAEb,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,SAAS,CAChB,IAAY,EACZ,IAAoE,EACpE,OAAyB;IAEzB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,UAAU;YACb,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,KAAK;YACR,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,SAAS,CAAC;QACf;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Rich-block adapter — combines the registry-fetched narrative,
3
+ * registry trust data, and runtime args into a `CheckRichBlockInput`
4
+ * suitable for `renderCheckRichBlock` from `@opena2a/cli-ui`.
5
+ *
6
+ * Brief: opena2a-org/briefs/check-rich-context-skills-mcp-v1.md (§3, §5, §7).
7
+ *
8
+ * Pure function — no I/O. Validates inner JSON shapes (the registry
9
+ * handler ships them as opaque JSON.RawMessage) and returns null when
10
+ * the narrative is missing required structure for the artifact type.
11
+ *
12
+ * The adapter never invents data. Missing fields fall through to
13
+ * sensible empty defaults so the cli-ui renderer can still produce a
14
+ * legible block — the alternative is a hard failure that the caller
15
+ * would have to translate to "fall back to legacy block" anyway.
16
+ */
17
+ import type { CheckRichBlockInput } from "@opena2a/cli-ui";
18
+ import type { FetchedPackageNarrative } from "./narrative-fetch.js";
19
+ /**
20
+ * Trust-data fields the adapter needs from the registry. Defined here
21
+ * (not imported from cli.ts) to keep this module decoupled — the
22
+ * caller maps `RegistryTrustData` to this shape.
23
+ */
24
+ export interface RichBlockTrustInput {
25
+ trustVerdict: "VERIFIED" | "LISTED" | "LISTED_UNSCANNED" | "BLOCKED";
26
+ trustScore?: number;
27
+ scanStatus?: string;
28
+ lastScanAge?: string;
29
+ latestVersionLabel?: string;
30
+ publisher?: {
31
+ name: string;
32
+ verified: boolean;
33
+ kind?: string;
34
+ };
35
+ license?: string;
36
+ maintainerCount?: number;
37
+ downloads?: {
38
+ perWeek: number;
39
+ trend?: "rising" | "steady" | "declining";
40
+ };
41
+ communityScans?: number;
42
+ }
43
+ export interface BuildRichBlockInputArgs {
44
+ /** Package name as the user typed it (without prefix). */
45
+ name: string;
46
+ artifactType: "skill" | "mcp";
47
+ narrative: FetchedPackageNarrative;
48
+ trust: RichBlockTrustInput;
49
+ /** Tool name for the secrets-block report command. */
50
+ reportTool: string;
51
+ /** Local-scan findings, when available. Shape mirrors HMA's SecurityFinding. */
52
+ localFindings?: Array<{
53
+ severity: "critical" | "high" | "medium" | "low";
54
+ checkId: string;
55
+ name?: string;
56
+ file?: string;
57
+ line?: number;
58
+ message?: string;
59
+ fix?: string;
60
+ }>;
61
+ }
62
+ /**
63
+ * Build the CheckRichBlockInput. Returns null when the narrative does
64
+ * not satisfy the minimum shape for its artifactType (e.g. skill
65
+ * narrative present but inner skillNarrative field missing).
66
+ */
67
+ export declare function buildRichBlockInput(args: BuildRichBlockInputArgs): CheckRichBlockInput | null;
68
+ //# sourceMappingURL=rich-block-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-block-adapter.d.ts","sourceRoot":"","sources":["../../src/check/rich-block-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAWpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,UAAU,GAAG,QAAQ,GAAG,kBAAkB,GAAG,SAAS,CAAC;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAA;KAAE,CAAC;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,GAAG,KAAK,CAAC;IAC9B,SAAS,EAAE,uBAAuB,CAAC;IACnC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QACjD,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,uBAAuB,GAC5B,mBAAmB,GAAG,IAAI,CAuD5B"}
@@ -0,0 +1,296 @@
1
+ /**
2
+ * Rich-block adapter — combines the registry-fetched narrative,
3
+ * registry trust data, and runtime args into a `CheckRichBlockInput`
4
+ * suitable for `renderCheckRichBlock` from `@opena2a/cli-ui`.
5
+ *
6
+ * Brief: opena2a-org/briefs/check-rich-context-skills-mcp-v1.md (§3, §5, §7).
7
+ *
8
+ * Pure function — no I/O. Validates inner JSON shapes (the registry
9
+ * handler ships them as opaque JSON.RawMessage) and returns null when
10
+ * the narrative is missing required structure for the artifact type.
11
+ *
12
+ * The adapter never invents data. Missing fields fall through to
13
+ * sensible empty defaults so the cli-ui renderer can still produce a
14
+ * legible block — the alternative is a hard failure that the caller
15
+ * would have to translate to "fall back to legacy block" anyway.
16
+ */
17
+ /**
18
+ * Build the CheckRichBlockInput. Returns null when the narrative does
19
+ * not satisfy the minimum shape for its artifactType (e.g. skill
20
+ * narrative present but inner skillNarrative field missing).
21
+ */
22
+ export function buildRichBlockInput(args) {
23
+ const { narrative, trust, artifactType } = args;
24
+ // Inner-narrative artifact-type check — if a skill: target was
25
+ // requested but the registry stored an mcpNarrative (or vice versa)
26
+ // we treat that as missing data. Caller falls back to legacy block.
27
+ if (artifactType === "skill" && narrative.artifactType !== "skill") {
28
+ return null;
29
+ }
30
+ if (artifactType === "mcp" && narrative.artifactType !== "mcp")
31
+ return null;
32
+ const hardcodedSecrets = parseHardcodedSecrets(narrative.hardcodedSecrets);
33
+ const verdictReasoning = parseVerdictReasoning(narrative.verdictReasoning);
34
+ const nextSteps = parseNextSteps(narrative.nextSteps);
35
+ const findings = mapLocalFindings(args.localFindings ?? []);
36
+ let skill;
37
+ let mcp;
38
+ if (artifactType === "skill") {
39
+ const parsed = parseSkillNarrative(narrative.skillNarrative);
40
+ if (!parsed)
41
+ return null;
42
+ skill = parsed;
43
+ }
44
+ else {
45
+ const parsed = parseMcpNarrative(narrative.mcpNarrative);
46
+ if (!parsed)
47
+ return null;
48
+ mcp = parsed;
49
+ }
50
+ const header = {
51
+ trustVerdict: trust.trustVerdict,
52
+ trustScore: trust.trustScore,
53
+ lastScanAge: trust.lastScanAge,
54
+ latestVersionLabel: trust.latestVersionLabel,
55
+ publisher: trust.publisher,
56
+ license: trust.license,
57
+ maintainerCount: trust.maintainerCount,
58
+ downloads: trust.downloads,
59
+ communityScans: trust.communityScans,
60
+ findingsCount: findings.length,
61
+ };
62
+ return {
63
+ name: args.name,
64
+ artifactType,
65
+ header,
66
+ hardcodedSecrets,
67
+ latestVersion: narrative.packageVersion,
68
+ skill,
69
+ mcp,
70
+ findings,
71
+ verdictReasoning,
72
+ nextSteps,
73
+ reportTool: args.reportTool,
74
+ };
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // Inner-JSON shape validators
78
+ // ---------------------------------------------------------------------------
79
+ function parseHardcodedSecrets(raw) {
80
+ if (!isPlainObject(raw)) {
81
+ return { detected: [], scanCovered: false };
82
+ }
83
+ const scanCovered = typeof raw.scanCovered === "boolean"
84
+ ? raw.scanCovered
85
+ : false;
86
+ const detected = [];
87
+ if (Array.isArray(raw.detected)) {
88
+ for (const entry of raw.detected) {
89
+ const parsed = parseSecret(entry);
90
+ if (parsed)
91
+ detected.push(parsed);
92
+ }
93
+ }
94
+ return { detected, scanCovered };
95
+ }
96
+ function parseSecret(raw) {
97
+ if (!isPlainObject(raw))
98
+ return null;
99
+ const severity = raw.severity;
100
+ if (severity !== "critical" &&
101
+ severity !== "high" &&
102
+ severity !== "medium" &&
103
+ severity !== "low") {
104
+ return null;
105
+ }
106
+ if (typeof raw.type !== "string" || typeof raw.typeLabel !== "string") {
107
+ return null;
108
+ }
109
+ if (typeof raw.file !== "string")
110
+ return null;
111
+ if (typeof raw.maskedValue !== "string")
112
+ return null;
113
+ if (typeof raw.shownChars !== "number")
114
+ return null;
115
+ if (typeof raw.totalChars !== "number")
116
+ return null;
117
+ if (typeof raw.shipsInArtifact !== "boolean")
118
+ return null;
119
+ return {
120
+ type: raw.type,
121
+ typeLabel: raw.typeLabel,
122
+ file: raw.file,
123
+ line: typeof raw.line === "number" ? raw.line : undefined,
124
+ maskedValue: raw.maskedValue,
125
+ shownChars: raw.shownChars,
126
+ totalChars: raw.totalChars,
127
+ shipsInArtifact: raw.shipsInArtifact,
128
+ severity,
129
+ rotationUrl: typeof raw.rotationUrl === "string" ? raw.rotationUrl : undefined,
130
+ rotationCommand: typeof raw.rotationCommand === "string" ? raw.rotationCommand : undefined,
131
+ };
132
+ }
133
+ function parseSkillNarrative(raw) {
134
+ if (!isPlainObject(raw))
135
+ return null;
136
+ if (typeof raw.skillName !== "string")
137
+ return null;
138
+ const activationPhrases = stringArray(raw.activationPhrases);
139
+ const externalServices = stringArray(raw.externalServices);
140
+ const permissions = parsePermissions(raw.permissions);
141
+ const toolCallsObserved = parseToolCalls(raw.toolCallsObserved);
142
+ return {
143
+ skillName: raw.skillName,
144
+ activationPhrases,
145
+ behaviorDescription: typeof raw.behaviorDescription === "string"
146
+ ? raw.behaviorDescription
147
+ : "",
148
+ permissions,
149
+ externalServices,
150
+ persistence: typeof raw.persistence === "string" ? raw.persistence : "",
151
+ toolCallsObserved,
152
+ misuseNarrative: typeof raw.misuseNarrative === "string" ? raw.misuseNarrative : "",
153
+ };
154
+ }
155
+ function parseMcpNarrative(raw) {
156
+ if (!isPlainObject(raw))
157
+ return null;
158
+ if (typeof raw.mcpName !== "string")
159
+ return null;
160
+ const tools = parseMcpTools(raw.tools);
161
+ const sideEffects = stringArray(raw.sideEffects);
162
+ return {
163
+ mcpName: raw.mcpName,
164
+ tools,
165
+ pathScope: typeof raw.pathScope === "string" ? raw.pathScope : "",
166
+ network: typeof raw.network === "string" ? raw.network : "",
167
+ persistence: typeof raw.persistence === "string" ? raw.persistence : "",
168
+ auth: typeof raw.auth === "string" ? raw.auth : "",
169
+ sideEffects,
170
+ };
171
+ }
172
+ function parsePermissions(raw) {
173
+ if (!Array.isArray(raw))
174
+ return [];
175
+ const out = [];
176
+ for (const entry of raw) {
177
+ if (!isPlainObject(entry))
178
+ continue;
179
+ if (typeof entry.name !== "string")
180
+ continue;
181
+ const status = entry.status;
182
+ if (status !== "used" && status !== "unused" && status !== "undeclared") {
183
+ continue;
184
+ }
185
+ out.push({
186
+ name: entry.name,
187
+ declared: !!entry.declared,
188
+ used: !!entry.used,
189
+ status,
190
+ note: typeof entry.note === "string" ? entry.note : undefined,
191
+ });
192
+ }
193
+ return out;
194
+ }
195
+ function parseToolCalls(raw) {
196
+ if (!Array.isArray(raw))
197
+ return [];
198
+ const out = [];
199
+ for (const entry of raw) {
200
+ if (!isPlainObject(entry))
201
+ continue;
202
+ if (typeof entry.tool !== "string")
203
+ continue;
204
+ if (typeof entry.count !== "number")
205
+ continue;
206
+ out.push({ tool: entry.tool, count: entry.count });
207
+ }
208
+ return out;
209
+ }
210
+ function parseMcpTools(raw) {
211
+ if (!Array.isArray(raw))
212
+ return [];
213
+ const out = [];
214
+ for (const entry of raw) {
215
+ if (!isPlainObject(entry))
216
+ continue;
217
+ if (typeof entry.name !== "string")
218
+ continue;
219
+ out.push({
220
+ name: entry.name,
221
+ signature: typeof entry.signature === "string" ? entry.signature : "",
222
+ description: typeof entry.description === "string" ? entry.description : "",
223
+ destructive: !!entry.destructive,
224
+ });
225
+ }
226
+ return out;
227
+ }
228
+ function parseVerdictReasoning(raw) {
229
+ if (!Array.isArray(raw))
230
+ return [];
231
+ const out = [];
232
+ for (const entry of raw) {
233
+ if (!isPlainObject(entry))
234
+ continue;
235
+ const kind = entry.kind;
236
+ if (kind !== "positive" && kind !== "gap" && kind !== "critical")
237
+ continue;
238
+ if (typeof entry.text !== "string")
239
+ continue;
240
+ out.push({ kind, text: entry.text });
241
+ }
242
+ return out;
243
+ }
244
+ function parseNextSteps(raw) {
245
+ if (!Array.isArray(raw))
246
+ return [];
247
+ const out = [];
248
+ for (const entry of raw) {
249
+ if (!isPlainObject(entry))
250
+ continue;
251
+ const weight = entry.weight;
252
+ if (weight !== "primary" && weight !== "secondary")
253
+ continue;
254
+ if (typeof entry.label !== "string")
255
+ continue;
256
+ out.push({
257
+ weight,
258
+ label: entry.label,
259
+ command: typeof entry.command === "string" ? entry.command : undefined,
260
+ url: typeof entry.url === "string" ? entry.url : undefined,
261
+ });
262
+ }
263
+ return out;
264
+ }
265
+ function mapLocalFindings(findings = []) {
266
+ const out = [];
267
+ for (const f of findings) {
268
+ const locator = f.file
269
+ ? f.line !== undefined
270
+ ? `${f.file}:${f.line}`
271
+ : f.file
272
+ : "";
273
+ out.push({
274
+ severity: f.severity,
275
+ ruleId: f.checkId,
276
+ locator,
277
+ description: f.message ?? f.name ?? f.checkId,
278
+ fix: f.fix,
279
+ });
280
+ }
281
+ return out;
282
+ }
283
+ function isPlainObject(v) {
284
+ return typeof v === "object" && v !== null && !Array.isArray(v);
285
+ }
286
+ function stringArray(raw) {
287
+ if (!Array.isArray(raw))
288
+ return [];
289
+ const out = [];
290
+ for (const entry of raw) {
291
+ if (typeof entry === "string")
292
+ out.push(entry);
293
+ }
294
+ return out;
295
+ }
296
+ //# sourceMappingURL=rich-block-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-block-adapter.js","sourceRoot":"","sources":["../../src/check/rich-block-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAuDH;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAA6B;IAE7B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAEhD,+DAA+D;IAC/D,oEAAoE;IACpE,oEAAoE;IACpE,IAAI,YAAY,KAAK,OAAO,IAAI,SAAS,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,YAAY,KAAK,KAAK,IAAI,SAAS,CAAC,YAAY,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAE5E,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IAE5D,IAAI,KAAqC,CAAC;IAC1C,IAAI,GAAiC,CAAC;IAEtC,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,KAAK,GAAG,MAAM,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAA2B;QACrC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,aAAa,EAAE,QAAQ,CAAC,MAAM;KAC/B,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,YAAY;QACZ,MAAM;QACN,gBAAgB;QAChB,aAAa,EAAE,SAAS,CAAC,cAAc;QACvC,KAAK;QACL,GAAG;QACH,QAAQ;QACR,gBAAgB;QAChB,SAAS;QACT,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E,SAAS,qBAAqB,CAAC,GAAY;IAIzC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,WAAW,KAAK,SAAS;QACtD,CAAC,CAAC,GAAG,CAAC,WAAW;QACjB,CAAC,CAAC,KAAK,CAAC;IACV,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,MAAM;gBAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,IACE,QAAQ,KAAK,UAAU;QACvB,QAAQ,KAAK,MAAM;QACnB,QAAQ,KAAK,QAAQ;QACrB,QAAQ,KAAK,KAAK,EAClB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1D,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACzD,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,QAAQ;QACR,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC9E,eAAe,EACb,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,iBAAiB,GAAG,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAChE,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,iBAAiB;QACjB,mBAAmB,EACjB,OAAO,GAAG,CAAC,mBAAmB,KAAK,QAAQ;YACzC,CAAC,CAAC,GAAG,CAAC,mBAAmB;YACzB,CAAC,CAAC,EAAE;QACR,WAAW;QACX,gBAAgB;QAChB,WAAW,EACT,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;QAC5D,iBAAiB;QACjB,eAAe,EACb,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;KACrE,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAY;IACrC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACjD,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK;QACL,SAAS,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;QACjE,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC3D,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;QACvE,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAClD,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YACxE,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ;YAC1B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI;YAClB,MAAM;YACN,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SAC9D,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QAC7C,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;YAAE,SAAS;QAC9C,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,GAAY;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QAC7C,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YACrE,WAAW,EACT,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YAChE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW;SACjC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAY;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAAoC,EAAE,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU;YAAE,SAAS;QAC3E,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QAC7C,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,WAAW;YAAE,SAAS;QAC7D,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;YAAE,SAAS;QAC9C,GAAG,CAAC,IAAI,CAAC;YACP,MAAM;YACN,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACtE,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;SAC3D,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CACvB,WAAqD,EAAE;IAEvD,MAAM,GAAG,GAA6B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI;YACpB,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS;gBACpB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;gBACvB,CAAC,CAAC,CAAC,CAAC,IAAI;YACV,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC;YACP,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,OAAO;YACjB,OAAO;YACP,WAAW,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO;YAC7C,GAAG,EAAE,CAAC,CAAC,GAAG;SACX,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * `ai-trust check skill:<name>` / `check mcp:<name>` orchestrator.
3
+ *
4
+ * Brief: opena2a-org/briefs/check-rich-context-skills-mcp-v1.md (§3, §8).
5
+ *
6
+ * Mirrors hackmyagent/src/check/skill-mcp-check.ts to keep the two
7
+ * CLIs byte-identical on the rich-block render (parity F12 / F13).
8
+ * Adapted to use ai-trust's `@opena2a/registry-client` for the trust
9
+ * lookup; the rest of the helpers (parseRichTarget, fetchNarrative,
10
+ * buildRichBlockInput, render-rich-block) are shared verbatim.
11
+ */
12
+ import type { RegistryClient } from "@opena2a/registry-client";
13
+ import { type CheckRichBlockInput } from "@opena2a/cli-ui";
14
+ import { type RichBlockPalette } from "./render-rich-block.js";
15
+ export interface ParsedRichTarget {
16
+ artifactType: "skill" | "mcp";
17
+ name: string;
18
+ }
19
+ /**
20
+ * Parse `skill:<name>` / `mcp:<name>` prefixes. Returns null when the
21
+ * input has no recognised prefix — the caller routes through the
22
+ * existing AI-classifier dispatch.
23
+ */
24
+ export declare function parseRichTarget(target: string): ParsedRichTarget | null;
25
+ /**
26
+ * Map a registry verdict + scanStatus to the rich-block trustVerdict
27
+ * tier. Same logic as HMA's deriveTrustVerdict (parity F12 / F13).
28
+ */
29
+ export declare function deriveTrustVerdict(verdict: string | undefined, trustLevel: number | undefined, scanStatus: string | undefined): "VERIFIED" | "LISTED" | "LISTED_UNSCANNED" | "BLOCKED";
30
+ export interface CheckSkillOrMcpOptions {
31
+ parsed: ParsedRichTarget;
32
+ registryUrl: string;
33
+ client: RegistryClient;
34
+ userAgent: string;
35
+ /** Tool name for the secrets-block report command (e.g. "ai-trust"). */
36
+ reportTool: string;
37
+ /** Pre-built palette to paint the output. */
38
+ palette: RichBlockPalette;
39
+ /** Optional explicit version pin; defaults to registry's "latest". */
40
+ version?: string;
41
+ /**
42
+ * Suppress the human-readable rich-block render. Used by `--json`
43
+ * callers and the opena2a-parity harness so output is parseable.
44
+ * The orchestrator still builds and returns `result.input`.
45
+ */
46
+ silent?: boolean;
47
+ }
48
+ export interface CheckSkillOrMcpResult {
49
+ /** True when the rich block was printed. False → caller falls back. */
50
+ rendered: boolean;
51
+ /** Raw input passed to renderCheckRichBlock — useful for tests / --json. */
52
+ input?: CheckRichBlockInput;
53
+ }
54
+ /**
55
+ * Run the rich-block path. Returns `{rendered: false}` when the
56
+ * narrative is unavailable; caller falls back to the existing
57
+ * classifier path.
58
+ */
59
+ export declare function checkSkillOrMcp(options: CheckSkillOrMcpOptions): Promise<CheckSkillOrMcpResult>;
60
+ //# sourceMappingURL=skill-mcp-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-mcp-check.d.ts","sourceRoot":"","sources":["../../src/check/skill-mcp-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGjF,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAK/E,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,OAAO,GAAG,KAAK,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAYvE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,UAAU,GAAG,QAAQ,GAAG,kBAAkB,GAAG,SAAS,CAMxD;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,QAAQ,EAAE,OAAO,CAAC;IAClB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAuEhC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * `ai-trust check skill:<name>` / `check mcp:<name>` orchestrator.
3
+ *
4
+ * Brief: opena2a-org/briefs/check-rich-context-skills-mcp-v1.md (§3, §8).
5
+ *
6
+ * Mirrors hackmyagent/src/check/skill-mcp-check.ts to keep the two
7
+ * CLIs byte-identical on the rich-block render (parity F12 / F13).
8
+ * Adapted to use ai-trust's `@opena2a/registry-client` for the trust
9
+ * lookup; the rest of the helpers (parseRichTarget, fetchNarrative,
10
+ * buildRichBlockInput, render-rich-block) are shared verbatim.
11
+ */
12
+ import { renderCheckRichBlock } from "@opena2a/cli-ui";
13
+ import { fetchNarrative } from "./narrative-fetch.js";
14
+ import { buildRichBlockInput } from "./rich-block-adapter.js";
15
+ import { printRichBlock } from "./render-rich-block.js";
16
+ const SKILL_PREFIX = "skill:";
17
+ const MCP_PREFIX = "mcp:";
18
+ /**
19
+ * Parse `skill:<name>` / `mcp:<name>` prefixes. Returns null when the
20
+ * input has no recognised prefix — the caller routes through the
21
+ * existing AI-classifier dispatch.
22
+ */
23
+ export function parseRichTarget(target) {
24
+ if (target.startsWith(SKILL_PREFIX)) {
25
+ const name = target.slice(SKILL_PREFIX.length);
26
+ if (name.length === 0)
27
+ return null;
28
+ return { artifactType: "skill", name };
29
+ }
30
+ if (target.startsWith(MCP_PREFIX)) {
31
+ const name = target.slice(MCP_PREFIX.length);
32
+ if (name.length === 0)
33
+ return null;
34
+ return { artifactType: "mcp", name };
35
+ }
36
+ return null;
37
+ }
38
+ /**
39
+ * Map a registry verdict + scanStatus to the rich-block trustVerdict
40
+ * tier. Same logic as HMA's deriveTrustVerdict (parity F12 / F13).
41
+ */
42
+ export function deriveTrustVerdict(verdict, trustLevel, scanStatus) {
43
+ const v = (verdict ?? "").toLowerCase();
44
+ if (v === "blocked" || trustLevel === 0)
45
+ return "BLOCKED";
46
+ if (trustLevel === 4 || v === "verified")
47
+ return "VERIFIED";
48
+ if (scanStatus !== "completed")
49
+ return "LISTED_UNSCANNED";
50
+ return "LISTED";
51
+ }
52
+ /**
53
+ * Run the rich-block path. Returns `{rendered: false}` when the
54
+ * narrative is unavailable; caller falls back to the existing
55
+ * classifier path.
56
+ */
57
+ export async function checkSkillOrMcp(options) {
58
+ const { parsed, client } = options;
59
+ const version = options.version && options.version.length > 0
60
+ ? options.version
61
+ : "latest";
62
+ const narrative = await fetchNarrative({
63
+ registryUrl: options.registryUrl,
64
+ artifactType: parsed.artifactType,
65
+ name: parsed.name,
66
+ version,
67
+ userAgent: options.userAgent,
68
+ });
69
+ if (!narrative) {
70
+ return { rendered: false };
71
+ }
72
+ // Trust lookup is best-effort — a freshly-seeded narrative may not
73
+ // yet have a trust record. Sparse / missing trust degrades the
74
+ // header to LISTED_UNSCANNED but the narrative carries the bulk
75
+ // of the rich block.
76
+ let trust = null;
77
+ try {
78
+ trust = await client.checkTrust(parsed.name);
79
+ }
80
+ catch {
81
+ trust = null;
82
+ }
83
+ const trustInput = trust && trust.found
84
+ ? {
85
+ trustVerdict: deriveTrustVerdict(trust.verdict, trust.trustLevel, trust.scanStatus),
86
+ trustScore: trust.scanStatus === "completed"
87
+ ? Math.round(trust.trustScore * 100)
88
+ : undefined,
89
+ scanStatus: trust.scanStatus,
90
+ lastScanAge: formatScanAge(trust.lastScannedAt),
91
+ latestVersionLabel: narrative.packageVersion,
92
+ communityScans: trust.communityScans,
93
+ }
94
+ : {
95
+ trustVerdict: "LISTED_UNSCANNED",
96
+ latestVersionLabel: narrative.packageVersion,
97
+ };
98
+ const input = buildRichBlockInput({
99
+ name: parsed.name,
100
+ artifactType: parsed.artifactType,
101
+ narrative,
102
+ trust: trustInput,
103
+ reportTool: options.reportTool,
104
+ });
105
+ if (!input) {
106
+ return { rendered: false };
107
+ }
108
+ if (options.silent) {
109
+ return { rendered: true, input };
110
+ }
111
+ const rendered = renderCheckRichBlock(input);
112
+ printRichBlock(rendered, { palette: options.palette });
113
+ return { rendered: true, input };
114
+ }
115
+ function formatScanAge(lastScannedAt) {
116
+ if (!lastScannedAt)
117
+ return undefined;
118
+ const scanned = new Date(lastScannedAt);
119
+ if (Number.isNaN(scanned.getTime()))
120
+ return undefined;
121
+ const days = Math.floor((Date.now() - scanned.getTime()) / (1000 * 60 * 60 * 24));
122
+ if (days < 1)
123
+ return "today";
124
+ if (days === 1)
125
+ return "1d ago";
126
+ if (days < 30)
127
+ return `${days}d ago`;
128
+ const months = Math.floor(days / 30);
129
+ if (months === 1)
130
+ return "1mo ago";
131
+ if (months < 12)
132
+ return `${months}mo ago`;
133
+ const years = Math.floor(days / 365);
134
+ return years === 1 ? "1y ago" : `${years}y ago`;
135
+ }
136
+ //# sourceMappingURL=skill-mcp-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-mcp-check.js","sourceRoot":"","sources":["../../src/check/skill-mcp-check.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2CzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4I3D"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4CzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyL3D"}
@@ -8,11 +8,12 @@ import chalk from "chalk";
8
8
  import { classify } from "@opena2a/ai-classifier";
9
9
  import { RegistryClient, PackageNotFoundError } from "@opena2a/registry-client";
10
10
  import { formatCheckResult, formatScanResult, formatJson, formatNotFound, } from "../output/formatter.js";
11
- import { translateDownloadError } from "@opena2a/check-core";
11
+ import { buildNotFoundOutput, translateDownloadError } from "@opena2a/check-core";
12
12
  import { resolveAndLog } from "../utils/resolve.js";
13
13
  import { isHmaAvailable, scanPackage } from "../scanner/index.js";
14
14
  import { confirm } from "../utils/prompt.js";
15
15
  import { isContributeEnabled, queueScanResult, flushQueue, recordScanAndMaybeShowTip, saveContributeChoice, sendScanPing, } from "../telemetry/index.js";
16
+ import { checkSkillOrMcp, parseRichTarget } from "../check/skill-mcp-check.js";
16
17
  import { createRequire } from "node:module";
17
18
  const require = createRequire(import.meta.url);
18
19
  const pkg = require("../../package.json");
@@ -30,6 +31,46 @@ export function registerCheckCommand(program) {
30
31
  .option("--analm", "AI-powered threat analysis using AnaLM")
31
32
  .action(async (rawName, opts) => {
32
33
  const globalOpts = program.opts();
34
+ // Rich-block dispatch (skill: / mcp: prefix). Mirrors HMA's
35
+ // src/check/ module for parity F12 / F13. When the registry
36
+ // has a fresh narrative, render the rich block and exit.
37
+ // Otherwise fall through to the existing classifier flow.
38
+ const parsed = parseRichTarget(rawName);
39
+ if (parsed) {
40
+ const richClient = new RegistryClient({
41
+ baseUrl: globalOpts.registryUrl,
42
+ userAgent: `ai-trust/${AI_TRUST_VERSION}`,
43
+ });
44
+ const result = await checkSkillOrMcp({
45
+ parsed,
46
+ registryUrl: globalOpts.registryUrl,
47
+ client: richClient,
48
+ userAgent: `ai-trust/${AI_TRUST_VERSION}`,
49
+ reportTool: "ai-trust",
50
+ silent: !!globalOpts.json,
51
+ palette: {
52
+ reset: "",
53
+ dim: chalk.dim,
54
+ bold: chalk.bold,
55
+ white: chalk.white,
56
+ green: chalk.green,
57
+ yellow: chalk.yellow,
58
+ red: chalk.red,
59
+ brightRed: chalk.redBright,
60
+ cyan: chalk.cyan,
61
+ },
62
+ });
63
+ if (result.rendered) {
64
+ if (globalOpts.json && result.input) {
65
+ console.log(JSON.stringify(result.input, null, 2));
66
+ }
67
+ return;
68
+ }
69
+ // No narrative → falls through; classifier picks up parsed.name
70
+ // as a normal lookup target. Replace the name so downstream
71
+ // logic (no-scan, scan paths) operates on the unprefixed name.
72
+ rawName = parsed.name;
73
+ }
33
74
  const name = resolveAndLog(rawName);
34
75
  const client = new RegistryClient({
35
76
  baseUrl: globalOpts.registryUrl,
@@ -85,7 +126,11 @@ export function registerCheckCommand(program) {
85
126
  else {
86
127
  const message = err instanceof Error ? err.message : String(err);
87
128
  if (globalOpts.json) {
88
- console.log(formatJson({ name, found: false, error: message }));
129
+ console.log(formatJson(buildNotFoundOutput({
130
+ name,
131
+ ecosystem: "npm",
132
+ error: message,
133
+ })));
89
134
  }
90
135
  else {
91
136
  console.error(`Error: ${message}`);
@@ -141,15 +186,15 @@ async function handleNotFound(name, client, globalOpts, opts) {
141
186
  // Non-TTY: report not found with actionable next steps
142
187
  if (!process.stdin.isTTY) {
143
188
  if (globalOpts.json) {
144
- console.log(formatJson({
189
+ console.log(formatJson(buildNotFoundOutput({
145
190
  name,
146
- found: false,
191
+ ecosystem: "npm",
147
192
  error: `Package "${name}" not found in the OpenA2A Registry.`,
148
193
  nextSteps: [
149
194
  `ai-trust check ${name} --scan-if-missing`,
150
195
  `npx hackmyagent secure <project-dir>`,
151
196
  ],
152
- }));
197
+ })));
153
198
  }
154
199
  else {
155
200
  console.error(`Package "${name}" not found in the OpenA2A Registry.\n`);
@@ -189,13 +234,13 @@ async function handleScanFlow(name, client, globalOpts, opts, statusMessage) {
189
234
  const translated = translateDownloadError(name, message);
190
235
  if (translated !== undefined) {
191
236
  if (globalOpts.json) {
192
- console.log(formatJson({
237
+ console.log(formatJson(buildNotFoundOutput({
193
238
  name,
194
- found: false,
239
+ ecosystem: "npm",
195
240
  error: message,
196
- ...(translated.errorHint ? { hint: translated.errorHint } : {}),
197
- ...(translated.suggestions ? { suggestions: translated.suggestions } : {}),
198
- }));
241
+ errorHint: translated.errorHint,
242
+ suggestions: translated.suggestions,
243
+ })));
199
244
  }
200
245
  else {
201
246
  console.log(formatNotFound({
@@ -209,7 +254,11 @@ async function handleScanFlow(name, client, globalOpts, opts, statusMessage) {
209
254
  return;
210
255
  }
211
256
  if (globalOpts.json) {
212
- console.log(formatJson({ name, found: false, error: message }));
257
+ console.log(formatJson(buildNotFoundOutput({
258
+ name,
259
+ ecosystem: "npm",
260
+ error: message,
261
+ })));
213
262
  }
214
263
  else {
215
264
  console.error(`Error: ${message}`);
@@ -322,15 +371,15 @@ async function submitContribution(name, scanResult, registryUrl, opts) {
322
371
  }
323
372
  function handleNoScanNotFound(name, globalOpts) {
324
373
  if (globalOpts.json) {
325
- console.log(formatJson({
374
+ console.log(formatJson(buildNotFoundOutput({
326
375
  name,
327
- found: false,
376
+ ecosystem: "npm",
328
377
  error: `Package "${name}" not found in the OpenA2A Registry.`,
329
378
  nextSteps: [
330
379
  `ai-trust check ${name} --scan-if-missing`,
331
380
  `npx hackmyagent secure <project-dir>`,
332
381
  ],
333
- }));
382
+ })));
334
383
  }
335
384
  else {
336
385
  // Shared cli-ui renderNotFoundBlock output (F2 from the check-command-divergence brief).
@@ -360,9 +409,12 @@ function isPolicyFailure(verdict) {
360
409
  verdict === "failed");
361
410
  }
362
411
  /**
363
- * Print a registry-confirmed library result. We still show whatever trust
364
- * data the registry has (publisher, verdict, etc.) so the user isn't left
365
- * with an unhelpful "go away" message, then append the HMA CTA.
412
+ * Print a registry-confirmed library result. Per the v0.3 spec
413
+ * (ai-trust/CLAUDE.md "UX philosophy v0.3"), Tier 3 libraries get
414
+ * ONLY the out-of-scope notice + HMA CTA \u2014 no trust block. Rendering
415
+ * the trust block on top would surface a misleading "Scan failed \u2014
416
+ * score is unreliable" line on errored library scans (AI-TRUST-1).
417
+ * The full trust read for libraries lives in `hackmyagent check`.
366
418
  */
367
419
  function printLibraryWithTrust(result, asJson) {
368
420
  if (asJson) {
@@ -374,8 +426,8 @@ function printLibraryWithTrust(result, asJson) {
374
426
  }));
375
427
  return;
376
428
  }
377
- console.log(formatCheckResult(result));
378
429
  console.error("");
430
+ console.error(` ${chalk.bold.white(result.name)} ${chalk.dim("library (registry-classified)")}`);
379
431
  console.error(` ${chalk.cyan("Out of scope for ai-trust")} ${chalk.dim("\u2014 the registry classifies this as a general-purpose library.")}`);
380
432
  console.error(` ${chalk.dim("For a thorough security audit:")}`);
381
433
  console.error(` ${chalk.cyan(`hackmyagent check ${result.name}`)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -12,16 +12,83 @@ import { registerAuditCommand } from "./commands/audit.js";
12
12
  import { registerBatchCommand } from "./commands/batch.js";
13
13
  const require = createRequire(import.meta.url);
14
14
  const pkg = require("../package.json");
15
+ const VERSION = pkg.version;
16
+ const TELEMETRY_TOOL = "ai-trust";
17
+ const NON_TRACKED_TELEMETRY_COMMANDS = new Set(["telemetry", "help"]);
18
+ const telemetryStartedAt = new Map();
15
19
  const program = new Command();
16
20
  program
17
21
  .name("ai-trust")
18
22
  .description("Check security trust scores for AI agents and MCP servers before installing them")
19
- .version(`ai-trust ${pkg.version} — trust verification for AI packages`, "-v, --version")
20
23
  .option("--registry-url <url>", "registry base URL", "https://api.oa2a.org")
21
24
  .option("--json", "output raw JSON", false)
22
25
  .option("--no-color", "disable colored output");
23
26
  registerCheckCommand(program);
24
27
  registerAuditCommand(program);
25
28
  registerBatchCommand(program);
26
- program.parse();
29
+ (async () => {
30
+ // Tier-1 anonymous usage telemetry — default ON; opt-out via
31
+ // OPENA2A_TELEMETRY=off or `ai-trust telemetry off`. Mirrors the
32
+ // pattern shipped in hackmyagent + opena2a-cli (parity).
33
+ // Disclosure surfaces: README, --version line, telemetry subcommand,
34
+ // opena2a.org/telemetry.
35
+ // Silent-post-consent rule (briefs/scan-result-telemetry-policy.md §5):
36
+ // ALL ongoing contribution after opt-in is invisible — no per-scan
37
+ // banner, no "queued for registry" line. ai-trust currently emits
38
+ // none; preserve that.
39
+ const tele = await import("@opena2a/telemetry");
40
+ const cliUi = await import("@opena2a/cli-ui");
41
+ await tele.init({ tool: TELEMETRY_TOOL, version: VERSION });
42
+ program.version(cliUi.versionLine({
43
+ tool: TELEMETRY_TOOL,
44
+ version: VERSION,
45
+ telemetry: tele.status(),
46
+ }), "-v, --version", "Output the version number");
47
+ program
48
+ .hook("preAction", (_thisCommand, actionCommand) => {
49
+ const name = actionCommand.name();
50
+ if (NON_TRACKED_TELEMETRY_COMMANDS.has(name))
51
+ return;
52
+ telemetryStartedAt.set(name, Date.now());
53
+ })
54
+ .hook("postAction", (_thisCommand, actionCommand) => {
55
+ const name = actionCommand.name();
56
+ const startedAt = telemetryStartedAt.get(name);
57
+ if (startedAt === undefined)
58
+ return;
59
+ telemetryStartedAt.delete(name);
60
+ void tele.track(name, {
61
+ success: (process.exitCode ?? 0) === 0,
62
+ durationMs: Date.now() - startedAt,
63
+ });
64
+ });
65
+ program
66
+ .command("telemetry [action]")
67
+ .description("Inspect or toggle anonymous usage telemetry: on | off | status")
68
+ .action((action) => {
69
+ console.log(cliUi.runTelemetryCommand(action, {
70
+ tool: TELEMETRY_TOOL,
71
+ getStatus: tele.status,
72
+ setOptOut: tele.setOptOut,
73
+ }));
74
+ });
75
+ if (process.argv.length <= 2) {
76
+ program.outputHelp();
77
+ process.exit(0);
78
+ }
79
+ try {
80
+ await program.parseAsync(process.argv);
81
+ }
82
+ catch (err) {
83
+ const inFlight = telemetryStartedAt.keys().next().value;
84
+ if (inFlight) {
85
+ const code = err instanceof Error ? err.name : "unknown";
86
+ tele.error(inFlight, code);
87
+ }
88
+ throw err;
89
+ }
90
+ finally {
91
+ await tele.flush();
92
+ }
93
+ })();
27
94
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,kFAAkF,CAAC;KAC/F,OAAO,CAAC,YAAY,GAAG,CAAC,OAAO,uCAAuC,EAAE,eAAe,CAAC;KACxF,MAAM,CACL,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,CACvB;KACA,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,CAAC;KAC1C,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;AAElD,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-trust",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "Trust verification CLI for AI packages — check MCP servers, A2A agents, AI tools, and LLMs before you install",
5
5
  "homepage": "https://opena2a.org/ai-trust",
6
6
  "repository": {
@@ -40,11 +40,12 @@
40
40
  "license": "Apache-2.0",
41
41
  "dependencies": {
42
42
  "@opena2a/ai-classifier": "^0.1.0",
43
- "@opena2a/check-core": "0.1.0",
44
- "@opena2a/cli-ui": "0.3.0",
43
+ "@opena2a/check-core": "0.2.0",
44
+ "@opena2a/cli-ui": "0.5.0",
45
45
  "@opena2a/contribute": "^0.1.0",
46
46
  "@opena2a/registry-client": "0.1.0",
47
47
  "@opena2a/shared": "^0.1.0",
48
+ "@opena2a/telemetry": "^0.1.2",
48
49
  "chalk": "^5.3.0",
49
50
  "commander": "^12.1.0",
50
51
  "hackmyagent": "^0.17.1"