@decantr/registry 1.0.3 → 1.1.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 +3 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js.map +1 -1
- package/dist/{content-types-Clwipgq9.d.ts → content-types-GxXVWkrY.d.ts} +76 -1
- package/dist/content-types.d.ts +1 -1
- package/dist/content-types.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +6 -2
- package/schema/content-health-report.v1.json +255 -0
- package/schema/execution-pack.common.v1.json +8 -0
- package/schema/showcase-manifest-entry.v1.json +29 -0
package/README.md
CHANGED
|
@@ -14,9 +14,10 @@ npm install @decantr/registry
|
|
|
14
14
|
## What It Exports
|
|
15
15
|
|
|
16
16
|
- strong types for patterns, themes, blueprints, archetypes, shells, and intelligence metadata
|
|
17
|
+
- `ContentHealthReport` types for registry content supply-chain health artifacts
|
|
17
18
|
- `RegistryAPIClient` for server-side and tool-side registry access
|
|
18
19
|
- `@decantr/registry/client` for web-safe API usage
|
|
19
|
-
- public schema exports for registry content and summary responses
|
|
20
|
+
- public schema exports for registry content, content health, and summary responses
|
|
20
21
|
- ranking and sorting helpers for public registry content
|
|
21
22
|
|
|
22
23
|
## Example
|
|
@@ -41,7 +42,7 @@ const summary = await client.getIntelligenceSummary();
|
|
|
41
42
|
|
|
42
43
|
## Related Schemas
|
|
43
44
|
|
|
44
|
-
This package owns the canonical registry schemas published under `@decantr/registry/schema
|
|
45
|
+
This package owns the canonical registry schemas published under `@decantr/registry/schema/*`, including `content-health-report.v1.json` for local content repository health reports emitted by `decantr content-health`.
|
|
45
46
|
|
|
46
47
|
## Compatibility
|
|
47
48
|
|
package/dist/client.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EssenceFile } from '@decantr/essence-spec';
|
|
2
|
-
import { e as ApiContentType,
|
|
3
|
-
export { c as API_CONTENT_TYPES, d as API_CONTENT_TYPE_TO_CONTENT_TYPE, n as CONTENT_INTELLIGENCE_SOURCES, o as CONTENT_TYPES, p as CONTENT_TYPE_TO_API_CONTENT_TYPE, r as ContentBenchmarkConfidence, t as ContentGoldenUsage,
|
|
2
|
+
import { e as ApiContentType, as as SearchParams, I as ContentListResponse, ai as PublicContentRecord, a as Pattern, A as Archetype, T as Theme, B as Blueprint, S as Shell, at as SearchResponse, al as PublicUserProfile, ak as PublicContentSummary, aF as UserProfile, am as PublishPayload, an as PublishResponse, a4 as OwnedContentSummary, aw as ShowcaseManifestResponse, ay as ShowcaseShortlistResponse, ax as ShowcaseShortlistReport, ap as RegistryIntelligenceSummaryResponse, N as ExecutionPackBundleResponse, aN as HostedSelectedExecutionPackRequest, aO as SelectedExecutionPackResponse, Q as ExecutionPackManifest, $ as HostedFileCritiqueRequest, Z as FileCritiqueReport, a0 as HostedProjectAuditRequest, af as ProjectAuditReport } from './content-types-GxXVWkrY.js';
|
|
3
|
+
export { c as API_CONTENT_TYPES, d as API_CONTENT_TYPE_TO_CONTENT_TYPE, n as CONTENT_INTELLIGENCE_SOURCES, o as CONTENT_TYPES, p as CONTENT_TYPE_TO_API_CONTENT_TYPE, r as ContentBenchmarkConfidence, t as ContentGoldenUsage, F as ContentIntelligenceMetadata, G as ContentIntelligenceSource, H as ContentItem, J as ContentVerificationStatus, a5 as PUBLIC_CONTENT_SOURCES, aj as PublicContentSource, ao as RegistryIntelligenceSummaryBucket, av as ShowcaseManifestEntry, az as ShowcaseShortlistSummary, aA as ShowcaseVerificationEntry, aJ as isApiContentType, aK as isContentIntelligenceSource, aL as isContentType, aM as isPublicContentSource } from './content-types-GxXVWkrY.js';
|
|
4
4
|
|
|
5
5
|
interface RegistryAPIClientOptions {
|
|
6
6
|
baseUrl?: string;
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api-client.ts","../src/ranking.ts","../src/types.ts"],"sourcesContent":["import type { EssenceFile } from '@decantr/essence-spec';\nimport type {\n ApiContentType,\n Archetype,\n Blueprint,\n ContentItem,\n ContentListResponse,\n ExecutionPackBundleResponse,\n ExecutionPackManifest,\n FileCritiqueReport,\n HostedFileCritiqueRequest,\n HostedProjectAuditRequest,\n HostedSelectedExecutionPackRequest,\n OwnedContentSummary,\n Pattern,\n ProjectAuditReport,\n PublicContentRecord,\n PublicContentSummary,\n PublicUserProfile,\n PublishPayload,\n PublishResponse,\n RegistryIntelligenceSummaryResponse,\n SearchParams,\n SearchResponse,\n SelectedExecutionPackResponse,\n Shell,\n ShowcaseManifestResponse,\n ShowcaseShortlistReport,\n ShowcaseShortlistResponse,\n Theme,\n UserProfile,\n} from './types.js';\n\nconst DEFAULT_BASE_URL = 'https://api.decantr.ai/v1';\nconst DEFAULT_TIMEOUT_MS = 30000;\nconst DEFAULT_CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes\n\ninterface CacheEntry<T> {\n data: T;\n timestamp: number;\n}\n\nfunction unwrapDataEnvelope<T>(value: T): T {\n if (typeof value === 'object' && value !== null && 'data' in value) {\n return value.data as T;\n }\n return value;\n}\n\nexport interface RegistryAPIClientOptions {\n baseUrl?: string;\n apiKey?: string;\n accessToken?: string;\n timeoutMs?: number;\n cacheTtlMs?: number;\n}\n\nexport class RegistryAPIError extends Error {\n status: number;\n details?: unknown;\n\n constructor(status: number, message: string, details?: unknown) {\n super(message);\n this.name = 'RegistryAPIError';\n this.status = status;\n this.details = details;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport class RegistryAPIClient {\n private baseUrl: string;\n private apiKey: string | undefined;\n private accessToken: string | undefined;\n private timeoutMs: number;\n private cacheTtlMs: number;\n private cache = new Map<string, CacheEntry<unknown>>();\n\n constructor(options: RegistryAPIClientOptions = {}) {\n this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n this.apiKey = options.apiKey;\n this.accessToken = options.accessToken;\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.cacheTtlMs = options.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;\n }\n\n // ── HTTP helpers ──\n\n private buildHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n Accept: 'application/json',\n };\n if (this.apiKey) {\n headers['X-API-Key'] = this.apiKey;\n }\n if (this.accessToken) {\n headers['Authorization'] = `Bearer ${this.accessToken}`;\n }\n return headers;\n }\n\n private async fetchWithTimeout(url: string, init?: RequestInit): Promise<Response> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } finally {\n clearTimeout(timeout);\n }\n }\n\n private async request<T>(path: string, init?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const response = await this.fetchWithTimeout(url, {\n ...init,\n headers: { ...this.buildHeaders(), ...init?.headers },\n });\n if (!response.ok) {\n const bodyText = await response.text().catch(() => '');\n let details: unknown;\n let message = response.statusText;\n\n if (bodyText) {\n try {\n details = JSON.parse(bodyText) as unknown;\n if (isRecord(details) && typeof details.error === 'string') {\n message = details.error;\n } else {\n message = bodyText;\n }\n } catch {\n message = bodyText;\n }\n }\n\n throw new RegistryAPIError(response.status, `API ${response.status}: ${message}`, details);\n }\n return response.json() as Promise<T>;\n }\n\n // ── Cache helpers ──\n\n private getCached<T>(key: string): T | null {\n const entry = this.cache.get(key) as CacheEntry<T> | undefined;\n if (!entry) return null;\n if (Date.now() - entry.timestamp > this.cacheTtlMs) {\n this.cache.delete(key);\n return null;\n }\n return entry.data;\n }\n\n private setCache<T>(key: string, data: T): void {\n this.cache.set(key, { data, timestamp: Date.now() });\n }\n\n clearCache(): void {\n this.cache.clear();\n }\n\n // ── Health ──\n\n async checkHealth(): Promise<boolean> {\n try {\n const url = this.baseUrl.replace(/\\/v1$/, '/health');\n const response = await this.fetchWithTimeout(url);\n return response.ok;\n } catch {\n return false;\n }\n }\n\n // ── Content fetching (public) ──\n\n async listContent<T = Record<string, unknown>>(\n type: ApiContentType,\n params?: {\n namespace?: string;\n source?: SearchParams['source'];\n sort?: string;\n recommended?: boolean;\n intelligenceSource?: SearchParams['intelligenceSource'];\n limit?: number;\n offset?: number;\n },\n ): Promise<ContentListResponse<T>> {\n const cacheKey = `list:${type}:${JSON.stringify(params ?? {})}`;\n const cached = this.getCached<ContentListResponse<T>>(cacheKey);\n if (cached) return cached;\n\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n if (params?.source) searchParams.set('source', params.source);\n if (params?.sort) searchParams.set('sort', params.sort);\n if (params?.recommended) searchParams.set('recommended', 'true');\n if (params?.intelligenceSource)\n searchParams.set('intelligence_source', params.intelligenceSource);\n if (params?.limit) searchParams.set('limit', String(params.limit));\n if (params?.offset) searchParams.set('offset', String(params.offset));\n\n const query = searchParams.toString();\n const path = `/${type}${query ? `?${query}` : ''}`;\n const result = await this.request<ContentListResponse<T>>(path);\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getContent<T = Record<string, unknown>>(\n type: ApiContentType,\n namespace: string,\n slug: string,\n ): Promise<T> {\n const cacheKey = `get:${type}:${namespace}:${slug}`;\n const cached = this.getCached<T>(cacheKey);\n if (cached) return cached;\n\n const raw = await this.request<T>(`/${type}/${namespace}/${slug}`);\n // API returns { id, type, slug, data: {...actual content...} } — unwrap\n const unwrapped = unwrapDataEnvelope(raw);\n this.setCache(cacheKey, unwrapped);\n return unwrapped;\n }\n\n async getPublicContentRecord<TData = Record<string, unknown>>(\n type: ApiContentType,\n namespace: string,\n slug: string,\n ): Promise<PublicContentRecord<TData>> {\n const cacheKey = `public-record:${type}:${namespace}:${slug}`;\n const cached = this.getCached<PublicContentRecord<TData>>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<PublicContentRecord<TData>>(`/${type}/${namespace}/${slug}`);\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getContentRecord<TData = Record<string, unknown>>(\n type: ApiContentType,\n namespace: string,\n slug: string,\n ): Promise<PublicContentRecord<TData>> {\n const cacheKey = `content-record:${type}:${namespace}:${slug}:${this.apiKey ?? ''}:${this.accessToken ?? ''}`;\n const cached = this.getCached<PublicContentRecord<TData>>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<PublicContentRecord<TData>>(`/${type}/${namespace}/${slug}`);\n this.setCache(cacheKey, result);\n return result;\n }\n\n // ── Typed convenience methods ──\n\n async getPattern(namespace: string, slug: string): Promise<Pattern> {\n return this.getContent<Pattern>('patterns', namespace, slug);\n }\n\n async getArchetype(namespace: string, slug: string): Promise<Archetype> {\n return this.getContent<Archetype>('archetypes', namespace, slug);\n }\n\n async getTheme(namespace: string, slug: string): Promise<Theme> {\n return this.getContent<Theme>('themes', namespace, slug);\n }\n\n async getBlueprint(namespace: string, slug: string): Promise<Blueprint> {\n return this.getContent<Blueprint>('blueprints', namespace, slug);\n }\n\n async getShell(namespace: string, slug: string): Promise<Shell> {\n return this.getContent<Shell>('shells', namespace, slug);\n }\n\n // ── Search ──\n\n async search(params: SearchParams): Promise<SearchResponse> {\n const searchParams = new URLSearchParams({ q: params.q });\n if (params.type) searchParams.set('type', params.type);\n if (params.namespace) searchParams.set('namespace', params.namespace);\n if (params.source) searchParams.set('source', params.source);\n if (params.sort) searchParams.set('sort', params.sort);\n if (params.recommended) searchParams.set('recommended', 'true');\n if (params.intelligenceSource)\n searchParams.set('intelligence_source', params.intelligenceSource);\n if (params.limit) searchParams.set('limit', String(params.limit));\n if (params.offset) searchParams.set('offset', String(params.offset));\n\n return this.request<SearchResponse>(`/search?${searchParams}`);\n }\n\n async getPublicUserProfile(username: string): Promise<PublicUserProfile> {\n const cacheKey = `public-user:${username}`;\n const cached = this.getCached<PublicUserProfile>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<PublicUserProfile>(`/users/${encodeURIComponent(username)}`);\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getPublicUserContent(\n username: string,\n params?: {\n type?: string;\n source?: SearchParams['source'];\n sort?: string;\n recommended?: boolean;\n intelligenceSource?: SearchParams['intelligenceSource'];\n limit?: number;\n offset?: number;\n },\n ): Promise<ContentListResponse<PublicContentSummary>> {\n const cacheKey = `public-user-content:${username}:${JSON.stringify(params ?? {})}`;\n const cached = this.getCached<ContentListResponse<PublicContentSummary>>(cacheKey);\n if (cached) return cached;\n\n const searchParams = new URLSearchParams();\n if (params?.type) searchParams.set('type', params.type);\n if (params?.source) searchParams.set('source', params.source);\n if (params?.sort) searchParams.set('sort', params.sort);\n if (params?.recommended) searchParams.set('recommended', 'true');\n if (params?.intelligenceSource)\n searchParams.set('intelligence_source', params.intelligenceSource);\n if (params?.limit != null) searchParams.set('limit', String(params.limit));\n if (params?.offset != null) searchParams.set('offset', String(params.offset));\n\n const query = searchParams.toString();\n const result = await this.request<ContentListResponse<PublicContentSummary>>(\n `/users/${encodeURIComponent(username)}/content${query ? `?${query}` : ''}`,\n );\n this.setCache(cacheKey, result);\n return result;\n }\n\n // ── Authenticated endpoints ──\n\n async getProfile(): Promise<UserProfile> {\n return this.request<UserProfile>('/me');\n }\n\n async publishContent(payload: PublishPayload): Promise<PublishResponse> {\n return this.request<PublishResponse>('/content', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n }\n\n async getMyContent(): Promise<ContentListResponse<OwnedContentSummary>> {\n return this.request<ContentListResponse<OwnedContentSummary>>('/my/content');\n }\n\n async getAccessiblePrivateContent(params?: {\n type?: string;\n scope?: 'all' | 'personal' | 'organization';\n q?: string;\n limit?: number;\n offset?: number;\n }): Promise<ContentListResponse<OwnedContentSummary>> {\n const searchParams = new URLSearchParams();\n if (params?.type) searchParams.set('type', params.type);\n if (params?.scope) searchParams.set('scope', params.scope);\n if (params?.q) searchParams.set('q', params.q);\n if (params?.limit != null) searchParams.set('limit', String(params.limit));\n if (params?.offset != null) searchParams.set('offset', String(params.offset));\n const query = searchParams.toString();\n\n return this.request<ContentListResponse<OwnedContentSummary>>(\n `/private/content${query ? `?${query}` : ''}`,\n );\n }\n\n // ── Schema ──\n\n async getSchema(name: string = 'essence.v3.json'): Promise<Record<string, unknown>> {\n return this.request<Record<string, unknown>>(`/schema/${name}`);\n }\n\n // ── Showcase benchmarks ──\n\n async getShowcaseManifest(): Promise<ShowcaseManifestResponse> {\n const cacheKey = 'showcase:manifest';\n const cached = this.getCached<ShowcaseManifestResponse>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<ShowcaseManifestResponse>('/showcase/manifest');\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getShowcaseShortlist(): Promise<ShowcaseShortlistResponse> {\n const cacheKey = 'showcase:shortlist';\n const cached = this.getCached<ShowcaseShortlistResponse>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<ShowcaseShortlistResponse>('/showcase/shortlist');\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getShowcaseShortlistVerification(): Promise<ShowcaseShortlistReport> {\n const cacheKey = 'showcase:shortlist-verification';\n const cached = this.getCached<ShowcaseShortlistReport>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<ShowcaseShortlistReport>('/showcase/shortlist-verification');\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getRegistryIntelligenceSummary(params?: {\n namespace?: string;\n }): Promise<RegistryIntelligenceSummaryResponse> {\n const cacheKey = `registry-intelligence-summary:${JSON.stringify(params ?? {})}`;\n const cached = this.getCached<RegistryIntelligenceSummaryResponse>(cacheKey);\n if (cached) return cached;\n\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n const query = searchParams.toString();\n const result = await this.request<RegistryIntelligenceSummaryResponse>(\n `/intelligence/summary${query ? `?${query}` : ''}`,\n );\n this.setCache(cacheKey, result);\n return result;\n }\n\n async compileExecutionPacks(\n essence: EssenceFile,\n params?: { namespace?: string },\n ): Promise<ExecutionPackBundleResponse> {\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n const query = searchParams.toString();\n\n return this.request<ExecutionPackBundleResponse>(`/packs/compile${query ? `?${query}` : ''}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(essence),\n });\n }\n\n async selectExecutionPack(\n input: HostedSelectedExecutionPackRequest,\n params?: { namespace?: string },\n ): Promise<SelectedExecutionPackResponse> {\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n const query = searchParams.toString();\n\n return this.request<SelectedExecutionPackResponse>(`/packs/select${query ? `?${query}` : ''}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input),\n });\n }\n\n async getExecutionPackManifest(\n essence: EssenceFile,\n params?: { namespace?: string },\n ): Promise<ExecutionPackManifest> {\n const selected = await this.selectExecutionPack(\n {\n essence,\n pack_type: 'scaffold',\n },\n params,\n );\n\n return selected.manifest;\n }\n\n async critiqueFile(\n input: HostedFileCritiqueRequest,\n params?: { namespace?: string },\n ): Promise<FileCritiqueReport> {\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n const query = searchParams.toString();\n\n return this.request<FileCritiqueReport>(`/critique/file${query ? `?${query}` : ''}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input),\n });\n }\n\n async auditProject(\n input: HostedProjectAuditRequest,\n params?: { namespace?: string },\n ): Promise<ProjectAuditReport> {\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n const query = searchParams.toString();\n\n return this.request<ProjectAuditReport>(`/audit/project${query ? `?${query}` : ''}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input),\n });\n }\n}\n\n// ── Lightweight registry client (merged from client.ts) ──\n\nexport interface RegistryClientOptions {\n baseUrl?: string;\n}\n\nexport interface SearchResult {\n id: string;\n type: string;\n name: string;\n description: string;\n version: string;\n tags: string[];\n}\n\nexport interface RegistryClient {\n search(query: string, type?: string): Promise<SearchResult[]>;\n fetch(type: string, id: string, version?: string): Promise<unknown>;\n}\n\nexport function createRegistryClient(options: RegistryClientOptions = {}): RegistryClient {\n const baseUrl = options.baseUrl ?? 'https://api.decantr.ai/v1';\n return {\n async search(query: string, type?: string): Promise<SearchResult[]> {\n const params = new URLSearchParams({ q: query });\n if (type) params.set('type', type);\n const res = await fetch(`${baseUrl}/search?${params}`);\n if (!res.ok) return [];\n const data = (await res.json()) as\n | { results?: SearchResult[]; total?: number }\n | SearchResult[];\n // API returns { total, results } wrapper\n if (Array.isArray(data)) return data;\n return (data as { results: SearchResult[] }).results ?? [];\n },\n async fetch(type: string, id: string, version?: string): Promise<unknown> {\n const url = version\n ? `${baseUrl}/content/${type}/${id}/${version}`\n : `${baseUrl}/content/${type}/${id}`;\n const res = await fetch(url);\n if (!res.ok) return null;\n return res.json();\n },\n };\n}\n","import type { PublicContentSummary } from './types.js';\n\nexport type PublicContentSort = 'recommended' | 'recent' | 'name';\n\nfunction verificationScore(status?: string | null): number {\n switch (status) {\n case 'smoke-green':\n return 200;\n case 'build-green':\n return 120;\n case 'pending':\n return 20;\n case 'smoke-red':\n case 'build-red':\n return -40;\n default:\n return 0;\n }\n}\n\nfunction confidenceScore(level?: string | null): number {\n switch (level) {\n case 'high':\n return 120;\n case 'medium':\n return 70;\n case 'low':\n return 30;\n default:\n return 0;\n }\n}\n\nfunction confidenceTierScore(tier?: string | null): number {\n switch (tier) {\n case 'verified':\n return 180;\n case 'high':\n return 120;\n case 'medium':\n return 60;\n case 'low':\n return 10;\n default:\n return 0;\n }\n}\n\nfunction getRecommendedPriority(item: PublicContentSummary): number {\n const intelligence = item.intelligence;\n let score = 0;\n\n if (!intelligence) {\n return score;\n }\n\n if (intelligence.recommended) {\n score += 500;\n }\n\n if (intelligence.golden_usage === 'shortlisted') {\n score += 160;\n } else if (intelligence.golden_usage === 'showcase') {\n score += 80;\n }\n\n score += verificationScore(intelligence.verification_status);\n score += confidenceScore(intelligence.benchmark_confidence);\n score += confidenceTierScore(intelligence.confidence_tier);\n score += Math.round((intelligence.confidence_score ?? 0) / 2);\n score += intelligence.quality_score ?? 0;\n\n return score;\n}\n\nexport function normalizePublicContentSort(value: string | null | undefined): PublicContentSort {\n switch (value) {\n case 'popular':\n case 'recommended':\n return 'recommended';\n case 'newest':\n case 'recent':\n case 'published':\n return 'recent';\n case 'name':\n return 'name';\n default:\n return 'recommended';\n }\n}\n\nexport function comparePublicContent(\n a: PublicContentSummary,\n b: PublicContentSummary,\n sort: PublicContentSort = 'recommended',\n): number {\n if (sort === 'name') {\n return (a.name ?? a.slug).localeCompare(b.name ?? b.slug);\n }\n\n if (sort === 'recent') {\n const publishedDelta =\n new Date(b.published_at ?? 0).getTime() - new Date(a.published_at ?? 0).getTime();\n if (publishedDelta !== 0) {\n return publishedDelta;\n }\n return a.slug.localeCompare(b.slug);\n }\n\n const priorityDelta = getRecommendedPriority(b) - getRecommendedPriority(a);\n if (priorityDelta !== 0) {\n return priorityDelta;\n }\n\n if (a.namespace !== b.namespace) {\n if (a.namespace === '@official') return -1;\n if (b.namespace === '@official') return 1;\n }\n\n const publishedDelta =\n new Date(b.published_at ?? 0).getTime() - new Date(a.published_at ?? 0).getTime();\n if (publishedDelta !== 0) {\n return publishedDelta;\n }\n\n return (a.name ?? a.slug).localeCompare(b.name ?? b.slug);\n}\n\nexport function sortPublicContent<T extends PublicContentSummary>(\n items: T[],\n sort: PublicContentSort = 'recommended',\n): T[] {\n return [...items].sort((left, right) => comparePublicContent(left, right, sort));\n}\n","import type { EssenceFile } from '@decantr/essence-spec';\n\n// --- Pattern ---\nexport interface PatternLayoutSpec {\n layout: string;\n atoms: string;\n slots?: Record<string, string>;\n}\n\nexport interface PatternCodeSpec {\n imports?: string;\n example?: string;\n}\n\nexport interface PatternPreset {\n description: string;\n components?: string[];\n layout: PatternLayoutSpec;\n code?: PatternCodeSpec;\n}\n\nexport interface PatternIO {\n produces?: string[];\n consumes?: string[];\n actions?: string[];\n}\n\nexport interface Pattern {\n id: string;\n version: string;\n name: string;\n description: string;\n tags: string[];\n components: string[];\n default_preset: string;\n presets: Record<string, PatternPreset>;\n contained?: boolean;\n io?: PatternIO;\n code?: PatternCodeSpec;\n default_layout?: PatternLayoutSpec;\n visual_brief?: string;\n composition?: Record<string, string>;\n motion?: {\n micro?: Record<string, string>;\n transitions?: Record<string, string>;\n ambient?: Record<string, string>;\n };\n /**\n * v2.1 Tier C1. Declared runtime interactions this pattern MUST implement.\n * Surfaced as a checkbox checklist in the per-page execution pack; enforced\n * by `decantr check --strict` (C5 guard rule). Each value maps to a\n * canonical implementation (treatment class + handler pattern) — see the\n * Interaction Requirements table in scaffolded DECANTR.md. Before this\n * field, motion/interactivity lived only as prose philosophy that cold\n * LLMs routinely categorized as \"nice to have\" and skipped.\n */\n interactions?: string[];\n responsive?: {\n mobile?: string;\n tablet?: string;\n desktop?: string;\n };\n accessibility?: {\n role?: string;\n 'aria-label'?: string;\n keyboard?: string[];\n announcements?: string[];\n focus_management?: string;\n };\n layout_hints?: Record<string, string>;\n category?: string;\n}\n\n// --- Archetype ---\nexport type ArchetypeRole = 'primary' | 'gateway' | 'public' | 'auxiliary';\n\nexport interface PatternReferenceObject {\n pattern: string;\n preset?: string;\n as?: string;\n}\n\nexport type PatternReference = string | PatternReferenceObject;\n\nexport interface LayoutGroup {\n cols: PatternReference[];\n at?: string;\n span?: Record<string, number>;\n}\n\nexport type LayoutItem = PatternReference | LayoutGroup;\n\nexport interface ContentDependencies {\n [kind: string]: Record<string, string>;\n}\n\nexport interface ArchetypePage {\n id: string;\n default_layout: LayoutItem[];\n shell: string;\n description?: string;\n patterns?: PatternReference[];\n}\n\nexport interface SeoHints {\n schema_org?: string[];\n meta_priorities?: string[];\n}\n\nexport interface ArchetypeSuggestedTheme {\n ids?: string[];\n modes?: string[];\n shapes?: string[];\n}\n\nexport interface ArchetypeHeroCustomization {\n style?: string;\n elements?: string[];\n background?: string;\n [key: string]: unknown;\n}\n\nexport interface Archetype {\n $schema?: string;\n id: string;\n version: string;\n decantr_compat?: string;\n name: string;\n description: string;\n tags: string[];\n role: ArchetypeRole;\n pages: ArchetypePage[];\n features: string[];\n dependencies?: ContentDependencies;\n seo_hints?: SeoHints;\n classification?: {\n triggers: { primary: string[]; secondary: string[]; negative: string[] };\n implies: string[];\n weight: number;\n tier: string;\n };\n page_briefs?: Record<string, string>;\n suggested_theme?: ArchetypeSuggestedTheme;\n shells?: Record<string, string>;\n personality?: string[];\n hero_customization?: ArchetypeHeroCustomization;\n}\n\n// --- Theme substructures (absorbed from former Recipe type) ---\nexport interface ThemeSpatial {\n density_bias: number;\n content_gap_shift: number;\n section_padding: string;\n card_wrapping: 'always' | 'minimal' | 'none';\n surface_override: string | null;\n}\n\nexport interface ThemeEffects {\n enabled: boolean;\n intensity: 'subtle' | 'moderate' | 'bold';\n type_mapping: Record<string, string[]>;\n component_fallback: Record<string, string>;\n intensity_values?: Record<string, Record<string, string>>;\n}\n\nexport interface ThemeShell {\n preferred: string[];\n nav_style: string;\n root?: string;\n nav?: string;\n header?: string;\n dimensions?: { navWidth?: string; headerHeight?: string };\n}\n\n// --- Blueprint ---\nexport type ComposeEntry = string | { archetype: string; prefix: string; role?: ArchetypeRole };\n\nexport interface BlueprintRoute {\n shell?: string;\n archetype?: string;\n page?: string;\n}\n\nexport interface BlueprintNavigationHotkey {\n key: string;\n route?: string;\n label?: string;\n}\n\nexport interface BlueprintNavigation {\n command_palette?: boolean;\n hotkeys?: BlueprintNavigationHotkey[];\n}\n\nexport interface BlueprintOverrides {\n features_add?: string[];\n features_remove?: string[];\n pages_remove?: string[];\n pages?: Record<string, Record<string, unknown>>;\n}\n\nexport interface Blueprint {\n $schema?: string;\n id: string;\n version?: string;\n decantr_compat?: string;\n name: string;\n description?: string;\n tags?: string[];\n archetype?: string;\n compose?: ComposeEntry[];\n theme: { id: string; mode?: string; shape?: string };\n personality?: string | string[];\n features?: string[];\n routes?: Record<string, BlueprintRoute>;\n overrides?: BlueprintOverrides;\n seo_hints?: SeoHints;\n navigation?: BlueprintNavigation;\n dependencies?: ContentDependencies;\n suggested_themes?: string[];\n design_constraints?: Record<string, unknown>;\n voice?: {\n tone?: string;\n cta_verbs?: string[];\n avoid?: string[];\n empty_states?: string;\n errors?: string;\n loading?: string;\n metrics_format?: string;\n };\n responsive_strategy?: {\n breakpoints?: string[];\n navigation?: Record<string, string>;\n data_display?: Record<string, string>;\n };\n}\n\n// --- Shell ---\nexport interface Shell {\n id: string;\n name: string;\n description?: string;\n root?: string;\n nav?: string;\n header?: string;\n nav_style?: string;\n dimensions?: {\n navWidth?: string;\n headerHeight?: string;\n };\n internal_layout?: Record<string, unknown>;\n layout?: string;\n atoms?: string;\n config?: Record<string, unknown>;\n guidance?: Record<string, string>;\n code?: { imports?: string; example?: string };\n}\n\n// --- Content Resolution ---\nexport const CONTENT_TYPES = ['pattern', 'theme', 'blueprint', 'archetype', 'shell'] as const;\n\nexport type ContentType = (typeof CONTENT_TYPES)[number];\n\nexport const API_CONTENT_TYPES = [\n 'patterns',\n 'themes',\n 'blueprints',\n 'archetypes',\n 'shells',\n] as const;\n\nexport type ApiContentType = (typeof API_CONTENT_TYPES)[number];\n\nexport const CONTENT_TYPE_TO_API_CONTENT_TYPE: Record<ContentType, ApiContentType> = {\n pattern: 'patterns',\n theme: 'themes',\n blueprint: 'blueprints',\n archetype: 'archetypes',\n shell: 'shells',\n};\n\nexport const API_CONTENT_TYPE_TO_CONTENT_TYPE: Record<ApiContentType, ContentType> = {\n patterns: 'pattern',\n themes: 'theme',\n blueprints: 'blueprint',\n archetypes: 'archetype',\n shells: 'shell',\n};\n\nexport function isContentType(value: string): value is ContentType {\n return CONTENT_TYPES.includes(value as ContentType);\n}\n\nexport function isApiContentType(value: string): value is ApiContentType {\n return API_CONTENT_TYPES.includes(value as ApiContentType);\n}\n\nexport interface ResolvedContent<T> {\n item: T;\n source: 'local' | 'core';\n path: string;\n}\n\n// --- Theme ---\n\nexport type CvdMode = 'deuteranopia' | 'protanopia' | 'tritanopia' | 'achromatopsia';\n\nexport interface ThemeTokens {\n base?: Record<string, string>;\n cvd?: Partial<Record<CvdMode, Record<string, string>>>;\n}\n\nexport interface Theme {\n id: string;\n name: string;\n description?: string;\n tags?: string[];\n personality?: string;\n seed?: Record<string, string>;\n palette?: Record<string, Record<string, string>>;\n modes?: string[];\n shapes?: string[];\n cvd_support?: CvdMode[];\n tokens?: ThemeTokens;\n decantr_compat?: string;\n source?: string;\n // Absorbed from former Recipe type\n decorators?: Record<string, string>;\n treatments?: Record<string, Record<string, string>>;\n spatial?: ThemeSpatial;\n shell?: ThemeShell;\n effects?: ThemeEffects;\n motion?: {\n preference?: string;\n reduce_motion?: boolean;\n entrance?: string;\n timing?: string;\n durations?: Record<string, string>;\n };\n typography?: { scale?: string; heading_weight?: number; body_weight?: number; mono?: string };\n radius?: { philosophy?: string; base?: number };\n compositions?: Record<string, { shell: string; description: string; effects?: string[] }>;\n pattern_preferences?: {\n prefer: string[];\n avoid: string[];\n default_presets?: Record<string, string>;\n };\n decorator_definitions?: Record<\n string,\n {\n description: string;\n intent: string;\n suggested_properties?: Record<string, string>;\n pairs_with?: string[];\n usage?: string[];\n }\n >;\n}\n\n// --- API Client Types ---\n\nexport interface ContentListResponse<T = Record<string, unknown>> {\n items: T[];\n total: number;\n limit?: number;\n offset?: number;\n}\n\nexport type ContentVerificationStatus =\n | 'unknown'\n | 'pending'\n | 'build-green'\n | 'build-red'\n | 'smoke-green'\n | 'smoke-red';\n\nexport type ContentBenchmarkConfidence = 'none' | 'low' | 'medium' | 'high';\nexport type ContentConfidenceTier = 'low' | 'medium' | 'high' | 'verified';\n\nexport type ContentGoldenUsage = 'none' | 'showcase' | 'shortlisted';\nexport const PUBLIC_CONTENT_SOURCES = ['official', 'community', 'organization'] as const;\n\nexport type PublicContentSource = (typeof PUBLIC_CONTENT_SOURCES)[number];\n\nexport function isPublicContentSource(value: string): value is PublicContentSource {\n return PUBLIC_CONTENT_SOURCES.includes(value as PublicContentSource);\n}\n\nexport const CONTENT_INTELLIGENCE_SOURCES = ['authored', 'benchmark', 'hybrid'] as const;\n\nexport type ContentIntelligenceSource = 'authored' | 'benchmark' | 'hybrid';\n\nexport function isContentIntelligenceSource(value: string): value is ContentIntelligenceSource {\n return CONTENT_INTELLIGENCE_SOURCES.includes(value as ContentIntelligenceSource);\n}\n\nexport interface ContentIntelligenceMetadata {\n source: ContentIntelligenceSource;\n verification_status: ContentVerificationStatus;\n last_verified_at?: string | null;\n target_coverage: string[];\n benchmark_confidence: ContentBenchmarkConfidence;\n confidence_tier: ContentConfidenceTier;\n golden_usage: ContentGoldenUsage;\n quality_score: number | null;\n confidence_score: number | null;\n recommended: boolean;\n evidence: string[];\n recommendation_reasons: string[];\n recommendation_blockers: string[];\n benchmark?: {\n classification?: ShowcaseVerificationEntry['classification'];\n target?: string | null;\n drift_signal?: ShowcaseVerificationEntry['drift']['signal'];\n build_passed?: boolean | null;\n smoke_passed?: boolean | null;\n };\n}\n\nexport interface PublicContentSummary {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n version?: string;\n name?: string;\n description?: string;\n published_at?: string;\n owner_name?: string | null;\n owner_username?: string | null;\n thumbnail_url?: string | null;\n intelligence?: ContentIntelligenceMetadata | null;\n}\n\nexport interface PublicContentRecord<TData = Record<string, unknown>> {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n version: string;\n data: TData;\n visibility: 'public' | 'private';\n status: 'pending' | 'approved' | 'rejected' | 'published';\n created_at: string;\n updated_at: string;\n published_at?: string;\n owner_name?: string | null;\n owner_username?: string | null;\n thumbnail_url?: string | null;\n intelligence?: ContentIntelligenceMetadata | null;\n}\n\nexport interface ContentItem extends PublicContentRecord<Record<string, unknown>> {}\n\nexport interface OwnedContentSummary extends PublicContentSummary {\n visibility: 'public' | 'private';\n status: 'pending' | 'approved' | 'rejected' | 'published';\n created_at: string;\n updated_at: string;\n}\n\nexport interface PublicUserProfile {\n username: string;\n display_name: string | null;\n reputation_score: number;\n tier: 'free' | 'pro' | 'team' | 'enterprise';\n created_at: string;\n content_count: number;\n content_counts: Record<string, number>;\n}\n\nexport interface PublishPayload {\n type: ApiContentType;\n slug: string;\n namespace: string;\n version: string;\n data: Record<string, unknown>;\n visibility?: 'public' | 'private';\n}\n\nexport interface PublishResponse {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n status: string;\n}\n\nexport interface SearchParams {\n q: string;\n type?: string;\n namespace?: string;\n source?: PublicContentSource;\n sort?: string;\n recommended?: boolean;\n intelligenceSource?: ContentIntelligenceSource;\n limit?: number;\n offset?: number;\n}\n\nexport interface SearchResponse {\n results: PublicContentSummary[];\n total: number;\n limit?: number;\n offset?: number;\n}\n\nexport interface RegistryIntelligenceSummaryBucket {\n total_public_items: number;\n with_intelligence: number;\n recommended: number;\n authored: number;\n benchmark: number;\n hybrid: number;\n missing_source: number;\n smoke_green: number;\n build_green: number;\n high_confidence: number;\n verified_confidence: number;\n}\n\nexport interface RegistryIntelligenceSummaryResponse {\n $schema: string;\n generated_at: string;\n namespace: string | null;\n totals: RegistryIntelligenceSummaryBucket;\n by_type: Record<ContentType, RegistryIntelligenceSummaryBucket>;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n tier: 'free' | 'pro' | 'team' | 'enterprise';\n reputation_score: number;\n trusted: boolean;\n}\n\nexport interface ShowcaseVerificationEntry {\n slug: string;\n target: string | null;\n classification: 'pending' | 'A' | 'B' | 'C' | 'D';\n verificationStatus: 'pending' | 'build-green' | 'build-red' | 'smoke-green' | 'smoke-red';\n build: {\n passed: boolean | null;\n durationMs: number;\n };\n smoke: {\n passed: boolean | null;\n durationMs: number;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsHardenedCount: number;\n routeDocumentsCoverageOk: boolean;\n routeDocumentsHardeningOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n };\n drift: {\n signal: 'lower' | 'moderate' | 'elevated';\n penalty: number;\n inlineStyleCount: number;\n hardcodedColorCount: number;\n utilityLeakageCount: number;\n decantrTreatmentCount: number;\n hasPackManifest: boolean;\n hasDist: boolean;\n };\n}\n\nexport interface ShowcaseShortlistSummary {\n appCount: number;\n passedBuilds: number;\n failedBuilds: number;\n averageDurationMs: number;\n passedSmokes: number;\n failedSmokes: number;\n averageSmokeDurationMs: number;\n appsWithTitleOkCount: number;\n appsWithLangOkCount: number;\n appsWithViewportOkCount: number;\n appsWithCharsetOkCount: number;\n appsWithoutInlineScriptsCount: number;\n appsWithCspSignalCount: number;\n appsWithExternalScriptIntegrityCount: number;\n appsWithExternalScriptCrossoriginCount: number;\n appsWithExternalStylesheetIntegrityCount: number;\n appsWithExternalStylesheetCrossoriginCount: number;\n appsWithRouteCoverageCount: number;\n appsWithFullRouteCoverageCount: number;\n averageTotalAssetBytes: number;\n averageJsAssetBytes: number;\n averageCssAssetBytes: number;\n lowerDriftCount: number;\n moderateDriftCount: number;\n elevatedDriftCount: number;\n withPackManifestCount: number;\n}\n\nexport interface ShowcaseManifestEntry {\n slug: string;\n status: string;\n classification: string;\n origin?: string | null;\n target?: string | null;\n goldenCandidate?: string | boolean;\n notes?: string | null;\n url?: string | null;\n verification?: ShowcaseVerificationEntry | null;\n}\n\nexport interface ShowcaseManifestResponse {\n total: number;\n shortlisted: number;\n apps: ShowcaseManifestEntry[];\n}\n\nexport interface ShowcaseShortlistResponse {\n generatedAt: string | null;\n summary: ShowcaseShortlistSummary | null;\n apps: ShowcaseManifestEntry[];\n}\n\nexport interface ShowcaseShortlistReport {\n $schema: string;\n generatedAt: string;\n dryRun: boolean;\n summary: ShowcaseShortlistSummary;\n results: ShowcaseVerificationEntry[];\n}\n\nexport interface HostedFileCritiqueRequest {\n essence: EssenceFile;\n code: string;\n filePath?: string;\n treatmentsCss?: string;\n}\n\nexport interface HostedDistSnapshot {\n indexHtml: string;\n assets?: Record<string, string>;\n}\n\nexport interface HostedSourceSnapshot {\n files: Record<string, string>;\n}\n\nexport interface HostedProjectAuditRequest {\n essence: EssenceFile;\n dist?: HostedDistSnapshot;\n sources?: HostedSourceSnapshot;\n}\n\nexport type ExecutionPackType = 'scaffold' | 'section' | 'page' | 'mutation' | 'review';\n\nexport interface ExecutionPackTarget {\n platform: 'web';\n framework: string | null;\n runtime: string | null;\n adapter: string;\n}\n\nexport interface ExecutionPackScope {\n appId: string;\n pageIds: string[];\n patternIds: string[];\n}\n\nexport interface ExecutionPackExample {\n id: string;\n label: string;\n language: string;\n snippet: string;\n}\n\nexport interface ExecutionPackAntiPattern {\n id: string;\n summary: string;\n guidance: string;\n}\n\nexport interface ExecutionPackSuccessCheck {\n id: string;\n label: string;\n severity: 'error' | 'warn' | 'info';\n}\n\nexport interface ExecutionPackTokenBudget {\n target: number;\n max: number;\n strategy: string[];\n}\n\nexport interface ExecutionPackBase<TData = Record<string, unknown>> {\n $schema: string;\n packVersion: '1.0.0';\n packType: ExecutionPackType;\n objective: string;\n target: ExecutionPackTarget;\n preset: string | null;\n scope: ExecutionPackScope;\n requiredSetup: string[];\n allowedVocabulary: string[];\n examples: ExecutionPackExample[];\n antiPatterns: ExecutionPackAntiPattern[];\n successChecks: ExecutionPackSuccessCheck[];\n tokenBudget: ExecutionPackTokenBudget;\n data: TData;\n renderedMarkdown: string;\n}\n\nexport interface PackManifestEntry {\n id: string;\n markdown: string;\n json: string;\n}\n\nexport interface PackManifestSectionEntry extends PackManifestEntry {\n pageIds: string[];\n}\n\nexport interface PackManifestPageEntry extends PackManifestEntry {\n sectionId: string | null;\n sectionRole: string | null;\n}\n\nexport interface PackManifestMutationEntry extends PackManifestEntry {\n mutationType: 'add-page' | 'modify';\n}\n\nexport interface ExecutionPackManifest {\n $schema: string;\n version: '1.0.0';\n generatedAt: string;\n scaffold: PackManifestEntry | null;\n review: PackManifestEntry | null;\n sections: PackManifestSectionEntry[];\n pages: PackManifestPageEntry[];\n mutations: PackManifestMutationEntry[];\n}\n\nexport interface ScaffoldExecutionPack\n extends ExecutionPackBase<{\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n }> {\n packType: 'scaffold';\n}\n\nexport interface ReviewExecutionPack\n extends ExecutionPackBase<{\n reviewType: 'app';\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n focusAreas: string[];\n workflow: string[];\n }> {\n packType: 'review';\n}\n\nexport interface SectionExecutionPack\n extends ExecutionPackBase<{\n sectionId: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n }> {\n packType: 'section';\n}\n\nexport interface PageExecutionPack\n extends ExecutionPackBase<{\n pageId: string;\n path: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n surface: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n wiringSignals: string[];\n patterns: Array<{\n id: string;\n alias: string;\n preset: string;\n layout: string;\n }>;\n }> {\n packType: 'page';\n}\n\nexport interface MutationExecutionPack\n extends ExecutionPackBase<{\n mutationType: 'add-page' | 'modify';\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n workflow: string[];\n }> {\n packType: 'mutation';\n}\n\nexport interface ExecutionPackBundleResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n scaffold: ScaffoldExecutionPack;\n review: ReviewExecutionPack;\n sections: SectionExecutionPack[];\n pages: PageExecutionPack[];\n mutations: MutationExecutionPack[];\n}\n\nexport interface HostedSelectedExecutionPackRequest {\n essence: EssenceFile;\n pack_type: ExecutionPackType;\n id?: string;\n}\n\nexport interface SelectedExecutionPackResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n selector: {\n packType: ExecutionPackType;\n id: string | null;\n };\n pack:\n | ScaffoldExecutionPack\n | ReviewExecutionPack\n | SectionExecutionPack\n | PageExecutionPack\n | MutationExecutionPack;\n}\n\nexport type VerificationSeverity = 'error' | 'warn' | 'info';\n\nexport interface VerificationFinding {\n id: string;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n file?: string;\n rule?: string;\n suggestedFix?: string;\n}\n\nexport interface VerificationScore {\n category: string;\n focusArea: string;\n score: number;\n details: string;\n suggestions: string[];\n}\n\nexport interface FileCritiqueReport {\n $schema: string;\n file: string;\n overall: number;\n scores: VerificationScore[];\n findings: VerificationFinding[];\n focusAreas: string[];\n reviewPack: ReviewExecutionPack | null;\n}\n\nexport interface ProjectAuditRuntimeAudit {\n distPresent: boolean;\n indexPresent: boolean;\n checked: boolean;\n passed: boolean | null;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsHardenedCount: number;\n routeDocumentsCoverageOk: boolean;\n routeDocumentsHardeningOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n}\n\nexport interface ProjectAuditSummary {\n errorCount: number;\n warnCount: number;\n infoCount: number;\n essenceVersion: string | null;\n reviewPackPresent: boolean;\n packManifestPresent: boolean;\n runtimeAuditChecked: boolean;\n runtimePassed: boolean | null;\n pageCount: number;\n}\n\nexport interface ProjectAuditReport {\n $schema: string;\n projectRoot: string;\n valid: boolean;\n essence: EssenceFile | null;\n reviewPack: ReviewExecutionPack | null;\n packManifest: ExecutionPackManifest | null;\n runtimeAudit: ProjectAuditRuntimeAudit;\n findings: VerificationFinding[];\n summary: ProjectAuditSummary;\n}\n"],"mappings":"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","names":["publishedDelta"]}
|
|
1
|
+
{"version":3,"sources":["../src/api-client.ts","../src/ranking.ts","../src/types.ts"],"sourcesContent":["import type { EssenceFile } from '@decantr/essence-spec';\nimport type {\n ApiContentType,\n Archetype,\n Blueprint,\n ContentItem,\n ContentListResponse,\n ExecutionPackBundleResponse,\n ExecutionPackManifest,\n FileCritiqueReport,\n HostedFileCritiqueRequest,\n HostedProjectAuditRequest,\n HostedSelectedExecutionPackRequest,\n OwnedContentSummary,\n Pattern,\n ProjectAuditReport,\n PublicContentRecord,\n PublicContentSummary,\n PublicUserProfile,\n PublishPayload,\n PublishResponse,\n RegistryIntelligenceSummaryResponse,\n SearchParams,\n SearchResponse,\n SelectedExecutionPackResponse,\n Shell,\n ShowcaseManifestResponse,\n ShowcaseShortlistReport,\n ShowcaseShortlistResponse,\n Theme,\n UserProfile,\n} from './types.js';\n\nconst DEFAULT_BASE_URL = 'https://api.decantr.ai/v1';\nconst DEFAULT_TIMEOUT_MS = 30000;\nconst DEFAULT_CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes\n\ninterface CacheEntry<T> {\n data: T;\n timestamp: number;\n}\n\nfunction unwrapDataEnvelope<T>(value: T): T {\n if (typeof value === 'object' && value !== null && 'data' in value) {\n return value.data as T;\n }\n return value;\n}\n\nexport interface RegistryAPIClientOptions {\n baseUrl?: string;\n apiKey?: string;\n accessToken?: string;\n timeoutMs?: number;\n cacheTtlMs?: number;\n}\n\nexport class RegistryAPIError extends Error {\n status: number;\n details?: unknown;\n\n constructor(status: number, message: string, details?: unknown) {\n super(message);\n this.name = 'RegistryAPIError';\n this.status = status;\n this.details = details;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport class RegistryAPIClient {\n private baseUrl: string;\n private apiKey: string | undefined;\n private accessToken: string | undefined;\n private timeoutMs: number;\n private cacheTtlMs: number;\n private cache = new Map<string, CacheEntry<unknown>>();\n\n constructor(options: RegistryAPIClientOptions = {}) {\n this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n this.apiKey = options.apiKey;\n this.accessToken = options.accessToken;\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.cacheTtlMs = options.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;\n }\n\n // ── HTTP helpers ──\n\n private buildHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n Accept: 'application/json',\n };\n if (this.apiKey) {\n headers['X-API-Key'] = this.apiKey;\n }\n if (this.accessToken) {\n headers['Authorization'] = `Bearer ${this.accessToken}`;\n }\n return headers;\n }\n\n private async fetchWithTimeout(url: string, init?: RequestInit): Promise<Response> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } finally {\n clearTimeout(timeout);\n }\n }\n\n private async request<T>(path: string, init?: RequestInit): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const response = await this.fetchWithTimeout(url, {\n ...init,\n headers: { ...this.buildHeaders(), ...init?.headers },\n });\n if (!response.ok) {\n const bodyText = await response.text().catch(() => '');\n let details: unknown;\n let message = response.statusText;\n\n if (bodyText) {\n try {\n details = JSON.parse(bodyText) as unknown;\n if (isRecord(details) && typeof details.error === 'string') {\n message = details.error;\n } else {\n message = bodyText;\n }\n } catch {\n message = bodyText;\n }\n }\n\n throw new RegistryAPIError(response.status, `API ${response.status}: ${message}`, details);\n }\n return response.json() as Promise<T>;\n }\n\n // ── Cache helpers ──\n\n private getCached<T>(key: string): T | null {\n const entry = this.cache.get(key) as CacheEntry<T> | undefined;\n if (!entry) return null;\n if (Date.now() - entry.timestamp > this.cacheTtlMs) {\n this.cache.delete(key);\n return null;\n }\n return entry.data;\n }\n\n private setCache<T>(key: string, data: T): void {\n this.cache.set(key, { data, timestamp: Date.now() });\n }\n\n clearCache(): void {\n this.cache.clear();\n }\n\n // ── Health ──\n\n async checkHealth(): Promise<boolean> {\n try {\n const url = this.baseUrl.replace(/\\/v1$/, '/health');\n const response = await this.fetchWithTimeout(url);\n return response.ok;\n } catch {\n return false;\n }\n }\n\n // ── Content fetching (public) ──\n\n async listContent<T = Record<string, unknown>>(\n type: ApiContentType,\n params?: {\n namespace?: string;\n source?: SearchParams['source'];\n sort?: string;\n recommended?: boolean;\n intelligenceSource?: SearchParams['intelligenceSource'];\n limit?: number;\n offset?: number;\n },\n ): Promise<ContentListResponse<T>> {\n const cacheKey = `list:${type}:${JSON.stringify(params ?? {})}`;\n const cached = this.getCached<ContentListResponse<T>>(cacheKey);\n if (cached) return cached;\n\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n if (params?.source) searchParams.set('source', params.source);\n if (params?.sort) searchParams.set('sort', params.sort);\n if (params?.recommended) searchParams.set('recommended', 'true');\n if (params?.intelligenceSource)\n searchParams.set('intelligence_source', params.intelligenceSource);\n if (params?.limit) searchParams.set('limit', String(params.limit));\n if (params?.offset) searchParams.set('offset', String(params.offset));\n\n const query = searchParams.toString();\n const path = `/${type}${query ? `?${query}` : ''}`;\n const result = await this.request<ContentListResponse<T>>(path);\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getContent<T = Record<string, unknown>>(\n type: ApiContentType,\n namespace: string,\n slug: string,\n ): Promise<T> {\n const cacheKey = `get:${type}:${namespace}:${slug}`;\n const cached = this.getCached<T>(cacheKey);\n if (cached) return cached;\n\n const raw = await this.request<T>(`/${type}/${namespace}/${slug}`);\n // API returns { id, type, slug, data: {...actual content...} } — unwrap\n const unwrapped = unwrapDataEnvelope(raw);\n this.setCache(cacheKey, unwrapped);\n return unwrapped;\n }\n\n async getPublicContentRecord<TData = Record<string, unknown>>(\n type: ApiContentType,\n namespace: string,\n slug: string,\n ): Promise<PublicContentRecord<TData>> {\n const cacheKey = `public-record:${type}:${namespace}:${slug}`;\n const cached = this.getCached<PublicContentRecord<TData>>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<PublicContentRecord<TData>>(`/${type}/${namespace}/${slug}`);\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getContentRecord<TData = Record<string, unknown>>(\n type: ApiContentType,\n namespace: string,\n slug: string,\n ): Promise<PublicContentRecord<TData>> {\n const cacheKey = `content-record:${type}:${namespace}:${slug}:${this.apiKey ?? ''}:${this.accessToken ?? ''}`;\n const cached = this.getCached<PublicContentRecord<TData>>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<PublicContentRecord<TData>>(`/${type}/${namespace}/${slug}`);\n this.setCache(cacheKey, result);\n return result;\n }\n\n // ── Typed convenience methods ──\n\n async getPattern(namespace: string, slug: string): Promise<Pattern> {\n return this.getContent<Pattern>('patterns', namespace, slug);\n }\n\n async getArchetype(namespace: string, slug: string): Promise<Archetype> {\n return this.getContent<Archetype>('archetypes', namespace, slug);\n }\n\n async getTheme(namespace: string, slug: string): Promise<Theme> {\n return this.getContent<Theme>('themes', namespace, slug);\n }\n\n async getBlueprint(namespace: string, slug: string): Promise<Blueprint> {\n return this.getContent<Blueprint>('blueprints', namespace, slug);\n }\n\n async getShell(namespace: string, slug: string): Promise<Shell> {\n return this.getContent<Shell>('shells', namespace, slug);\n }\n\n // ── Search ──\n\n async search(params: SearchParams): Promise<SearchResponse> {\n const searchParams = new URLSearchParams({ q: params.q });\n if (params.type) searchParams.set('type', params.type);\n if (params.namespace) searchParams.set('namespace', params.namespace);\n if (params.source) searchParams.set('source', params.source);\n if (params.sort) searchParams.set('sort', params.sort);\n if (params.recommended) searchParams.set('recommended', 'true');\n if (params.intelligenceSource)\n searchParams.set('intelligence_source', params.intelligenceSource);\n if (params.limit) searchParams.set('limit', String(params.limit));\n if (params.offset) searchParams.set('offset', String(params.offset));\n\n return this.request<SearchResponse>(`/search?${searchParams}`);\n }\n\n async getPublicUserProfile(username: string): Promise<PublicUserProfile> {\n const cacheKey = `public-user:${username}`;\n const cached = this.getCached<PublicUserProfile>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<PublicUserProfile>(`/users/${encodeURIComponent(username)}`);\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getPublicUserContent(\n username: string,\n params?: {\n type?: string;\n source?: SearchParams['source'];\n sort?: string;\n recommended?: boolean;\n intelligenceSource?: SearchParams['intelligenceSource'];\n limit?: number;\n offset?: number;\n },\n ): Promise<ContentListResponse<PublicContentSummary>> {\n const cacheKey = `public-user-content:${username}:${JSON.stringify(params ?? {})}`;\n const cached = this.getCached<ContentListResponse<PublicContentSummary>>(cacheKey);\n if (cached) return cached;\n\n const searchParams = new URLSearchParams();\n if (params?.type) searchParams.set('type', params.type);\n if (params?.source) searchParams.set('source', params.source);\n if (params?.sort) searchParams.set('sort', params.sort);\n if (params?.recommended) searchParams.set('recommended', 'true');\n if (params?.intelligenceSource)\n searchParams.set('intelligence_source', params.intelligenceSource);\n if (params?.limit != null) searchParams.set('limit', String(params.limit));\n if (params?.offset != null) searchParams.set('offset', String(params.offset));\n\n const query = searchParams.toString();\n const result = await this.request<ContentListResponse<PublicContentSummary>>(\n `/users/${encodeURIComponent(username)}/content${query ? `?${query}` : ''}`,\n );\n this.setCache(cacheKey, result);\n return result;\n }\n\n // ── Authenticated endpoints ──\n\n async getProfile(): Promise<UserProfile> {\n return this.request<UserProfile>('/me');\n }\n\n async publishContent(payload: PublishPayload): Promise<PublishResponse> {\n return this.request<PublishResponse>('/content', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n }\n\n async getMyContent(): Promise<ContentListResponse<OwnedContentSummary>> {\n return this.request<ContentListResponse<OwnedContentSummary>>('/my/content');\n }\n\n async getAccessiblePrivateContent(params?: {\n type?: string;\n scope?: 'all' | 'personal' | 'organization';\n q?: string;\n limit?: number;\n offset?: number;\n }): Promise<ContentListResponse<OwnedContentSummary>> {\n const searchParams = new URLSearchParams();\n if (params?.type) searchParams.set('type', params.type);\n if (params?.scope) searchParams.set('scope', params.scope);\n if (params?.q) searchParams.set('q', params.q);\n if (params?.limit != null) searchParams.set('limit', String(params.limit));\n if (params?.offset != null) searchParams.set('offset', String(params.offset));\n const query = searchParams.toString();\n\n return this.request<ContentListResponse<OwnedContentSummary>>(\n `/private/content${query ? `?${query}` : ''}`,\n );\n }\n\n // ── Schema ──\n\n async getSchema(name: string = 'essence.v3.json'): Promise<Record<string, unknown>> {\n return this.request<Record<string, unknown>>(`/schema/${name}`);\n }\n\n // ── Showcase benchmarks ──\n\n async getShowcaseManifest(): Promise<ShowcaseManifestResponse> {\n const cacheKey = 'showcase:manifest';\n const cached = this.getCached<ShowcaseManifestResponse>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<ShowcaseManifestResponse>('/showcase/manifest');\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getShowcaseShortlist(): Promise<ShowcaseShortlistResponse> {\n const cacheKey = 'showcase:shortlist';\n const cached = this.getCached<ShowcaseShortlistResponse>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<ShowcaseShortlistResponse>('/showcase/shortlist');\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getShowcaseShortlistVerification(): Promise<ShowcaseShortlistReport> {\n const cacheKey = 'showcase:shortlist-verification';\n const cached = this.getCached<ShowcaseShortlistReport>(cacheKey);\n if (cached) return cached;\n\n const result = await this.request<ShowcaseShortlistReport>('/showcase/shortlist-verification');\n this.setCache(cacheKey, result);\n return result;\n }\n\n async getRegistryIntelligenceSummary(params?: {\n namespace?: string;\n }): Promise<RegistryIntelligenceSummaryResponse> {\n const cacheKey = `registry-intelligence-summary:${JSON.stringify(params ?? {})}`;\n const cached = this.getCached<RegistryIntelligenceSummaryResponse>(cacheKey);\n if (cached) return cached;\n\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n const query = searchParams.toString();\n const result = await this.request<RegistryIntelligenceSummaryResponse>(\n `/intelligence/summary${query ? `?${query}` : ''}`,\n );\n this.setCache(cacheKey, result);\n return result;\n }\n\n async compileExecutionPacks(\n essence: EssenceFile,\n params?: { namespace?: string },\n ): Promise<ExecutionPackBundleResponse> {\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n const query = searchParams.toString();\n\n return this.request<ExecutionPackBundleResponse>(`/packs/compile${query ? `?${query}` : ''}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(essence),\n });\n }\n\n async selectExecutionPack(\n input: HostedSelectedExecutionPackRequest,\n params?: { namespace?: string },\n ): Promise<SelectedExecutionPackResponse> {\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n const query = searchParams.toString();\n\n return this.request<SelectedExecutionPackResponse>(`/packs/select${query ? `?${query}` : ''}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input),\n });\n }\n\n async getExecutionPackManifest(\n essence: EssenceFile,\n params?: { namespace?: string },\n ): Promise<ExecutionPackManifest> {\n const selected = await this.selectExecutionPack(\n {\n essence,\n pack_type: 'scaffold',\n },\n params,\n );\n\n return selected.manifest;\n }\n\n async critiqueFile(\n input: HostedFileCritiqueRequest,\n params?: { namespace?: string },\n ): Promise<FileCritiqueReport> {\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n const query = searchParams.toString();\n\n return this.request<FileCritiqueReport>(`/critique/file${query ? `?${query}` : ''}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input),\n });\n }\n\n async auditProject(\n input: HostedProjectAuditRequest,\n params?: { namespace?: string },\n ): Promise<ProjectAuditReport> {\n const searchParams = new URLSearchParams();\n if (params?.namespace) searchParams.set('namespace', params.namespace);\n const query = searchParams.toString();\n\n return this.request<ProjectAuditReport>(`/audit/project${query ? `?${query}` : ''}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input),\n });\n }\n}\n\n// ── Lightweight registry client (merged from client.ts) ──\n\nexport interface RegistryClientOptions {\n baseUrl?: string;\n}\n\nexport interface SearchResult {\n id: string;\n type: string;\n name: string;\n description: string;\n version: string;\n tags: string[];\n}\n\nexport interface RegistryClient {\n search(query: string, type?: string): Promise<SearchResult[]>;\n fetch(type: string, id: string, version?: string): Promise<unknown>;\n}\n\nexport function createRegistryClient(options: RegistryClientOptions = {}): RegistryClient {\n const baseUrl = options.baseUrl ?? 'https://api.decantr.ai/v1';\n return {\n async search(query: string, type?: string): Promise<SearchResult[]> {\n const params = new URLSearchParams({ q: query });\n if (type) params.set('type', type);\n const res = await fetch(`${baseUrl}/search?${params}`);\n if (!res.ok) return [];\n const data = (await res.json()) as\n | { results?: SearchResult[]; total?: number }\n | SearchResult[];\n // API returns { total, results } wrapper\n if (Array.isArray(data)) return data;\n return (data as { results: SearchResult[] }).results ?? [];\n },\n async fetch(type: string, id: string, version?: string): Promise<unknown> {\n const url = version\n ? `${baseUrl}/content/${type}/${id}/${version}`\n : `${baseUrl}/content/${type}/${id}`;\n const res = await fetch(url);\n if (!res.ok) return null;\n return res.json();\n },\n };\n}\n","import type { PublicContentSummary } from './types.js';\n\nexport type PublicContentSort = 'recommended' | 'recent' | 'name';\n\nfunction verificationScore(status?: string | null): number {\n switch (status) {\n case 'smoke-green':\n return 200;\n case 'build-green':\n return 120;\n case 'pending':\n return 20;\n case 'smoke-red':\n case 'build-red':\n return -40;\n default:\n return 0;\n }\n}\n\nfunction confidenceScore(level?: string | null): number {\n switch (level) {\n case 'high':\n return 120;\n case 'medium':\n return 70;\n case 'low':\n return 30;\n default:\n return 0;\n }\n}\n\nfunction confidenceTierScore(tier?: string | null): number {\n switch (tier) {\n case 'verified':\n return 180;\n case 'high':\n return 120;\n case 'medium':\n return 60;\n case 'low':\n return 10;\n default:\n return 0;\n }\n}\n\nfunction getRecommendedPriority(item: PublicContentSummary): number {\n const intelligence = item.intelligence;\n let score = 0;\n\n if (!intelligence) {\n return score;\n }\n\n if (intelligence.recommended) {\n score += 500;\n }\n\n if (intelligence.golden_usage === 'shortlisted') {\n score += 160;\n } else if (intelligence.golden_usage === 'showcase') {\n score += 80;\n }\n\n score += verificationScore(intelligence.verification_status);\n score += confidenceScore(intelligence.benchmark_confidence);\n score += confidenceTierScore(intelligence.confidence_tier);\n score += Math.round((intelligence.confidence_score ?? 0) / 2);\n score += intelligence.quality_score ?? 0;\n\n return score;\n}\n\nexport function normalizePublicContentSort(value: string | null | undefined): PublicContentSort {\n switch (value) {\n case 'popular':\n case 'recommended':\n return 'recommended';\n case 'newest':\n case 'recent':\n case 'published':\n return 'recent';\n case 'name':\n return 'name';\n default:\n return 'recommended';\n }\n}\n\nexport function comparePublicContent(\n a: PublicContentSummary,\n b: PublicContentSummary,\n sort: PublicContentSort = 'recommended',\n): number {\n if (sort === 'name') {\n return (a.name ?? a.slug).localeCompare(b.name ?? b.slug);\n }\n\n if (sort === 'recent') {\n const publishedDelta =\n new Date(b.published_at ?? 0).getTime() - new Date(a.published_at ?? 0).getTime();\n if (publishedDelta !== 0) {\n return publishedDelta;\n }\n return a.slug.localeCompare(b.slug);\n }\n\n const priorityDelta = getRecommendedPriority(b) - getRecommendedPriority(a);\n if (priorityDelta !== 0) {\n return priorityDelta;\n }\n\n if (a.namespace !== b.namespace) {\n if (a.namespace === '@official') return -1;\n if (b.namespace === '@official') return 1;\n }\n\n const publishedDelta =\n new Date(b.published_at ?? 0).getTime() - new Date(a.published_at ?? 0).getTime();\n if (publishedDelta !== 0) {\n return publishedDelta;\n }\n\n return (a.name ?? a.slug).localeCompare(b.name ?? b.slug);\n}\n\nexport function sortPublicContent<T extends PublicContentSummary>(\n items: T[],\n sort: PublicContentSort = 'recommended',\n): T[] {\n return [...items].sort((left, right) => comparePublicContent(left, right, sort));\n}\n","import type { EssenceFile } from '@decantr/essence-spec';\n\n// --- Pattern ---\nexport interface PatternLayoutSpec {\n layout: string;\n atoms: string;\n slots?: Record<string, string>;\n}\n\nexport interface PatternCodeSpec {\n imports?: string;\n example?: string;\n}\n\nexport interface PatternPreset {\n description: string;\n components?: string[];\n layout: PatternLayoutSpec;\n code?: PatternCodeSpec;\n}\n\nexport interface PatternIO {\n produces?: string[];\n consumes?: string[];\n actions?: string[];\n}\n\nexport interface Pattern {\n id: string;\n version: string;\n name: string;\n description: string;\n tags: string[];\n components: string[];\n default_preset: string;\n presets: Record<string, PatternPreset>;\n contained?: boolean;\n io?: PatternIO;\n code?: PatternCodeSpec;\n default_layout?: PatternLayoutSpec;\n visual_brief?: string;\n composition?: Record<string, string>;\n motion?: {\n micro?: Record<string, string>;\n transitions?: Record<string, string>;\n ambient?: Record<string, string>;\n };\n /**\n * v2.1 Tier C1. Declared runtime interactions this pattern MUST implement.\n * Surfaced as a checkbox checklist in the per-page execution pack; enforced\n * by `decantr check --strict` (C5 guard rule). Each value maps to a\n * canonical implementation (treatment class + handler pattern) — see the\n * Interaction Requirements table in scaffolded DECANTR.md. Before this\n * field, motion/interactivity lived only as prose philosophy that cold\n * LLMs routinely categorized as \"nice to have\" and skipped.\n */\n interactions?: string[];\n responsive?: {\n mobile?: string;\n tablet?: string;\n desktop?: string;\n };\n accessibility?: {\n role?: string;\n 'aria-label'?: string;\n keyboard?: string[];\n announcements?: string[];\n focus_management?: string;\n };\n layout_hints?: Record<string, string>;\n category?: string;\n}\n\n// --- Archetype ---\nexport type ArchetypeRole = 'primary' | 'gateway' | 'public' | 'auxiliary';\n\nexport interface PatternReferenceObject {\n pattern: string;\n preset?: string;\n as?: string;\n}\n\nexport type PatternReference = string | PatternReferenceObject;\n\nexport interface LayoutGroup {\n cols: PatternReference[];\n at?: string;\n span?: Record<string, number>;\n}\n\nexport type LayoutItem = PatternReference | LayoutGroup;\n\nexport interface ContentDependencies {\n [kind: string]: Record<string, string>;\n}\n\nexport interface ArchetypePage {\n id: string;\n default_layout: LayoutItem[];\n shell: string;\n description?: string;\n patterns?: PatternReference[];\n}\n\nexport interface SeoHints {\n schema_org?: string[];\n meta_priorities?: string[];\n}\n\nexport interface ArchetypeSuggestedTheme {\n ids?: string[];\n modes?: string[];\n shapes?: string[];\n}\n\nexport interface ArchetypeHeroCustomization {\n style?: string;\n elements?: string[];\n background?: string;\n [key: string]: unknown;\n}\n\nexport interface Archetype {\n $schema?: string;\n id: string;\n version: string;\n decantr_compat?: string;\n name: string;\n description: string;\n tags: string[];\n role: ArchetypeRole;\n pages: ArchetypePage[];\n features: string[];\n dependencies?: ContentDependencies;\n seo_hints?: SeoHints;\n classification?: {\n triggers: { primary: string[]; secondary: string[]; negative: string[] };\n implies: string[];\n weight: number;\n tier: string;\n };\n page_briefs?: Record<string, string>;\n suggested_theme?: ArchetypeSuggestedTheme;\n shells?: Record<string, string>;\n personality?: string[];\n hero_customization?: ArchetypeHeroCustomization;\n}\n\n// --- Theme substructures (absorbed from former Recipe type) ---\nexport interface ThemeSpatial {\n density_bias: number;\n content_gap_shift: number;\n section_padding: string;\n card_wrapping: 'always' | 'minimal' | 'none';\n surface_override: string | null;\n}\n\nexport interface ThemeEffects {\n enabled: boolean;\n intensity: 'subtle' | 'moderate' | 'bold';\n type_mapping: Record<string, string[]>;\n component_fallback: Record<string, string>;\n intensity_values?: Record<string, Record<string, string>>;\n}\n\nexport interface ThemeShell {\n preferred: string[];\n nav_style: string;\n root?: string;\n nav?: string;\n header?: string;\n dimensions?: { navWidth?: string; headerHeight?: string };\n}\n\n// --- Blueprint ---\nexport type ComposeEntry = string | { archetype: string; prefix: string; role?: ArchetypeRole };\n\nexport interface BlueprintRoute {\n shell?: string;\n archetype?: string;\n page?: string;\n}\n\nexport interface BlueprintNavigationHotkey {\n key: string;\n route?: string;\n label?: string;\n}\n\nexport interface BlueprintNavigation {\n command_palette?: boolean;\n hotkeys?: BlueprintNavigationHotkey[];\n}\n\nexport interface BlueprintOverrides {\n features_add?: string[];\n features_remove?: string[];\n pages_remove?: string[];\n pages?: Record<string, Record<string, unknown>>;\n}\n\nexport interface Blueprint {\n $schema?: string;\n id: string;\n version?: string;\n decantr_compat?: string;\n name: string;\n description?: string;\n tags?: string[];\n archetype?: string;\n compose?: ComposeEntry[];\n theme: { id: string; mode?: string; shape?: string };\n personality?: string | string[];\n features?: string[];\n routes?: Record<string, BlueprintRoute>;\n overrides?: BlueprintOverrides;\n seo_hints?: SeoHints;\n navigation?: BlueprintNavigation;\n dependencies?: ContentDependencies;\n suggested_themes?: string[];\n design_constraints?: Record<string, unknown>;\n voice?: {\n tone?: string;\n cta_verbs?: string[];\n avoid?: string[];\n empty_states?: string;\n errors?: string;\n loading?: string;\n metrics_format?: string;\n };\n responsive_strategy?: {\n breakpoints?: string[];\n navigation?: Record<string, string>;\n data_display?: Record<string, string>;\n };\n}\n\n// --- Shell ---\nexport interface Shell {\n id: string;\n name: string;\n description?: string;\n root?: string;\n nav?: string;\n header?: string;\n nav_style?: string;\n dimensions?: {\n navWidth?: string;\n headerHeight?: string;\n };\n internal_layout?: Record<string, unknown>;\n layout?: string;\n atoms?: string;\n config?: Record<string, unknown>;\n guidance?: Record<string, string>;\n code?: { imports?: string; example?: string };\n}\n\n// --- Content Resolution ---\nexport const CONTENT_TYPES = ['pattern', 'theme', 'blueprint', 'archetype', 'shell'] as const;\n\nexport type ContentType = (typeof CONTENT_TYPES)[number];\n\nexport const API_CONTENT_TYPES = [\n 'patterns',\n 'themes',\n 'blueprints',\n 'archetypes',\n 'shells',\n] as const;\n\nexport type ApiContentType = (typeof API_CONTENT_TYPES)[number];\n\nexport const CONTENT_TYPE_TO_API_CONTENT_TYPE: Record<ContentType, ApiContentType> = {\n pattern: 'patterns',\n theme: 'themes',\n blueprint: 'blueprints',\n archetype: 'archetypes',\n shell: 'shells',\n};\n\nexport const API_CONTENT_TYPE_TO_CONTENT_TYPE: Record<ApiContentType, ContentType> = {\n patterns: 'pattern',\n themes: 'theme',\n blueprints: 'blueprint',\n archetypes: 'archetype',\n shells: 'shell',\n};\n\nexport function isContentType(value: string): value is ContentType {\n return CONTENT_TYPES.includes(value as ContentType);\n}\n\nexport function isApiContentType(value: string): value is ApiContentType {\n return API_CONTENT_TYPES.includes(value as ApiContentType);\n}\n\nexport interface ResolvedContent<T> {\n item: T;\n source: 'local' | 'core';\n path: string;\n}\n\n// --- Content Health ---\n\nexport type ContentHealthStatus = 'healthy' | 'warning' | 'error';\nexport type ContentHealthFindingSource =\n | 'schema'\n | 'reference'\n | 'quality'\n | 'coverage'\n | 'content';\n\nexport interface ContentHealthRemediation {\n summary: string;\n prompt: string;\n commands: string[];\n}\n\nexport interface ContentHealthFinding {\n id: string;\n source: ContentHealthFindingSource;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n file?: string;\n type?: ContentType;\n itemId?: string;\n rule?: string;\n suggestedFix?: string;\n remediation: ContentHealthRemediation;\n}\n\nexport interface ContentHealthTypeSummary {\n type: ContentType;\n directory: ApiContentType;\n itemCount: number;\n validCount: number;\n errorCount: number;\n warnCount: number;\n infoCount: number;\n ignoredCount: number;\n}\n\nexport interface ContentHealthReferenceSummary {\n checked: number;\n missing: number;\n missingByType: Record<ContentType, number>;\n}\n\nexport interface ContentHealthQualitySummary {\n patternVisualBriefCoverage: number;\n patternInteractionCoverage: number;\n themeDecoratorCoverage: number;\n blueprintPersonalityCoverage: number;\n blueprintVoiceCoverage: number;\n archetypePageBriefCoverage: number;\n}\n\nexport interface ContentHealthReport {\n $schema: string;\n generatedAt: string;\n contentRoot: string;\n status: ContentHealthStatus;\n score: number;\n summary: {\n itemCount: number;\n validCount: number;\n errorCount: number;\n warnCount: number;\n infoCount: number;\n findingCount: number;\n ignoredCount: number;\n contentDirectoryCount: number;\n };\n content: ContentHealthTypeSummary[];\n references: ContentHealthReferenceSummary;\n quality: ContentHealthQualitySummary;\n ci: {\n recommendedCommand: string;\n failOn: 'error' | 'warn' | 'none';\n };\n findings: ContentHealthFinding[];\n}\n\n// --- Theme ---\n\nexport type CvdMode = 'deuteranopia' | 'protanopia' | 'tritanopia' | 'achromatopsia';\n\nexport interface ThemeTokens {\n base?: Record<string, string>;\n cvd?: Partial<Record<CvdMode, Record<string, string>>>;\n}\n\nexport interface Theme {\n id: string;\n name: string;\n description?: string;\n tags?: string[];\n personality?: string;\n seed?: Record<string, string>;\n palette?: Record<string, Record<string, string>>;\n modes?: string[];\n shapes?: string[];\n cvd_support?: CvdMode[];\n tokens?: ThemeTokens;\n decantr_compat?: string;\n source?: string;\n // Absorbed from former Recipe type\n decorators?: Record<string, string>;\n treatments?: Record<string, Record<string, string>>;\n spatial?: ThemeSpatial;\n shell?: ThemeShell;\n effects?: ThemeEffects;\n motion?: {\n preference?: string;\n reduce_motion?: boolean;\n entrance?: string;\n timing?: string;\n durations?: Record<string, string>;\n };\n typography?: { scale?: string; heading_weight?: number; body_weight?: number; mono?: string };\n radius?: { philosophy?: string; base?: number };\n compositions?: Record<string, { shell: string; description: string; effects?: string[] }>;\n pattern_preferences?: {\n prefer: string[];\n avoid: string[];\n default_presets?: Record<string, string>;\n };\n decorator_definitions?: Record<\n string,\n {\n description: string;\n intent: string;\n suggested_properties?: Record<string, string>;\n pairs_with?: string[];\n usage?: string[];\n }\n >;\n}\n\n// --- API Client Types ---\n\nexport interface ContentListResponse<T = Record<string, unknown>> {\n items: T[];\n total: number;\n limit?: number;\n offset?: number;\n}\n\nexport type ContentVerificationStatus =\n | 'unknown'\n | 'pending'\n | 'build-green'\n | 'build-red'\n | 'smoke-green'\n | 'smoke-red';\n\nexport type ContentBenchmarkConfidence = 'none' | 'low' | 'medium' | 'high';\nexport type ContentConfidenceTier = 'low' | 'medium' | 'high' | 'verified';\n\nexport type ContentGoldenUsage = 'none' | 'showcase' | 'shortlisted';\nexport const PUBLIC_CONTENT_SOURCES = ['official', 'community', 'organization'] as const;\n\nexport type PublicContentSource = (typeof PUBLIC_CONTENT_SOURCES)[number];\n\nexport function isPublicContentSource(value: string): value is PublicContentSource {\n return PUBLIC_CONTENT_SOURCES.includes(value as PublicContentSource);\n}\n\nexport const CONTENT_INTELLIGENCE_SOURCES = ['authored', 'benchmark', 'hybrid'] as const;\n\nexport type ContentIntelligenceSource = 'authored' | 'benchmark' | 'hybrid';\n\nexport function isContentIntelligenceSource(value: string): value is ContentIntelligenceSource {\n return CONTENT_INTELLIGENCE_SOURCES.includes(value as ContentIntelligenceSource);\n}\n\nexport interface ContentIntelligenceMetadata {\n source: ContentIntelligenceSource;\n verification_status: ContentVerificationStatus;\n last_verified_at?: string | null;\n target_coverage: string[];\n benchmark_confidence: ContentBenchmarkConfidence;\n confidence_tier: ContentConfidenceTier;\n golden_usage: ContentGoldenUsage;\n quality_score: number | null;\n confidence_score: number | null;\n recommended: boolean;\n evidence: string[];\n recommendation_reasons: string[];\n recommendation_blockers: string[];\n benchmark?: {\n classification?: ShowcaseVerificationEntry['classification'];\n target?: string | null;\n drift_signal?: ShowcaseVerificationEntry['drift']['signal'];\n build_passed?: boolean | null;\n smoke_passed?: boolean | null;\n };\n}\n\nexport interface PublicContentSummary {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n version?: string;\n name?: string;\n description?: string;\n published_at?: string;\n owner_name?: string | null;\n owner_username?: string | null;\n thumbnail_url?: string | null;\n intelligence?: ContentIntelligenceMetadata | null;\n}\n\nexport interface PublicContentRecord<TData = Record<string, unknown>> {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n version: string;\n data: TData;\n visibility: 'public' | 'private';\n status: 'pending' | 'approved' | 'rejected' | 'published';\n created_at: string;\n updated_at: string;\n published_at?: string;\n owner_name?: string | null;\n owner_username?: string | null;\n thumbnail_url?: string | null;\n intelligence?: ContentIntelligenceMetadata | null;\n}\n\nexport interface ContentItem extends PublicContentRecord<Record<string, unknown>> {}\n\nexport interface OwnedContentSummary extends PublicContentSummary {\n visibility: 'public' | 'private';\n status: 'pending' | 'approved' | 'rejected' | 'published';\n created_at: string;\n updated_at: string;\n}\n\nexport interface PublicUserProfile {\n username: string;\n display_name: string | null;\n reputation_score: number;\n tier: 'free' | 'pro' | 'team' | 'enterprise';\n created_at: string;\n content_count: number;\n content_counts: Record<string, number>;\n}\n\nexport interface PublishPayload {\n type: ApiContentType;\n slug: string;\n namespace: string;\n version: string;\n data: Record<string, unknown>;\n visibility?: 'public' | 'private';\n}\n\nexport interface PublishResponse {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n status: string;\n}\n\nexport interface SearchParams {\n q: string;\n type?: string;\n namespace?: string;\n source?: PublicContentSource;\n sort?: string;\n recommended?: boolean;\n intelligenceSource?: ContentIntelligenceSource;\n limit?: number;\n offset?: number;\n}\n\nexport interface SearchResponse {\n results: PublicContentSummary[];\n total: number;\n limit?: number;\n offset?: number;\n}\n\nexport interface RegistryIntelligenceSummaryBucket {\n total_public_items: number;\n with_intelligence: number;\n recommended: number;\n authored: number;\n benchmark: number;\n hybrid: number;\n missing_source: number;\n smoke_green: number;\n build_green: number;\n high_confidence: number;\n verified_confidence: number;\n}\n\nexport interface RegistryIntelligenceSummaryResponse {\n $schema: string;\n generated_at: string;\n namespace: string | null;\n totals: RegistryIntelligenceSummaryBucket;\n by_type: Record<ContentType, RegistryIntelligenceSummaryBucket>;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n tier: 'free' | 'pro' | 'team' | 'enterprise';\n reputation_score: number;\n trusted: boolean;\n}\n\nexport interface ShowcaseVerificationEntry {\n slug: string;\n target: string | null;\n classification: 'pending' | 'A' | 'B' | 'C' | 'D';\n verificationStatus: 'pending' | 'build-green' | 'build-red' | 'smoke-green' | 'smoke-red';\n build: {\n passed: boolean | null;\n durationMs: number;\n };\n smoke: {\n passed: boolean | null;\n durationMs: number;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsHardenedCount: number;\n routeDocumentsCoverageOk: boolean;\n routeDocumentsHardeningOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n };\n drift: {\n signal: 'lower' | 'moderate' | 'elevated';\n penalty: number;\n inlineStyleCount: number;\n hardcodedColorCount: number;\n utilityLeakageCount: number;\n decantrTreatmentCount: number;\n hasPackManifest: boolean;\n hasDist: boolean;\n };\n}\n\nexport interface ShowcaseShortlistSummary {\n appCount: number;\n passedBuilds: number;\n failedBuilds: number;\n averageDurationMs: number;\n passedSmokes: number;\n failedSmokes: number;\n averageSmokeDurationMs: number;\n appsWithTitleOkCount: number;\n appsWithLangOkCount: number;\n appsWithViewportOkCount: number;\n appsWithCharsetOkCount: number;\n appsWithoutInlineScriptsCount: number;\n appsWithCspSignalCount: number;\n appsWithExternalScriptIntegrityCount: number;\n appsWithExternalScriptCrossoriginCount: number;\n appsWithExternalStylesheetIntegrityCount: number;\n appsWithExternalStylesheetCrossoriginCount: number;\n appsWithRouteCoverageCount: number;\n appsWithFullRouteCoverageCount: number;\n averageTotalAssetBytes: number;\n averageJsAssetBytes: number;\n averageCssAssetBytes: number;\n lowerDriftCount: number;\n moderateDriftCount: number;\n elevatedDriftCount: number;\n withPackManifestCount: number;\n}\n\nexport interface ShowcaseManifestEntry {\n slug: string;\n status: string;\n classification: string;\n origin?: string | null;\n target?: string | null;\n goldenCandidate?: string | boolean;\n notes?: string | null;\n thumbnail?: {\n src: string;\n alt: string;\n width?: number;\n height?: number;\n } | null;\n url?: string | null;\n verification?: ShowcaseVerificationEntry | null;\n}\n\nexport interface ShowcaseManifestResponse {\n total: number;\n shortlisted: number;\n apps: ShowcaseManifestEntry[];\n}\n\nexport interface ShowcaseShortlistResponse {\n generatedAt: string | null;\n summary: ShowcaseShortlistSummary | null;\n apps: ShowcaseManifestEntry[];\n}\n\nexport interface ShowcaseShortlistReport {\n $schema: string;\n generatedAt: string;\n dryRun: boolean;\n summary: ShowcaseShortlistSummary;\n results: ShowcaseVerificationEntry[];\n}\n\nexport interface HostedFileCritiqueRequest {\n essence: EssenceFile;\n code: string;\n filePath?: string;\n treatmentsCss?: string;\n}\n\nexport interface HostedDistSnapshot {\n indexHtml: string;\n assets?: Record<string, string>;\n}\n\nexport interface HostedSourceSnapshot {\n files: Record<string, string>;\n}\n\nexport interface HostedProjectAuditRequest {\n essence: EssenceFile;\n dist?: HostedDistSnapshot;\n sources?: HostedSourceSnapshot;\n}\n\nexport type ExecutionPackType = 'scaffold' | 'section' | 'page' | 'mutation' | 'review';\n\nexport interface ExecutionPackTarget {\n platform: 'web';\n framework: string | null;\n runtime: string | null;\n adapter: string;\n}\n\nexport interface ExecutionPackScope {\n appId: string;\n pageIds: string[];\n patternIds: string[];\n}\n\nexport interface ExecutionPackExample {\n id: string;\n label: string;\n language: string;\n snippet: string;\n}\n\nexport interface ExecutionPackAntiPattern {\n id: string;\n summary: string;\n guidance: string;\n}\n\nexport interface ExecutionPackSuccessCheck {\n id: string;\n label: string;\n severity: 'error' | 'warn' | 'info';\n}\n\nexport interface ExecutionPackTokenBudget {\n target: number;\n max: number;\n strategy: string[];\n}\n\nexport interface ExecutionPackBase<TData = Record<string, unknown>> {\n $schema: string;\n packVersion: '1.0.0';\n packType: ExecutionPackType;\n objective: string;\n target: ExecutionPackTarget;\n preset: string | null;\n scope: ExecutionPackScope;\n requiredSetup: string[];\n allowedVocabulary: string[];\n examples: ExecutionPackExample[];\n antiPatterns: ExecutionPackAntiPattern[];\n successChecks: ExecutionPackSuccessCheck[];\n tokenBudget: ExecutionPackTokenBudget;\n data: TData;\n renderedMarkdown: string;\n}\n\nexport interface PackManifestEntry {\n id: string;\n markdown: string;\n json: string;\n}\n\nexport interface PackManifestSectionEntry extends PackManifestEntry {\n pageIds: string[];\n}\n\nexport interface PackManifestPageEntry extends PackManifestEntry {\n sectionId: string | null;\n sectionRole: string | null;\n}\n\nexport interface PackManifestMutationEntry extends PackManifestEntry {\n mutationType: 'add-page' | 'modify';\n}\n\nexport interface ExecutionPackManifest {\n $schema: string;\n version: '1.0.0';\n generatedAt: string;\n scaffold: PackManifestEntry | null;\n review: PackManifestEntry | null;\n sections: PackManifestSectionEntry[];\n pages: PackManifestPageEntry[];\n mutations: PackManifestMutationEntry[];\n}\n\nexport interface ScaffoldExecutionPack\n extends ExecutionPackBase<{\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n }> {\n packType: 'scaffold';\n}\n\nexport interface ReviewExecutionPack\n extends ExecutionPackBase<{\n reviewType: 'app';\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n focusAreas: string[];\n workflow: string[];\n }> {\n packType: 'review';\n}\n\nexport interface SectionExecutionPack\n extends ExecutionPackBase<{\n sectionId: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n }> {\n packType: 'section';\n}\n\nexport interface PageExecutionPack\n extends ExecutionPackBase<{\n pageId: string;\n path: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n surface: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n wiringSignals: string[];\n patterns: Array<{\n id: string;\n alias: string;\n preset: string;\n layout: string;\n }>;\n }> {\n packType: 'page';\n}\n\nexport interface MutationExecutionPack\n extends ExecutionPackBase<{\n mutationType: 'add-page' | 'modify';\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n workflow: string[];\n }> {\n packType: 'mutation';\n}\n\nexport interface ExecutionPackBundleResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n scaffold: ScaffoldExecutionPack;\n review: ReviewExecutionPack;\n sections: SectionExecutionPack[];\n pages: PageExecutionPack[];\n mutations: MutationExecutionPack[];\n}\n\nexport interface HostedSelectedExecutionPackRequest {\n essence: EssenceFile;\n pack_type: ExecutionPackType;\n id?: string;\n}\n\nexport interface SelectedExecutionPackResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n selector: {\n packType: ExecutionPackType;\n id: string | null;\n };\n pack:\n | ScaffoldExecutionPack\n | ReviewExecutionPack\n | SectionExecutionPack\n | PageExecutionPack\n | MutationExecutionPack;\n}\n\nexport type VerificationSeverity = 'error' | 'warn' | 'info';\n\nexport interface VerificationFinding {\n id: string;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n file?: string;\n rule?: string;\n suggestedFix?: string;\n}\n\nexport interface VerificationScore {\n category: string;\n focusArea: string;\n score: number;\n details: string;\n suggestions: string[];\n}\n\nexport interface FileCritiqueReport {\n $schema: string;\n file: string;\n overall: number;\n scores: VerificationScore[];\n findings: VerificationFinding[];\n focusAreas: string[];\n reviewPack: ReviewExecutionPack | null;\n}\n\nexport interface ProjectAuditRuntimeAudit {\n distPresent: boolean;\n indexPresent: boolean;\n checked: boolean;\n passed: boolean | null;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsHardenedCount: number;\n routeDocumentsCoverageOk: boolean;\n routeDocumentsHardeningOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n}\n\nexport interface ProjectAuditSummary {\n errorCount: number;\n warnCount: number;\n infoCount: number;\n essenceVersion: string | null;\n reviewPackPresent: boolean;\n packManifestPresent: boolean;\n runtimeAuditChecked: boolean;\n runtimePassed: boolean | null;\n pageCount: number;\n}\n\nexport interface ProjectAuditReport {\n $schema: string;\n projectRoot: string;\n valid: boolean;\n essence: EssenceFile | null;\n reviewPack: ReviewExecutionPack | null;\n packManifest: ExecutionPackManifest | null;\n runtimeAudit: ProjectAuditRuntimeAudit;\n findings: VerificationFinding[];\n summary: ProjectAuditSummary;\n}\n"],"mappings":"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","names":["publishedDelta"]}
|
|
@@ -256,6 +256,75 @@ interface ResolvedContent<T> {
|
|
|
256
256
|
source: 'local' | 'core';
|
|
257
257
|
path: string;
|
|
258
258
|
}
|
|
259
|
+
type ContentHealthStatus = 'healthy' | 'warning' | 'error';
|
|
260
|
+
type ContentHealthFindingSource = 'schema' | 'reference' | 'quality' | 'coverage' | 'content';
|
|
261
|
+
interface ContentHealthRemediation {
|
|
262
|
+
summary: string;
|
|
263
|
+
prompt: string;
|
|
264
|
+
commands: string[];
|
|
265
|
+
}
|
|
266
|
+
interface ContentHealthFinding {
|
|
267
|
+
id: string;
|
|
268
|
+
source: ContentHealthFindingSource;
|
|
269
|
+
category: string;
|
|
270
|
+
severity: VerificationSeverity;
|
|
271
|
+
message: string;
|
|
272
|
+
evidence: string[];
|
|
273
|
+
file?: string;
|
|
274
|
+
type?: ContentType;
|
|
275
|
+
itemId?: string;
|
|
276
|
+
rule?: string;
|
|
277
|
+
suggestedFix?: string;
|
|
278
|
+
remediation: ContentHealthRemediation;
|
|
279
|
+
}
|
|
280
|
+
interface ContentHealthTypeSummary {
|
|
281
|
+
type: ContentType;
|
|
282
|
+
directory: ApiContentType;
|
|
283
|
+
itemCount: number;
|
|
284
|
+
validCount: number;
|
|
285
|
+
errorCount: number;
|
|
286
|
+
warnCount: number;
|
|
287
|
+
infoCount: number;
|
|
288
|
+
ignoredCount: number;
|
|
289
|
+
}
|
|
290
|
+
interface ContentHealthReferenceSummary {
|
|
291
|
+
checked: number;
|
|
292
|
+
missing: number;
|
|
293
|
+
missingByType: Record<ContentType, number>;
|
|
294
|
+
}
|
|
295
|
+
interface ContentHealthQualitySummary {
|
|
296
|
+
patternVisualBriefCoverage: number;
|
|
297
|
+
patternInteractionCoverage: number;
|
|
298
|
+
themeDecoratorCoverage: number;
|
|
299
|
+
blueprintPersonalityCoverage: number;
|
|
300
|
+
blueprintVoiceCoverage: number;
|
|
301
|
+
archetypePageBriefCoverage: number;
|
|
302
|
+
}
|
|
303
|
+
interface ContentHealthReport {
|
|
304
|
+
$schema: string;
|
|
305
|
+
generatedAt: string;
|
|
306
|
+
contentRoot: string;
|
|
307
|
+
status: ContentHealthStatus;
|
|
308
|
+
score: number;
|
|
309
|
+
summary: {
|
|
310
|
+
itemCount: number;
|
|
311
|
+
validCount: number;
|
|
312
|
+
errorCount: number;
|
|
313
|
+
warnCount: number;
|
|
314
|
+
infoCount: number;
|
|
315
|
+
findingCount: number;
|
|
316
|
+
ignoredCount: number;
|
|
317
|
+
contentDirectoryCount: number;
|
|
318
|
+
};
|
|
319
|
+
content: ContentHealthTypeSummary[];
|
|
320
|
+
references: ContentHealthReferenceSummary;
|
|
321
|
+
quality: ContentHealthQualitySummary;
|
|
322
|
+
ci: {
|
|
323
|
+
recommendedCommand: string;
|
|
324
|
+
failOn: 'error' | 'warn' | 'none';
|
|
325
|
+
};
|
|
326
|
+
findings: ContentHealthFinding[];
|
|
327
|
+
}
|
|
259
328
|
type CvdMode = 'deuteranopia' | 'protanopia' | 'tritanopia' | 'achromatopsia';
|
|
260
329
|
interface ThemeTokens {
|
|
261
330
|
base?: Record<string, string>;
|
|
@@ -559,6 +628,12 @@ interface ShowcaseManifestEntry {
|
|
|
559
628
|
target?: string | null;
|
|
560
629
|
goldenCandidate?: string | boolean;
|
|
561
630
|
notes?: string | null;
|
|
631
|
+
thumbnail?: {
|
|
632
|
+
src: string;
|
|
633
|
+
alt: string;
|
|
634
|
+
width?: number;
|
|
635
|
+
height?: number;
|
|
636
|
+
} | null;
|
|
562
637
|
url?: string | null;
|
|
563
638
|
verification?: ShowcaseVerificationEntry | null;
|
|
564
639
|
}
|
|
@@ -897,4 +972,4 @@ interface ProjectAuditReport {
|
|
|
897
972
|
summary: ProjectAuditSummary;
|
|
898
973
|
}
|
|
899
974
|
|
|
900
|
-
export { type
|
|
975
|
+
export { type HostedFileCritiqueRequest as $, type Archetype as A, type Blueprint as B, type ContentType as C, type ContentHealthStatus as D, type ContentHealthTypeSummary as E, type ContentIntelligenceMetadata as F, type ContentIntelligenceSource as G, type ContentItem as H, type ContentListResponse as I, type ContentVerificationStatus as J, type CvdMode as K, type ExecutionPackAntiPattern as L, type ExecutionPackBase as M, type ExecutionPackBundleResponse as N, type ExecutionPackExample as O, type PatternPreset as P, type ExecutionPackManifest as Q, type ResolvedContent as R, type Shell as S, type Theme as T, type ExecutionPackScope as U, type ExecutionPackSuccessCheck as V, type ExecutionPackTarget as W, type ExecutionPackTokenBudget as X, type ExecutionPackType as Y, type FileCritiqueReport as Z, type HostedDistSnapshot as _, type Pattern as a, type HostedProjectAuditRequest as a0, type LayoutGroup as a1, type LayoutItem as a2, type MutationExecutionPack as a3, type OwnedContentSummary as a4, PUBLIC_CONTENT_SOURCES as a5, type PackManifestEntry as a6, type PackManifestMutationEntry as a7, type PackManifestPageEntry as a8, type PackManifestSectionEntry as a9, type ShowcaseVerificationEntry as aA, type ThemeEffects as aB, type ThemeShell as aC, type ThemeSpatial as aD, type ThemeTokens as aE, type UserProfile as aF, type VerificationFinding as aG, type VerificationScore as aH, type VerificationSeverity as aI, isApiContentType as aJ, isContentIntelligenceSource as aK, isContentType as aL, isPublicContentSource as aM, type HostedSelectedExecutionPackRequest as aN, type SelectedExecutionPackResponse as aO, type PageExecutionPack as aa, type PatternCodeSpec as ab, type PatternLayoutSpec as ac, type PatternReference as ad, type PatternReferenceObject as ae, type ProjectAuditReport as af, type ProjectAuditRuntimeAudit as ag, type ProjectAuditSummary as ah, type PublicContentRecord as ai, type PublicContentSource as aj, type PublicContentSummary as ak, type PublicUserProfile as al, type PublishPayload as am, type PublishResponse as an, type RegistryIntelligenceSummaryBucket as ao, type RegistryIntelligenceSummaryResponse as ap, type ReviewExecutionPack as aq, type ScaffoldExecutionPack as ar, type SearchParams as as, type SearchResponse as at, type SectionExecutionPack as au, type ShowcaseManifestEntry as av, type ShowcaseManifestResponse as aw, type ShowcaseShortlistReport as ax, type ShowcaseShortlistResponse as ay, type ShowcaseShortlistSummary as az, type PatternIO as b, API_CONTENT_TYPES as c, API_CONTENT_TYPE_TO_CONTENT_TYPE as d, type ApiContentType as e, type ArchetypeHeroCustomization as f, type ArchetypePage as g, type ArchetypeRole as h, type ArchetypeSuggestedTheme as i, type BlueprintNavigation as j, type BlueprintNavigationHotkey as k, type BlueprintOverrides as l, type BlueprintRoute as m, CONTENT_INTELLIGENCE_SOURCES as n, CONTENT_TYPES as o, CONTENT_TYPE_TO_API_CONTENT_TYPE as p, type ComposeEntry as q, type ContentBenchmarkConfidence as r, type ContentDependencies as s, type ContentGoldenUsage as t, type ContentHealthFinding as u, type ContentHealthFindingSource as v, type ContentHealthQualitySummary as w, type ContentHealthReferenceSummary as x, type ContentHealthRemediation as y, type ContentHealthReport as z };
|
package/dist/content-types.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { c as API_CONTENT_TYPES, d as API_CONTENT_TYPE_TO_CONTENT_TYPE, e as ApiContentType, o as CONTENT_TYPES, p as CONTENT_TYPE_TO_API_CONTENT_TYPE, C as ContentType,
|
|
1
|
+
export { c as API_CONTENT_TYPES, d as API_CONTENT_TYPE_TO_CONTENT_TYPE, e as ApiContentType, o as CONTENT_TYPES, p as CONTENT_TYPE_TO_API_CONTENT_TYPE, C as ContentType, aJ as isApiContentType, aL as isContentType } from './content-types-GxXVWkrY.js';
|
|
2
2
|
import '@decantr/essence-spec';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { EssenceFile } from '@decantr/essence-spec';\n\n// --- Pattern ---\nexport interface PatternLayoutSpec {\n layout: string;\n atoms: string;\n slots?: Record<string, string>;\n}\n\nexport interface PatternCodeSpec {\n imports?: string;\n example?: string;\n}\n\nexport interface PatternPreset {\n description: string;\n components?: string[];\n layout: PatternLayoutSpec;\n code?: PatternCodeSpec;\n}\n\nexport interface PatternIO {\n produces?: string[];\n consumes?: string[];\n actions?: string[];\n}\n\nexport interface Pattern {\n id: string;\n version: string;\n name: string;\n description: string;\n tags: string[];\n components: string[];\n default_preset: string;\n presets: Record<string, PatternPreset>;\n contained?: boolean;\n io?: PatternIO;\n code?: PatternCodeSpec;\n default_layout?: PatternLayoutSpec;\n visual_brief?: string;\n composition?: Record<string, string>;\n motion?: {\n micro?: Record<string, string>;\n transitions?: Record<string, string>;\n ambient?: Record<string, string>;\n };\n /**\n * v2.1 Tier C1. Declared runtime interactions this pattern MUST implement.\n * Surfaced as a checkbox checklist in the per-page execution pack; enforced\n * by `decantr check --strict` (C5 guard rule). Each value maps to a\n * canonical implementation (treatment class + handler pattern) — see the\n * Interaction Requirements table in scaffolded DECANTR.md. Before this\n * field, motion/interactivity lived only as prose philosophy that cold\n * LLMs routinely categorized as \"nice to have\" and skipped.\n */\n interactions?: string[];\n responsive?: {\n mobile?: string;\n tablet?: string;\n desktop?: string;\n };\n accessibility?: {\n role?: string;\n 'aria-label'?: string;\n keyboard?: string[];\n announcements?: string[];\n focus_management?: string;\n };\n layout_hints?: Record<string, string>;\n category?: string;\n}\n\n// --- Archetype ---\nexport type ArchetypeRole = 'primary' | 'gateway' | 'public' | 'auxiliary';\n\nexport interface PatternReferenceObject {\n pattern: string;\n preset?: string;\n as?: string;\n}\n\nexport type PatternReference = string | PatternReferenceObject;\n\nexport interface LayoutGroup {\n cols: PatternReference[];\n at?: string;\n span?: Record<string, number>;\n}\n\nexport type LayoutItem = PatternReference | LayoutGroup;\n\nexport interface ContentDependencies {\n [kind: string]: Record<string, string>;\n}\n\nexport interface ArchetypePage {\n id: string;\n default_layout: LayoutItem[];\n shell: string;\n description?: string;\n patterns?: PatternReference[];\n}\n\nexport interface SeoHints {\n schema_org?: string[];\n meta_priorities?: string[];\n}\n\nexport interface ArchetypeSuggestedTheme {\n ids?: string[];\n modes?: string[];\n shapes?: string[];\n}\n\nexport interface ArchetypeHeroCustomization {\n style?: string;\n elements?: string[];\n background?: string;\n [key: string]: unknown;\n}\n\nexport interface Archetype {\n $schema?: string;\n id: string;\n version: string;\n decantr_compat?: string;\n name: string;\n description: string;\n tags: string[];\n role: ArchetypeRole;\n pages: ArchetypePage[];\n features: string[];\n dependencies?: ContentDependencies;\n seo_hints?: SeoHints;\n classification?: {\n triggers: { primary: string[]; secondary: string[]; negative: string[] };\n implies: string[];\n weight: number;\n tier: string;\n };\n page_briefs?: Record<string, string>;\n suggested_theme?: ArchetypeSuggestedTheme;\n shells?: Record<string, string>;\n personality?: string[];\n hero_customization?: ArchetypeHeroCustomization;\n}\n\n// --- Theme substructures (absorbed from former Recipe type) ---\nexport interface ThemeSpatial {\n density_bias: number;\n content_gap_shift: number;\n section_padding: string;\n card_wrapping: 'always' | 'minimal' | 'none';\n surface_override: string | null;\n}\n\nexport interface ThemeEffects {\n enabled: boolean;\n intensity: 'subtle' | 'moderate' | 'bold';\n type_mapping: Record<string, string[]>;\n component_fallback: Record<string, string>;\n intensity_values?: Record<string, Record<string, string>>;\n}\n\nexport interface ThemeShell {\n preferred: string[];\n nav_style: string;\n root?: string;\n nav?: string;\n header?: string;\n dimensions?: { navWidth?: string; headerHeight?: string };\n}\n\n// --- Blueprint ---\nexport type ComposeEntry = string | { archetype: string; prefix: string; role?: ArchetypeRole };\n\nexport interface BlueprintRoute {\n shell?: string;\n archetype?: string;\n page?: string;\n}\n\nexport interface BlueprintNavigationHotkey {\n key: string;\n route?: string;\n label?: string;\n}\n\nexport interface BlueprintNavigation {\n command_palette?: boolean;\n hotkeys?: BlueprintNavigationHotkey[];\n}\n\nexport interface BlueprintOverrides {\n features_add?: string[];\n features_remove?: string[];\n pages_remove?: string[];\n pages?: Record<string, Record<string, unknown>>;\n}\n\nexport interface Blueprint {\n $schema?: string;\n id: string;\n version?: string;\n decantr_compat?: string;\n name: string;\n description?: string;\n tags?: string[];\n archetype?: string;\n compose?: ComposeEntry[];\n theme: { id: string; mode?: string; shape?: string };\n personality?: string | string[];\n features?: string[];\n routes?: Record<string, BlueprintRoute>;\n overrides?: BlueprintOverrides;\n seo_hints?: SeoHints;\n navigation?: BlueprintNavigation;\n dependencies?: ContentDependencies;\n suggested_themes?: string[];\n design_constraints?: Record<string, unknown>;\n voice?: {\n tone?: string;\n cta_verbs?: string[];\n avoid?: string[];\n empty_states?: string;\n errors?: string;\n loading?: string;\n metrics_format?: string;\n };\n responsive_strategy?: {\n breakpoints?: string[];\n navigation?: Record<string, string>;\n data_display?: Record<string, string>;\n };\n}\n\n// --- Shell ---\nexport interface Shell {\n id: string;\n name: string;\n description?: string;\n root?: string;\n nav?: string;\n header?: string;\n nav_style?: string;\n dimensions?: {\n navWidth?: string;\n headerHeight?: string;\n };\n internal_layout?: Record<string, unknown>;\n layout?: string;\n atoms?: string;\n config?: Record<string, unknown>;\n guidance?: Record<string, string>;\n code?: { imports?: string; example?: string };\n}\n\n// --- Content Resolution ---\nexport const CONTENT_TYPES = ['pattern', 'theme', 'blueprint', 'archetype', 'shell'] as const;\n\nexport type ContentType = (typeof CONTENT_TYPES)[number];\n\nexport const API_CONTENT_TYPES = [\n 'patterns',\n 'themes',\n 'blueprints',\n 'archetypes',\n 'shells',\n] as const;\n\nexport type ApiContentType = (typeof API_CONTENT_TYPES)[number];\n\nexport const CONTENT_TYPE_TO_API_CONTENT_TYPE: Record<ContentType, ApiContentType> = {\n pattern: 'patterns',\n theme: 'themes',\n blueprint: 'blueprints',\n archetype: 'archetypes',\n shell: 'shells',\n};\n\nexport const API_CONTENT_TYPE_TO_CONTENT_TYPE: Record<ApiContentType, ContentType> = {\n patterns: 'pattern',\n themes: 'theme',\n blueprints: 'blueprint',\n archetypes: 'archetype',\n shells: 'shell',\n};\n\nexport function isContentType(value: string): value is ContentType {\n return CONTENT_TYPES.includes(value as ContentType);\n}\n\nexport function isApiContentType(value: string): value is ApiContentType {\n return API_CONTENT_TYPES.includes(value as ApiContentType);\n}\n\nexport interface ResolvedContent<T> {\n item: T;\n source: 'local' | 'core';\n path: string;\n}\n\n// --- Theme ---\n\nexport type CvdMode = 'deuteranopia' | 'protanopia' | 'tritanopia' | 'achromatopsia';\n\nexport interface ThemeTokens {\n base?: Record<string, string>;\n cvd?: Partial<Record<CvdMode, Record<string, string>>>;\n}\n\nexport interface Theme {\n id: string;\n name: string;\n description?: string;\n tags?: string[];\n personality?: string;\n seed?: Record<string, string>;\n palette?: Record<string, Record<string, string>>;\n modes?: string[];\n shapes?: string[];\n cvd_support?: CvdMode[];\n tokens?: ThemeTokens;\n decantr_compat?: string;\n source?: string;\n // Absorbed from former Recipe type\n decorators?: Record<string, string>;\n treatments?: Record<string, Record<string, string>>;\n spatial?: ThemeSpatial;\n shell?: ThemeShell;\n effects?: ThemeEffects;\n motion?: {\n preference?: string;\n reduce_motion?: boolean;\n entrance?: string;\n timing?: string;\n durations?: Record<string, string>;\n };\n typography?: { scale?: string; heading_weight?: number; body_weight?: number; mono?: string };\n radius?: { philosophy?: string; base?: number };\n compositions?: Record<string, { shell: string; description: string; effects?: string[] }>;\n pattern_preferences?: {\n prefer: string[];\n avoid: string[];\n default_presets?: Record<string, string>;\n };\n decorator_definitions?: Record<\n string,\n {\n description: string;\n intent: string;\n suggested_properties?: Record<string, string>;\n pairs_with?: string[];\n usage?: string[];\n }\n >;\n}\n\n// --- API Client Types ---\n\nexport interface ContentListResponse<T = Record<string, unknown>> {\n items: T[];\n total: number;\n limit?: number;\n offset?: number;\n}\n\nexport type ContentVerificationStatus =\n | 'unknown'\n | 'pending'\n | 'build-green'\n | 'build-red'\n | 'smoke-green'\n | 'smoke-red';\n\nexport type ContentBenchmarkConfidence = 'none' | 'low' | 'medium' | 'high';\nexport type ContentConfidenceTier = 'low' | 'medium' | 'high' | 'verified';\n\nexport type ContentGoldenUsage = 'none' | 'showcase' | 'shortlisted';\nexport const PUBLIC_CONTENT_SOURCES = ['official', 'community', 'organization'] as const;\n\nexport type PublicContentSource = (typeof PUBLIC_CONTENT_SOURCES)[number];\n\nexport function isPublicContentSource(value: string): value is PublicContentSource {\n return PUBLIC_CONTENT_SOURCES.includes(value as PublicContentSource);\n}\n\nexport const CONTENT_INTELLIGENCE_SOURCES = ['authored', 'benchmark', 'hybrid'] as const;\n\nexport type ContentIntelligenceSource = 'authored' | 'benchmark' | 'hybrid';\n\nexport function isContentIntelligenceSource(value: string): value is ContentIntelligenceSource {\n return CONTENT_INTELLIGENCE_SOURCES.includes(value as ContentIntelligenceSource);\n}\n\nexport interface ContentIntelligenceMetadata {\n source: ContentIntelligenceSource;\n verification_status: ContentVerificationStatus;\n last_verified_at?: string | null;\n target_coverage: string[];\n benchmark_confidence: ContentBenchmarkConfidence;\n confidence_tier: ContentConfidenceTier;\n golden_usage: ContentGoldenUsage;\n quality_score: number | null;\n confidence_score: number | null;\n recommended: boolean;\n evidence: string[];\n recommendation_reasons: string[];\n recommendation_blockers: string[];\n benchmark?: {\n classification?: ShowcaseVerificationEntry['classification'];\n target?: string | null;\n drift_signal?: ShowcaseVerificationEntry['drift']['signal'];\n build_passed?: boolean | null;\n smoke_passed?: boolean | null;\n };\n}\n\nexport interface PublicContentSummary {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n version?: string;\n name?: string;\n description?: string;\n published_at?: string;\n owner_name?: string | null;\n owner_username?: string | null;\n thumbnail_url?: string | null;\n intelligence?: ContentIntelligenceMetadata | null;\n}\n\nexport interface PublicContentRecord<TData = Record<string, unknown>> {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n version: string;\n data: TData;\n visibility: 'public' | 'private';\n status: 'pending' | 'approved' | 'rejected' | 'published';\n created_at: string;\n updated_at: string;\n published_at?: string;\n owner_name?: string | null;\n owner_username?: string | null;\n thumbnail_url?: string | null;\n intelligence?: ContentIntelligenceMetadata | null;\n}\n\nexport interface ContentItem extends PublicContentRecord<Record<string, unknown>> {}\n\nexport interface OwnedContentSummary extends PublicContentSummary {\n visibility: 'public' | 'private';\n status: 'pending' | 'approved' | 'rejected' | 'published';\n created_at: string;\n updated_at: string;\n}\n\nexport interface PublicUserProfile {\n username: string;\n display_name: string | null;\n reputation_score: number;\n tier: 'free' | 'pro' | 'team' | 'enterprise';\n created_at: string;\n content_count: number;\n content_counts: Record<string, number>;\n}\n\nexport interface PublishPayload {\n type: ApiContentType;\n slug: string;\n namespace: string;\n version: string;\n data: Record<string, unknown>;\n visibility?: 'public' | 'private';\n}\n\nexport interface PublishResponse {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n status: string;\n}\n\nexport interface SearchParams {\n q: string;\n type?: string;\n namespace?: string;\n source?: PublicContentSource;\n sort?: string;\n recommended?: boolean;\n intelligenceSource?: ContentIntelligenceSource;\n limit?: number;\n offset?: number;\n}\n\nexport interface SearchResponse {\n results: PublicContentSummary[];\n total: number;\n limit?: number;\n offset?: number;\n}\n\nexport interface RegistryIntelligenceSummaryBucket {\n total_public_items: number;\n with_intelligence: number;\n recommended: number;\n authored: number;\n benchmark: number;\n hybrid: number;\n missing_source: number;\n smoke_green: number;\n build_green: number;\n high_confidence: number;\n verified_confidence: number;\n}\n\nexport interface RegistryIntelligenceSummaryResponse {\n $schema: string;\n generated_at: string;\n namespace: string | null;\n totals: RegistryIntelligenceSummaryBucket;\n by_type: Record<ContentType, RegistryIntelligenceSummaryBucket>;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n tier: 'free' | 'pro' | 'team' | 'enterprise';\n reputation_score: number;\n trusted: boolean;\n}\n\nexport interface ShowcaseVerificationEntry {\n slug: string;\n target: string | null;\n classification: 'pending' | 'A' | 'B' | 'C' | 'D';\n verificationStatus: 'pending' | 'build-green' | 'build-red' | 'smoke-green' | 'smoke-red';\n build: {\n passed: boolean | null;\n durationMs: number;\n };\n smoke: {\n passed: boolean | null;\n durationMs: number;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsHardenedCount: number;\n routeDocumentsCoverageOk: boolean;\n routeDocumentsHardeningOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n };\n drift: {\n signal: 'lower' | 'moderate' | 'elevated';\n penalty: number;\n inlineStyleCount: number;\n hardcodedColorCount: number;\n utilityLeakageCount: number;\n decantrTreatmentCount: number;\n hasPackManifest: boolean;\n hasDist: boolean;\n };\n}\n\nexport interface ShowcaseShortlistSummary {\n appCount: number;\n passedBuilds: number;\n failedBuilds: number;\n averageDurationMs: number;\n passedSmokes: number;\n failedSmokes: number;\n averageSmokeDurationMs: number;\n appsWithTitleOkCount: number;\n appsWithLangOkCount: number;\n appsWithViewportOkCount: number;\n appsWithCharsetOkCount: number;\n appsWithoutInlineScriptsCount: number;\n appsWithCspSignalCount: number;\n appsWithExternalScriptIntegrityCount: number;\n appsWithExternalScriptCrossoriginCount: number;\n appsWithExternalStylesheetIntegrityCount: number;\n appsWithExternalStylesheetCrossoriginCount: number;\n appsWithRouteCoverageCount: number;\n appsWithFullRouteCoverageCount: number;\n averageTotalAssetBytes: number;\n averageJsAssetBytes: number;\n averageCssAssetBytes: number;\n lowerDriftCount: number;\n moderateDriftCount: number;\n elevatedDriftCount: number;\n withPackManifestCount: number;\n}\n\nexport interface ShowcaseManifestEntry {\n slug: string;\n status: string;\n classification: string;\n origin?: string | null;\n target?: string | null;\n goldenCandidate?: string | boolean;\n notes?: string | null;\n url?: string | null;\n verification?: ShowcaseVerificationEntry | null;\n}\n\nexport interface ShowcaseManifestResponse {\n total: number;\n shortlisted: number;\n apps: ShowcaseManifestEntry[];\n}\n\nexport interface ShowcaseShortlistResponse {\n generatedAt: string | null;\n summary: ShowcaseShortlistSummary | null;\n apps: ShowcaseManifestEntry[];\n}\n\nexport interface ShowcaseShortlistReport {\n $schema: string;\n generatedAt: string;\n dryRun: boolean;\n summary: ShowcaseShortlistSummary;\n results: ShowcaseVerificationEntry[];\n}\n\nexport interface HostedFileCritiqueRequest {\n essence: EssenceFile;\n code: string;\n filePath?: string;\n treatmentsCss?: string;\n}\n\nexport interface HostedDistSnapshot {\n indexHtml: string;\n assets?: Record<string, string>;\n}\n\nexport interface HostedSourceSnapshot {\n files: Record<string, string>;\n}\n\nexport interface HostedProjectAuditRequest {\n essence: EssenceFile;\n dist?: HostedDistSnapshot;\n sources?: HostedSourceSnapshot;\n}\n\nexport type ExecutionPackType = 'scaffold' | 'section' | 'page' | 'mutation' | 'review';\n\nexport interface ExecutionPackTarget {\n platform: 'web';\n framework: string | null;\n runtime: string | null;\n adapter: string;\n}\n\nexport interface ExecutionPackScope {\n appId: string;\n pageIds: string[];\n patternIds: string[];\n}\n\nexport interface ExecutionPackExample {\n id: string;\n label: string;\n language: string;\n snippet: string;\n}\n\nexport interface ExecutionPackAntiPattern {\n id: string;\n summary: string;\n guidance: string;\n}\n\nexport interface ExecutionPackSuccessCheck {\n id: string;\n label: string;\n severity: 'error' | 'warn' | 'info';\n}\n\nexport interface ExecutionPackTokenBudget {\n target: number;\n max: number;\n strategy: string[];\n}\n\nexport interface ExecutionPackBase<TData = Record<string, unknown>> {\n $schema: string;\n packVersion: '1.0.0';\n packType: ExecutionPackType;\n objective: string;\n target: ExecutionPackTarget;\n preset: string | null;\n scope: ExecutionPackScope;\n requiredSetup: string[];\n allowedVocabulary: string[];\n examples: ExecutionPackExample[];\n antiPatterns: ExecutionPackAntiPattern[];\n successChecks: ExecutionPackSuccessCheck[];\n tokenBudget: ExecutionPackTokenBudget;\n data: TData;\n renderedMarkdown: string;\n}\n\nexport interface PackManifestEntry {\n id: string;\n markdown: string;\n json: string;\n}\n\nexport interface PackManifestSectionEntry extends PackManifestEntry {\n pageIds: string[];\n}\n\nexport interface PackManifestPageEntry extends PackManifestEntry {\n sectionId: string | null;\n sectionRole: string | null;\n}\n\nexport interface PackManifestMutationEntry extends PackManifestEntry {\n mutationType: 'add-page' | 'modify';\n}\n\nexport interface ExecutionPackManifest {\n $schema: string;\n version: '1.0.0';\n generatedAt: string;\n scaffold: PackManifestEntry | null;\n review: PackManifestEntry | null;\n sections: PackManifestSectionEntry[];\n pages: PackManifestPageEntry[];\n mutations: PackManifestMutationEntry[];\n}\n\nexport interface ScaffoldExecutionPack\n extends ExecutionPackBase<{\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n }> {\n packType: 'scaffold';\n}\n\nexport interface ReviewExecutionPack\n extends ExecutionPackBase<{\n reviewType: 'app';\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n focusAreas: string[];\n workflow: string[];\n }> {\n packType: 'review';\n}\n\nexport interface SectionExecutionPack\n extends ExecutionPackBase<{\n sectionId: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n }> {\n packType: 'section';\n}\n\nexport interface PageExecutionPack\n extends ExecutionPackBase<{\n pageId: string;\n path: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n surface: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n wiringSignals: string[];\n patterns: Array<{\n id: string;\n alias: string;\n preset: string;\n layout: string;\n }>;\n }> {\n packType: 'page';\n}\n\nexport interface MutationExecutionPack\n extends ExecutionPackBase<{\n mutationType: 'add-page' | 'modify';\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n workflow: string[];\n }> {\n packType: 'mutation';\n}\n\nexport interface ExecutionPackBundleResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n scaffold: ScaffoldExecutionPack;\n review: ReviewExecutionPack;\n sections: SectionExecutionPack[];\n pages: PageExecutionPack[];\n mutations: MutationExecutionPack[];\n}\n\nexport interface HostedSelectedExecutionPackRequest {\n essence: EssenceFile;\n pack_type: ExecutionPackType;\n id?: string;\n}\n\nexport interface SelectedExecutionPackResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n selector: {\n packType: ExecutionPackType;\n id: string | null;\n };\n pack:\n | ScaffoldExecutionPack\n | ReviewExecutionPack\n | SectionExecutionPack\n | PageExecutionPack\n | MutationExecutionPack;\n}\n\nexport type VerificationSeverity = 'error' | 'warn' | 'info';\n\nexport interface VerificationFinding {\n id: string;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n file?: string;\n rule?: string;\n suggestedFix?: string;\n}\n\nexport interface VerificationScore {\n category: string;\n focusArea: string;\n score: number;\n details: string;\n suggestions: string[];\n}\n\nexport interface FileCritiqueReport {\n $schema: string;\n file: string;\n overall: number;\n scores: VerificationScore[];\n findings: VerificationFinding[];\n focusAreas: string[];\n reviewPack: ReviewExecutionPack | null;\n}\n\nexport interface ProjectAuditRuntimeAudit {\n distPresent: boolean;\n indexPresent: boolean;\n checked: boolean;\n passed: boolean | null;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsHardenedCount: number;\n routeDocumentsCoverageOk: boolean;\n routeDocumentsHardeningOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n}\n\nexport interface ProjectAuditSummary {\n errorCount: number;\n warnCount: number;\n infoCount: number;\n essenceVersion: string | null;\n reviewPackPresent: boolean;\n packManifestPresent: boolean;\n runtimeAuditChecked: boolean;\n runtimePassed: boolean | null;\n pageCount: number;\n}\n\nexport interface ProjectAuditReport {\n $schema: string;\n projectRoot: string;\n valid: boolean;\n essence: EssenceFile | null;\n reviewPack: ReviewExecutionPack | null;\n packManifest: ExecutionPackManifest | null;\n runtimeAudit: ProjectAuditRuntimeAudit;\n findings: VerificationFinding[];\n summary: ProjectAuditSummary;\n}\n"],"mappings":";AAmQO,IAAM,gBAAgB,CAAC,WAAW,SAAS,aAAa,aAAa,OAAO;AAI5E,IAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,mCAAwE;AAAA,EACnF,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AACT;AAEO,IAAM,mCAAwE;AAAA,EACnF,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,QAAQ;AACV;AAEO,SAAS,cAAc,OAAqC;AACjE,SAAO,cAAc,SAAS,KAAoB;AACpD;AAEO,SAAS,iBAAiB,OAAwC;AACvE,SAAO,kBAAkB,SAAS,KAAuB;AAC3D;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { EssenceFile } from '@decantr/essence-spec';\n\n// --- Pattern ---\nexport interface PatternLayoutSpec {\n layout: string;\n atoms: string;\n slots?: Record<string, string>;\n}\n\nexport interface PatternCodeSpec {\n imports?: string;\n example?: string;\n}\n\nexport interface PatternPreset {\n description: string;\n components?: string[];\n layout: PatternLayoutSpec;\n code?: PatternCodeSpec;\n}\n\nexport interface PatternIO {\n produces?: string[];\n consumes?: string[];\n actions?: string[];\n}\n\nexport interface Pattern {\n id: string;\n version: string;\n name: string;\n description: string;\n tags: string[];\n components: string[];\n default_preset: string;\n presets: Record<string, PatternPreset>;\n contained?: boolean;\n io?: PatternIO;\n code?: PatternCodeSpec;\n default_layout?: PatternLayoutSpec;\n visual_brief?: string;\n composition?: Record<string, string>;\n motion?: {\n micro?: Record<string, string>;\n transitions?: Record<string, string>;\n ambient?: Record<string, string>;\n };\n /**\n * v2.1 Tier C1. Declared runtime interactions this pattern MUST implement.\n * Surfaced as a checkbox checklist in the per-page execution pack; enforced\n * by `decantr check --strict` (C5 guard rule). Each value maps to a\n * canonical implementation (treatment class + handler pattern) — see the\n * Interaction Requirements table in scaffolded DECANTR.md. Before this\n * field, motion/interactivity lived only as prose philosophy that cold\n * LLMs routinely categorized as \"nice to have\" and skipped.\n */\n interactions?: string[];\n responsive?: {\n mobile?: string;\n tablet?: string;\n desktop?: string;\n };\n accessibility?: {\n role?: string;\n 'aria-label'?: string;\n keyboard?: string[];\n announcements?: string[];\n focus_management?: string;\n };\n layout_hints?: Record<string, string>;\n category?: string;\n}\n\n// --- Archetype ---\nexport type ArchetypeRole = 'primary' | 'gateway' | 'public' | 'auxiliary';\n\nexport interface PatternReferenceObject {\n pattern: string;\n preset?: string;\n as?: string;\n}\n\nexport type PatternReference = string | PatternReferenceObject;\n\nexport interface LayoutGroup {\n cols: PatternReference[];\n at?: string;\n span?: Record<string, number>;\n}\n\nexport type LayoutItem = PatternReference | LayoutGroup;\n\nexport interface ContentDependencies {\n [kind: string]: Record<string, string>;\n}\n\nexport interface ArchetypePage {\n id: string;\n default_layout: LayoutItem[];\n shell: string;\n description?: string;\n patterns?: PatternReference[];\n}\n\nexport interface SeoHints {\n schema_org?: string[];\n meta_priorities?: string[];\n}\n\nexport interface ArchetypeSuggestedTheme {\n ids?: string[];\n modes?: string[];\n shapes?: string[];\n}\n\nexport interface ArchetypeHeroCustomization {\n style?: string;\n elements?: string[];\n background?: string;\n [key: string]: unknown;\n}\n\nexport interface Archetype {\n $schema?: string;\n id: string;\n version: string;\n decantr_compat?: string;\n name: string;\n description: string;\n tags: string[];\n role: ArchetypeRole;\n pages: ArchetypePage[];\n features: string[];\n dependencies?: ContentDependencies;\n seo_hints?: SeoHints;\n classification?: {\n triggers: { primary: string[]; secondary: string[]; negative: string[] };\n implies: string[];\n weight: number;\n tier: string;\n };\n page_briefs?: Record<string, string>;\n suggested_theme?: ArchetypeSuggestedTheme;\n shells?: Record<string, string>;\n personality?: string[];\n hero_customization?: ArchetypeHeroCustomization;\n}\n\n// --- Theme substructures (absorbed from former Recipe type) ---\nexport interface ThemeSpatial {\n density_bias: number;\n content_gap_shift: number;\n section_padding: string;\n card_wrapping: 'always' | 'minimal' | 'none';\n surface_override: string | null;\n}\n\nexport interface ThemeEffects {\n enabled: boolean;\n intensity: 'subtle' | 'moderate' | 'bold';\n type_mapping: Record<string, string[]>;\n component_fallback: Record<string, string>;\n intensity_values?: Record<string, Record<string, string>>;\n}\n\nexport interface ThemeShell {\n preferred: string[];\n nav_style: string;\n root?: string;\n nav?: string;\n header?: string;\n dimensions?: { navWidth?: string; headerHeight?: string };\n}\n\n// --- Blueprint ---\nexport type ComposeEntry = string | { archetype: string; prefix: string; role?: ArchetypeRole };\n\nexport interface BlueprintRoute {\n shell?: string;\n archetype?: string;\n page?: string;\n}\n\nexport interface BlueprintNavigationHotkey {\n key: string;\n route?: string;\n label?: string;\n}\n\nexport interface BlueprintNavigation {\n command_palette?: boolean;\n hotkeys?: BlueprintNavigationHotkey[];\n}\n\nexport interface BlueprintOverrides {\n features_add?: string[];\n features_remove?: string[];\n pages_remove?: string[];\n pages?: Record<string, Record<string, unknown>>;\n}\n\nexport interface Blueprint {\n $schema?: string;\n id: string;\n version?: string;\n decantr_compat?: string;\n name: string;\n description?: string;\n tags?: string[];\n archetype?: string;\n compose?: ComposeEntry[];\n theme: { id: string; mode?: string; shape?: string };\n personality?: string | string[];\n features?: string[];\n routes?: Record<string, BlueprintRoute>;\n overrides?: BlueprintOverrides;\n seo_hints?: SeoHints;\n navigation?: BlueprintNavigation;\n dependencies?: ContentDependencies;\n suggested_themes?: string[];\n design_constraints?: Record<string, unknown>;\n voice?: {\n tone?: string;\n cta_verbs?: string[];\n avoid?: string[];\n empty_states?: string;\n errors?: string;\n loading?: string;\n metrics_format?: string;\n };\n responsive_strategy?: {\n breakpoints?: string[];\n navigation?: Record<string, string>;\n data_display?: Record<string, string>;\n };\n}\n\n// --- Shell ---\nexport interface Shell {\n id: string;\n name: string;\n description?: string;\n root?: string;\n nav?: string;\n header?: string;\n nav_style?: string;\n dimensions?: {\n navWidth?: string;\n headerHeight?: string;\n };\n internal_layout?: Record<string, unknown>;\n layout?: string;\n atoms?: string;\n config?: Record<string, unknown>;\n guidance?: Record<string, string>;\n code?: { imports?: string; example?: string };\n}\n\n// --- Content Resolution ---\nexport const CONTENT_TYPES = ['pattern', 'theme', 'blueprint', 'archetype', 'shell'] as const;\n\nexport type ContentType = (typeof CONTENT_TYPES)[number];\n\nexport const API_CONTENT_TYPES = [\n 'patterns',\n 'themes',\n 'blueprints',\n 'archetypes',\n 'shells',\n] as const;\n\nexport type ApiContentType = (typeof API_CONTENT_TYPES)[number];\n\nexport const CONTENT_TYPE_TO_API_CONTENT_TYPE: Record<ContentType, ApiContentType> = {\n pattern: 'patterns',\n theme: 'themes',\n blueprint: 'blueprints',\n archetype: 'archetypes',\n shell: 'shells',\n};\n\nexport const API_CONTENT_TYPE_TO_CONTENT_TYPE: Record<ApiContentType, ContentType> = {\n patterns: 'pattern',\n themes: 'theme',\n blueprints: 'blueprint',\n archetypes: 'archetype',\n shells: 'shell',\n};\n\nexport function isContentType(value: string): value is ContentType {\n return CONTENT_TYPES.includes(value as ContentType);\n}\n\nexport function isApiContentType(value: string): value is ApiContentType {\n return API_CONTENT_TYPES.includes(value as ApiContentType);\n}\n\nexport interface ResolvedContent<T> {\n item: T;\n source: 'local' | 'core';\n path: string;\n}\n\n// --- Content Health ---\n\nexport type ContentHealthStatus = 'healthy' | 'warning' | 'error';\nexport type ContentHealthFindingSource =\n | 'schema'\n | 'reference'\n | 'quality'\n | 'coverage'\n | 'content';\n\nexport interface ContentHealthRemediation {\n summary: string;\n prompt: string;\n commands: string[];\n}\n\nexport interface ContentHealthFinding {\n id: string;\n source: ContentHealthFindingSource;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n file?: string;\n type?: ContentType;\n itemId?: string;\n rule?: string;\n suggestedFix?: string;\n remediation: ContentHealthRemediation;\n}\n\nexport interface ContentHealthTypeSummary {\n type: ContentType;\n directory: ApiContentType;\n itemCount: number;\n validCount: number;\n errorCount: number;\n warnCount: number;\n infoCount: number;\n ignoredCount: number;\n}\n\nexport interface ContentHealthReferenceSummary {\n checked: number;\n missing: number;\n missingByType: Record<ContentType, number>;\n}\n\nexport interface ContentHealthQualitySummary {\n patternVisualBriefCoverage: number;\n patternInteractionCoverage: number;\n themeDecoratorCoverage: number;\n blueprintPersonalityCoverage: number;\n blueprintVoiceCoverage: number;\n archetypePageBriefCoverage: number;\n}\n\nexport interface ContentHealthReport {\n $schema: string;\n generatedAt: string;\n contentRoot: string;\n status: ContentHealthStatus;\n score: number;\n summary: {\n itemCount: number;\n validCount: number;\n errorCount: number;\n warnCount: number;\n infoCount: number;\n findingCount: number;\n ignoredCount: number;\n contentDirectoryCount: number;\n };\n content: ContentHealthTypeSummary[];\n references: ContentHealthReferenceSummary;\n quality: ContentHealthQualitySummary;\n ci: {\n recommendedCommand: string;\n failOn: 'error' | 'warn' | 'none';\n };\n findings: ContentHealthFinding[];\n}\n\n// --- Theme ---\n\nexport type CvdMode = 'deuteranopia' | 'protanopia' | 'tritanopia' | 'achromatopsia';\n\nexport interface ThemeTokens {\n base?: Record<string, string>;\n cvd?: Partial<Record<CvdMode, Record<string, string>>>;\n}\n\nexport interface Theme {\n id: string;\n name: string;\n description?: string;\n tags?: string[];\n personality?: string;\n seed?: Record<string, string>;\n palette?: Record<string, Record<string, string>>;\n modes?: string[];\n shapes?: string[];\n cvd_support?: CvdMode[];\n tokens?: ThemeTokens;\n decantr_compat?: string;\n source?: string;\n // Absorbed from former Recipe type\n decorators?: Record<string, string>;\n treatments?: Record<string, Record<string, string>>;\n spatial?: ThemeSpatial;\n shell?: ThemeShell;\n effects?: ThemeEffects;\n motion?: {\n preference?: string;\n reduce_motion?: boolean;\n entrance?: string;\n timing?: string;\n durations?: Record<string, string>;\n };\n typography?: { scale?: string; heading_weight?: number; body_weight?: number; mono?: string };\n radius?: { philosophy?: string; base?: number };\n compositions?: Record<string, { shell: string; description: string; effects?: string[] }>;\n pattern_preferences?: {\n prefer: string[];\n avoid: string[];\n default_presets?: Record<string, string>;\n };\n decorator_definitions?: Record<\n string,\n {\n description: string;\n intent: string;\n suggested_properties?: Record<string, string>;\n pairs_with?: string[];\n usage?: string[];\n }\n >;\n}\n\n// --- API Client Types ---\n\nexport interface ContentListResponse<T = Record<string, unknown>> {\n items: T[];\n total: number;\n limit?: number;\n offset?: number;\n}\n\nexport type ContentVerificationStatus =\n | 'unknown'\n | 'pending'\n | 'build-green'\n | 'build-red'\n | 'smoke-green'\n | 'smoke-red';\n\nexport type ContentBenchmarkConfidence = 'none' | 'low' | 'medium' | 'high';\nexport type ContentConfidenceTier = 'low' | 'medium' | 'high' | 'verified';\n\nexport type ContentGoldenUsage = 'none' | 'showcase' | 'shortlisted';\nexport const PUBLIC_CONTENT_SOURCES = ['official', 'community', 'organization'] as const;\n\nexport type PublicContentSource = (typeof PUBLIC_CONTENT_SOURCES)[number];\n\nexport function isPublicContentSource(value: string): value is PublicContentSource {\n return PUBLIC_CONTENT_SOURCES.includes(value as PublicContentSource);\n}\n\nexport const CONTENT_INTELLIGENCE_SOURCES = ['authored', 'benchmark', 'hybrid'] as const;\n\nexport type ContentIntelligenceSource = 'authored' | 'benchmark' | 'hybrid';\n\nexport function isContentIntelligenceSource(value: string): value is ContentIntelligenceSource {\n return CONTENT_INTELLIGENCE_SOURCES.includes(value as ContentIntelligenceSource);\n}\n\nexport interface ContentIntelligenceMetadata {\n source: ContentIntelligenceSource;\n verification_status: ContentVerificationStatus;\n last_verified_at?: string | null;\n target_coverage: string[];\n benchmark_confidence: ContentBenchmarkConfidence;\n confidence_tier: ContentConfidenceTier;\n golden_usage: ContentGoldenUsage;\n quality_score: number | null;\n confidence_score: number | null;\n recommended: boolean;\n evidence: string[];\n recommendation_reasons: string[];\n recommendation_blockers: string[];\n benchmark?: {\n classification?: ShowcaseVerificationEntry['classification'];\n target?: string | null;\n drift_signal?: ShowcaseVerificationEntry['drift']['signal'];\n build_passed?: boolean | null;\n smoke_passed?: boolean | null;\n };\n}\n\nexport interface PublicContentSummary {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n version?: string;\n name?: string;\n description?: string;\n published_at?: string;\n owner_name?: string | null;\n owner_username?: string | null;\n thumbnail_url?: string | null;\n intelligence?: ContentIntelligenceMetadata | null;\n}\n\nexport interface PublicContentRecord<TData = Record<string, unknown>> {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n version: string;\n data: TData;\n visibility: 'public' | 'private';\n status: 'pending' | 'approved' | 'rejected' | 'published';\n created_at: string;\n updated_at: string;\n published_at?: string;\n owner_name?: string | null;\n owner_username?: string | null;\n thumbnail_url?: string | null;\n intelligence?: ContentIntelligenceMetadata | null;\n}\n\nexport interface ContentItem extends PublicContentRecord<Record<string, unknown>> {}\n\nexport interface OwnedContentSummary extends PublicContentSummary {\n visibility: 'public' | 'private';\n status: 'pending' | 'approved' | 'rejected' | 'published';\n created_at: string;\n updated_at: string;\n}\n\nexport interface PublicUserProfile {\n username: string;\n display_name: string | null;\n reputation_score: number;\n tier: 'free' | 'pro' | 'team' | 'enterprise';\n created_at: string;\n content_count: number;\n content_counts: Record<string, number>;\n}\n\nexport interface PublishPayload {\n type: ApiContentType;\n slug: string;\n namespace: string;\n version: string;\n data: Record<string, unknown>;\n visibility?: 'public' | 'private';\n}\n\nexport interface PublishResponse {\n id: string;\n slug: string;\n namespace: string;\n type: string;\n status: string;\n}\n\nexport interface SearchParams {\n q: string;\n type?: string;\n namespace?: string;\n source?: PublicContentSource;\n sort?: string;\n recommended?: boolean;\n intelligenceSource?: ContentIntelligenceSource;\n limit?: number;\n offset?: number;\n}\n\nexport interface SearchResponse {\n results: PublicContentSummary[];\n total: number;\n limit?: number;\n offset?: number;\n}\n\nexport interface RegistryIntelligenceSummaryBucket {\n total_public_items: number;\n with_intelligence: number;\n recommended: number;\n authored: number;\n benchmark: number;\n hybrid: number;\n missing_source: number;\n smoke_green: number;\n build_green: number;\n high_confidence: number;\n verified_confidence: number;\n}\n\nexport interface RegistryIntelligenceSummaryResponse {\n $schema: string;\n generated_at: string;\n namespace: string | null;\n totals: RegistryIntelligenceSummaryBucket;\n by_type: Record<ContentType, RegistryIntelligenceSummaryBucket>;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n tier: 'free' | 'pro' | 'team' | 'enterprise';\n reputation_score: number;\n trusted: boolean;\n}\n\nexport interface ShowcaseVerificationEntry {\n slug: string;\n target: string | null;\n classification: 'pending' | 'A' | 'B' | 'C' | 'D';\n verificationStatus: 'pending' | 'build-green' | 'build-red' | 'smoke-green' | 'smoke-red';\n build: {\n passed: boolean | null;\n durationMs: number;\n };\n smoke: {\n passed: boolean | null;\n durationMs: number;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsHardenedCount: number;\n routeDocumentsCoverageOk: boolean;\n routeDocumentsHardeningOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n };\n drift: {\n signal: 'lower' | 'moderate' | 'elevated';\n penalty: number;\n inlineStyleCount: number;\n hardcodedColorCount: number;\n utilityLeakageCount: number;\n decantrTreatmentCount: number;\n hasPackManifest: boolean;\n hasDist: boolean;\n };\n}\n\nexport interface ShowcaseShortlistSummary {\n appCount: number;\n passedBuilds: number;\n failedBuilds: number;\n averageDurationMs: number;\n passedSmokes: number;\n failedSmokes: number;\n averageSmokeDurationMs: number;\n appsWithTitleOkCount: number;\n appsWithLangOkCount: number;\n appsWithViewportOkCount: number;\n appsWithCharsetOkCount: number;\n appsWithoutInlineScriptsCount: number;\n appsWithCspSignalCount: number;\n appsWithExternalScriptIntegrityCount: number;\n appsWithExternalScriptCrossoriginCount: number;\n appsWithExternalStylesheetIntegrityCount: number;\n appsWithExternalStylesheetCrossoriginCount: number;\n appsWithRouteCoverageCount: number;\n appsWithFullRouteCoverageCount: number;\n averageTotalAssetBytes: number;\n averageJsAssetBytes: number;\n averageCssAssetBytes: number;\n lowerDriftCount: number;\n moderateDriftCount: number;\n elevatedDriftCount: number;\n withPackManifestCount: number;\n}\n\nexport interface ShowcaseManifestEntry {\n slug: string;\n status: string;\n classification: string;\n origin?: string | null;\n target?: string | null;\n goldenCandidate?: string | boolean;\n notes?: string | null;\n thumbnail?: {\n src: string;\n alt: string;\n width?: number;\n height?: number;\n } | null;\n url?: string | null;\n verification?: ShowcaseVerificationEntry | null;\n}\n\nexport interface ShowcaseManifestResponse {\n total: number;\n shortlisted: number;\n apps: ShowcaseManifestEntry[];\n}\n\nexport interface ShowcaseShortlistResponse {\n generatedAt: string | null;\n summary: ShowcaseShortlistSummary | null;\n apps: ShowcaseManifestEntry[];\n}\n\nexport interface ShowcaseShortlistReport {\n $schema: string;\n generatedAt: string;\n dryRun: boolean;\n summary: ShowcaseShortlistSummary;\n results: ShowcaseVerificationEntry[];\n}\n\nexport interface HostedFileCritiqueRequest {\n essence: EssenceFile;\n code: string;\n filePath?: string;\n treatmentsCss?: string;\n}\n\nexport interface HostedDistSnapshot {\n indexHtml: string;\n assets?: Record<string, string>;\n}\n\nexport interface HostedSourceSnapshot {\n files: Record<string, string>;\n}\n\nexport interface HostedProjectAuditRequest {\n essence: EssenceFile;\n dist?: HostedDistSnapshot;\n sources?: HostedSourceSnapshot;\n}\n\nexport type ExecutionPackType = 'scaffold' | 'section' | 'page' | 'mutation' | 'review';\n\nexport interface ExecutionPackTarget {\n platform: 'web';\n framework: string | null;\n runtime: string | null;\n adapter: string;\n}\n\nexport interface ExecutionPackScope {\n appId: string;\n pageIds: string[];\n patternIds: string[];\n}\n\nexport interface ExecutionPackExample {\n id: string;\n label: string;\n language: string;\n snippet: string;\n}\n\nexport interface ExecutionPackAntiPattern {\n id: string;\n summary: string;\n guidance: string;\n}\n\nexport interface ExecutionPackSuccessCheck {\n id: string;\n label: string;\n severity: 'error' | 'warn' | 'info';\n}\n\nexport interface ExecutionPackTokenBudget {\n target: number;\n max: number;\n strategy: string[];\n}\n\nexport interface ExecutionPackBase<TData = Record<string, unknown>> {\n $schema: string;\n packVersion: '1.0.0';\n packType: ExecutionPackType;\n objective: string;\n target: ExecutionPackTarget;\n preset: string | null;\n scope: ExecutionPackScope;\n requiredSetup: string[];\n allowedVocabulary: string[];\n examples: ExecutionPackExample[];\n antiPatterns: ExecutionPackAntiPattern[];\n successChecks: ExecutionPackSuccessCheck[];\n tokenBudget: ExecutionPackTokenBudget;\n data: TData;\n renderedMarkdown: string;\n}\n\nexport interface PackManifestEntry {\n id: string;\n markdown: string;\n json: string;\n}\n\nexport interface PackManifestSectionEntry extends PackManifestEntry {\n pageIds: string[];\n}\n\nexport interface PackManifestPageEntry extends PackManifestEntry {\n sectionId: string | null;\n sectionRole: string | null;\n}\n\nexport interface PackManifestMutationEntry extends PackManifestEntry {\n mutationType: 'add-page' | 'modify';\n}\n\nexport interface ExecutionPackManifest {\n $schema: string;\n version: '1.0.0';\n generatedAt: string;\n scaffold: PackManifestEntry | null;\n review: PackManifestEntry | null;\n sections: PackManifestSectionEntry[];\n pages: PackManifestPageEntry[];\n mutations: PackManifestMutationEntry[];\n}\n\nexport interface ScaffoldExecutionPack\n extends ExecutionPackBase<{\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n }> {\n packType: 'scaffold';\n}\n\nexport interface ReviewExecutionPack\n extends ExecutionPackBase<{\n reviewType: 'app';\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n focusAreas: string[];\n workflow: string[];\n }> {\n packType: 'review';\n}\n\nexport interface SectionExecutionPack\n extends ExecutionPackBase<{\n sectionId: string;\n role: string;\n shell: string;\n description: string;\n features: string[];\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n }> {\n packType: 'section';\n}\n\nexport interface PageExecutionPack\n extends ExecutionPackBase<{\n pageId: string;\n path: string;\n shell: string;\n sectionId: string | null;\n sectionRole: string | null;\n features: string[];\n surface: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n wiringSignals: string[];\n patterns: Array<{\n id: string;\n alias: string;\n preset: string;\n layout: string;\n }>;\n }> {\n packType: 'page';\n}\n\nexport interface MutationExecutionPack\n extends ExecutionPackBase<{\n mutationType: 'add-page' | 'modify';\n shell: string;\n theme: {\n id: string;\n mode: string;\n shape: string | null;\n };\n routing: 'hash' | 'history' | 'pathname';\n features: string[];\n routes: Array<{\n pageId: string;\n path: string;\n shell?: string;\n patternIds: string[];\n }>;\n workflow: string[];\n }> {\n packType: 'mutation';\n}\n\nexport interface ExecutionPackBundleResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n scaffold: ScaffoldExecutionPack;\n review: ReviewExecutionPack;\n sections: SectionExecutionPack[];\n pages: PageExecutionPack[];\n mutations: MutationExecutionPack[];\n}\n\nexport interface HostedSelectedExecutionPackRequest {\n essence: EssenceFile;\n pack_type: ExecutionPackType;\n id?: string;\n}\n\nexport interface SelectedExecutionPackResponse {\n $schema: string;\n generatedAt: string;\n sourceEssenceVersion: string;\n manifest: ExecutionPackManifest;\n selector: {\n packType: ExecutionPackType;\n id: string | null;\n };\n pack:\n | ScaffoldExecutionPack\n | ReviewExecutionPack\n | SectionExecutionPack\n | PageExecutionPack\n | MutationExecutionPack;\n}\n\nexport type VerificationSeverity = 'error' | 'warn' | 'info';\n\nexport interface VerificationFinding {\n id: string;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n file?: string;\n rule?: string;\n suggestedFix?: string;\n}\n\nexport interface VerificationScore {\n category: string;\n focusArea: string;\n score: number;\n details: string;\n suggestions: string[];\n}\n\nexport interface FileCritiqueReport {\n $schema: string;\n file: string;\n overall: number;\n scores: VerificationScore[];\n findings: VerificationFinding[];\n focusAreas: string[];\n reviewPack: ReviewExecutionPack | null;\n}\n\nexport interface ProjectAuditRuntimeAudit {\n distPresent: boolean;\n indexPresent: boolean;\n checked: boolean;\n passed: boolean | null;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsHardenedCount: number;\n routeDocumentsCoverageOk: boolean;\n routeDocumentsHardeningOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n}\n\nexport interface ProjectAuditSummary {\n errorCount: number;\n warnCount: number;\n infoCount: number;\n essenceVersion: string | null;\n reviewPackPresent: boolean;\n packManifestPresent: boolean;\n runtimeAuditChecked: boolean;\n runtimePassed: boolean | null;\n pageCount: number;\n}\n\nexport interface ProjectAuditReport {\n $schema: string;\n projectRoot: string;\n valid: boolean;\n essence: EssenceFile | null;\n reviewPack: ReviewExecutionPack | null;\n packManifest: ExecutionPackManifest | null;\n runtimeAudit: ProjectAuditRuntimeAudit;\n findings: VerificationFinding[];\n summary: ProjectAuditSummary;\n}\n"],"mappings":";AAmQO,IAAM,gBAAgB,CAAC,WAAW,SAAS,aAAa,aAAa,OAAO;AAI5E,IAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,mCAAwE;AAAA,EACnF,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AACT;AAEO,IAAM,mCAAwE;AAAA,EACnF,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,QAAQ;AACV;AAEO,SAAS,cAAc,OAAqC;AACjE,SAAO,cAAc,SAAS,KAAoB;AACpD;AAEO,SAAS,iBAAiB,OAAwC;AACvE,SAAO,kBAAkB,SAAS,KAAuB;AAC3D;","names":[]}
|