@12ui/design 0.2.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.
Files changed (157) hide show
  1. package/README.md +484 -0
  2. package/dist/artifact-materializer.d.ts +17 -0
  3. package/dist/artifact-materializer.d.ts.map +1 -0
  4. package/dist/artifact-materializer.js +66 -0
  5. package/dist/artifact-materializer.js.map +1 -0
  6. package/dist/cli-arguments.d.ts +8 -0
  7. package/dist/cli-arguments.d.ts.map +1 -0
  8. package/dist/cli-arguments.js +39 -0
  9. package/dist/cli-arguments.js.map +1 -0
  10. package/dist/cli-auth-command.d.ts +3 -0
  11. package/dist/cli-auth-command.d.ts.map +1 -0
  12. package/dist/cli-auth-command.js +100 -0
  13. package/dist/cli-auth-command.js.map +1 -0
  14. package/dist/cli-corpus-command.d.ts +12 -0
  15. package/dist/cli-corpus-command.d.ts.map +1 -0
  16. package/dist/cli-corpus-command.js +120 -0
  17. package/dist/cli-corpus-command.js.map +1 -0
  18. package/dist/cli-corpus-evidence.d.ts +17 -0
  19. package/dist/cli-corpus-evidence.d.ts.map +1 -0
  20. package/dist/cli-corpus-evidence.js +150 -0
  21. package/dist/cli-corpus-evidence.js.map +1 -0
  22. package/dist/cli-corpus-reference-downloads.d.ts +8 -0
  23. package/dist/cli-corpus-reference-downloads.d.ts.map +1 -0
  24. package/dist/cli-corpus-reference-downloads.js +111 -0
  25. package/dist/cli-corpus-reference-downloads.js.map +1 -0
  26. package/dist/cli-corpus-reference-receipts.d.ts +36 -0
  27. package/dist/cli-corpus-reference-receipts.d.ts.map +1 -0
  28. package/dist/cli-corpus-reference-receipts.js +137 -0
  29. package/dist/cli-corpus-reference-receipts.js.map +1 -0
  30. package/dist/cli-corpus-run.d.ts +17 -0
  31. package/dist/cli-corpus-run.d.ts.map +1 -0
  32. package/dist/cli-corpus-run.js +94 -0
  33. package/dist/cli-corpus-run.js.map +1 -0
  34. package/dist/cli-corpus-types.d.ts +52 -0
  35. package/dist/cli-corpus-types.d.ts.map +1 -0
  36. package/dist/cli-corpus-types.js +6 -0
  37. package/dist/cli-corpus-types.js.map +1 -0
  38. package/dist/cli-export-command.d.ts +3 -0
  39. package/dist/cli-export-command.d.ts.map +1 -0
  40. package/dist/cli-export-command.js +234 -0
  41. package/dist/cli-export-command.js.map +1 -0
  42. package/dist/cli-image-command.d.ts +8 -0
  43. package/dist/cli-image-command.d.ts.map +1 -0
  44. package/dist/cli-image-command.js +193 -0
  45. package/dist/cli-image-command.js.map +1 -0
  46. package/dist/cli-persistence.d.ts +25 -0
  47. package/dist/cli-persistence.d.ts.map +1 -0
  48. package/dist/cli-persistence.js +253 -0
  49. package/dist/cli-persistence.js.map +1 -0
  50. package/dist/cli-skill-command.d.ts +9 -0
  51. package/dist/cli-skill-command.d.ts.map +1 -0
  52. package/dist/cli-skill-command.js +215 -0
  53. package/dist/cli-skill-command.js.map +1 -0
  54. package/dist/cli.d.ts +3 -0
  55. package/dist/cli.d.ts.map +1 -0
  56. package/dist/cli.js +272 -0
  57. package/dist/cli.js.map +1 -0
  58. package/dist/codex-skill-config.d.ts +3 -0
  59. package/dist/codex-skill-config.d.ts.map +1 -0
  60. package/dist/codex-skill-config.js +83 -0
  61. package/dist/codex-skill-config.js.map +1 -0
  62. package/dist/config.d.ts +7 -0
  63. package/dist/config.d.ts.map +1 -0
  64. package/dist/config.js +34 -0
  65. package/dist/config.js.map +1 -0
  66. package/dist/conversion-client.d.ts +264 -0
  67. package/dist/conversion-client.d.ts.map +1 -0
  68. package/dist/conversion-client.js +445 -0
  69. package/dist/conversion-client.js.map +1 -0
  70. package/dist/conversion-models.d.ts +4 -0
  71. package/dist/conversion-models.d.ts.map +1 -0
  72. package/dist/conversion-models.js +3 -0
  73. package/dist/conversion-models.js.map +1 -0
  74. package/dist/conversion-outputs.d.ts +118 -0
  75. package/dist/conversion-outputs.d.ts.map +1 -0
  76. package/dist/conversion-outputs.js +84 -0
  77. package/dist/conversion-outputs.js.map +1 -0
  78. package/dist/conversion-problems.d.ts +3 -0
  79. package/dist/conversion-problems.d.ts.map +1 -0
  80. package/dist/conversion-problems.js +21 -0
  81. package/dist/conversion-problems.js.map +1 -0
  82. package/dist/corpus-client.d.ts +171 -0
  83. package/dist/corpus-client.d.ts.map +1 -0
  84. package/dist/corpus-client.js +85 -0
  85. package/dist/corpus-client.js.map +1 -0
  86. package/dist/credential-setup.d.ts +27 -0
  87. package/dist/credential-setup.d.ts.map +1 -0
  88. package/dist/credential-setup.js +242 -0
  89. package/dist/credential-setup.js.map +1 -0
  90. package/dist/credential-store.d.ts +12 -0
  91. package/dist/credential-store.d.ts.map +1 -0
  92. package/dist/credential-store.js +103 -0
  93. package/dist/credential-store.js.map +1 -0
  94. package/dist/idempotency-key.d.ts +2 -0
  95. package/dist/idempotency-key.d.ts.map +1 -0
  96. package/dist/idempotency-key.js +19 -0
  97. package/dist/idempotency-key.js.map +1 -0
  98. package/dist/image-generation-evidence.d.ts +26 -0
  99. package/dist/image-generation-evidence.d.ts.map +1 -0
  100. package/dist/image-generation-evidence.js +28 -0
  101. package/dist/image-generation-evidence.js.map +1 -0
  102. package/dist/image-output-width.d.ts +11 -0
  103. package/dist/image-output-width.d.ts.map +1 -0
  104. package/dist/image-output-width.js +55 -0
  105. package/dist/image-output-width.js.map +1 -0
  106. package/dist/image-provider-preflight.d.ts +21 -0
  107. package/dist/image-provider-preflight.d.ts.map +1 -0
  108. package/dist/image-provider-preflight.js +184 -0
  109. package/dist/image-provider-preflight.js.map +1 -0
  110. package/dist/index.d.ts +13 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +13 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/legacy-codex-cleanup.d.ts +11 -0
  115. package/dist/legacy-codex-cleanup.d.ts.map +1 -0
  116. package/dist/legacy-codex-cleanup.js +147 -0
  117. package/dist/legacy-codex-cleanup.js.map +1 -0
  118. package/dist/legacy-skill-catalog.d.ts +5 -0
  119. package/dist/legacy-skill-catalog.d.ts.map +1 -0
  120. package/dist/legacy-skill-catalog.js +123 -0
  121. package/dist/legacy-skill-catalog.js.map +1 -0
  122. package/dist/local-conversion-input.d.ts +21 -0
  123. package/dist/local-conversion-input.d.ts.map +1 -0
  124. package/dist/local-conversion-input.js +54 -0
  125. package/dist/local-conversion-input.js.map +1 -0
  126. package/dist/login-auth.d.ts +63 -0
  127. package/dist/login-auth.d.ts.map +1 -0
  128. package/dist/login-auth.js +282 -0
  129. package/dist/login-auth.js.map +1 -0
  130. package/dist/package-client.d.ts +147 -0
  131. package/dist/package-client.d.ts.map +1 -0
  132. package/dist/package-client.js +119 -0
  133. package/dist/package-client.js.map +1 -0
  134. package/dist/project-profiles.d.ts +45 -0
  135. package/dist/project-profiles.d.ts.map +1 -0
  136. package/dist/project-profiles.js +162 -0
  137. package/dist/project-profiles.js.map +1 -0
  138. package/dist/responsive-quality.d.ts +26 -0
  139. package/dist/responsive-quality.d.ts.map +1 -0
  140. package/dist/responsive-quality.js +68 -0
  141. package/dist/responsive-quality.js.map +1 -0
  142. package/dist/server.d.ts +6 -0
  143. package/dist/server.d.ts.map +1 -0
  144. package/dist/server.js +173 -0
  145. package/dist/server.js.map +1 -0
  146. package/dist/skill-installer.d.ts +51 -0
  147. package/dist/skill-installer.d.ts.map +1 -0
  148. package/dist/skill-installer.js +328 -0
  149. package/dist/skill-installer.js.map +1 -0
  150. package/package.json +53 -0
  151. package/skills/design/SKILL.md +156 -0
  152. package/skills/design/agents/openai.yaml +6 -0
  153. package/skills/design/references/selection-contract.md +44 -0
  154. package/skills/design-convert/SKILL.md +118 -0
  155. package/skills/design-convert/agents/openai.yaml +6 -0
  156. package/skills/design-search/SKILL.md +86 -0
  157. package/skills/design-search/agents/openai.yaml +6 -0
@@ -0,0 +1,119 @@
1
+ import crypto from 'node:crypto';
2
+ import { normalizeConversionOrigin } from './config.js';
3
+ export const CONVERSION_PACKAGE_MEDIA_TYPE = 'application/vnd.12ui.package+json;version=1';
4
+ export const CONVERSION_PACKAGE_SITE_MEDIA_TYPE = 'application/zip';
5
+ const asBuffer = (bytes) => bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
6
+ const parseOperation = (value) => {
7
+ if (!value || typeof value !== 'object' || Array.isArray(value))
8
+ throw new Error('Package API returned a non-object operation');
9
+ const record = value;
10
+ if (typeof record.id !== 'string' || !record.id)
11
+ throw new Error('Package operation is missing id');
12
+ if (!['queued', 'running', 'succeeded', 'failed', 'expired'].includes(String(record.status))) {
13
+ throw new Error('Package operation has an invalid status');
14
+ }
15
+ if (!Array.isArray(record.pages))
16
+ throw new Error('Package operation is missing pages');
17
+ return record;
18
+ };
19
+ const problemFor = async (response) => {
20
+ const payload = await response.json().catch(() => null);
21
+ return new Error(payload?.detail || payload?.title || `${response.status} ${response.statusText}`);
22
+ };
23
+ const delay = async (milliseconds, signal) => await new Promise((resolve, reject) => {
24
+ const timer = setTimeout(resolve, milliseconds);
25
+ signal?.addEventListener('abort', () => {
26
+ clearTimeout(timer);
27
+ reject(signal.reason ?? new Error('Package wait aborted'));
28
+ }, { once: true });
29
+ });
30
+ export class TwelveUiConversionPackageClient {
31
+ origin;
32
+ apiKey;
33
+ fetchImpl;
34
+ constructor(options) {
35
+ this.origin = normalizeConversionOrigin(options.origin);
36
+ this.apiKey = options.apiKey.trim();
37
+ this.fetchImpl = options.fetch ?? fetch;
38
+ if (!this.apiKey)
39
+ throw new Error('A 12ui API key is required');
40
+ }
41
+ async createPackage(input) {
42
+ const form = new FormData();
43
+ form.set('manifest', new Blob([JSON.stringify(input.manifest)], { type: 'application/json' }), 'manifest.json');
44
+ const append = (field, files) => {
45
+ for (const file of files)
46
+ form.append(field, new Blob([asBuffer(file.bytes)], { type: file.mediaType }), file.partId);
47
+ };
48
+ append('screenshot', input.screenshots);
49
+ append('layerdoc', input.layerdocs ?? []);
50
+ append('asset', input.assets ?? []);
51
+ const response = await this.fetchImpl(`${this.origin}/api/v1/convert/package`, {
52
+ method: 'POST',
53
+ headers: this.headers({
54
+ Accept: 'application/json',
55
+ 'Idempotency-Key': input.idempotencyKey?.trim() || crypto.randomUUID(),
56
+ }),
57
+ body: form,
58
+ signal: input.signal,
59
+ });
60
+ if (!response.ok)
61
+ throw await problemFor(response);
62
+ return parseOperation(await response.json());
63
+ }
64
+ async getPackage(id, signal) {
65
+ const response = await this.fetchImpl(this.packageUrl(id), {
66
+ headers: this.headers({ Accept: 'application/json' }),
67
+ signal,
68
+ });
69
+ if (!response.ok)
70
+ throw await problemFor(response);
71
+ return parseOperation(await response.json());
72
+ }
73
+ async waitForPackage(id, options = {}) {
74
+ const timeoutMs = Math.max(1_000, options.timeoutMs ?? 30 * 60_000);
75
+ const deadline = Date.now() + timeoutMs;
76
+ while (Date.now() < deadline) {
77
+ const operation = await this.getPackage(id, options.signal);
78
+ if (operation.status === 'succeeded')
79
+ return operation;
80
+ if (operation.status === 'failed' || operation.status === 'expired') {
81
+ throw new Error(operation.error?.detail || `Package ${operation.status}`);
82
+ }
83
+ await delay(Math.max(250, options.intervalMs ?? 2_000), options.signal);
84
+ }
85
+ throw new Error(`Timed out waiting for package ${id}`);
86
+ }
87
+ async downloadPage(operation, pageId, signal) {
88
+ const page = operation.pages.find((candidate) => candidate.id === pageId);
89
+ if (!page?.href || !page.media_type)
90
+ throw new Error(`Package page ${pageId} is not ready`);
91
+ const url = new URL(page.href);
92
+ if (url.origin !== this.origin || !url.pathname.startsWith('/api/v1/convert/package/')) {
93
+ throw new Error(`Package page ${pageId} has an untrusted href`);
94
+ }
95
+ const response = await this.fetchImpl(url, {
96
+ headers: this.headers({ Accept: page.media_type }),
97
+ redirect: 'follow',
98
+ signal,
99
+ });
100
+ if (!response.ok)
101
+ throw await problemFor(response);
102
+ return {
103
+ bytes: new Uint8Array(await response.arrayBuffer()),
104
+ mediaType: response.headers.get('content-type') || page.media_type,
105
+ };
106
+ }
107
+ packageUrl(id) {
108
+ const normalized = id.trim();
109
+ if (!normalized)
110
+ throw new Error('Package id is required');
111
+ return `${this.origin}/api/v1/convert/package/${encodeURIComponent(normalized)}`;
112
+ }
113
+ headers(values) {
114
+ const headers = new Headers(values);
115
+ headers.set('Authorization', `Bearer ${this.apiKey}`);
116
+ return headers;
117
+ }
118
+ }
119
+ //# sourceMappingURL=package-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-client.js","sourceRoot":"","sources":["../src/package-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export declare const CONVERSION_PROJECT_OUTPUTS: readonly ["web_project", "app_project"];
2
+ export type ConversionProjectOutput = typeof CONVERSION_PROJECT_OUTPUTS[number];
3
+ export declare const WEB_PROJECT_FRAMEWORKS: readonly ["html", "react", "next", "vue", "nuxt", "svelte", "sveltekit", "angular", "astro", "lit"];
4
+ export type WebProjectFramework = typeof WEB_PROJECT_FRAMEWORKS[number];
5
+ export declare const WEB_PROJECT_STYLINGS: readonly ["css", "scss", "css_modules", "tailwind", "bootstrap", "mui", "chakra", "antd", "shadcn"];
6
+ export type WebProjectStyling = typeof WEB_PROJECT_STYLINGS[number];
7
+ export declare const WEB_PROJECT_LANGUAGES: readonly ["html", "javascript", "typescript"];
8
+ export type WebProjectLanguage = typeof WEB_PROJECT_LANGUAGES[number];
9
+ export declare const WEB_PROJECT_PACKAGINGS: readonly ["component", "page", "project"];
10
+ export type WebProjectPackaging = typeof WEB_PROJECT_PACKAGINGS[number];
11
+ export declare const APP_PROJECT_FRAMEWORKS: readonly ["expo", "react_native", "flutter", "ionic_capacitor", "swiftui", "uikit", "jetpack_compose", "android_views", "compose_multiplatform"];
12
+ export type AppProjectFramework = typeof APP_PROJECT_FRAMEWORKS[number];
13
+ export declare const APP_PROJECT_STYLINGS: readonly ["native", "css"];
14
+ export type AppProjectStyling = typeof APP_PROJECT_STYLINGS[number];
15
+ export declare const APP_PROJECT_LANGUAGES: readonly ["typescript", "dart", "swift", "kotlin"];
16
+ export type AppProjectLanguage = typeof APP_PROJECT_LANGUAGES[number];
17
+ export declare const APP_PROJECT_PACKAGINGS: readonly ["screen", "project"];
18
+ export type AppProjectPackaging = typeof APP_PROJECT_PACKAGINGS[number];
19
+ export type WebProjectProfileV1 = {
20
+ version: 1;
21
+ framework: WebProjectFramework;
22
+ styling: WebProjectStyling;
23
+ language: WebProjectLanguage;
24
+ packaging: WebProjectPackaging;
25
+ };
26
+ export type AppProjectProfileV1 = {
27
+ version: 1;
28
+ framework: AppProjectFramework;
29
+ styling: AppProjectStyling;
30
+ language: AppProjectLanguage;
31
+ packaging: AppProjectPackaging;
32
+ };
33
+ export type ConversionOutputProfile = WebProjectProfileV1 | AppProjectProfileV1;
34
+ type Capability<TStyling extends string, TLanguage extends string, TPackaging extends string> = {
35
+ styling: readonly TStyling[];
36
+ language: readonly TLanguage[];
37
+ packaging: readonly TPackaging[];
38
+ };
39
+ export declare const WEB_PROJECT_CAPABILITIES: Readonly<Record<WebProjectFramework, Capability<WebProjectStyling, WebProjectLanguage, WebProjectPackaging>>>;
40
+ export declare const APP_PROJECT_CAPABILITIES: Readonly<Record<AppProjectFramework, Capability<AppProjectStyling, AppProjectLanguage, AppProjectPackaging>>>;
41
+ export declare const parseConversionOutputProfile: (output: ConversionProjectOutput, value: unknown) => ConversionOutputProfile;
42
+ export declare const canonicalConversionOutputProfileJson: (output: ConversionProjectOutput, value: unknown) => string;
43
+ export declare const isProjectConversionOutput: (value: unknown) => value is ConversionProjectOutput;
44
+ export {};
45
+ //# sourceMappingURL=project-profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-profiles.d.ts","sourceRoot":"","sources":["../src/project-profiles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,yCAA0C,CAAC;AAClF,MAAM,MAAM,uBAAuB,GAAG,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAEhF,eAAO,MAAM,sBAAsB,qGAWzB,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAExE,eAAO,MAAM,oBAAoB,qGAUvB,CAAC;AACX,MAAM,MAAM,iBAAiB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACpE,eAAO,MAAM,qBAAqB,+CAAgD,CAAC;AACnF,MAAM,MAAM,kBAAkB,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACtE,eAAO,MAAM,sBAAsB,2CAA4C,CAAC;AAChF,MAAM,MAAM,mBAAmB,GAAG,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAExE,eAAO,MAAM,sBAAsB,kJAUzB,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACxE,eAAO,MAAM,oBAAoB,4BAA6B,CAAC;AAC/D,MAAM,MAAM,iBAAiB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACpE,eAAO,MAAM,qBAAqB,oDAAqD,CAAC;AACxF,MAAM,MAAM,kBAAkB,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACtE,eAAO,MAAM,sBAAsB,gCAAiC,CAAC;AACrE,MAAM,MAAM,mBAAmB,GAAG,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,mBAAmB,CAAC;IAC/B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,SAAS,EAAE,mBAAmB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,mBAAmB,CAAC;IAC/B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,SAAS,EAAE,mBAAmB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAEhF,KAAK,UAAU,CAAC,QAAQ,SAAS,MAAM,EAAE,SAAS,SAAS,MAAM,EAAE,UAAU,SAAS,MAAM,IAAI;IAC9F,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;IAC/B,SAAS,EAAE,SAAS,UAAU,EAAE,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CACpD,mBAAmB,EACnB,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CACvE,CAmDA,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CACpD,mBAAmB,EACnB,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CACvE,CAUA,CAAC;AA+BF,eAAO,MAAM,4BAA4B,GACvC,QAAQ,uBAAuB,EAC/B,OAAO,OAAO,KACb,uBAuBF,CAAC;AAEF,eAAO,MAAM,oCAAoC,GAC/C,QAAQ,uBAAuB,EAC/B,OAAO,OAAO,KACb,MAAqE,CAAC;AAEzE,eAAO,MAAM,yBAAyB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,uBAEnE,CAAC"}
@@ -0,0 +1,162 @@
1
+ export const CONVERSION_PROJECT_OUTPUTS = ['web_project', 'app_project'];
2
+ export const WEB_PROJECT_FRAMEWORKS = [
3
+ 'html',
4
+ 'react',
5
+ 'next',
6
+ 'vue',
7
+ 'nuxt',
8
+ 'svelte',
9
+ 'sveltekit',
10
+ 'angular',
11
+ 'astro',
12
+ 'lit',
13
+ ];
14
+ export const WEB_PROJECT_STYLINGS = [
15
+ 'css',
16
+ 'scss',
17
+ 'css_modules',
18
+ 'tailwind',
19
+ 'bootstrap',
20
+ 'mui',
21
+ 'chakra',
22
+ 'antd',
23
+ 'shadcn',
24
+ ];
25
+ export const WEB_PROJECT_LANGUAGES = ['html', 'javascript', 'typescript'];
26
+ export const WEB_PROJECT_PACKAGINGS = ['component', 'page', 'project'];
27
+ export const APP_PROJECT_FRAMEWORKS = [
28
+ 'expo',
29
+ 'react_native',
30
+ 'flutter',
31
+ 'ionic_capacitor',
32
+ 'swiftui',
33
+ 'uikit',
34
+ 'jetpack_compose',
35
+ 'android_views',
36
+ 'compose_multiplatform',
37
+ ];
38
+ export const APP_PROJECT_STYLINGS = ['native', 'css'];
39
+ export const APP_PROJECT_LANGUAGES = ['typescript', 'dart', 'swift', 'kotlin'];
40
+ export const APP_PROJECT_PACKAGINGS = ['screen', 'project'];
41
+ export const WEB_PROJECT_CAPABILITIES = {
42
+ html: {
43
+ styling: ['css', 'scss', 'tailwind', 'bootstrap'],
44
+ language: ['javascript'],
45
+ packaging: ['component', 'page', 'project'],
46
+ },
47
+ react: {
48
+ styling: ['css', 'scss', 'css_modules', 'tailwind', 'bootstrap', 'mui', 'chakra', 'antd', 'shadcn'],
49
+ language: ['javascript', 'typescript'],
50
+ packaging: ['component', 'page', 'project'],
51
+ },
52
+ next: {
53
+ styling: ['css', 'scss', 'css_modules', 'tailwind', 'bootstrap', 'mui', 'chakra', 'antd', 'shadcn'],
54
+ language: ['javascript', 'typescript'],
55
+ packaging: ['page', 'project'],
56
+ },
57
+ vue: {
58
+ styling: ['css', 'scss', 'tailwind', 'bootstrap'],
59
+ language: ['javascript', 'typescript'],
60
+ packaging: ['component', 'page', 'project'],
61
+ },
62
+ nuxt: {
63
+ styling: ['css', 'scss', 'tailwind', 'bootstrap'],
64
+ language: ['javascript', 'typescript'],
65
+ packaging: ['page', 'project'],
66
+ },
67
+ svelte: {
68
+ styling: ['css', 'scss', 'tailwind', 'bootstrap'],
69
+ language: ['javascript', 'typescript'],
70
+ packaging: ['component', 'page', 'project'],
71
+ },
72
+ sveltekit: {
73
+ styling: ['css', 'scss', 'tailwind', 'bootstrap'],
74
+ language: ['javascript', 'typescript'],
75
+ packaging: ['page', 'project'],
76
+ },
77
+ angular: {
78
+ styling: ['css', 'scss', 'tailwind', 'bootstrap'],
79
+ language: ['typescript'],
80
+ packaging: ['component', 'page', 'project'],
81
+ },
82
+ astro: {
83
+ styling: ['css', 'scss', 'tailwind', 'bootstrap'],
84
+ language: ['javascript', 'typescript'],
85
+ packaging: ['component', 'page', 'project'],
86
+ },
87
+ lit: {
88
+ styling: ['css', 'scss'],
89
+ language: ['javascript', 'typescript'],
90
+ packaging: ['component', 'page', 'project'],
91
+ },
92
+ };
93
+ export const APP_PROJECT_CAPABILITIES = {
94
+ expo: { styling: ['native'], language: ['typescript'], packaging: ['screen', 'project'] },
95
+ react_native: { styling: ['native'], language: ['typescript'], packaging: ['screen', 'project'] },
96
+ flutter: { styling: ['native'], language: ['dart'], packaging: ['screen', 'project'] },
97
+ ionic_capacitor: { styling: ['css'], language: ['typescript'], packaging: ['screen', 'project'] },
98
+ swiftui: { styling: ['native'], language: ['swift'], packaging: ['screen', 'project'] },
99
+ uikit: { styling: ['native'], language: ['swift'], packaging: ['screen', 'project'] },
100
+ jetpack_compose: { styling: ['native'], language: ['kotlin'], packaging: ['screen', 'project'] },
101
+ android_views: { styling: ['native'], language: ['kotlin'], packaging: ['screen', 'project'] },
102
+ compose_multiplatform: { styling: ['native'], language: ['kotlin'], packaging: ['screen', 'project'] },
103
+ };
104
+ const asRecord = (value) => (value !== null && typeof value === 'object' && !Array.isArray(value)
105
+ ? value
106
+ : null);
107
+ const exactProfileRecord = (value, label) => {
108
+ const record = asRecord(value);
109
+ if (!record)
110
+ throw new Error(`${label} profile must be an object`);
111
+ const fields = ['version', 'framework', 'styling', 'language', 'packaging'];
112
+ const unexpected = Object.keys(record).filter((key) => !fields.includes(key));
113
+ const missing = fields.filter((key) => !(key in record));
114
+ if (unexpected.length > 0 || missing.length > 0) {
115
+ throw new Error(`${label} profile fields are invalid: ${[
116
+ ...(missing.length > 0 ? [`missing ${missing.join(', ')}`] : []),
117
+ ...(unexpected.length > 0 ? [`unexpected ${unexpected.join(', ')}`] : []),
118
+ ].join('; ')}`);
119
+ }
120
+ if (record.version !== 1)
121
+ throw new Error('profile.version must be 1');
122
+ return record;
123
+ };
124
+ const enumValue = (value, values, field) => {
125
+ if (typeof value !== 'string' || !values.includes(value)) {
126
+ throw new Error(`profile.${field} must be one of: ${values.join(', ')}`);
127
+ }
128
+ return value;
129
+ };
130
+ export const parseConversionOutputProfile = (output, value) => {
131
+ if (output === 'web_project') {
132
+ const record = exactProfileRecord(value, output);
133
+ const framework = enumValue(record.framework, WEB_PROJECT_FRAMEWORKS, 'framework');
134
+ const styling = enumValue(record.styling, WEB_PROJECT_STYLINGS, 'styling');
135
+ const language = enumValue(record.language, WEB_PROJECT_LANGUAGES, 'language');
136
+ const packaging = enumValue(record.packaging, WEB_PROJECT_PACKAGINGS, 'packaging');
137
+ const capability = WEB_PROJECT_CAPABILITIES[framework];
138
+ if (!capability.styling.includes(styling))
139
+ throw new Error(`${framework} does not support ${styling}`);
140
+ if (!capability.language.includes(language))
141
+ throw new Error(`${framework} does not support ${language}`);
142
+ if (!capability.packaging.includes(packaging))
143
+ throw new Error(`${framework} does not support ${packaging}`);
144
+ return { version: 1, framework, styling, language, packaging };
145
+ }
146
+ const record = exactProfileRecord(value, output);
147
+ const framework = enumValue(record.framework, APP_PROJECT_FRAMEWORKS, 'framework');
148
+ const styling = enumValue(record.styling, APP_PROJECT_STYLINGS, 'styling');
149
+ const language = enumValue(record.language, APP_PROJECT_LANGUAGES, 'language');
150
+ const packaging = enumValue(record.packaging, APP_PROJECT_PACKAGINGS, 'packaging');
151
+ const capability = APP_PROJECT_CAPABILITIES[framework];
152
+ if (!capability.styling.includes(styling))
153
+ throw new Error(`${framework} does not support ${styling}`);
154
+ if (!capability.language.includes(language))
155
+ throw new Error(`${framework} does not support ${language}`);
156
+ if (!capability.packaging.includes(packaging))
157
+ throw new Error(`${framework} does not support ${packaging}`);
158
+ return { version: 1, framework, styling, language, packaging };
159
+ };
160
+ export const canonicalConversionOutputProfileJson = (output, value) => JSON.stringify(parseConversionOutputProfile(output, value));
161
+ export const isProjectConversionOutput = (value) => (typeof value === 'string' && CONVERSION_PROJECT_OUTPUTS.includes(value));
162
+ //# sourceMappingURL=project-profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-profiles.js","sourceRoot":"","sources":["../src/project-profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export declare const RESPONSIVE_CONVERSION_QUALITIES: readonly ["standard", "pro"];
2
+ export type ResponsiveConversionQuality = typeof RESPONSIVE_CONVERSION_QUALITIES[number];
3
+ export declare const PERSISTED_RESPONSIVE_CONVERSION_QUALITIES: readonly ["standard", "enhanced", "pro"];
4
+ export type PersistedResponsiveConversionQuality = typeof PERSISTED_RESPONSIVE_CONVERSION_QUALITIES[number];
5
+ export declare const RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v6";
6
+ export declare const LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v5";
7
+ export declare const RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v4";
8
+ export declare const THREE_TIER_RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v3";
9
+ export declare const PRE_NATIVE_RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v2";
10
+ export declare const LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v1";
11
+ export declare const isResponsiveConversionQuality: (value: unknown) => value is ResponsiveConversionQuality;
12
+ export declare const isPersistedResponsiveConversionQuality: (value: unknown) => value is PersistedResponsiveConversionQuality;
13
+ export type ResponsiveConversionPlan = {
14
+ revision: typeof RESPONSIVE_ANCHOR_PLAN_REVISION | typeof LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION | typeof RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION | typeof THREE_TIER_RESPONSIVE_ANCHOR_PLAN_REVISION | typeof PRE_NATIVE_RESPONSIVE_ANCHOR_PLAN_REVISION | typeof LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION;
15
+ quality: PersistedResponsiveConversionQuality;
16
+ native_width: number;
17
+ anchors: Array<{
18
+ id: 'mobile' | 'tablet' | 'compact-desktop';
19
+ viewport_width: number;
20
+ generator: 'gpt-image-2';
21
+ generator_quality: 'low';
22
+ image_size: '1024x3072' | '1536x2048' | '2048x1536';
23
+ }>;
24
+ };
25
+ export declare const parseResponsiveConversionPlan: (value: unknown) => ResponsiveConversionPlan;
26
+ //# sourceMappingURL=responsive-quality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsive-quality.d.ts","sourceRoot":"","sources":["../src/responsive-quality.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,8BAA+B,CAAC;AAC5E,MAAM,MAAM,2BAA2B,GAAG,OAAO,+BAA+B,CAAC,MAAM,CAAC,CAAC;AACzF,eAAO,MAAM,yCAAyC,0CAA2C,CAAC;AAClG,MAAM,MAAM,oCAAoC,GAAG,OAAO,yCAAyC,CAAC,MAAM,CAAC,CAAC;AAC5G,eAAO,MAAM,+BAA+B,EAAG,2BAAoC,CAAC;AACpF,eAAO,MAAM,6CAA6C,EAAG,2BAAoC,CAAC;AAClG,eAAO,MAAM,4CAA4C,EAAG,2BAAoC,CAAC;AACjG,eAAO,MAAM,0CAA0C,EAAG,2BAAoC,CAAC;AAC/F,eAAO,MAAM,0CAA0C,EAAG,2BAAoC,CAAC;AAC/F,eAAO,MAAM,sCAAsC,EAAG,2BAAoC,CAAC;AAE3F,eAAO,MAAM,6BAA6B,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,2BAEvE,CAAC;AAEF,eAAO,MAAM,sCAAsC,GACjD,OAAO,OAAO,KACb,KAAK,IAAI,oCAGX,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,OAAO,+BAA+B,GAC5C,OAAO,6CAA6C,GACpD,OAAO,4CAA4C,GACnD,OAAO,0CAA0C,GACjD,OAAO,0CAA0C,GACjD,OAAO,sCAAsC,CAAC;IAClD,OAAO,EAAE,oCAAoC,CAAC;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,QAAQ,GAAG,QAAQ,GAAG,iBAAiB,CAAC;QAC5C,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,aAAa,CAAC;QACzB,iBAAiB,EAAE,KAAK,CAAC;QACzB,UAAU,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;KACrD,CAAC,CAAC;CACJ,CAAC;AAkBF,eAAO,MAAM,6BAA6B,GAAI,OAAO,OAAO,KAAG,wBA4C9D,CAAC"}
@@ -0,0 +1,68 @@
1
+ export const RESPONSIVE_CONVERSION_QUALITIES = ['standard', 'pro'];
2
+ export const PERSISTED_RESPONSIVE_CONVERSION_QUALITIES = ['standard', 'enhanced', 'pro'];
3
+ export const RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v6';
4
+ export const LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v5';
5
+ export const RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v4';
6
+ export const THREE_TIER_RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v3';
7
+ export const PRE_NATIVE_RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v2';
8
+ export const LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v1';
9
+ export const isResponsiveConversionQuality = (value) => (typeof value === 'string' && RESPONSIVE_CONVERSION_QUALITIES.includes(value));
10
+ export const isPersistedResponsiveConversionQuality = (value) => (typeof value === 'string'
11
+ && PERSISTED_RESPONSIVE_CONVERSION_QUALITIES.includes(value));
12
+ const THREE_TIER_ANCHORS = [
13
+ { id: 'mobile', viewport_width: 390 },
14
+ { id: 'tablet', viewport_width: 768 },
15
+ { id: 'compact-desktop', viewport_width: 1024 },
16
+ ];
17
+ const CURRENT_ANCHORS = [
18
+ { id: 'mobile', viewport_width: 390, image_size: '1024x3072' },
19
+ { id: 'tablet', viewport_width: 768, image_size: '1536x2048' },
20
+ { id: 'compact-desktop', viewport_width: 1280, image_size: '2048x1536' },
21
+ ];
22
+ const isRecord = (value) => (typeof value === 'object' && value !== null && !Array.isArray(value));
23
+ export const parseResponsiveConversionPlan = (value) => {
24
+ if (!isRecord(value) || (value.revision !== RESPONSIVE_ANCHOR_PLAN_REVISION
25
+ && value.revision !== LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION
26
+ && value.revision !== RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION
27
+ && value.revision !== THREE_TIER_RESPONSIVE_ANCHOR_PLAN_REVISION
28
+ && value.revision !== PRE_NATIVE_RESPONSIVE_ANCHOR_PLAN_REVISION
29
+ && value.revision !== LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION)
30
+ || !isPersistedResponsiveConversionQuality(value.quality)
31
+ || !Number.isSafeInteger(value.native_width) || !(Number(value.native_width) > 390)
32
+ || !Array.isArray(value.anchors)) {
33
+ throw new TypeError('Invalid responsive conversion plan.');
34
+ }
35
+ const nativeWidth = Number(value.native_width);
36
+ const currentTopologyRevision = value.revision === RESPONSIVE_ANCHOR_PLAN_REVISION
37
+ || value.revision === LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION
38
+ || value.revision === RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION;
39
+ if (currentTopologyRevision && value.quality === 'enhanced') {
40
+ throw new TypeError('Current responsive conversion plans do not support Enhanced quality.');
41
+ }
42
+ const oldLimit = value.quality === 'standard' ? 1 : value.quality === 'enhanced' ? 2 : 3;
43
+ const oldBudget = THREE_TIER_ANCHORS.slice(0, oldLimit);
44
+ const expected = currentTopologyRevision
45
+ ? CURRENT_ANCHORS.slice(0, value.quality === 'standard' ? 1 : nativeWidth > 1440 ? 3 : 2)
46
+ : value.revision === LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION
47
+ ? oldBudget.filter((anchor) => anchor.viewport_width < nativeWidth)
48
+ : oldBudget;
49
+ if (value.anchors.length !== expected.length || expected.length === 0) {
50
+ throw new TypeError('Responsive conversion plan has an invalid anchor count.');
51
+ }
52
+ for (const [index, anchorValue] of value.anchors.entries()) {
53
+ const anchor = isRecord(anchorValue) ? anchorValue : null;
54
+ const expectedAnchor = expected[index];
55
+ const expectedImageSize = value.revision === RESPONSIVE_ANCHOR_PLAN_REVISION
56
+ ? (expectedAnchor && 'image_size' in expectedAnchor ? expectedAnchor.image_size : null)
57
+ : '1024x3072';
58
+ if (!anchor || anchor.id !== expectedAnchor?.id
59
+ || anchor.viewport_width !== expectedAnchor.viewport_width
60
+ || anchor.generator !== 'gpt-image-2'
61
+ || anchor.generator_quality !== 'low'
62
+ || anchor.image_size !== expectedImageSize) {
63
+ throw new TypeError(`Responsive conversion plan anchor ${index} is invalid.`);
64
+ }
65
+ }
66
+ return value;
67
+ };
68
+ //# sourceMappingURL=responsive-quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsive-quality.js","sourceRoot":"","sources":["../src/responsive-quality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ConversionConfig } from './config.js';
2
+ export type McpServerOptions = {
3
+ config: ConversionConfig;
4
+ };
5
+ export declare function startMcpServer(options: McpServerOptions): Promise<void>;
6
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmBpD,MAAM,MAAM,gBAAgB,GAAG;IAAE,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE5D,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6J7E"}