@decantr/registry 3.1.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,9 +1,11 @@
1
1
  # @decantr/registry
2
2
 
3
- Support status: `core-supported`
3
+ Support status: `supported-secondary`
4
4
  Release channel: `stable`
5
5
 
6
- Certified vocabulary contracts, schemas, API client, ranking helpers, and content utilities for Decantr.
6
+ Legacy Decantr 3.x compatibility package for content contracts, schemas, API client naming, ranking helpers, and resolver utilities.
7
+
8
+ Prefer `@decantr/content` for new official corpus integrations. Keep `@decantr/registry` when existing scripts or MCP/directory-compatible code still use registry naming.
7
9
 
8
10
  ## Install
9
11
 
@@ -15,12 +17,13 @@ npm install @decantr/registry
15
17
 
16
18
  - strong types for patterns, themes, starter-kit blueprints, archetypes, shells, and intelligence metadata
17
19
  - `ContentHealthReport` types for vocabulary supply-chain health artifacts
18
- - `RegistryAPIClient` for server-side and tool-side registry access
20
+ - `RegistryAPIClient` for server-side and tool-side content API access
19
21
  - `@decantr/registry/client` for web-safe API usage
20
22
  - public schema exports for vocabulary content, content health, and summary responses
21
23
  - ranking and sorting helpers for public vocabulary content
22
24
  - Brownfield-aware pattern discovery helpers: `patternToDiscoveryCandidate()`, `scorePatternCandidate()`, and `rankPatternCandidates()`
23
- - blueprint portfolio metadata helpers for public `All`, `Featured`, `Certified`, and `Labs` registry cuts
25
+ - blueprint portfolio metadata helpers for public `All`, `Featured`, `Certified`, and `Labs` corpus cuts
26
+ - `createCorpusResolver()`, `searchCorpusContent()`, `listCorpusRecords()`, and related helpers re-exported from `@decantr/content`
24
27
 
25
28
  ## Example
26
29
 
@@ -59,26 +62,26 @@ const matches = rankPatternCandidates(
59
62
 
60
63
  ## Related Schemas
61
64
 
62
- 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`.
65
+ This package keeps the legacy canonical schema paths under `@decantr/registry/schema/*`, including `content-health-report.v1.json` for local content reports emitted by `decantr content-health`. New corpus integrations should prefer `@decantr/content/schemas/*`.
63
66
 
64
67
  Blueprint records can include `blueprint_portfolio` metadata. List/search summaries expose that metadata so clients can show public-facing blueprint sets without leaking internal maturity labels:
65
68
 
66
- - `all` — supported public starter-kit blueprints, excluding Labs and folded slugs by default
69
+ - `all` — supported official blueprints, excluding Labs and folded slugs by default
67
70
  - `featured` — curated default discovery picks
68
- - `certified` — starter kits with certified artifact metadata
71
+ - `certified` — blueprints with certified artifact metadata
69
72
  - `labs` — opt-in experimental directions
70
73
 
71
74
  ## Compatibility
72
75
 
73
- `@decantr/registry` is part of the stable public Decantr package surface in the `2.x` line.
76
+ `@decantr/registry` is maintained as a Decantr 3 compatibility package.
74
77
 
75
- - exported schema paths and documented client entrypoints are expected to remain stable across `1.x`
78
+ - exported schema paths and documented client entrypoints are expected to remain stable across compatible releases
76
79
  - additive response fields may be introduced without breaking the stable contract
77
80
  - breaking client, schema, or path changes require a major version
78
81
 
79
82
  ## Security And Permissions
80
83
 
81
- `@decantr/registry` provides registry schemas, content utilities, and API clients. It may read explicit local registry JSON files when resolver helpers are used, and it may call the configured Decantr API base URL when client methods are invoked. It does not write files, spawn processes, emit telemetry, or upload source by itself. See [security permissions](https://decantr.ai/reference/security-permissions.md).
84
+ `@decantr/registry` provides legacy schema paths, content utilities, and API clients. It may read explicit local content JSON files when resolver helpers are used, and it may call the configured Decantr API base URL when client methods are invoked. It does not write files, spawn processes, emit telemetry, or upload source by itself. See [security permissions](https://decantr.ai/reference/security-permissions.md).
82
85
 
83
86
  ## License
84
87
 
package/dist/client.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { EssenceFile } from '@decantr/essence-spec';
2
2
  import { e as ApiContentType, aC as SearchParams, U as ContentListResponse, as as PublicContentRecord, P as Pattern, A as Archetype, T as Theme, B as Blueprint, S as Shell, aD as SearchResponse, av as PublicUserProfile, au as PublicContentSummary, aP as UserProfile, aw as PublishPayload, ax as PublishResponse, ac as OwnedContentSummary, aG as ShowcaseManifestResponse, aI as ShowcaseShortlistResponse, aH as ShowcaseShortlistReport, az as RegistryIntelligenceSummaryResponse, Z as ExecutionPackBundleResponse, b0 as HostedSelectedExecutionPackRequest, b1 as SelectedExecutionPackResponse, $ as ExecutionPackManifest, a7 as HostedFileCritiqueRequest, a5 as FileCritiqueReport, a8 as HostedProjectAuditRequest, ao as ProjectAuditReport } from './content-types-202FZ5NY.js';
3
3
  export { c as API_CONTENT_TYPES, d as API_CONTENT_TYPE_TO_CONTENT_TYPE, j as BLUEPRINT_ARTIFACT_STATUSES, k as BLUEPRINT_PORTFOLIO_MATURITIES, l as BLUEPRINT_PORTFOLIO_VISIBILITIES, m as BlueprintArtifactStatus, q as BlueprintPortfolioArtifact, r as BlueprintPortfolioMaturity, s as BlueprintPortfolioMetadata, t as BlueprintPortfolioVisibility, v as CONTENT_INTELLIGENCE_SOURCES, w as CONTENT_TYPES, x as CONTENT_TYPE_TO_API_CONTENT_TYPE, z as ContentBenchmarkConfidence, E as ContentGoldenUsage, N as ContentIntelligenceMetadata, O as ContentIntelligenceSource, Q as ContentItem, V as ContentVerificationStatus, ad as PUBLIC_BLUEPRINT_SETS, ae as PUBLIC_CONTENT_SOURCES, ar as PublicBlueprintSet, at as PublicContentSource, ay as RegistryIntelligenceSummaryBucket, aF as ShowcaseManifestEntry, aJ as ShowcaseShortlistSummary, aK as ShowcaseVerificationEntry, aT as getBlueprintPortfolioMetadata, aU as isApiContentType, aV as isBlueprintArtifactStatus, aW as isBlueprintPortfolioMaturity, aX as isBlueprintPortfolioVisibility, aY as isContentIntelligenceSource, aZ as isContentType, a_ as isPublicBlueprintSet, a$ as isPublicContentSource } from './content-types-202FZ5NY.js';
4
+ export { buildContentIntelligenceSummary as buildCorpusIntelligenceSummary, createContentResolver as createCorpusResolver, getContentCatalog as getCorpusCatalog, getContentRecord as getCorpusRecord, listContentRecords as listCorpusRecords, resolveContent as resolveCorpusContent, searchContent as searchCorpusContent, validateOfficialCorpus } from '@decantr/content';
4
5
 
5
6
  interface RegistryAPIClientOptions {
6
7
  baseUrl?: string;
package/dist/client.js CHANGED
@@ -29,7 +29,7 @@ var RegistryAPIClient = class {
29
29
  cacheTtlMs;
30
30
  cache = /* @__PURE__ */ new Map();
31
31
  constructor(options = {}) {
32
- this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;
32
+ this.baseUrl = options.baseUrl ?? process.env.DECANTR_API_URL ?? process.env.REGISTRY_URL ?? DEFAULT_BASE_URL;
33
33
  this.apiKey = options.apiKey;
34
34
  this.accessToken = options.accessToken;
35
35
  this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
@@ -44,7 +44,7 @@ var RegistryAPIClient = class {
44
44
  headers["X-API-Key"] = this.apiKey;
45
45
  }
46
46
  if (this.accessToken) {
47
- headers["Authorization"] = `Bearer ${this.accessToken}`;
47
+ headers.Authorization = `Bearer ${this.accessToken}`;
48
48
  }
49
49
  return headers;
50
50
  }
@@ -358,6 +358,18 @@ function createRegistryClient(options = {}) {
358
358
  };
359
359
  }
360
360
 
361
+ // src/client.ts
362
+ import {
363
+ buildContentIntelligenceSummary,
364
+ createContentResolver,
365
+ getContentCatalog,
366
+ getContentRecord,
367
+ listContentRecords,
368
+ resolveContent,
369
+ searchContent,
370
+ validateOfficialCorpus
371
+ } from "@decantr/content";
372
+
361
373
  // src/types.ts
362
374
  var BLUEPRINT_PORTFOLIO_VISIBILITIES = ["featured", "public", "labs", "hidden"];
363
375
  var BLUEPRINT_PORTFOLIO_MATURITIES = [
@@ -573,9 +585,13 @@ export {
573
585
  PUBLIC_CONTENT_SOURCES,
574
586
  RegistryAPIClient,
575
587
  RegistryAPIError,
588
+ buildContentIntelligenceSummary as buildCorpusIntelligenceSummary,
576
589
  comparePublicContent,
590
+ createContentResolver as createCorpusResolver,
577
591
  createRegistryClient,
578
592
  getBlueprintPortfolioMetadata,
593
+ getContentCatalog as getCorpusCatalog,
594
+ getContentRecord as getCorpusRecord,
579
595
  isApiContentType,
580
596
  isBlueprintArtifactStatus,
581
597
  isBlueprintPortfolioMaturity,
@@ -584,7 +600,11 @@ export {
584
600
  isContentType,
585
601
  isPublicBlueprintSet,
586
602
  isPublicContentSource,
603
+ listContentRecords as listCorpusRecords,
587
604
  normalizePublicContentSort,
588
- sortPublicContent
605
+ resolveContent as resolveCorpusContent,
606
+ searchContent as searchCorpusContent,
607
+ sortPublicContent,
608
+ validateOfficialCorpus
589
609
  };
590
610
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api-client.ts","../src/types.ts","../src/ranking.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 blueprintSet?: SearchParams['blueprintSet'];\n labs?: boolean;\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?.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params?.labs) searchParams.set('labs', 'true');\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.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params.labs) searchParams.set('labs', 'true');\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 blueprintSet?: SearchParams['blueprintSet'];\n labs?: boolean;\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?.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params?.labs) searchParams.set('labs', 'true');\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.v4.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 { 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 * 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 const BLUEPRINT_PORTFOLIO_VISIBILITIES = ['featured', 'public', 'labs', 'hidden'] as const;\nexport type BlueprintPortfolioVisibility = (typeof BLUEPRINT_PORTFOLIO_VISIBILITIES)[number];\n\nexport const BLUEPRINT_PORTFOLIO_MATURITIES = [\n 'certified-flagship',\n 'supported-contract',\n 'experimental',\n 'fold-candidate',\n 'legacy-hidden',\n] as const;\nexport type BlueprintPortfolioMaturity = (typeof BLUEPRINT_PORTFOLIO_MATURITIES)[number];\n\nexport const BLUEPRINT_ARTIFACT_STATUSES = ['none', 'planned', 'candidate', 'certified'] as const;\nexport type BlueprintArtifactStatus = (typeof BLUEPRINT_ARTIFACT_STATUSES)[number];\n\nexport const PUBLIC_BLUEPRINT_SETS = ['all', 'featured', 'certified', 'labs'] as const;\nexport type PublicBlueprintSet = (typeof PUBLIC_BLUEPRINT_SETS)[number];\n\nexport interface BlueprintPortfolioArtifact {\n status: BlueprintArtifactStatus;\n showcase?: string;\n notes?: string;\n}\n\nexport interface BlueprintPortfolioMetadata {\n visibility: BlueprintPortfolioVisibility;\n maturity: BlueprintPortfolioMaturity;\n rationale: string;\n recommended_alternative?: string;\n artifact: BlueprintPortfolioArtifact;\n}\n\nexport function isBlueprintPortfolioVisibility(\n value: unknown,\n): value is BlueprintPortfolioVisibility {\n return BLUEPRINT_PORTFOLIO_VISIBILITIES.includes(value as BlueprintPortfolioVisibility);\n}\n\nexport function isBlueprintPortfolioMaturity(value: unknown): value is BlueprintPortfolioMaturity {\n return BLUEPRINT_PORTFOLIO_MATURITIES.includes(value as BlueprintPortfolioMaturity);\n}\n\nexport function isBlueprintArtifactStatus(value: unknown): value is BlueprintArtifactStatus {\n return BLUEPRINT_ARTIFACT_STATUSES.includes(value as BlueprintArtifactStatus);\n}\n\nexport function isPublicBlueprintSet(value: unknown): value is PublicBlueprintSet {\n return PUBLIC_BLUEPRINT_SETS.includes(value as PublicBlueprintSet);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function getBlueprintPortfolioMetadata(value: unknown): BlueprintPortfolioMetadata | null {\n const candidate =\n isRecord(value) && isRecord(value.blueprint_portfolio) ? value.blueprint_portfolio : value;\n if (!isRecord(candidate)) {\n return null;\n }\n\n const artifact = candidate.artifact;\n if (\n !isBlueprintPortfolioVisibility(candidate.visibility) ||\n !isBlueprintPortfolioMaturity(candidate.maturity) ||\n typeof candidate.rationale !== 'string' ||\n !isRecord(artifact) ||\n !isBlueprintArtifactStatus(artifact.status)\n ) {\n return null;\n }\n\n return {\n visibility: candidate.visibility,\n maturity: candidate.maturity,\n rationale: candidate.rationale,\n recommended_alternative:\n typeof candidate.recommended_alternative === 'string'\n ? candidate.recommended_alternative\n : undefined,\n artifact: {\n status: artifact.status,\n showcase: typeof artifact.showcase === 'string' ? artifact.showcase : undefined,\n notes: typeof artifact.notes === 'string' ? artifact.notes : undefined,\n },\n };\n}\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 blueprint_portfolio?: BlueprintPortfolioMetadata;\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 blueprint_portfolio?: BlueprintPortfolioMetadata | 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 blueprintSet?: PublicBlueprintSet;\n labs?: boolean;\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","import { getBlueprintPortfolioMetadata, 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 const portfolio = getBlueprintPortfolioMetadata(item.blueprint_portfolio);\n if (portfolio?.visibility === 'featured') {\n score += 900;\n }\n if (portfolio?.artifact.status === 'certified') {\n score += 650;\n } else if (portfolio?.artifact.status === 'candidate') {\n score += 120;\n }\n if (portfolio?.visibility === 'labs' || portfolio?.visibility === 'hidden') {\n score -= 400;\n }\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"],"mappings":"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","names":["isRecord","publishedDelta"]}
1
+ {"version":3,"sources":["../src/api-client.ts","../src/client.ts","../src/types.ts","../src/ranking.ts"],"sourcesContent":["import type { EssenceFile } from '@decantr/essence-spec';\nimport type {\n ApiContentType,\n Archetype,\n Blueprint,\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 =\n options.baseUrl ?? process.env.DECANTR_API_URL ?? process.env.REGISTRY_URL ?? 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 blueprintSet?: SearchParams['blueprintSet'];\n labs?: boolean;\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?.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params?.labs) searchParams.set('labs', 'true');\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.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params.labs) searchParams.set('labs', 'true');\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 blueprintSet?: SearchParams['blueprintSet'];\n labs?: boolean;\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?.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params?.labs) searchParams.set('labs', 'true');\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.v4.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","export type {\n RegistryAPIClientOptions,\n RegistryClient,\n RegistryClientOptions,\n SearchResult,\n} from './api-client.js';\nexport { createRegistryClient, RegistryAPIClient, RegistryAPIError } from './api-client.js';\nexport {\n buildContentIntelligenceSummary as buildCorpusIntelligenceSummary,\n createContentResolver as createCorpusResolver,\n getContentCatalog as getCorpusCatalog,\n getContentRecord as getCorpusRecord,\n listContentRecords as listCorpusRecords,\n resolveContent as resolveCorpusContent,\n searchContent as searchCorpusContent,\n validateOfficialCorpus,\n} from '@decantr/content';\nexport type { PublicContentSort } from './ranking.js';\nexport { comparePublicContent, normalizePublicContentSort, sortPublicContent } from './ranking.js';\nexport type {\n ApiContentType,\n BlueprintArtifactStatus,\n BlueprintPortfolioArtifact,\n BlueprintPortfolioMaturity,\n BlueprintPortfolioMetadata,\n BlueprintPortfolioVisibility,\n ContentBenchmarkConfidence,\n ContentGoldenUsage,\n ContentIntelligenceMetadata,\n ContentIntelligenceSource,\n ContentItem,\n ContentListResponse,\n ContentVerificationStatus,\n OwnedContentSummary,\n PublicBlueprintSet,\n PublicContentRecord,\n PublicContentSource,\n PublicContentSummary,\n PublicUserProfile,\n PublishPayload,\n PublishResponse,\n RegistryIntelligenceSummaryBucket,\n RegistryIntelligenceSummaryResponse,\n SearchParams,\n SearchResponse,\n ShowcaseManifestEntry,\n ShowcaseManifestResponse,\n ShowcaseShortlistReport,\n ShowcaseShortlistResponse,\n ShowcaseShortlistSummary,\n ShowcaseVerificationEntry,\n UserProfile,\n} from './types.js';\nexport {\n API_CONTENT_TYPE_TO_CONTENT_TYPE,\n API_CONTENT_TYPES,\n BLUEPRINT_ARTIFACT_STATUSES,\n BLUEPRINT_PORTFOLIO_MATURITIES,\n BLUEPRINT_PORTFOLIO_VISIBILITIES,\n CONTENT_INTELLIGENCE_SOURCES,\n CONTENT_TYPE_TO_API_CONTENT_TYPE,\n CONTENT_TYPES,\n getBlueprintPortfolioMetadata,\n isApiContentType,\n isBlueprintArtifactStatus,\n isBlueprintPortfolioMaturity,\n isBlueprintPortfolioVisibility,\n isContentIntelligenceSource,\n isContentType,\n isPublicBlueprintSet,\n isPublicContentSource,\n PUBLIC_BLUEPRINT_SETS,\n PUBLIC_CONTENT_SOURCES,\n} from './types.js';\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 * 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 const BLUEPRINT_PORTFOLIO_VISIBILITIES = ['featured', 'public', 'labs', 'hidden'] as const;\nexport type BlueprintPortfolioVisibility = (typeof BLUEPRINT_PORTFOLIO_VISIBILITIES)[number];\n\nexport const BLUEPRINT_PORTFOLIO_MATURITIES = [\n 'certified-flagship',\n 'supported-contract',\n 'experimental',\n 'fold-candidate',\n 'legacy-hidden',\n] as const;\nexport type BlueprintPortfolioMaturity = (typeof BLUEPRINT_PORTFOLIO_MATURITIES)[number];\n\nexport const BLUEPRINT_ARTIFACT_STATUSES = ['none', 'planned', 'candidate', 'certified'] as const;\nexport type BlueprintArtifactStatus = (typeof BLUEPRINT_ARTIFACT_STATUSES)[number];\n\nexport const PUBLIC_BLUEPRINT_SETS = ['all', 'featured', 'certified', 'labs'] as const;\nexport type PublicBlueprintSet = (typeof PUBLIC_BLUEPRINT_SETS)[number];\n\nexport interface BlueprintPortfolioArtifact {\n status: BlueprintArtifactStatus;\n showcase?: string;\n notes?: string;\n}\n\nexport interface BlueprintPortfolioMetadata {\n visibility: BlueprintPortfolioVisibility;\n maturity: BlueprintPortfolioMaturity;\n rationale: string;\n recommended_alternative?: string;\n artifact: BlueprintPortfolioArtifact;\n}\n\nexport function isBlueprintPortfolioVisibility(\n value: unknown,\n): value is BlueprintPortfolioVisibility {\n return BLUEPRINT_PORTFOLIO_VISIBILITIES.includes(value as BlueprintPortfolioVisibility);\n}\n\nexport function isBlueprintPortfolioMaturity(value: unknown): value is BlueprintPortfolioMaturity {\n return BLUEPRINT_PORTFOLIO_MATURITIES.includes(value as BlueprintPortfolioMaturity);\n}\n\nexport function isBlueprintArtifactStatus(value: unknown): value is BlueprintArtifactStatus {\n return BLUEPRINT_ARTIFACT_STATUSES.includes(value as BlueprintArtifactStatus);\n}\n\nexport function isPublicBlueprintSet(value: unknown): value is PublicBlueprintSet {\n return PUBLIC_BLUEPRINT_SETS.includes(value as PublicBlueprintSet);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function getBlueprintPortfolioMetadata(value: unknown): BlueprintPortfolioMetadata | null {\n const candidate =\n isRecord(value) && isRecord(value.blueprint_portfolio) ? value.blueprint_portfolio : value;\n if (!isRecord(candidate)) {\n return null;\n }\n\n const artifact = candidate.artifact;\n if (\n !isBlueprintPortfolioVisibility(candidate.visibility) ||\n !isBlueprintPortfolioMaturity(candidate.maturity) ||\n typeof candidate.rationale !== 'string' ||\n !isRecord(artifact) ||\n !isBlueprintArtifactStatus(artifact.status)\n ) {\n return null;\n }\n\n return {\n visibility: candidate.visibility,\n maturity: candidate.maturity,\n rationale: candidate.rationale,\n recommended_alternative:\n typeof candidate.recommended_alternative === 'string'\n ? candidate.recommended_alternative\n : undefined,\n artifact: {\n status: artifact.status,\n showcase: typeof artifact.showcase === 'string' ? artifact.showcase : undefined,\n notes: typeof artifact.notes === 'string' ? artifact.notes : undefined,\n },\n };\n}\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 blueprint_portfolio?: BlueprintPortfolioMetadata;\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 blueprint_portfolio?: BlueprintPortfolioMetadata | 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 blueprintSet?: PublicBlueprintSet;\n labs?: boolean;\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","import { getBlueprintPortfolioMetadata, 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 const portfolio = getBlueprintPortfolioMetadata(item.blueprint_portfolio);\n if (portfolio?.visibility === 'featured') {\n score += 900;\n }\n if (portfolio?.artifact.status === 'certified') {\n score += 650;\n } else if (portfolio?.artifact.status === 'candidate') {\n score += 120;\n }\n if (portfolio?.visibility === 'labs' || portfolio?.visibility === 'hidden') {\n score -= 400;\n }\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"],"mappings":"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","names":["isRecord","publishedDelta"]}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { PublicContentSort, RegistryAPIClient, RegistryAPIClientOptions, RegistryAPIError, RegistryClient, RegistryClientOptions, SearchResult, comparePublicContent, createRegistryClient, normalizePublicContentSort, sortPublicContent } from './client.js';
2
+ export { ContentResolver as CorpusContentResolver, ContentValidationResult as CorpusContentValidationResult, ListContentOptions as CorpusListContentOptions, SearchContentOptions as CorpusSearchContentOptions, buildContentIntelligenceSummary as buildCorpusIntelligenceSummary, clearContentCatalogCache as clearCorpusCatalogCache, createContentResolver as createCorpusResolver, getContentCatalog as getCorpusCatalog, getContentRecord as getCorpusRecord, listContentRecords as listCorpusRecords, resolveContent as resolveCorpusContent, searchContent as searchCorpusContent, validateContentData as validateCorpusContentData, validateOfficialCorpus } from '@decantr/content';
2
3
  import { P as Pattern, a as PatternPreset, C as ContentType, R as ResolvedContent, A as Archetype, T as Theme, B as Blueprint, S as Shell, b as PatternIO } from './content-types-202FZ5NY.js';
3
4
  export { c as API_CONTENT_TYPES, d as API_CONTENT_TYPE_TO_CONTENT_TYPE, e as ApiContentType, f as ArchetypeHeroCustomization, g as ArchetypePage, h as ArchetypeRole, i as ArchetypeSuggestedTheme, j as BLUEPRINT_ARTIFACT_STATUSES, k as BLUEPRINT_PORTFOLIO_MATURITIES, l as BLUEPRINT_PORTFOLIO_VISIBILITIES, m as BlueprintArtifactStatus, n as BlueprintNavigation, o as BlueprintNavigationHotkey, p as BlueprintOverrides, q as BlueprintPortfolioArtifact, r as BlueprintPortfolioMaturity, s as BlueprintPortfolioMetadata, t as BlueprintPortfolioVisibility, u as BlueprintRoute, v as CONTENT_INTELLIGENCE_SOURCES, w as CONTENT_TYPES, x as CONTENT_TYPE_TO_API_CONTENT_TYPE, y as ComposeEntry, z as ContentBenchmarkConfidence, D as ContentDependencies, E as ContentGoldenUsage, F as ContentHealthFinding, G as ContentHealthFindingSource, H as ContentHealthQualitySummary, I as ContentHealthReferenceSummary, J as ContentHealthRemediation, K as ContentHealthReport, L as ContentHealthStatus, M as ContentHealthTypeSummary, N as ContentIntelligenceMetadata, O as ContentIntelligenceSource, Q as ContentItem, U as ContentListResponse, V as ContentVerificationStatus, W as CvdMode, X as ExecutionPackAntiPattern, Y as ExecutionPackBase, Z as ExecutionPackBundleResponse, _ as ExecutionPackExample, $ as ExecutionPackManifest, a0 as ExecutionPackScope, a1 as ExecutionPackSuccessCheck, a2 as ExecutionPackTarget, a3 as ExecutionPackTokenBudget, a4 as ExecutionPackType, a5 as FileCritiqueReport, a6 as HostedDistSnapshot, a7 as HostedFileCritiqueRequest, a8 as HostedProjectAuditRequest, a9 as LayoutGroup, aa as LayoutItem, ab as MutationExecutionPack, ac as OwnedContentSummary, ad as PUBLIC_BLUEPRINT_SETS, ae as PUBLIC_CONTENT_SOURCES, af as PackManifestEntry, ag as PackManifestMutationEntry, ah as PackManifestPageEntry, ai as PackManifestSectionEntry, aj as PageExecutionPack, ak as PatternCodeSpec, al as PatternLayoutSpec, am as PatternReference, an as PatternReferenceObject, ao as ProjectAuditReport, ap as ProjectAuditRuntimeAudit, aq as ProjectAuditSummary, ar as PublicBlueprintSet, as as PublicContentRecord, at as PublicContentSource, au as PublicContentSummary, av as PublicUserProfile, aw as PublishPayload, ax as PublishResponse, ay as RegistryIntelligenceSummaryBucket, az as RegistryIntelligenceSummaryResponse, aA as ReviewExecutionPack, aB as ScaffoldExecutionPack, aC as SearchParams, aD as SearchResponse, aE as SectionExecutionPack, aF as ShowcaseManifestEntry, aG as ShowcaseManifestResponse, aH as ShowcaseShortlistReport, aI as ShowcaseShortlistResponse, aJ as ShowcaseShortlistSummary, aK as ShowcaseVerificationEntry, aL as ThemeEffects, aM as ThemeShell, aN as ThemeSpatial, aO as ThemeTokens, aP as UserProfile, aQ as VerificationFinding, aR as VerificationScore, aS as VerificationSeverity, aT as getBlueprintPortfolioMetadata, aU as isApiContentType, aV as isBlueprintArtifactStatus, aW as isBlueprintPortfolioMaturity, aX as isBlueprintPortfolioVisibility, aY as isContentIntelligenceSource, aZ as isContentType, a_ as isPublicBlueprintSet, a$ as isPublicContentSource } from './content-types-202FZ5NY.js';
4
5
  import { LayoutItem } from '@decantr/essence-spec';
package/dist/index.js CHANGED
@@ -29,7 +29,7 @@ var RegistryAPIClient = class {
29
29
  cacheTtlMs;
30
30
  cache = /* @__PURE__ */ new Map();
31
31
  constructor(options = {}) {
32
- this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;
32
+ this.baseUrl = options.baseUrl ?? process.env.DECANTR_API_URL ?? process.env.REGISTRY_URL ?? DEFAULT_BASE_URL;
33
33
  this.apiKey = options.apiKey;
34
34
  this.accessToken = options.accessToken;
35
35
  this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
@@ -44,7 +44,7 @@ var RegistryAPIClient = class {
44
44
  headers["X-API-Key"] = this.apiKey;
45
45
  }
46
46
  if (this.accessToken) {
47
- headers["Authorization"] = `Bearer ${this.accessToken}`;
47
+ headers.Authorization = `Bearer ${this.accessToken}`;
48
48
  }
49
49
  return headers;
50
50
  }
@@ -358,6 +358,20 @@ function createRegistryClient(options = {}) {
358
358
  };
359
359
  }
360
360
 
361
+ // src/index.ts
362
+ import {
363
+ buildContentIntelligenceSummary,
364
+ clearContentCatalogCache,
365
+ createContentResolver,
366
+ getContentCatalog,
367
+ getContentRecord,
368
+ listContentRecords,
369
+ resolveContent,
370
+ searchContent,
371
+ validateContentData,
372
+ validateOfficialCorpus
373
+ } from "@decantr/content";
374
+
361
375
  // src/discovery.ts
362
376
  var STOP_WORDS = /* @__PURE__ */ new Set([
363
377
  "a",
@@ -1028,13 +1042,18 @@ export {
1028
1042
  RegistryAPIClient,
1029
1043
  RegistryAPIError,
1030
1044
  WIRING_RULES,
1045
+ buildContentIntelligenceSummary as buildCorpusIntelligenceSummary,
1031
1046
  buildIOMap,
1047
+ clearContentCatalogCache as clearCorpusCatalogCache,
1032
1048
  comparePublicContent,
1049
+ createContentResolver as createCorpusResolver,
1033
1050
  createRegistryClient,
1034
1051
  createResolver,
1035
1052
  deriveIOWirings,
1036
1053
  detectWirings,
1037
1054
  getBlueprintPortfolioMetadata,
1055
+ getContentCatalog as getCorpusCatalog,
1056
+ getContentRecord as getCorpusRecord,
1038
1057
  isApiContentType,
1039
1058
  isBlueprintArtifactStatus,
1040
1059
  isBlueprintPortfolioMaturity,
@@ -1043,11 +1062,16 @@ export {
1043
1062
  isContentType,
1044
1063
  isPublicBlueprintSet,
1045
1064
  isPublicContentSource,
1065
+ listContentRecords as listCorpusRecords,
1046
1066
  normalizePublicContentSort,
1047
1067
  patternToDiscoveryCandidate,
1048
1068
  rankPatternCandidates,
1069
+ resolveContent as resolveCorpusContent,
1049
1070
  resolvePatternPreset,
1050
1071
  scorePatternCandidate,
1051
- sortPublicContent
1072
+ searchContent as searchCorpusContent,
1073
+ sortPublicContent,
1074
+ validateContentData as validateCorpusContentData,
1075
+ validateOfficialCorpus
1052
1076
  };
1053
1077
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api-client.ts","../src/discovery.ts","../src/pattern.ts","../src/types.ts","../src/ranking.ts","../src/resolver.ts","../src/wiring.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 blueprintSet?: SearchParams['blueprintSet'];\n labs?: boolean;\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?.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params?.labs) searchParams.set('labs', 'true');\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.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params.labs) searchParams.set('labs', 'true');\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 blueprintSet?: SearchParams['blueprintSet'];\n labs?: boolean;\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?.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params?.labs) searchParams.set('labs', 'true');\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.v4.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 { Pattern } from './types.js';\n\nexport interface PatternDiscoveryCandidate {\n id: string;\n slug?: string;\n name?: string;\n description?: string;\n tags?: string[];\n components?: string[];\n interactions?: string[];\n visual_brief?: string;\n layout_hints?: Record<string, string>;\n aliases?: string[];\n category?: string;\n domain?: string;\n source?: string;\n pattern?: Pattern | Record<string, unknown>;\n}\n\nexport interface PatternDiscoveryInput {\n query?: string;\n route?: string;\n code?: string;\n limit?: number;\n}\n\nexport interface PatternDiscoveryMatch {\n candidate: PatternDiscoveryCandidate;\n score: number;\n reasons: string[];\n matchedTerms: string[];\n}\n\nconst STOP_WORDS = new Set([\n 'a',\n 'an',\n 'and',\n 'app',\n 'are',\n 'as',\n 'at',\n 'be',\n 'by',\n 'for',\n 'from',\n 'has',\n 'have',\n 'in',\n 'into',\n 'is',\n 'it',\n 'of',\n 'on',\n 'or',\n 'page',\n 'route',\n 'section',\n 'that',\n 'the',\n 'this',\n 'to',\n 'ui',\n 'with',\n]);\n\nconst DOMAIN_LANGUAGE: Record<string, string[]> = {\n recipe: [\n 'cookbook',\n 'cookbooks',\n 'cooking',\n 'dish',\n 'food',\n 'ingredient',\n 'ingredients',\n 'meal',\n 'photo',\n 'recipe',\n 'recipes',\n ],\n ai: [\n 'agent',\n 'ai',\n 'assistant',\n 'chat',\n 'claude',\n 'generate',\n 'generation',\n 'image',\n 'model',\n 'prompt',\n 'vision',\n ],\n social: [\n 'activity',\n 'avatar',\n 'comment',\n 'community',\n 'feed',\n 'follow',\n 'like',\n 'profile',\n 'share',\n 'social',\n 'user',\n ],\n commerce: ['cart', 'checkout', 'commerce', 'ecommerce', 'order', 'price', 'product', 'shop'],\n dashboard: ['analytics', 'chart', 'dashboard', 'kpi', 'metric', 'report', 'table'],\n form: ['form', 'input', 'settings', 'submit', 'toggle', 'upload'],\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((entry): entry is string => typeof entry === 'string')\n : [];\n}\n\nfunction recordToText(value: unknown): string {\n if (!isRecord(value)) return '';\n return Object.values(value)\n .flatMap((entry) => {\n if (typeof entry === 'string') return [entry];\n if (Array.isArray(entry))\n return entry.filter((item): item is string => typeof item === 'string');\n if (isRecord(entry)) return [recordToText(entry)];\n return [];\n })\n .join(' ');\n}\n\nexport function patternToDiscoveryCandidate(\n pattern: Pattern | Record<string, unknown>,\n options: { source?: string; slug?: string } = {},\n): PatternDiscoveryCandidate {\n const record = pattern as Record<string, unknown>;\n const slug =\n options.slug ||\n (typeof record.slug === 'string' ? record.slug : undefined) ||\n (typeof record.id === 'string' ? record.id : undefined);\n return {\n id: typeof record.id === 'string' ? record.id : (slug ?? 'pattern'),\n slug,\n name: typeof record.name === 'string' ? record.name : slug,\n description: typeof record.description === 'string' ? record.description : undefined,\n tags: stringArray(record.tags),\n components: stringArray(record.components),\n interactions: stringArray(record.interactions),\n visual_brief:\n typeof record.visual_brief === 'string'\n ? record.visual_brief\n : typeof record.visualBrief === 'string'\n ? record.visualBrief\n : undefined,\n layout_hints: isRecord(record.layout_hints)\n ? (record.layout_hints as Record<string, string>)\n : undefined,\n aliases: stringArray(record.aliases),\n category: typeof record.category === 'string' ? record.category : undefined,\n domain: typeof record.domain === 'string' ? record.domain : undefined,\n source: options.source,\n pattern,\n };\n}\n\nfunction tokenize(value: string | undefined): string[] {\n if (!value) return [];\n const tokens = value\n .toLowerCase()\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .split(/[^a-z0-9]+/g)\n .map((token) => token.trim())\n .filter((token) => token.length >= 2 && !STOP_WORDS.has(token));\n return [...new Set(tokens)];\n}\n\nfunction inferDomainTerms(tokens: string[]): { domain: string; terms: string[] }[] {\n const tokenSet = new Set(tokens);\n const matches: { domain: string; terms: string[] }[] = [];\n for (const [domain, terms] of Object.entries(DOMAIN_LANGUAGE)) {\n const hits = terms.filter((term) => tokenSet.has(term));\n if (hits.length > 0) matches.push({ domain, terms });\n }\n return matches;\n}\n\nfunction candidateText(candidate: PatternDiscoveryCandidate): {\n high: string;\n medium: string;\n low: string;\n} {\n const pattern = candidate.pattern;\n const patternRecord = isRecord(pattern) ? pattern : {};\n const presets = isRecord(patternRecord.presets) ? recordToText(patternRecord.presets) : '';\n const composition = isRecord(patternRecord.composition)\n ? recordToText(patternRecord.composition)\n : '';\n const motion = isRecord(patternRecord.motion) ? recordToText(patternRecord.motion) : '';\n const responsive = isRecord(patternRecord.responsive)\n ? recordToText(patternRecord.responsive)\n : '';\n const accessibility = isRecord(patternRecord.accessibility)\n ? recordToText(patternRecord.accessibility)\n : '';\n\n return {\n high: [\n candidate.slug,\n candidate.id,\n candidate.name,\n candidate.aliases?.join(' '),\n candidate.category,\n candidate.domain,\n ]\n .filter(Boolean)\n .join(' '),\n medium: [\n candidate.description,\n candidate.tags?.join(' '),\n candidate.components?.join(' '),\n candidate.interactions?.join(' '),\n candidate.visual_brief,\n candidate.layout_hints ? recordToText(candidate.layout_hints) : '',\n ]\n .filter(Boolean)\n .join(' '),\n low: [presets, composition, motion, responsive, accessibility].filter(Boolean).join(' '),\n };\n}\n\nfunction fieldMatches(tokens: string[], text: string): string[] {\n const lower = text.toLowerCase();\n return tokens.filter((token) => lower.includes(token));\n}\n\nfunction addReason(reasons: string[], reason: string): void {\n if (!reasons.includes(reason)) reasons.push(reason);\n}\n\nexport function scorePatternCandidate(\n input: PatternDiscoveryInput,\n candidate: PatternDiscoveryCandidate,\n): PatternDiscoveryMatch {\n const queryTokens = tokenize(input.query);\n const routeTokens = tokenize(input.route);\n const codeTokens = tokenize(input.code).slice(0, 250);\n const tokens = [...new Set([...queryTokens, ...routeTokens, ...codeTokens])];\n const text = candidateText(candidate);\n const reasons: string[] = [];\n const matchedTerms = new Set<string>();\n let score = 0;\n\n const highMatches = fieldMatches(tokens, text.high);\n if (highMatches.length > 0) {\n score += highMatches.length * 18;\n for (const term of highMatches) matchedTerms.add(term);\n addReason(reasons, 'matched slug, name, alias, category, or domain');\n }\n\n const mediumMatches = fieldMatches(tokens, text.medium);\n if (mediumMatches.length > 0) {\n score += mediumMatches.length * 10;\n for (const term of mediumMatches) matchedTerms.add(term);\n addReason(\n reasons,\n 'matched description, tags, components, interactions, visual brief, or layout hints',\n );\n }\n\n const lowMatches = fieldMatches(tokens, text.low);\n if (lowMatches.length > 0) {\n score += lowMatches.length * 4;\n for (const term of lowMatches) matchedTerms.add(term);\n addReason(reasons, 'matched composition, motion, responsive, preset, or accessibility details');\n }\n\n const slug = (candidate.slug || candidate.id).toLowerCase();\n const query = (input.query || '').toLowerCase();\n if (query && (slug === query || candidate.name?.toLowerCase() === query)) {\n score += 50;\n addReason(reasons, 'exact slug or name match');\n } else if (query && slug.includes(query.replace(/\\s+/g, '-'))) {\n score += 28;\n addReason(reasons, 'direct slug phrase match');\n }\n\n for (const domain of inferDomainTerms(tokens)) {\n const candidateDomainText = [text.high, text.medium, text.low].join(' ').toLowerCase();\n const hits = domain.terms.filter((term) => candidateDomainText.includes(term));\n if (hits.length > 0) {\n score += Math.min(30, hits.length * 6);\n for (const term of hits) matchedTerms.add(term);\n addReason(reasons, `${domain.domain} domain language`);\n }\n }\n\n if (input.route) {\n const route = input.route.toLowerCase();\n if (route.includes(slug) || slug.includes(route.replace(/^\\//, '').replace(/\\//g, '-'))) {\n score += 16;\n addReason(reasons, 'route name resembles pattern slug');\n }\n }\n\n if (input.code) {\n const code = input.code.toLowerCase();\n const codeHints = [\n ['intersectionobserver', 'scroll-reveal'],\n ['avatar', 'social profile or feed'],\n ['like', 'social engagement'],\n ['upload', 'upload flow'],\n ['input type=\"file\"', 'upload flow'],\n ['textarea', 'form or chat input'],\n ['message', 'chat surface'],\n ['grid', 'grid composition'],\n ['form', 'form surface'],\n ];\n for (const [needle, label] of codeHints) {\n if (\n code.includes(needle) &&\n [text.high, text.medium, text.low].join(' ').toLowerCase().includes(label.split(' ')[0])\n ) {\n score += 8;\n addReason(reasons, `source code hint: ${label}`);\n }\n }\n }\n\n return {\n candidate,\n score,\n reasons,\n matchedTerms: [...matchedTerms].sort(),\n };\n}\n\nexport function rankPatternCandidates(\n input: PatternDiscoveryInput,\n candidates: PatternDiscoveryCandidate[],\n): PatternDiscoveryMatch[] {\n const limit = input.limit ?? 10;\n return candidates\n .map((candidate) => scorePatternCandidate(input, candidate))\n .filter((match) => match.score > 0)\n .sort((a, b) => {\n if (b.score !== a.score) return b.score - a.score;\n return (a.candidate.slug || a.candidate.id).localeCompare(b.candidate.slug || b.candidate.id);\n })\n .slice(0, limit);\n}\n","import type { Pattern, PatternPreset } from './types.js';\n\nexport interface ResolvedPreset {\n preset: string;\n layout: PatternPreset['layout'];\n code: PatternPreset['code'];\n}\n\nexport function resolvePatternPreset(\n pattern: Pattern,\n explicitPreset?: string,\n themeDefaultPresets?: Record<string, string>,\n): ResolvedPreset {\n const presets = pattern.presets;\n const hasPresets = Object.keys(presets).length > 0;\n\n if (!hasPresets) {\n return {\n preset: '',\n layout: { layout: 'row', atoms: '' },\n code: pattern.code ?? { imports: '', example: '' },\n };\n }\n\n let presetName = explicitPreset;\n if (presetName && !presets[presetName]) presetName = undefined;\n if (!presetName && themeDefaultPresets?.[pattern.id]) {\n const themeName = themeDefaultPresets[pattern.id];\n if (presets[themeName]) presetName = themeName;\n }\n if (!presetName) presetName = pattern.default_preset;\n if (!presetName || !presets[presetName]) presetName = Object.keys(presets)[0];\n\n const preset = presets[presetName];\n return { preset: presetName, layout: preset.layout, code: preset.code };\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 * 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 const BLUEPRINT_PORTFOLIO_VISIBILITIES = ['featured', 'public', 'labs', 'hidden'] as const;\nexport type BlueprintPortfolioVisibility = (typeof BLUEPRINT_PORTFOLIO_VISIBILITIES)[number];\n\nexport const BLUEPRINT_PORTFOLIO_MATURITIES = [\n 'certified-flagship',\n 'supported-contract',\n 'experimental',\n 'fold-candidate',\n 'legacy-hidden',\n] as const;\nexport type BlueprintPortfolioMaturity = (typeof BLUEPRINT_PORTFOLIO_MATURITIES)[number];\n\nexport const BLUEPRINT_ARTIFACT_STATUSES = ['none', 'planned', 'candidate', 'certified'] as const;\nexport type BlueprintArtifactStatus = (typeof BLUEPRINT_ARTIFACT_STATUSES)[number];\n\nexport const PUBLIC_BLUEPRINT_SETS = ['all', 'featured', 'certified', 'labs'] as const;\nexport type PublicBlueprintSet = (typeof PUBLIC_BLUEPRINT_SETS)[number];\n\nexport interface BlueprintPortfolioArtifact {\n status: BlueprintArtifactStatus;\n showcase?: string;\n notes?: string;\n}\n\nexport interface BlueprintPortfolioMetadata {\n visibility: BlueprintPortfolioVisibility;\n maturity: BlueprintPortfolioMaturity;\n rationale: string;\n recommended_alternative?: string;\n artifact: BlueprintPortfolioArtifact;\n}\n\nexport function isBlueprintPortfolioVisibility(\n value: unknown,\n): value is BlueprintPortfolioVisibility {\n return BLUEPRINT_PORTFOLIO_VISIBILITIES.includes(value as BlueprintPortfolioVisibility);\n}\n\nexport function isBlueprintPortfolioMaturity(value: unknown): value is BlueprintPortfolioMaturity {\n return BLUEPRINT_PORTFOLIO_MATURITIES.includes(value as BlueprintPortfolioMaturity);\n}\n\nexport function isBlueprintArtifactStatus(value: unknown): value is BlueprintArtifactStatus {\n return BLUEPRINT_ARTIFACT_STATUSES.includes(value as BlueprintArtifactStatus);\n}\n\nexport function isPublicBlueprintSet(value: unknown): value is PublicBlueprintSet {\n return PUBLIC_BLUEPRINT_SETS.includes(value as PublicBlueprintSet);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function getBlueprintPortfolioMetadata(value: unknown): BlueprintPortfolioMetadata | null {\n const candidate =\n isRecord(value) && isRecord(value.blueprint_portfolio) ? value.blueprint_portfolio : value;\n if (!isRecord(candidate)) {\n return null;\n }\n\n const artifact = candidate.artifact;\n if (\n !isBlueprintPortfolioVisibility(candidate.visibility) ||\n !isBlueprintPortfolioMaturity(candidate.maturity) ||\n typeof candidate.rationale !== 'string' ||\n !isRecord(artifact) ||\n !isBlueprintArtifactStatus(artifact.status)\n ) {\n return null;\n }\n\n return {\n visibility: candidate.visibility,\n maturity: candidate.maturity,\n rationale: candidate.rationale,\n recommended_alternative:\n typeof candidate.recommended_alternative === 'string'\n ? candidate.recommended_alternative\n : undefined,\n artifact: {\n status: artifact.status,\n showcase: typeof artifact.showcase === 'string' ? artifact.showcase : undefined,\n notes: typeof artifact.notes === 'string' ? artifact.notes : undefined,\n },\n };\n}\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 blueprint_portfolio?: BlueprintPortfolioMetadata;\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 blueprint_portfolio?: BlueprintPortfolioMetadata | 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 blueprintSet?: PublicBlueprintSet;\n labs?: boolean;\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","import { getBlueprintPortfolioMetadata, 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 const portfolio = getBlueprintPortfolioMetadata(item.blueprint_portfolio);\n if (portfolio?.visibility === 'featured') {\n score += 900;\n }\n if (portfolio?.artifact.status === 'certified') {\n score += 650;\n } else if (portfolio?.artifact.status === 'candidate') {\n score += 120;\n }\n if (portfolio?.visibility === 'labs' || portfolio?.visibility === 'hidden') {\n score -= 400;\n }\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 { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type {\n Archetype,\n Blueprint,\n ContentType,\n Pattern,\n ResolvedContent,\n Shell,\n Theme,\n} from './types.js';\n\ntype ContentMap = {\n pattern: Pattern;\n archetype: Archetype;\n theme: Theme;\n blueprint: Blueprint;\n shell: Shell;\n};\n\nexport interface ResolverOptions {\n contentRoot: string;\n overridePaths?: string[];\n}\n\nexport interface ContentResolver {\n resolve<T extends ContentType>(\n type: T,\n id: string,\n ): Promise<ResolvedContent<ContentMap[T]> | null>;\n}\n\nconst TYPE_DIRS: Record<ContentType, string> = {\n pattern: 'patterns',\n archetype: 'archetypes',\n theme: 'themes',\n blueprint: 'blueprints',\n shell: 'shells',\n};\n\nasync function tryLoadJson<T>(filePath: string): Promise<T | null> {\n try {\n const content = await readFile(filePath, 'utf-8');\n return JSON.parse(content) as T;\n } catch {\n return null;\n }\n}\n\nexport function createResolver(options: ResolverOptions): ContentResolver {\n const { contentRoot, overridePaths = [] } = options;\n return {\n async resolve<T extends ContentType>(\n type: T,\n id: string,\n ): Promise<ResolvedContent<ContentMap[T]> | null> {\n const dir = TYPE_DIRS[type];\n const fileName = `${id}.json`;\n for (const overridePath of overridePaths) {\n const filePath = join(overridePath, dir, fileName);\n const item = await tryLoadJson<ContentMap[T]>(filePath);\n if (item) return { item, source: 'local', path: filePath };\n }\n // Check main content directory\n const mainPath = join(contentRoot, dir, fileName);\n const mainItem = await tryLoadJson<ContentMap[T]>(mainPath);\n if (mainItem) return { item: mainItem, source: 'core', path: mainPath };\n\n // Check content/core/{type}/ as fallback\n const corePath = join(contentRoot, 'core', dir, fileName);\n const coreItem = await tryLoadJson<ContentMap[T]>(corePath);\n if (coreItem) return { item: coreItem, source: 'core', path: corePath };\n\n return null;\n },\n };\n}\n","import type { LayoutItem, PatternRef } from '@decantr/essence-spec';\nimport type { PatternIO } from './types.js';\n\n// AUTO: hookType classifies each signal for custom hook generation\nexport type HookType = 'search' | 'filter' | 'selection' | 'sort';\n\nexport interface WiringSignal {\n name: string;\n init: string;\n hookType: HookType;\n}\n\nexport interface WiringRule {\n pair: [string, string];\n signals: WiringSignal[];\n props: Record<string, Record<string, string>>;\n // AUTO: hookProps maps pattern IDs to hook variable names passed as props\n hookProps: Record<string, Record<string, string>>;\n}\n\nexport interface WiringResult {\n rule: WiringRule;\n signals: WiringSignal[];\n props: Record<string, Record<string, string>>;\n hookProps: Record<string, Record<string, string>>;\n}\n\n/**\n * IO declaration for a pattern, used by the data-driven wiring system.\n */\nexport interface PatternIOEntry {\n id: string;\n io: PatternIO;\n}\n\n/**\n * A dynamically derived wiring edge between two patterns based on shared IO signals.\n */\nexport interface IOWiringEdge {\n producer: string;\n consumer: string;\n signals: string[];\n}\n\nexport const WIRING_RULES: WiringRule[] = [\n {\n pair: ['filter-bar', 'data-table'],\n signals: [\n { name: 'pageSearch', init: \"''\", hookType: 'search' },\n { name: 'pageStatus', init: \"'all'\", hookType: 'filter' },\n ],\n props: {\n 'filter-bar': { onSearch: 'setPageSearch', onCategory: 'setPageStatus' },\n 'data-table': { search: 'pageSearch', status: 'pageStatus' },\n },\n hookProps: {\n 'filter-bar': { search: 'search', filters: 'filters' },\n 'data-table': { search: 'search', filters: 'filters' },\n },\n },\n {\n pair: ['filter-bar', 'activity-feed'],\n signals: [\n { name: 'pageSearch', init: \"''\", hookType: 'search' },\n { name: 'pageView', init: \"'all'\", hookType: 'filter' },\n ],\n props: {\n 'filter-bar': { onSearch: 'setPageSearch', onView: 'setPageView' },\n 'activity-feed': { search: 'pageSearch', view: 'pageView' },\n },\n hookProps: {\n 'filter-bar': { search: 'search', filters: 'filters' },\n 'activity-feed': { search: 'search', filters: 'filters' },\n },\n },\n {\n pair: ['filter-bar', 'card-grid'],\n signals: [{ name: 'pageSearch', init: \"''\", hookType: 'search' }],\n props: {\n 'filter-bar': { onSearch: 'setPageSearch' },\n 'card-grid': { search: 'pageSearch' },\n },\n hookProps: {\n 'filter-bar': { search: 'search' },\n 'card-grid': { search: 'search' },\n },\n },\n];\n\nfunction getPatternId(item: LayoutItem): string | null {\n if (typeof item === 'string') return item;\n if ('pattern' in item) return (item as PatternRef).pattern;\n return null;\n}\n\n/**\n * Derive wiring edges from pattern IO declarations.\n * If pattern A produces signal X and pattern B consumes signal X, an edge is created.\n * Only patterns present in the layout are considered.\n */\nexport function deriveIOWirings(\n layoutIds: string[],\n patternIOMap: Map<string, PatternIO>,\n): IOWiringEdge[] {\n const edges: IOWiringEdge[] = [];\n const layoutSet = new Set(layoutIds);\n\n for (const producerId of layoutIds) {\n const producerIO = patternIOMap.get(producerId);\n if (!producerIO?.produces?.length) continue;\n\n for (const consumerId of layoutIds) {\n if (producerId === consumerId) continue;\n if (!layoutSet.has(consumerId)) continue;\n const consumerIO = patternIOMap.get(consumerId);\n if (!consumerIO?.consumes?.length) continue;\n\n const shared = producerIO.produces.filter((signal) => consumerIO.consumes!.includes(signal));\n if (shared.length > 0) {\n edges.push({ producer: producerId, consumer: consumerId, signals: shared });\n }\n }\n }\n\n return edges;\n}\n\n/**\n * Build a PatternIO map from an array of PatternIOEntry objects.\n */\nexport function buildIOMap(entries: PatternIOEntry[]): Map<string, PatternIO> {\n const map = new Map<string, PatternIO>();\n for (const entry of entries) {\n map.set(entry.id, entry.io);\n }\n return map;\n}\n\n/**\n * Detect wirings from a layout. Uses hardcoded WIRING_RULES for detailed\n * signal/prop information. When a patternIOMap is provided, also derives\n * IO-based wirings and merges them (hardcoded rules take precedence for\n * pairs they cover).\n */\nexport function detectWirings(\n layout: LayoutItem[],\n patternIOMap?: Map<string, PatternIO>,\n): WiringResult[] {\n const patternIds = layout.map(getPatternId).filter((id): id is string => id !== null);\n const results: WiringResult[] = [];\n const coveredPairs = new Set<string>();\n\n // Apply hardcoded rules first (these have detailed signal/prop info)\n for (const rule of WIRING_RULES) {\n const [a, b] = rule.pair;\n if (patternIds.includes(a) && patternIds.includes(b)) {\n results.push({ rule, signals: rule.signals, props: rule.props, hookProps: rule.hookProps });\n coveredPairs.add(`${a}:${b}`);\n coveredPairs.add(`${b}:${a}`);\n }\n }\n\n // If IO map provided, derive additional wirings from IO declarations\n if (patternIOMap) {\n const ioEdges = deriveIOWirings(patternIds, patternIOMap);\n for (const edge of ioEdges) {\n const pairKey = `${edge.producer}:${edge.consumer}`;\n if (coveredPairs.has(pairKey)) continue;\n coveredPairs.add(pairKey);\n\n // Generate a synthetic WiringRule from IO signals\n const signals: WiringSignal[] = edge.signals.map((sig) => {\n const camel = toCamelCase(sig);\n return {\n name: `page${capitalize(camel)}`,\n init: \"''\",\n hookType: classifySignal(sig),\n };\n });\n\n const producerProps: Record<string, string> = {};\n const consumerProps: Record<string, string> = {};\n const producerHookProps: Record<string, string> = {};\n const consumerHookProps: Record<string, string> = {};\n\n for (const sig of edge.signals) {\n const camel = toCamelCase(sig);\n const stateName = `page${capitalize(camel)}`;\n const setterName = `set${capitalize(stateName)}`;\n producerProps[`on${capitalize(camel)}`] = setterName;\n consumerProps[sig] = stateName;\n producerHookProps[sig] = sig;\n consumerHookProps[sig] = sig;\n }\n\n const rule: WiringRule = {\n pair: [edge.producer, edge.consumer],\n signals,\n props: { [edge.producer]: producerProps, [edge.consumer]: consumerProps },\n hookProps: { [edge.producer]: producerHookProps, [edge.consumer]: consumerHookProps },\n };\n\n results.push({ rule, signals, props: rule.props, hookProps: rule.hookProps });\n }\n }\n\n return results;\n}\n\n/**\n * Convert a kebab-case string to camelCase.\n */\nfunction toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());\n}\n\n/**\n * Capitalize the first letter of a string.\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Classify a signal name into a HookType for code generation.\n */\nfunction classifySignal(signal: string): HookType {\n const normalized = toCamelCase(signal);\n if (normalized === 'search') return 'search';\n if (normalized === 'selection') return 'selection';\n if (normalized === 'sort') return 'sort';\n return 'filter';\n}\n"],"mappings":"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","names":["isRecord","isRecord","publishedDelta"]}
1
+ {"version":3,"sources":["../src/api-client.ts","../src/index.ts","../src/discovery.ts","../src/pattern.ts","../src/types.ts","../src/ranking.ts","../src/resolver.ts","../src/wiring.ts"],"sourcesContent":["import type { EssenceFile } from '@decantr/essence-spec';\nimport type {\n ApiContentType,\n Archetype,\n Blueprint,\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 =\n options.baseUrl ?? process.env.DECANTR_API_URL ?? process.env.REGISTRY_URL ?? 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 blueprintSet?: SearchParams['blueprintSet'];\n labs?: boolean;\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?.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params?.labs) searchParams.set('labs', 'true');\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.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params.labs) searchParams.set('labs', 'true');\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 blueprintSet?: SearchParams['blueprintSet'];\n labs?: boolean;\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?.blueprintSet) searchParams.set('blueprint_set', params.blueprintSet);\n if (params?.labs) searchParams.set('labs', 'true');\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.v4.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","export type {\n RegistryAPIClientOptions,\n RegistryClient,\n RegistryClientOptions,\n SearchResult,\n} from './api-client.js';\nexport { createRegistryClient, RegistryAPIClient, RegistryAPIError } from './api-client.js';\nexport type {\n ContentResolver as CorpusContentResolver,\n ContentValidationResult as CorpusContentValidationResult,\n ListContentOptions as CorpusListContentOptions,\n SearchContentOptions as CorpusSearchContentOptions,\n} from '@decantr/content';\nexport {\n buildContentIntelligenceSummary as buildCorpusIntelligenceSummary,\n clearContentCatalogCache as clearCorpusCatalogCache,\n createContentResolver as createCorpusResolver,\n getContentCatalog as getCorpusCatalog,\n getContentRecord as getCorpusRecord,\n listContentRecords as listCorpusRecords,\n resolveContent as resolveCorpusContent,\n searchContent as searchCorpusContent,\n validateContentData as validateCorpusContentData,\n validateOfficialCorpus,\n} from '@decantr/content';\nexport type {\n PatternDiscoveryCandidate,\n PatternDiscoveryInput,\n PatternDiscoveryMatch,\n} from './discovery.js';\nexport {\n patternToDiscoveryCandidate,\n rankPatternCandidates,\n scorePatternCandidate,\n} from './discovery.js';\nexport type { ResolvedPreset } from './pattern.js';\nexport { resolvePatternPreset } from './pattern.js';\nexport type { PublicContentSort } from './ranking.js';\nexport { comparePublicContent, normalizePublicContentSort, sortPublicContent } from './ranking.js';\nexport type { ContentResolver, ResolverOptions } from './resolver.js';\nexport { createResolver } from './resolver.js';\nexport type {\n ApiContentType,\n Archetype,\n ArchetypeHeroCustomization,\n ArchetypePage,\n ArchetypeRole,\n ArchetypeSuggestedTheme,\n Blueprint,\n BlueprintArtifactStatus,\n BlueprintNavigation,\n BlueprintNavigationHotkey,\n BlueprintOverrides,\n BlueprintPortfolioArtifact,\n BlueprintPortfolioMaturity,\n BlueprintPortfolioMetadata,\n BlueprintPortfolioVisibility,\n BlueprintRoute,\n ComposeEntry,\n ContentBenchmarkConfidence,\n ContentDependencies,\n ContentGoldenUsage,\n ContentHealthFinding,\n ContentHealthFindingSource,\n ContentHealthQualitySummary,\n ContentHealthReferenceSummary,\n ContentHealthRemediation,\n ContentHealthReport,\n ContentHealthStatus,\n ContentHealthTypeSummary,\n ContentIntelligenceMetadata,\n ContentIntelligenceSource,\n ContentItem,\n ContentListResponse,\n ContentType,\n ContentVerificationStatus,\n CvdMode,\n ExecutionPackAntiPattern,\n ExecutionPackBase,\n ExecutionPackBundleResponse,\n ExecutionPackExample,\n ExecutionPackManifest,\n ExecutionPackScope,\n ExecutionPackSuccessCheck,\n ExecutionPackTarget,\n ExecutionPackTokenBudget,\n ExecutionPackType,\n FileCritiqueReport,\n HostedDistSnapshot,\n HostedFileCritiqueRequest,\n HostedProjectAuditRequest,\n LayoutGroup,\n LayoutItem,\n MutationExecutionPack,\n OwnedContentSummary,\n PackManifestEntry,\n PackManifestMutationEntry,\n PackManifestPageEntry,\n PackManifestSectionEntry,\n PageExecutionPack,\n Pattern,\n PatternCodeSpec,\n PatternIO,\n PatternLayoutSpec,\n PatternPreset,\n PatternReference,\n PatternReferenceObject,\n ProjectAuditReport,\n ProjectAuditRuntimeAudit,\n ProjectAuditSummary,\n PublicBlueprintSet,\n PublicContentRecord,\n PublicContentSource,\n PublicContentSummary,\n PublicUserProfile,\n PublishPayload,\n PublishResponse,\n RegistryIntelligenceSummaryBucket,\n RegistryIntelligenceSummaryResponse,\n ResolvedContent,\n ReviewExecutionPack,\n ScaffoldExecutionPack,\n SearchParams,\n SearchResponse,\n SectionExecutionPack,\n Shell,\n ShowcaseManifestEntry,\n ShowcaseManifestResponse,\n ShowcaseShortlistReport,\n ShowcaseShortlistResponse,\n ShowcaseShortlistSummary,\n ShowcaseVerificationEntry,\n Theme,\n ThemeEffects,\n ThemeShell,\n ThemeSpatial,\n ThemeTokens,\n UserProfile,\n VerificationFinding,\n VerificationScore,\n VerificationSeverity,\n} from './types.js';\nexport {\n API_CONTENT_TYPE_TO_CONTENT_TYPE,\n API_CONTENT_TYPES,\n BLUEPRINT_ARTIFACT_STATUSES,\n BLUEPRINT_PORTFOLIO_MATURITIES,\n BLUEPRINT_PORTFOLIO_VISIBILITIES,\n CONTENT_INTELLIGENCE_SOURCES,\n CONTENT_TYPE_TO_API_CONTENT_TYPE,\n CONTENT_TYPES,\n getBlueprintPortfolioMetadata,\n isApiContentType,\n isBlueprintArtifactStatus,\n isBlueprintPortfolioMaturity,\n isBlueprintPortfolioVisibility,\n isContentIntelligenceSource,\n isContentType,\n isPublicBlueprintSet,\n isPublicContentSource,\n PUBLIC_BLUEPRINT_SETS,\n PUBLIC_CONTENT_SOURCES,\n} from './types.js';\nexport type {\n HookType,\n IOWiringEdge,\n PatternIOEntry,\n WiringResult,\n WiringRule,\n WiringSignal,\n} from './wiring.js';\nexport { buildIOMap, deriveIOWirings, detectWirings, WIRING_RULES } from './wiring.js';\n","import type { Pattern } from './types.js';\n\nexport interface PatternDiscoveryCandidate {\n id: string;\n slug?: string;\n name?: string;\n description?: string;\n tags?: string[];\n components?: string[];\n interactions?: string[];\n visual_brief?: string;\n layout_hints?: Record<string, string>;\n aliases?: string[];\n category?: string;\n domain?: string;\n source?: string;\n pattern?: Pattern | Record<string, unknown>;\n}\n\nexport interface PatternDiscoveryInput {\n query?: string;\n route?: string;\n code?: string;\n limit?: number;\n}\n\nexport interface PatternDiscoveryMatch {\n candidate: PatternDiscoveryCandidate;\n score: number;\n reasons: string[];\n matchedTerms: string[];\n}\n\nconst STOP_WORDS = new Set([\n 'a',\n 'an',\n 'and',\n 'app',\n 'are',\n 'as',\n 'at',\n 'be',\n 'by',\n 'for',\n 'from',\n 'has',\n 'have',\n 'in',\n 'into',\n 'is',\n 'it',\n 'of',\n 'on',\n 'or',\n 'page',\n 'route',\n 'section',\n 'that',\n 'the',\n 'this',\n 'to',\n 'ui',\n 'with',\n]);\n\nconst DOMAIN_LANGUAGE: Record<string, string[]> = {\n recipe: [\n 'cookbook',\n 'cookbooks',\n 'cooking',\n 'dish',\n 'food',\n 'ingredient',\n 'ingredients',\n 'meal',\n 'photo',\n 'recipe',\n 'recipes',\n ],\n ai: [\n 'agent',\n 'ai',\n 'assistant',\n 'chat',\n 'claude',\n 'generate',\n 'generation',\n 'image',\n 'model',\n 'prompt',\n 'vision',\n ],\n social: [\n 'activity',\n 'avatar',\n 'comment',\n 'community',\n 'feed',\n 'follow',\n 'like',\n 'profile',\n 'share',\n 'social',\n 'user',\n ],\n commerce: ['cart', 'checkout', 'commerce', 'ecommerce', 'order', 'price', 'product', 'shop'],\n dashboard: ['analytics', 'chart', 'dashboard', 'kpi', 'metric', 'report', 'table'],\n form: ['form', 'input', 'settings', 'submit', 'toggle', 'upload'],\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((entry): entry is string => typeof entry === 'string')\n : [];\n}\n\nfunction recordToText(value: unknown): string {\n if (!isRecord(value)) return '';\n return Object.values(value)\n .flatMap((entry) => {\n if (typeof entry === 'string') return [entry];\n if (Array.isArray(entry))\n return entry.filter((item): item is string => typeof item === 'string');\n if (isRecord(entry)) return [recordToText(entry)];\n return [];\n })\n .join(' ');\n}\n\nexport function patternToDiscoveryCandidate(\n pattern: Pattern | Record<string, unknown>,\n options: { source?: string; slug?: string } = {},\n): PatternDiscoveryCandidate {\n const record = pattern as Record<string, unknown>;\n const slug =\n options.slug ||\n (typeof record.slug === 'string' ? record.slug : undefined) ||\n (typeof record.id === 'string' ? record.id : undefined);\n return {\n id: typeof record.id === 'string' ? record.id : (slug ?? 'pattern'),\n slug,\n name: typeof record.name === 'string' ? record.name : slug,\n description: typeof record.description === 'string' ? record.description : undefined,\n tags: stringArray(record.tags),\n components: stringArray(record.components),\n interactions: stringArray(record.interactions),\n visual_brief:\n typeof record.visual_brief === 'string'\n ? record.visual_brief\n : typeof record.visualBrief === 'string'\n ? record.visualBrief\n : undefined,\n layout_hints: isRecord(record.layout_hints)\n ? (record.layout_hints as Record<string, string>)\n : undefined,\n aliases: stringArray(record.aliases),\n category: typeof record.category === 'string' ? record.category : undefined,\n domain: typeof record.domain === 'string' ? record.domain : undefined,\n source: options.source,\n pattern,\n };\n}\n\nfunction tokenize(value: string | undefined): string[] {\n if (!value) return [];\n const tokens = value\n .toLowerCase()\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .split(/[^a-z0-9]+/g)\n .map((token) => token.trim())\n .filter((token) => token.length >= 2 && !STOP_WORDS.has(token));\n return [...new Set(tokens)];\n}\n\nfunction inferDomainTerms(tokens: string[]): { domain: string; terms: string[] }[] {\n const tokenSet = new Set(tokens);\n const matches: { domain: string; terms: string[] }[] = [];\n for (const [domain, terms] of Object.entries(DOMAIN_LANGUAGE)) {\n const hits = terms.filter((term) => tokenSet.has(term));\n if (hits.length > 0) matches.push({ domain, terms });\n }\n return matches;\n}\n\nfunction candidateText(candidate: PatternDiscoveryCandidate): {\n high: string;\n medium: string;\n low: string;\n} {\n const pattern = candidate.pattern;\n const patternRecord = isRecord(pattern) ? pattern : {};\n const presets = isRecord(patternRecord.presets) ? recordToText(patternRecord.presets) : '';\n const composition = isRecord(patternRecord.composition)\n ? recordToText(patternRecord.composition)\n : '';\n const motion = isRecord(patternRecord.motion) ? recordToText(patternRecord.motion) : '';\n const responsive = isRecord(patternRecord.responsive)\n ? recordToText(patternRecord.responsive)\n : '';\n const accessibility = isRecord(patternRecord.accessibility)\n ? recordToText(patternRecord.accessibility)\n : '';\n\n return {\n high: [\n candidate.slug,\n candidate.id,\n candidate.name,\n candidate.aliases?.join(' '),\n candidate.category,\n candidate.domain,\n ]\n .filter(Boolean)\n .join(' '),\n medium: [\n candidate.description,\n candidate.tags?.join(' '),\n candidate.components?.join(' '),\n candidate.interactions?.join(' '),\n candidate.visual_brief,\n candidate.layout_hints ? recordToText(candidate.layout_hints) : '',\n ]\n .filter(Boolean)\n .join(' '),\n low: [presets, composition, motion, responsive, accessibility].filter(Boolean).join(' '),\n };\n}\n\nfunction fieldMatches(tokens: string[], text: string): string[] {\n const lower = text.toLowerCase();\n return tokens.filter((token) => lower.includes(token));\n}\n\nfunction addReason(reasons: string[], reason: string): void {\n if (!reasons.includes(reason)) reasons.push(reason);\n}\n\nexport function scorePatternCandidate(\n input: PatternDiscoveryInput,\n candidate: PatternDiscoveryCandidate,\n): PatternDiscoveryMatch {\n const queryTokens = tokenize(input.query);\n const routeTokens = tokenize(input.route);\n const codeTokens = tokenize(input.code).slice(0, 250);\n const tokens = [...new Set([...queryTokens, ...routeTokens, ...codeTokens])];\n const text = candidateText(candidate);\n const reasons: string[] = [];\n const matchedTerms = new Set<string>();\n let score = 0;\n\n const highMatches = fieldMatches(tokens, text.high);\n if (highMatches.length > 0) {\n score += highMatches.length * 18;\n for (const term of highMatches) matchedTerms.add(term);\n addReason(reasons, 'matched slug, name, alias, category, or domain');\n }\n\n const mediumMatches = fieldMatches(tokens, text.medium);\n if (mediumMatches.length > 0) {\n score += mediumMatches.length * 10;\n for (const term of mediumMatches) matchedTerms.add(term);\n addReason(\n reasons,\n 'matched description, tags, components, interactions, visual brief, or layout hints',\n );\n }\n\n const lowMatches = fieldMatches(tokens, text.low);\n if (lowMatches.length > 0) {\n score += lowMatches.length * 4;\n for (const term of lowMatches) matchedTerms.add(term);\n addReason(reasons, 'matched composition, motion, responsive, preset, or accessibility details');\n }\n\n const slug = (candidate.slug || candidate.id).toLowerCase();\n const query = (input.query || '').toLowerCase();\n if (query && (slug === query || candidate.name?.toLowerCase() === query)) {\n score += 50;\n addReason(reasons, 'exact slug or name match');\n } else if (query && slug.includes(query.replace(/\\s+/g, '-'))) {\n score += 28;\n addReason(reasons, 'direct slug phrase match');\n }\n\n for (const domain of inferDomainTerms(tokens)) {\n const candidateDomainText = [text.high, text.medium, text.low].join(' ').toLowerCase();\n const hits = domain.terms.filter((term) => candidateDomainText.includes(term));\n if (hits.length > 0) {\n score += Math.min(30, hits.length * 6);\n for (const term of hits) matchedTerms.add(term);\n addReason(reasons, `${domain.domain} domain language`);\n }\n }\n\n if (input.route) {\n const route = input.route.toLowerCase();\n if (route.includes(slug) || slug.includes(route.replace(/^\\//, '').replace(/\\//g, '-'))) {\n score += 16;\n addReason(reasons, 'route name resembles pattern slug');\n }\n }\n\n if (input.code) {\n const code = input.code.toLowerCase();\n const codeHints = [\n ['intersectionobserver', 'scroll-reveal'],\n ['avatar', 'social profile or feed'],\n ['like', 'social engagement'],\n ['upload', 'upload flow'],\n ['input type=\"file\"', 'upload flow'],\n ['textarea', 'form or chat input'],\n ['message', 'chat surface'],\n ['grid', 'grid composition'],\n ['form', 'form surface'],\n ];\n for (const [needle, label] of codeHints) {\n if (\n code.includes(needle) &&\n [text.high, text.medium, text.low].join(' ').toLowerCase().includes(label.split(' ')[0])\n ) {\n score += 8;\n addReason(reasons, `source code hint: ${label}`);\n }\n }\n }\n\n return {\n candidate,\n score,\n reasons,\n matchedTerms: [...matchedTerms].sort(),\n };\n}\n\nexport function rankPatternCandidates(\n input: PatternDiscoveryInput,\n candidates: PatternDiscoveryCandidate[],\n): PatternDiscoveryMatch[] {\n const limit = input.limit ?? 10;\n return candidates\n .map((candidate) => scorePatternCandidate(input, candidate))\n .filter((match) => match.score > 0)\n .sort((a, b) => {\n if (b.score !== a.score) return b.score - a.score;\n return (a.candidate.slug || a.candidate.id).localeCompare(b.candidate.slug || b.candidate.id);\n })\n .slice(0, limit);\n}\n","import type { Pattern, PatternPreset } from './types.js';\n\nexport interface ResolvedPreset {\n preset: string;\n layout: PatternPreset['layout'];\n code: PatternPreset['code'];\n}\n\nexport function resolvePatternPreset(\n pattern: Pattern,\n explicitPreset?: string,\n themeDefaultPresets?: Record<string, string>,\n): ResolvedPreset {\n const presets = pattern.presets;\n const hasPresets = Object.keys(presets).length > 0;\n\n if (!hasPresets) {\n return {\n preset: '',\n layout: { layout: 'row', atoms: '' },\n code: pattern.code ?? { imports: '', example: '' },\n };\n }\n\n let presetName = explicitPreset;\n if (presetName && !presets[presetName]) presetName = undefined;\n if (!presetName && themeDefaultPresets?.[pattern.id]) {\n const themeName = themeDefaultPresets[pattern.id];\n if (presets[themeName]) presetName = themeName;\n }\n if (!presetName) presetName = pattern.default_preset;\n if (!presetName || !presets[presetName]) presetName = Object.keys(presets)[0];\n\n const preset = presets[presetName];\n return { preset: presetName, layout: preset.layout, code: preset.code };\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 * 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 const BLUEPRINT_PORTFOLIO_VISIBILITIES = ['featured', 'public', 'labs', 'hidden'] as const;\nexport type BlueprintPortfolioVisibility = (typeof BLUEPRINT_PORTFOLIO_VISIBILITIES)[number];\n\nexport const BLUEPRINT_PORTFOLIO_MATURITIES = [\n 'certified-flagship',\n 'supported-contract',\n 'experimental',\n 'fold-candidate',\n 'legacy-hidden',\n] as const;\nexport type BlueprintPortfolioMaturity = (typeof BLUEPRINT_PORTFOLIO_MATURITIES)[number];\n\nexport const BLUEPRINT_ARTIFACT_STATUSES = ['none', 'planned', 'candidate', 'certified'] as const;\nexport type BlueprintArtifactStatus = (typeof BLUEPRINT_ARTIFACT_STATUSES)[number];\n\nexport const PUBLIC_BLUEPRINT_SETS = ['all', 'featured', 'certified', 'labs'] as const;\nexport type PublicBlueprintSet = (typeof PUBLIC_BLUEPRINT_SETS)[number];\n\nexport interface BlueprintPortfolioArtifact {\n status: BlueprintArtifactStatus;\n showcase?: string;\n notes?: string;\n}\n\nexport interface BlueprintPortfolioMetadata {\n visibility: BlueprintPortfolioVisibility;\n maturity: BlueprintPortfolioMaturity;\n rationale: string;\n recommended_alternative?: string;\n artifact: BlueprintPortfolioArtifact;\n}\n\nexport function isBlueprintPortfolioVisibility(\n value: unknown,\n): value is BlueprintPortfolioVisibility {\n return BLUEPRINT_PORTFOLIO_VISIBILITIES.includes(value as BlueprintPortfolioVisibility);\n}\n\nexport function isBlueprintPortfolioMaturity(value: unknown): value is BlueprintPortfolioMaturity {\n return BLUEPRINT_PORTFOLIO_MATURITIES.includes(value as BlueprintPortfolioMaturity);\n}\n\nexport function isBlueprintArtifactStatus(value: unknown): value is BlueprintArtifactStatus {\n return BLUEPRINT_ARTIFACT_STATUSES.includes(value as BlueprintArtifactStatus);\n}\n\nexport function isPublicBlueprintSet(value: unknown): value is PublicBlueprintSet {\n return PUBLIC_BLUEPRINT_SETS.includes(value as PublicBlueprintSet);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function getBlueprintPortfolioMetadata(value: unknown): BlueprintPortfolioMetadata | null {\n const candidate =\n isRecord(value) && isRecord(value.blueprint_portfolio) ? value.blueprint_portfolio : value;\n if (!isRecord(candidate)) {\n return null;\n }\n\n const artifact = candidate.artifact;\n if (\n !isBlueprintPortfolioVisibility(candidate.visibility) ||\n !isBlueprintPortfolioMaturity(candidate.maturity) ||\n typeof candidate.rationale !== 'string' ||\n !isRecord(artifact) ||\n !isBlueprintArtifactStatus(artifact.status)\n ) {\n return null;\n }\n\n return {\n visibility: candidate.visibility,\n maturity: candidate.maturity,\n rationale: candidate.rationale,\n recommended_alternative:\n typeof candidate.recommended_alternative === 'string'\n ? candidate.recommended_alternative\n : undefined,\n artifact: {\n status: artifact.status,\n showcase: typeof artifact.showcase === 'string' ? artifact.showcase : undefined,\n notes: typeof artifact.notes === 'string' ? artifact.notes : undefined,\n },\n };\n}\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 blueprint_portfolio?: BlueprintPortfolioMetadata;\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 blueprint_portfolio?: BlueprintPortfolioMetadata | 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 blueprintSet?: PublicBlueprintSet;\n labs?: boolean;\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","import { getBlueprintPortfolioMetadata, 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 const portfolio = getBlueprintPortfolioMetadata(item.blueprint_portfolio);\n if (portfolio?.visibility === 'featured') {\n score += 900;\n }\n if (portfolio?.artifact.status === 'certified') {\n score += 650;\n } else if (portfolio?.artifact.status === 'candidate') {\n score += 120;\n }\n if (portfolio?.visibility === 'labs' || portfolio?.visibility === 'hidden') {\n score -= 400;\n }\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 { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type {\n Archetype,\n Blueprint,\n ContentType,\n Pattern,\n ResolvedContent,\n Shell,\n Theme,\n} from './types.js';\n\ntype ContentMap = {\n pattern: Pattern;\n archetype: Archetype;\n theme: Theme;\n blueprint: Blueprint;\n shell: Shell;\n};\n\nexport interface ResolverOptions {\n contentRoot: string;\n overridePaths?: string[];\n}\n\nexport interface ContentResolver {\n resolve<T extends ContentType>(\n type: T,\n id: string,\n ): Promise<ResolvedContent<ContentMap[T]> | null>;\n}\n\nconst TYPE_DIRS: Record<ContentType, string> = {\n pattern: 'patterns',\n archetype: 'archetypes',\n theme: 'themes',\n blueprint: 'blueprints',\n shell: 'shells',\n};\n\nasync function tryLoadJson<T>(filePath: string): Promise<T | null> {\n try {\n const content = await readFile(filePath, 'utf-8');\n return JSON.parse(content) as T;\n } catch {\n return null;\n }\n}\n\nexport function createResolver(options: ResolverOptions): ContentResolver {\n const { contentRoot, overridePaths = [] } = options;\n return {\n async resolve<T extends ContentType>(\n type: T,\n id: string,\n ): Promise<ResolvedContent<ContentMap[T]> | null> {\n const dir = TYPE_DIRS[type];\n const fileName = `${id}.json`;\n for (const overridePath of overridePaths) {\n const filePath = join(overridePath, dir, fileName);\n const item = await tryLoadJson<ContentMap[T]>(filePath);\n if (item) return { item, source: 'local', path: filePath };\n }\n // Check main content directory\n const mainPath = join(contentRoot, dir, fileName);\n const mainItem = await tryLoadJson<ContentMap[T]>(mainPath);\n if (mainItem) return { item: mainItem, source: 'core', path: mainPath };\n\n // Check content/core/{type}/ as fallback\n const corePath = join(contentRoot, 'core', dir, fileName);\n const coreItem = await tryLoadJson<ContentMap[T]>(corePath);\n if (coreItem) return { item: coreItem, source: 'core', path: corePath };\n\n return null;\n },\n };\n}\n","import type { LayoutItem, PatternRef } from '@decantr/essence-spec';\nimport type { PatternIO } from './types.js';\n\n// AUTO: hookType classifies each signal for custom hook generation\nexport type HookType = 'search' | 'filter' | 'selection' | 'sort';\n\nexport interface WiringSignal {\n name: string;\n init: string;\n hookType: HookType;\n}\n\nexport interface WiringRule {\n pair: [string, string];\n signals: WiringSignal[];\n props: Record<string, Record<string, string>>;\n // AUTO: hookProps maps pattern IDs to hook variable names passed as props\n hookProps: Record<string, Record<string, string>>;\n}\n\nexport interface WiringResult {\n rule: WiringRule;\n signals: WiringSignal[];\n props: Record<string, Record<string, string>>;\n hookProps: Record<string, Record<string, string>>;\n}\n\n/**\n * IO declaration for a pattern, used by the data-driven wiring system.\n */\nexport interface PatternIOEntry {\n id: string;\n io: PatternIO;\n}\n\n/**\n * A dynamically derived wiring edge between two patterns based on shared IO signals.\n */\nexport interface IOWiringEdge {\n producer: string;\n consumer: string;\n signals: string[];\n}\n\nexport const WIRING_RULES: WiringRule[] = [\n {\n pair: ['filter-bar', 'data-table'],\n signals: [\n { name: 'pageSearch', init: \"''\", hookType: 'search' },\n { name: 'pageStatus', init: \"'all'\", hookType: 'filter' },\n ],\n props: {\n 'filter-bar': { onSearch: 'setPageSearch', onCategory: 'setPageStatus' },\n 'data-table': { search: 'pageSearch', status: 'pageStatus' },\n },\n hookProps: {\n 'filter-bar': { search: 'search', filters: 'filters' },\n 'data-table': { search: 'search', filters: 'filters' },\n },\n },\n {\n pair: ['filter-bar', 'activity-feed'],\n signals: [\n { name: 'pageSearch', init: \"''\", hookType: 'search' },\n { name: 'pageView', init: \"'all'\", hookType: 'filter' },\n ],\n props: {\n 'filter-bar': { onSearch: 'setPageSearch', onView: 'setPageView' },\n 'activity-feed': { search: 'pageSearch', view: 'pageView' },\n },\n hookProps: {\n 'filter-bar': { search: 'search', filters: 'filters' },\n 'activity-feed': { search: 'search', filters: 'filters' },\n },\n },\n {\n pair: ['filter-bar', 'card-grid'],\n signals: [{ name: 'pageSearch', init: \"''\", hookType: 'search' }],\n props: {\n 'filter-bar': { onSearch: 'setPageSearch' },\n 'card-grid': { search: 'pageSearch' },\n },\n hookProps: {\n 'filter-bar': { search: 'search' },\n 'card-grid': { search: 'search' },\n },\n },\n];\n\nfunction getPatternId(item: LayoutItem): string | null {\n if (typeof item === 'string') return item;\n if ('pattern' in item) return (item as PatternRef).pattern;\n return null;\n}\n\n/**\n * Derive wiring edges from pattern IO declarations.\n * If pattern A produces signal X and pattern B consumes signal X, an edge is created.\n * Only patterns present in the layout are considered.\n */\nexport function deriveIOWirings(\n layoutIds: string[],\n patternIOMap: Map<string, PatternIO>,\n): IOWiringEdge[] {\n const edges: IOWiringEdge[] = [];\n const layoutSet = new Set(layoutIds);\n\n for (const producerId of layoutIds) {\n const producerIO = patternIOMap.get(producerId);\n if (!producerIO?.produces?.length) continue;\n\n for (const consumerId of layoutIds) {\n if (producerId === consumerId) continue;\n if (!layoutSet.has(consumerId)) continue;\n const consumerIO = patternIOMap.get(consumerId);\n if (!consumerIO?.consumes?.length) continue;\n\n const shared = producerIO.produces.filter((signal) => consumerIO.consumes!.includes(signal));\n if (shared.length > 0) {\n edges.push({ producer: producerId, consumer: consumerId, signals: shared });\n }\n }\n }\n\n return edges;\n}\n\n/**\n * Build a PatternIO map from an array of PatternIOEntry objects.\n */\nexport function buildIOMap(entries: PatternIOEntry[]): Map<string, PatternIO> {\n const map = new Map<string, PatternIO>();\n for (const entry of entries) {\n map.set(entry.id, entry.io);\n }\n return map;\n}\n\n/**\n * Detect wirings from a layout. Uses hardcoded WIRING_RULES for detailed\n * signal/prop information. When a patternIOMap is provided, also derives\n * IO-based wirings and merges them (hardcoded rules take precedence for\n * pairs they cover).\n */\nexport function detectWirings(\n layout: LayoutItem[],\n patternIOMap?: Map<string, PatternIO>,\n): WiringResult[] {\n const patternIds = layout.map(getPatternId).filter((id): id is string => id !== null);\n const results: WiringResult[] = [];\n const coveredPairs = new Set<string>();\n\n // Apply hardcoded rules first (these have detailed signal/prop info)\n for (const rule of WIRING_RULES) {\n const [a, b] = rule.pair;\n if (patternIds.includes(a) && patternIds.includes(b)) {\n results.push({ rule, signals: rule.signals, props: rule.props, hookProps: rule.hookProps });\n coveredPairs.add(`${a}:${b}`);\n coveredPairs.add(`${b}:${a}`);\n }\n }\n\n // If IO map provided, derive additional wirings from IO declarations\n if (patternIOMap) {\n const ioEdges = deriveIOWirings(patternIds, patternIOMap);\n for (const edge of ioEdges) {\n const pairKey = `${edge.producer}:${edge.consumer}`;\n if (coveredPairs.has(pairKey)) continue;\n coveredPairs.add(pairKey);\n\n // Generate a synthetic WiringRule from IO signals\n const signals: WiringSignal[] = edge.signals.map((sig) => {\n const camel = toCamelCase(sig);\n return {\n name: `page${capitalize(camel)}`,\n init: \"''\",\n hookType: classifySignal(sig),\n };\n });\n\n const producerProps: Record<string, string> = {};\n const consumerProps: Record<string, string> = {};\n const producerHookProps: Record<string, string> = {};\n const consumerHookProps: Record<string, string> = {};\n\n for (const sig of edge.signals) {\n const camel = toCamelCase(sig);\n const stateName = `page${capitalize(camel)}`;\n const setterName = `set${capitalize(stateName)}`;\n producerProps[`on${capitalize(camel)}`] = setterName;\n consumerProps[sig] = stateName;\n producerHookProps[sig] = sig;\n consumerHookProps[sig] = sig;\n }\n\n const rule: WiringRule = {\n pair: [edge.producer, edge.consumer],\n signals,\n props: { [edge.producer]: producerProps, [edge.consumer]: consumerProps },\n hookProps: { [edge.producer]: producerHookProps, [edge.consumer]: consumerHookProps },\n };\n\n results.push({ rule, signals, props: rule.props, hookProps: rule.hookProps });\n }\n }\n\n return results;\n}\n\n/**\n * Convert a kebab-case string to camelCase.\n */\nfunction toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());\n}\n\n/**\n * Capitalize the first letter of a string.\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Classify a signal name into a HookType for code generation.\n */\nfunction classifySignal(signal: string): HookType {\n const normalized = toCamelCase(signal);\n if (normalized === 'search') return 'search';\n if (normalized === 'selection') return 'selection';\n if (normalized === 'sort') return 'sort';\n return 'filter';\n}\n"],"mappings":";AAgCA,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,uBAAuB,IAAI,KAAK;AAOtC,SAAS,mBAAsB,OAAa;AAC1C,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,OAAO;AAClE,WAAO,MAAM;AAAA,EACf;AACA,SAAO;AACT;AAUO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAC1C;AAAA,EACA;AAAA,EAEA,YAAY,QAAgB,SAAiB,SAAmB;AAC9D,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACjB;AACF;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEO,IAAM,oBAAN,MAAwB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,oBAAI,IAAiC;AAAA,EAErD,YAAY,UAAoC,CAAC,GAAG;AAClD,SAAK,UACH,QAAQ,WAAW,QAAQ,IAAI,mBAAmB,QAAQ,IAAI,gBAAgB;AAChF,SAAK,SAAS,QAAQ;AACtB,SAAK,cAAc,QAAQ;AAC3B,SAAK,YAAY,QAAQ,aAAa;AACtC,SAAK,aAAa,QAAQ,cAAc;AAAA,EAC1C;AAAA;AAAA,EAIQ,eAAuC;AAC7C,UAAM,UAAkC;AAAA,MACtC,QAAQ;AAAA,IACV;AACA,QAAI,KAAK,QAAQ;AACf,cAAQ,WAAW,IAAI,KAAK;AAAA,IAC9B;AACA,QAAI,KAAK,aAAa;AACpB,cAAQ,gBAAgB,UAAU,KAAK,WAAW;AAAA,IACpD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,iBAAiB,KAAa,MAAuC;AACjF,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,KAAK,SAAS;AACnE,QAAI;AACF,aAAO,MAAM,MAAM,KAAK,EAAE,GAAG,MAAM,QAAQ,WAAW,OAAO,CAAC;AAAA,IAChE,UAAE;AACA,mBAAa,OAAO;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAc,QAAW,MAAc,MAAgC;AACrE,UAAM,MAAM,GAAG,KAAK,OAAO,GAAG,IAAI;AAClC,UAAM,WAAW,MAAM,KAAK,iBAAiB,KAAK;AAAA,MAChD,GAAG;AAAA,MACH,SAAS,EAAE,GAAG,KAAK,aAAa,GAAG,GAAG,MAAM,QAAQ;AAAA,IACtD,CAAC;AACD,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,WAAW,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,EAAE;AACrD,UAAI;AACJ,UAAI,UAAU,SAAS;AAEvB,UAAI,UAAU;AACZ,YAAI;AACF,oBAAU,KAAK,MAAM,QAAQ;AAC7B,cAAI,SAAS,OAAO,KAAK,OAAO,QAAQ,UAAU,UAAU;AAC1D,sBAAU,QAAQ;AAAA,UACpB,OAAO;AACL,sBAAU;AAAA,UACZ;AAAA,QACF,QAAQ;AACN,oBAAU;AAAA,QACZ;AAAA,MACF;AAEA,YAAM,IAAI,iBAAiB,SAAS,QAAQ,OAAO,SAAS,MAAM,KAAK,OAAO,IAAI,OAAO;AAAA,IAC3F;AACA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA;AAAA,EAIQ,UAAa,KAAuB;AAC1C,UAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAChC,QAAI,CAAC,MAAO,QAAO;AACnB,QAAI,KAAK,IAAI,IAAI,MAAM,YAAY,KAAK,YAAY;AAClD,WAAK,MAAM,OAAO,GAAG;AACrB,aAAO;AAAA,IACT;AACA,WAAO,MAAM;AAAA,EACf;AAAA,EAEQ,SAAY,KAAa,MAAe;AAC9C,SAAK,MAAM,IAAI,KAAK,EAAE,MAAM,WAAW,KAAK,IAAI,EAAE,CAAC;AAAA,EACrD;AAAA,EAEA,aAAmB;AACjB,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA;AAAA,EAIA,MAAM,cAAgC;AACpC,QAAI;AACF,YAAM,MAAM,KAAK,QAAQ,QAAQ,SAAS,SAAS;AACnD,YAAM,WAAW,MAAM,KAAK,iBAAiB,GAAG;AAChD,aAAO,SAAS;AAAA,IAClB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAIA,MAAM,YACJ,MACA,QAWiC;AACjC,UAAM,WAAW,QAAQ,IAAI,IAAI,KAAK,UAAU,UAAU,CAAC,CAAC,CAAC;AAC7D,UAAM,SAAS,KAAK,UAAkC,QAAQ;AAC9D,QAAI,OAAQ,QAAO;AAEnB,UAAM,eAAe,IAAI,gBAAgB;AACzC,QAAI,QAAQ,UAAW,cAAa,IAAI,aAAa,OAAO,SAAS;AACrE,QAAI,QAAQ,OAAQ,cAAa,IAAI,UAAU,OAAO,MAAM;AAC5D,QAAI,QAAQ,KAAM,cAAa,IAAI,QAAQ,OAAO,IAAI;AACtD,QAAI,QAAQ,YAAa,cAAa,IAAI,eAAe,MAAM;AAC/D,QAAI,QAAQ;AACV,mBAAa,IAAI,uBAAuB,OAAO,kBAAkB;AACnE,QAAI,QAAQ,aAAc,cAAa,IAAI,iBAAiB,OAAO,YAAY;AAC/E,QAAI,QAAQ,KAAM,cAAa,IAAI,QAAQ,MAAM;AACjD,QAAI,QAAQ,MAAO,cAAa,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AACjE,QAAI,QAAQ,OAAQ,cAAa,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAEpE,UAAM,QAAQ,aAAa,SAAS;AACpC,UAAM,OAAO,IAAI,IAAI,GAAG,QAAQ,IAAI,KAAK,KAAK,EAAE;AAChD,UAAM,SAAS,MAAM,KAAK,QAAgC,IAAI;AAC9D,SAAK,SAAS,UAAU,MAAM;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,WACJ,MACA,WACA,MACY;AACZ,UAAM,WAAW,OAAO,IAAI,IAAI,SAAS,IAAI,IAAI;AACjD,UAAM,SAAS,KAAK,UAAa,QAAQ;AACzC,QAAI,OAAQ,QAAO;AAEnB,UAAM,MAAM,MAAM,KAAK,QAAW,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE;AAEjE,UAAM,YAAY,mBAAmB,GAAG;AACxC,SAAK,SAAS,UAAU,SAAS;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,uBACJ,MACA,WACA,MACqC;AACrC,UAAM,WAAW,iBAAiB,IAAI,IAAI,SAAS,IAAI,IAAI;AAC3D,UAAM,SAAS,KAAK,UAAsC,QAAQ;AAClE,QAAI,OAAQ,QAAO;AAEnB,UAAM,SAAS,MAAM,KAAK,QAAoC,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE;AAC7F,SAAK,SAAS,UAAU,MAAM;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,iBACJ,MACA,WACA,MACqC;AACrC,UAAM,WAAW,kBAAkB,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,KAAK,UAAU,EAAE,IAAI,KAAK,eAAe,EAAE;AAC3G,UAAM,SAAS,KAAK,UAAsC,QAAQ;AAClE,QAAI,OAAQ,QAAO;AAEnB,UAAM,SAAS,MAAM,KAAK,QAAoC,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE;AAC7F,SAAK,SAAS,UAAU,MAAM;AAC9B,WAAO;AAAA,EACT;AAAA;AAAA,EAIA,MAAM,WAAW,WAAmB,MAAgC;AAClE,WAAO,KAAK,WAAoB,YAAY,WAAW,IAAI;AAAA,EAC7D;AAAA,EAEA,MAAM,aAAa,WAAmB,MAAkC;AACtE,WAAO,KAAK,WAAsB,cAAc,WAAW,IAAI;AAAA,EACjE;AAAA,EAEA,MAAM,SAAS,WAAmB,MAA8B;AAC9D,WAAO,KAAK,WAAkB,UAAU,WAAW,IAAI;AAAA,EACzD;AAAA,EAEA,MAAM,aAAa,WAAmB,MAAkC;AACtE,WAAO,KAAK,WAAsB,cAAc,WAAW,IAAI;AAAA,EACjE;AAAA,EAEA,MAAM,SAAS,WAAmB,MAA8B;AAC9D,WAAO,KAAK,WAAkB,UAAU,WAAW,IAAI;AAAA,EACzD;AAAA;AAAA,EAIA,MAAM,OAAO,QAA+C;AAC1D,UAAM,eAAe,IAAI,gBAAgB,EAAE,GAAG,OAAO,EAAE,CAAC;AACxD,QAAI,OAAO,KAAM,cAAa,IAAI,QAAQ,OAAO,IAAI;AACrD,QAAI,OAAO,UAAW,cAAa,IAAI,aAAa,OAAO,SAAS;AACpE,QAAI,OAAO,OAAQ,cAAa,IAAI,UAAU,OAAO,MAAM;AAC3D,QAAI,OAAO,KAAM,cAAa,IAAI,QAAQ,OAAO,IAAI;AACrD,QAAI,OAAO,YAAa,cAAa,IAAI,eAAe,MAAM;AAC9D,QAAI,OAAO;AACT,mBAAa,IAAI,uBAAuB,OAAO,kBAAkB;AACnE,QAAI,OAAO,aAAc,cAAa,IAAI,iBAAiB,OAAO,YAAY;AAC9E,QAAI,OAAO,KAAM,cAAa,IAAI,QAAQ,MAAM;AAChD,QAAI,OAAO,MAAO,cAAa,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAChE,QAAI,OAAO,OAAQ,cAAa,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAEnE,WAAO,KAAK,QAAwB,WAAW,YAAY,EAAE;AAAA,EAC/D;AAAA,EAEA,MAAM,qBAAqB,UAA8C;AACvE,UAAM,WAAW,eAAe,QAAQ;AACxC,UAAM,SAAS,KAAK,UAA6B,QAAQ;AACzD,QAAI,OAAQ,QAAO;AAEnB,UAAM,SAAS,MAAM,KAAK,QAA2B,UAAU,mBAAmB,QAAQ,CAAC,EAAE;AAC7F,SAAK,SAAS,UAAU,MAAM;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,qBACJ,UACA,QAWoD;AACpD,UAAM,WAAW,uBAAuB,QAAQ,IAAI,KAAK,UAAU,UAAU,CAAC,CAAC,CAAC;AAChF,UAAM,SAAS,KAAK,UAAqD,QAAQ;AACjF,QAAI,OAAQ,QAAO;AAEnB,UAAM,eAAe,IAAI,gBAAgB;AACzC,QAAI,QAAQ,KAAM,cAAa,IAAI,QAAQ,OAAO,IAAI;AACtD,QAAI,QAAQ,OAAQ,cAAa,IAAI,UAAU,OAAO,MAAM;AAC5D,QAAI,QAAQ,KAAM,cAAa,IAAI,QAAQ,OAAO,IAAI;AACtD,QAAI,QAAQ,YAAa,cAAa,IAAI,eAAe,MAAM;AAC/D,QAAI,QAAQ;AACV,mBAAa,IAAI,uBAAuB,OAAO,kBAAkB;AACnE,QAAI,QAAQ,aAAc,cAAa,IAAI,iBAAiB,OAAO,YAAY;AAC/E,QAAI,QAAQ,KAAM,cAAa,IAAI,QAAQ,MAAM;AACjD,QAAI,QAAQ,SAAS,KAAM,cAAa,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AACzE,QAAI,QAAQ,UAAU,KAAM,cAAa,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAE5E,UAAM,QAAQ,aAAa,SAAS;AACpC,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB,UAAU,mBAAmB,QAAQ,CAAC,WAAW,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IAC3E;AACA,SAAK,SAAS,UAAU,MAAM;AAC9B,WAAO;AAAA,EACT;AAAA;AAAA,EAIA,MAAM,aAAmC;AACvC,WAAO,KAAK,QAAqB,KAAK;AAAA,EACxC;AAAA,EAEA,MAAM,eAAe,SAAmD;AACtE,WAAO,KAAK,QAAyB,YAAY;AAAA,MAC/C,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,eAAkE;AACtE,WAAO,KAAK,QAAkD,aAAa;AAAA,EAC7E;AAAA,EAEA,MAAM,4BAA4B,QAMoB;AACpD,UAAM,eAAe,IAAI,gBAAgB;AACzC,QAAI,QAAQ,KAAM,cAAa,IAAI,QAAQ,OAAO,IAAI;AACtD,QAAI,QAAQ,MAAO,cAAa,IAAI,SAAS,OAAO,KAAK;AACzD,QAAI,QAAQ,EAAG,cAAa,IAAI,KAAK,OAAO,CAAC;AAC7C,QAAI,QAAQ,SAAS,KAAM,cAAa,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AACzE,QAAI,QAAQ,UAAU,KAAM,cAAa,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAC5E,UAAM,QAAQ,aAAa,SAAS;AAEpC,WAAO,KAAK;AAAA,MACV,mBAAmB,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA,EAIA,MAAM,UAAU,OAAe,mBAAqD;AAClF,WAAO,KAAK,QAAiC,WAAW,IAAI,EAAE;AAAA,EAChE;AAAA;AAAA,EAIA,MAAM,sBAAyD;AAC7D,UAAM,WAAW;AACjB,UAAM,SAAS,KAAK,UAAoC,QAAQ;AAChE,QAAI,OAAQ,QAAO;AAEnB,UAAM,SAAS,MAAM,KAAK,QAAkC,oBAAoB;AAChF,SAAK,SAAS,UAAU,MAAM;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,uBAA2D;AAC/D,UAAM,WAAW;AACjB,UAAM,SAAS,KAAK,UAAqC,QAAQ;AACjE,QAAI,OAAQ,QAAO;AAEnB,UAAM,SAAS,MAAM,KAAK,QAAmC,qBAAqB;AAClF,SAAK,SAAS,UAAU,MAAM;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,mCAAqE;AACzE,UAAM,WAAW;AACjB,UAAM,SAAS,KAAK,UAAmC,QAAQ;AAC/D,QAAI,OAAQ,QAAO;AAEnB,UAAM,SAAS,MAAM,KAAK,QAAiC,kCAAkC;AAC7F,SAAK,SAAS,UAAU,MAAM;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,+BAA+B,QAEY;AAC/C,UAAM,WAAW,iCAAiC,KAAK,UAAU,UAAU,CAAC,CAAC,CAAC;AAC9E,UAAM,SAAS,KAAK,UAA+C,QAAQ;AAC3E,QAAI,OAAQ,QAAO;AAEnB,UAAM,eAAe,IAAI,gBAAgB;AACzC,QAAI,QAAQ,UAAW,cAAa,IAAI,aAAa,OAAO,SAAS;AACrE,UAAM,QAAQ,aAAa,SAAS;AACpC,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB,wBAAwB,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IAClD;AACA,SAAK,SAAS,UAAU,MAAM;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,sBACJ,SACA,QACsC;AACtC,UAAM,eAAe,IAAI,gBAAgB;AACzC,QAAI,QAAQ,UAAW,cAAa,IAAI,aAAa,OAAO,SAAS;AACrE,UAAM,QAAQ,aAAa,SAAS;AAEpC,WAAO,KAAK,QAAqC,iBAAiB,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI;AAAA,MAC5F,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,oBACJ,OACA,QACwC;AACxC,UAAM,eAAe,IAAI,gBAAgB;AACzC,QAAI,QAAQ,UAAW,cAAa,IAAI,aAAa,OAAO,SAAS;AACrE,UAAM,QAAQ,aAAa,SAAS;AAEpC,WAAO,KAAK,QAAuC,gBAAgB,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI;AAAA,MAC7F,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,KAAK;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,yBACJ,SACA,QACgC;AAChC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,QACE;AAAA,QACA,WAAW;AAAA,MACb;AAAA,MACA;AAAA,IACF;AAEA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,aACJ,OACA,QAC6B;AAC7B,UAAM,eAAe,IAAI,gBAAgB;AACzC,QAAI,QAAQ,UAAW,cAAa,IAAI,aAAa,OAAO,SAAS;AACrE,UAAM,QAAQ,aAAa,SAAS;AAEpC,WAAO,KAAK,QAA4B,iBAAiB,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI;AAAA,MACnF,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,KAAK;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aACJ,OACA,QAC6B;AAC7B,UAAM,eAAe,IAAI,gBAAgB;AACzC,QAAI,QAAQ,UAAW,cAAa,IAAI,aAAa,OAAO,SAAS;AACrE,UAAM,QAAQ,aAAa,SAAS;AAEpC,WAAO,KAAK,QAA4B,iBAAiB,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI;AAAA,MACnF,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,KAAK;AAAA,IAC5B,CAAC;AAAA,EACH;AACF;AAsBO,SAAS,qBAAqB,UAAiC,CAAC,GAAmB;AACxF,QAAM,UAAU,QAAQ,WAAW;AACnC,SAAO;AAAA,IACL,MAAM,OAAO,OAAe,MAAwC;AAClE,YAAM,SAAS,IAAI,gBAAgB,EAAE,GAAG,MAAM,CAAC;AAC/C,UAAI,KAAM,QAAO,IAAI,QAAQ,IAAI;AACjC,YAAM,MAAM,MAAM,MAAM,GAAG,OAAO,WAAW,MAAM,EAAE;AACrD,UAAI,CAAC,IAAI,GAAI,QAAO,CAAC;AACrB,YAAM,OAAQ,MAAM,IAAI,KAAK;AAI7B,UAAI,MAAM,QAAQ,IAAI,EAAG,QAAO;AAChC,aAAQ,KAAqC,WAAW,CAAC;AAAA,IAC3D;AAAA,IACA,MAAM,MAAM,MAAc,IAAY,SAAoC;AACxE,YAAM,MAAM,UACR,GAAG,OAAO,YAAY,IAAI,IAAI,EAAE,IAAI,OAAO,KAC3C,GAAG,OAAO,YAAY,IAAI,IAAI,EAAE;AACpC,YAAM,MAAM,MAAM,MAAM,GAAG;AAC3B,UAAI,CAAC,IAAI,GAAI,QAAO;AACpB,aAAO,IAAI,KAAK;AAAA,IAClB;AAAA,EACF;AACF;;;ACniBA;AAAA,EACqC;AAAA,EACP;AAAA,EACH;AAAA,EACJ;AAAA,EACD;AAAA,EACE;AAAA,EACJ;AAAA,EACD;AAAA,EACM;AAAA,EACvB;AAAA,OACK;;;ACSP,IAAM,aAAa,oBAAI,IAAI;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,kBAA4C;AAAA,EAChD,QAAQ;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAU,CAAC,QAAQ,YAAY,YAAY,aAAa,SAAS,SAAS,WAAW,MAAM;AAAA,EAC3F,WAAW,CAAC,aAAa,SAAS,aAAa,OAAO,UAAU,UAAU,OAAO;AAAA,EACjF,MAAM,CAAC,QAAQ,SAAS,YAAY,UAAU,UAAU,QAAQ;AAClE;AAEA,SAASA,UAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,YAAY,OAA0B;AAC7C,SAAO,MAAM,QAAQ,KAAK,IACtB,MAAM,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,IAClE,CAAC;AACP;AAEA,SAAS,aAAa,OAAwB;AAC5C,MAAI,CAACA,UAAS,KAAK,EAAG,QAAO;AAC7B,SAAO,OAAO,OAAO,KAAK,EACvB,QAAQ,CAAC,UAAU;AAClB,QAAI,OAAO,UAAU,SAAU,QAAO,CAAC,KAAK;AAC5C,QAAI,MAAM,QAAQ,KAAK;AACrB,aAAO,MAAM,OAAO,CAAC,SAAyB,OAAO,SAAS,QAAQ;AACxE,QAAIA,UAAS,KAAK,EAAG,QAAO,CAAC,aAAa,KAAK,CAAC;AAChD,WAAO,CAAC;AAAA,EACV,CAAC,EACA,KAAK,GAAG;AACb;AAEO,SAAS,4BACd,SACA,UAA8C,CAAC,GACpB;AAC3B,QAAM,SAAS;AACf,QAAM,OACJ,QAAQ,SACP,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO,YAChD,OAAO,OAAO,OAAO,WAAW,OAAO,KAAK;AAC/C,SAAO;AAAA,IACL,IAAI,OAAO,OAAO,OAAO,WAAW,OAAO,KAAM,QAAQ;AAAA,IACzD;AAAA,IACA,MAAM,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,IACtD,aAAa,OAAO,OAAO,gBAAgB,WAAW,OAAO,cAAc;AAAA,IAC3E,MAAM,YAAY,OAAO,IAAI;AAAA,IAC7B,YAAY,YAAY,OAAO,UAAU;AAAA,IACzC,cAAc,YAAY,OAAO,YAAY;AAAA,IAC7C,cACE,OAAO,OAAO,iBAAiB,WAC3B,OAAO,eACP,OAAO,OAAO,gBAAgB,WAC5B,OAAO,cACP;AAAA,IACR,cAAcA,UAAS,OAAO,YAAY,IACrC,OAAO,eACR;AAAA,IACJ,SAAS,YAAY,OAAO,OAAO;AAAA,IACnC,UAAU,OAAO,OAAO,aAAa,WAAW,OAAO,WAAW;AAAA,IAClE,QAAQ,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AAAA,IAC5D,QAAQ,QAAQ;AAAA,IAChB;AAAA,EACF;AACF;AAEA,SAAS,SAAS,OAAqC;AACrD,MAAI,CAAC,MAAO,QAAO,CAAC;AACpB,QAAM,SAAS,MACZ,YAAY,EACZ,QAAQ,mBAAmB,OAAO,EAClC,MAAM,aAAa,EACnB,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,CAAC,UAAU,MAAM,UAAU,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC;AAChE,SAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC;AAC5B;AAEA,SAAS,iBAAiB,QAAyD;AACjF,QAAM,WAAW,IAAI,IAAI,MAAM;AAC/B,QAAM,UAAiD,CAAC;AACxD,aAAW,CAAC,QAAQ,KAAK,KAAK,OAAO,QAAQ,eAAe,GAAG;AAC7D,UAAM,OAAO,MAAM,OAAO,CAAC,SAAS,SAAS,IAAI,IAAI,CAAC;AACtD,QAAI,KAAK,SAAS,EAAG,SAAQ,KAAK,EAAE,QAAQ,MAAM,CAAC;AAAA,EACrD;AACA,SAAO;AACT;AAEA,SAAS,cAAc,WAIrB;AACA,QAAM,UAAU,UAAU;AAC1B,QAAM,gBAAgBA,UAAS,OAAO,IAAI,UAAU,CAAC;AACrD,QAAM,UAAUA,UAAS,cAAc,OAAO,IAAI,aAAa,cAAc,OAAO,IAAI;AACxF,QAAM,cAAcA,UAAS,cAAc,WAAW,IAClD,aAAa,cAAc,WAAW,IACtC;AACJ,QAAM,SAASA,UAAS,cAAc,MAAM,IAAI,aAAa,cAAc,MAAM,IAAI;AACrF,QAAM,aAAaA,UAAS,cAAc,UAAU,IAChD,aAAa,cAAc,UAAU,IACrC;AACJ,QAAM,gBAAgBA,UAAS,cAAc,aAAa,IACtD,aAAa,cAAc,aAAa,IACxC;AAEJ,SAAO;AAAA,IACL,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU,SAAS,KAAK,GAAG;AAAA,MAC3B,UAAU;AAAA,MACV,UAAU;AAAA,IACZ,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IACX,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,UAAU,MAAM,KAAK,GAAG;AAAA,MACxB,UAAU,YAAY,KAAK,GAAG;AAAA,MAC9B,UAAU,cAAc,KAAK,GAAG;AAAA,MAChC,UAAU;AAAA,MACV,UAAU,eAAe,aAAa,UAAU,YAAY,IAAI;AAAA,IAClE,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IACX,KAAK,CAAC,SAAS,aAAa,QAAQ,YAAY,aAAa,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,EACzF;AACF;AAEA,SAAS,aAAa,QAAkB,MAAwB;AAC9D,QAAM,QAAQ,KAAK,YAAY;AAC/B,SAAO,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,KAAK,CAAC;AACvD;AAEA,SAAS,UAAU,SAAmB,QAAsB;AAC1D,MAAI,CAAC,QAAQ,SAAS,MAAM,EAAG,SAAQ,KAAK,MAAM;AACpD;AAEO,SAAS,sBACd,OACA,WACuB;AACvB,QAAM,cAAc,SAAS,MAAM,KAAK;AACxC,QAAM,cAAc,SAAS,MAAM,KAAK;AACxC,QAAM,aAAa,SAAS,MAAM,IAAI,EAAE,MAAM,GAAG,GAAG;AACpD,QAAM,SAAS,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC;AAC3E,QAAM,OAAO,cAAc,SAAS;AACpC,QAAM,UAAoB,CAAC;AAC3B,QAAM,eAAe,oBAAI,IAAY;AACrC,MAAI,QAAQ;AAEZ,QAAM,cAAc,aAAa,QAAQ,KAAK,IAAI;AAClD,MAAI,YAAY,SAAS,GAAG;AAC1B,aAAS,YAAY,SAAS;AAC9B,eAAW,QAAQ,YAAa,cAAa,IAAI,IAAI;AACrD,cAAU,SAAS,gDAAgD;AAAA,EACrE;AAEA,QAAM,gBAAgB,aAAa,QAAQ,KAAK,MAAM;AACtD,MAAI,cAAc,SAAS,GAAG;AAC5B,aAAS,cAAc,SAAS;AAChC,eAAW,QAAQ,cAAe,cAAa,IAAI,IAAI;AACvD;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAa,aAAa,QAAQ,KAAK,GAAG;AAChD,MAAI,WAAW,SAAS,GAAG;AACzB,aAAS,WAAW,SAAS;AAC7B,eAAW,QAAQ,WAAY,cAAa,IAAI,IAAI;AACpD,cAAU,SAAS,2EAA2E;AAAA,EAChG;AAEA,QAAM,QAAQ,UAAU,QAAQ,UAAU,IAAI,YAAY;AAC1D,QAAM,SAAS,MAAM,SAAS,IAAI,YAAY;AAC9C,MAAI,UAAU,SAAS,SAAS,UAAU,MAAM,YAAY,MAAM,QAAQ;AACxE,aAAS;AACT,cAAU,SAAS,0BAA0B;AAAA,EAC/C,WAAW,SAAS,KAAK,SAAS,MAAM,QAAQ,QAAQ,GAAG,CAAC,GAAG;AAC7D,aAAS;AACT,cAAU,SAAS,0BAA0B;AAAA,EAC/C;AAEA,aAAW,UAAU,iBAAiB,MAAM,GAAG;AAC7C,UAAM,sBAAsB,CAAC,KAAK,MAAM,KAAK,QAAQ,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,YAAY;AACrF,UAAM,OAAO,OAAO,MAAM,OAAO,CAAC,SAAS,oBAAoB,SAAS,IAAI,CAAC;AAC7E,QAAI,KAAK,SAAS,GAAG;AACnB,eAAS,KAAK,IAAI,IAAI,KAAK,SAAS,CAAC;AACrC,iBAAW,QAAQ,KAAM,cAAa,IAAI,IAAI;AAC9C,gBAAU,SAAS,GAAG,OAAO,MAAM,kBAAkB;AAAA,IACvD;AAAA,EACF;AAEA,MAAI,MAAM,OAAO;AACf,UAAM,QAAQ,MAAM,MAAM,YAAY;AACtC,QAAI,MAAM,SAAS,IAAI,KAAK,KAAK,SAAS,MAAM,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,GAAG,CAAC,GAAG;AACvF,eAAS;AACT,gBAAU,SAAS,mCAAmC;AAAA,IACxD;AAAA,EACF;AAEA,MAAI,MAAM,MAAM;AACd,UAAM,OAAO,MAAM,KAAK,YAAY;AACpC,UAAM,YAAY;AAAA,MAChB,CAAC,wBAAwB,eAAe;AAAA,MACxC,CAAC,UAAU,wBAAwB;AAAA,MACnC,CAAC,QAAQ,mBAAmB;AAAA,MAC5B,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,qBAAqB,aAAa;AAAA,MACnC,CAAC,YAAY,oBAAoB;AAAA,MACjC,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,QAAQ,kBAAkB;AAAA,MAC3B,CAAC,QAAQ,cAAc;AAAA,IACzB;AACA,eAAW,CAAC,QAAQ,KAAK,KAAK,WAAW;AACvC,UACE,KAAK,SAAS,MAAM,KACpB,CAAC,KAAK,MAAM,KAAK,QAAQ,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,YAAY,EAAE,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,GACvF;AACA,iBAAS;AACT,kBAAU,SAAS,qBAAqB,KAAK,EAAE;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,CAAC,GAAG,YAAY,EAAE,KAAK;AAAA,EACvC;AACF;AAEO,SAAS,sBACd,OACA,YACyB;AACzB,QAAM,QAAQ,MAAM,SAAS;AAC7B,SAAO,WACJ,IAAI,CAAC,cAAc,sBAAsB,OAAO,SAAS,CAAC,EAC1D,OAAO,CAAC,UAAU,MAAM,QAAQ,CAAC,EACjC,KAAK,CAAC,GAAG,MAAM;AACd,QAAI,EAAE,UAAU,EAAE,MAAO,QAAO,EAAE,QAAQ,EAAE;AAC5C,YAAQ,EAAE,UAAU,QAAQ,EAAE,UAAU,IAAI,cAAc,EAAE,UAAU,QAAQ,EAAE,UAAU,EAAE;AAAA,EAC9F,CAAC,EACA,MAAM,GAAG,KAAK;AACnB;;;ACvVO,SAAS,qBACd,SACA,gBACA,qBACgB;AAChB,QAAM,UAAU,QAAQ;AACxB,QAAM,aAAa,OAAO,KAAK,OAAO,EAAE,SAAS;AAEjD,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ,EAAE,QAAQ,OAAO,OAAO,GAAG;AAAA,MACnC,MAAM,QAAQ,QAAQ,EAAE,SAAS,IAAI,SAAS,GAAG;AAAA,IACnD;AAAA,EACF;AAEA,MAAI,aAAa;AACjB,MAAI,cAAc,CAAC,QAAQ,UAAU,EAAG,cAAa;AACrD,MAAI,CAAC,cAAc,sBAAsB,QAAQ,EAAE,GAAG;AACpD,UAAM,YAAY,oBAAoB,QAAQ,EAAE;AAChD,QAAI,QAAQ,SAAS,EAAG,cAAa;AAAA,EACvC;AACA,MAAI,CAAC,WAAY,cAAa,QAAQ;AACtC,MAAI,CAAC,cAAc,CAAC,QAAQ,UAAU,EAAG,cAAa,OAAO,KAAK,OAAO,EAAE,CAAC;AAE5E,QAAM,SAAS,QAAQ,UAAU;AACjC,SAAO,EAAE,QAAQ,YAAY,QAAQ,OAAO,QAAQ,MAAM,OAAO,KAAK;AACxE;;;AC8IO,IAAM,mCAAmC,CAAC,YAAY,UAAU,QAAQ,QAAQ;AAGhF,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,8BAA8B,CAAC,QAAQ,WAAW,aAAa,WAAW;AAGhF,IAAM,wBAAwB,CAAC,OAAO,YAAY,aAAa,MAAM;AAiBrE,SAAS,+BACd,OACuC;AACvC,SAAO,iCAAiC,SAAS,KAAqC;AACxF;AAEO,SAAS,6BAA6B,OAAqD;AAChG,SAAO,+BAA+B,SAAS,KAAmC;AACpF;AAEO,SAAS,0BAA0B,OAAkD;AAC1F,SAAO,4BAA4B,SAAS,KAAgC;AAC9E;AAEO,SAAS,qBAAqB,OAA6C;AAChF,SAAO,sBAAsB,SAAS,KAA2B;AACnE;AAEA,SAASC,UAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEO,SAAS,8BAA8B,OAAmD;AAC/F,QAAM,YACJA,UAAS,KAAK,KAAKA,UAAS,MAAM,mBAAmB,IAAI,MAAM,sBAAsB;AACvF,MAAI,CAACA,UAAS,SAAS,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,UAAU;AAC3B,MACE,CAAC,+BAA+B,UAAU,UAAU,KACpD,CAAC,6BAA6B,UAAU,QAAQ,KAChD,OAAO,UAAU,cAAc,YAC/B,CAACA,UAAS,QAAQ,KAClB,CAAC,0BAA0B,SAAS,MAAM,GAC1C;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,YAAY,UAAU;AAAA,IACtB,UAAU,UAAU;AAAA,IACpB,WAAW,UAAU;AAAA,IACrB,yBACE,OAAO,UAAU,4BAA4B,WACzC,UAAU,0BACV;AAAA,IACN,UAAU;AAAA,MACR,QAAQ,SAAS;AAAA,MACjB,UAAU,OAAO,SAAS,aAAa,WAAW,SAAS,WAAW;AAAA,MACtE,OAAO,OAAO,SAAS,UAAU,WAAW,SAAS,QAAQ;AAAA,IAC/D;AAAA,EACF;AACF;AAqFO,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;AAwKO,IAAM,yBAAyB,CAAC,YAAY,aAAa,cAAc;AAIvE,SAAS,sBAAsB,OAA6C;AACjF,SAAO,uBAAuB,SAAS,KAA4B;AACrE;AAEO,IAAM,+BAA+B,CAAC,YAAY,aAAa,QAAQ;AAIvE,SAAS,4BAA4B,OAAmD;AAC7F,SAAO,6BAA6B,SAAS,KAAkC;AACjF;;;ACljBA,SAAS,kBAAkB,QAAgC;AACzD,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,gBAAgB,OAA+B;AACtD,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,oBAAoB,MAA8B;AACzD,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,uBAAuB,MAAoC;AAClE,QAAM,eAAe,KAAK;AAC1B,MAAI,QAAQ;AAEZ,QAAM,YAAY,8BAA8B,KAAK,mBAAmB;AACxE,MAAI,WAAW,eAAe,YAAY;AACxC,aAAS;AAAA,EACX;AACA,MAAI,WAAW,SAAS,WAAW,aAAa;AAC9C,aAAS;AAAA,EACX,WAAW,WAAW,SAAS,WAAW,aAAa;AACrD,aAAS;AAAA,EACX;AACA,MAAI,WAAW,eAAe,UAAU,WAAW,eAAe,UAAU;AAC1E,aAAS;AAAA,EACX;AAEA,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,aAAa;AAC5B,aAAS;AAAA,EACX;AAEA,MAAI,aAAa,iBAAiB,eAAe;AAC/C,aAAS;AAAA,EACX,WAAW,aAAa,iBAAiB,YAAY;AACnD,aAAS;AAAA,EACX;AAEA,WAAS,kBAAkB,aAAa,mBAAmB;AAC3D,WAAS,gBAAgB,aAAa,oBAAoB;AAC1D,WAAS,oBAAoB,aAAa,eAAe;AACzD,WAAS,KAAK,OAAO,aAAa,oBAAoB,KAAK,CAAC;AAC5D,WAAS,aAAa,iBAAiB;AAEvC,SAAO;AACT;AAEO,SAAS,2BAA2B,OAAqD;AAC9F,UAAQ,OAAO;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,qBACd,GACA,GACA,OAA0B,eAClB;AACR,MAAI,SAAS,QAAQ;AACnB,YAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,EAAE,QAAQ,EAAE,IAAI;AAAA,EAC1D;AAEA,MAAI,SAAS,UAAU;AACrB,UAAMC,kBACJ,IAAI,KAAK,EAAE,gBAAgB,CAAC,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,gBAAgB,CAAC,EAAE,QAAQ;AAClF,QAAIA,oBAAmB,GAAG;AACxB,aAAOA;AAAA,IACT;AACA,WAAO,EAAE,KAAK,cAAc,EAAE,IAAI;AAAA,EACpC;AAEA,QAAM,gBAAgB,uBAAuB,CAAC,IAAI,uBAAuB,CAAC;AAC1E,MAAI,kBAAkB,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,MAAI,EAAE,cAAc,EAAE,WAAW;AAC/B,QAAI,EAAE,cAAc,YAAa,QAAO;AACxC,QAAI,EAAE,cAAc,YAAa,QAAO;AAAA,EAC1C;AAEA,QAAM,iBACJ,IAAI,KAAK,EAAE,gBAAgB,CAAC,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,gBAAgB,CAAC,EAAE,QAAQ;AAClF,MAAI,mBAAmB,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,UAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,EAAE,QAAQ,EAAE,IAAI;AAC1D;AAEO,SAAS,kBACd,OACA,OAA0B,eACrB;AACL,SAAO,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,UAAU,qBAAqB,MAAM,OAAO,IAAI,CAAC;AACjF;;;AClJA,SAAS,gBAAgB;AACzB,SAAS,YAAY;AA+BrB,IAAM,YAAyC;AAAA,EAC7C,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AAAA,EACP,WAAW;AAAA,EACX,OAAO;AACT;AAEA,eAAe,YAAe,UAAqC;AACjE,MAAI;AACF,UAAM,UAAU,MAAM,SAAS,UAAU,OAAO;AAChD,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,eAAe,SAA2C;AACxE,QAAM,EAAE,aAAa,gBAAgB,CAAC,EAAE,IAAI;AAC5C,SAAO;AAAA,IACL,MAAM,QACJ,MACA,IACgD;AAChD,YAAM,MAAM,UAAU,IAAI;AAC1B,YAAM,WAAW,GAAG,EAAE;AACtB,iBAAW,gBAAgB,eAAe;AACxC,cAAM,WAAW,KAAK,cAAc,KAAK,QAAQ;AACjD,cAAM,OAAO,MAAM,YAA2B,QAAQ;AACtD,YAAI,KAAM,QAAO,EAAE,MAAM,QAAQ,SAAS,MAAM,SAAS;AAAA,MAC3D;AAEA,YAAM,WAAW,KAAK,aAAa,KAAK,QAAQ;AAChD,YAAM,WAAW,MAAM,YAA2B,QAAQ;AAC1D,UAAI,SAAU,QAAO,EAAE,MAAM,UAAU,QAAQ,QAAQ,MAAM,SAAS;AAGtE,YAAM,WAAW,KAAK,aAAa,QAAQ,KAAK,QAAQ;AACxD,YAAM,WAAW,MAAM,YAA2B,QAAQ;AAC1D,UAAI,SAAU,QAAO,EAAE,MAAM,UAAU,QAAQ,QAAQ,MAAM,SAAS;AAEtE,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AChCO,IAAM,eAA6B;AAAA,EACxC;AAAA,IACE,MAAM,CAAC,cAAc,YAAY;AAAA,IACjC,SAAS;AAAA,MACP,EAAE,MAAM,cAAc,MAAM,MAAM,UAAU,SAAS;AAAA,MACrD,EAAE,MAAM,cAAc,MAAM,SAAS,UAAU,SAAS;AAAA,IAC1D;AAAA,IACA,OAAO;AAAA,MACL,cAAc,EAAE,UAAU,iBAAiB,YAAY,gBAAgB;AAAA,MACvE,cAAc,EAAE,QAAQ,cAAc,QAAQ,aAAa;AAAA,IAC7D;AAAA,IACA,WAAW;AAAA,MACT,cAAc,EAAE,QAAQ,UAAU,SAAS,UAAU;AAAA,MACrD,cAAc,EAAE,QAAQ,UAAU,SAAS,UAAU;AAAA,IACvD;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM,CAAC,cAAc,eAAe;AAAA,IACpC,SAAS;AAAA,MACP,EAAE,MAAM,cAAc,MAAM,MAAM,UAAU,SAAS;AAAA,MACrD,EAAE,MAAM,YAAY,MAAM,SAAS,UAAU,SAAS;AAAA,IACxD;AAAA,IACA,OAAO;AAAA,MACL,cAAc,EAAE,UAAU,iBAAiB,QAAQ,cAAc;AAAA,MACjE,iBAAiB,EAAE,QAAQ,cAAc,MAAM,WAAW;AAAA,IAC5D;AAAA,IACA,WAAW;AAAA,MACT,cAAc,EAAE,QAAQ,UAAU,SAAS,UAAU;AAAA,MACrD,iBAAiB,EAAE,QAAQ,UAAU,SAAS,UAAU;AAAA,IAC1D;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM,CAAC,cAAc,WAAW;AAAA,IAChC,SAAS,CAAC,EAAE,MAAM,cAAc,MAAM,MAAM,UAAU,SAAS,CAAC;AAAA,IAChE,OAAO;AAAA,MACL,cAAc,EAAE,UAAU,gBAAgB;AAAA,MAC1C,aAAa,EAAE,QAAQ,aAAa;AAAA,IACtC;AAAA,IACA,WAAW;AAAA,MACT,cAAc,EAAE,QAAQ,SAAS;AAAA,MACjC,aAAa,EAAE,QAAQ,SAAS;AAAA,IAClC;AAAA,EACF;AACF;AAEA,SAAS,aAAa,MAAiC;AACrD,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,MAAI,aAAa,KAAM,QAAQ,KAAoB;AACnD,SAAO;AACT;AAOO,SAAS,gBACd,WACA,cACgB;AAChB,QAAM,QAAwB,CAAC;AAC/B,QAAM,YAAY,IAAI,IAAI,SAAS;AAEnC,aAAW,cAAc,WAAW;AAClC,UAAM,aAAa,aAAa,IAAI,UAAU;AAC9C,QAAI,CAAC,YAAY,UAAU,OAAQ;AAEnC,eAAW,cAAc,WAAW;AAClC,UAAI,eAAe,WAAY;AAC/B,UAAI,CAAC,UAAU,IAAI,UAAU,EAAG;AAChC,YAAM,aAAa,aAAa,IAAI,UAAU;AAC9C,UAAI,CAAC,YAAY,UAAU,OAAQ;AAEnC,YAAM,SAAS,WAAW,SAAS,OAAO,CAAC,WAAW,WAAW,SAAU,SAAS,MAAM,CAAC;AAC3F,UAAI,OAAO,SAAS,GAAG;AACrB,cAAM,KAAK,EAAE,UAAU,YAAY,UAAU,YAAY,SAAS,OAAO,CAAC;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKO,SAAS,WAAW,SAAmD;AAC5E,QAAM,MAAM,oBAAI,IAAuB;AACvC,aAAW,SAAS,SAAS;AAC3B,QAAI,IAAI,MAAM,IAAI,MAAM,EAAE;AAAA,EAC5B;AACA,SAAO;AACT;AAQO,SAAS,cACd,QACA,cACgB;AAChB,QAAM,aAAa,OAAO,IAAI,YAAY,EAAE,OAAO,CAAC,OAAqB,OAAO,IAAI;AACpF,QAAM,UAA0B,CAAC;AACjC,QAAM,eAAe,oBAAI,IAAY;AAGrC,aAAW,QAAQ,cAAc;AAC/B,UAAM,CAAC,GAAG,CAAC,IAAI,KAAK;AACpB,QAAI,WAAW,SAAS,CAAC,KAAK,WAAW,SAAS,CAAC,GAAG;AACpD,cAAQ,KAAK,EAAE,MAAM,SAAS,KAAK,SAAS,OAAO,KAAK,OAAO,WAAW,KAAK,UAAU,CAAC;AAC1F,mBAAa,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE;AAC5B,mBAAa,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE;AAAA,IAC9B;AAAA,EACF;AAGA,MAAI,cAAc;AAChB,UAAM,UAAU,gBAAgB,YAAY,YAAY;AACxD,eAAW,QAAQ,SAAS;AAC1B,YAAM,UAAU,GAAG,KAAK,QAAQ,IAAI,KAAK,QAAQ;AACjD,UAAI,aAAa,IAAI,OAAO,EAAG;AAC/B,mBAAa,IAAI,OAAO;AAGxB,YAAM,UAA0B,KAAK,QAAQ,IAAI,CAAC,QAAQ;AACxD,cAAM,QAAQ,YAAY,GAAG;AAC7B,eAAO;AAAA,UACL,MAAM,OAAO,WAAW,KAAK,CAAC;AAAA,UAC9B,MAAM;AAAA,UACN,UAAU,eAAe,GAAG;AAAA,QAC9B;AAAA,MACF,CAAC;AAED,YAAM,gBAAwC,CAAC;AAC/C,YAAM,gBAAwC,CAAC;AAC/C,YAAM,oBAA4C,CAAC;AACnD,YAAM,oBAA4C,CAAC;AAEnD,iBAAW,OAAO,KAAK,SAAS;AAC9B,cAAM,QAAQ,YAAY,GAAG;AAC7B,cAAM,YAAY,OAAO,WAAW,KAAK,CAAC;AAC1C,cAAM,aAAa,MAAM,WAAW,SAAS,CAAC;AAC9C,sBAAc,KAAK,WAAW,KAAK,CAAC,EAAE,IAAI;AAC1C,sBAAc,GAAG,IAAI;AACrB,0BAAkB,GAAG,IAAI;AACzB,0BAAkB,GAAG,IAAI;AAAA,MAC3B;AAEA,YAAM,OAAmB;AAAA,QACvB,MAAM,CAAC,KAAK,UAAU,KAAK,QAAQ;AAAA,QACnC;AAAA,QACA,OAAO,EAAE,CAAC,KAAK,QAAQ,GAAG,eAAe,CAAC,KAAK,QAAQ,GAAG,cAAc;AAAA,QACxE,WAAW,EAAE,CAAC,KAAK,QAAQ,GAAG,mBAAmB,CAAC,KAAK,QAAQ,GAAG,kBAAkB;AAAA,MACtF;AAEA,cAAQ,KAAK,EAAE,MAAM,SAAS,OAAO,KAAK,OAAO,WAAW,KAAK,UAAU,CAAC;AAAA,IAC9E;AAAA,EACF;AAEA,SAAO;AACT;AAKA,SAAS,YAAY,KAAqB;AACxC,SAAO,IAAI,QAAQ,aAAa,CAAC,GAAG,MAAc,EAAE,YAAY,CAAC;AACnE;AAKA,SAAS,WAAW,KAAqB;AACvC,SAAO,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAClD;AAKA,SAAS,eAAe,QAA0B;AAChD,QAAM,aAAa,YAAY,MAAM;AACrC,MAAI,eAAe,SAAU,QAAO;AACpC,MAAI,eAAe,YAAa,QAAO;AACvC,MAAI,eAAe,OAAQ,QAAO;AAClC,SAAO;AACT;","names":["isRecord","isRecord","publishedDelta"]}
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@decantr/registry",
3
- "version": "3.1.0",
4
- "description": "Certified vocabulary contracts, schemas, API client, and content utilities for Decantr",
3
+ "version": "3.8.0",
4
+ "description": "Legacy compatibility package for Decantr content contracts, schemas, and API client utilities",
5
5
  "keywords": [
6
6
  "decantr",
7
7
  "decantr-ai",
8
8
  "registry",
9
+ "content-corpus",
9
10
  "certified-vocabulary",
10
11
  "ui-patterns",
11
12
  "starter-kits",
@@ -69,7 +70,8 @@
69
70
  "access": "public"
70
71
  },
71
72
  "dependencies": {
72
- "@decantr/essence-spec": "3.1.0"
73
+ "@decantr/content": "3.8.0",
74
+ "@decantr/essence-spec": "3.8.0"
73
75
  },
74
76
  "scripts": {
75
77
  "build": "tsup",