@12ui/design 0.2.53 → 0.2.55

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 (136) hide show
  1. package/README.md +18 -0
  2. package/SKILL.md +1 -1
  3. package/dist/cli-arguments.d.ts +3 -1
  4. package/dist/cli-arguments.d.ts.map +1 -1
  5. package/dist/cli-arguments.js +19 -2
  6. package/dist/cli-arguments.js.map +1 -1
  7. package/dist/cli-convert-command.d.ts +3 -1
  8. package/dist/cli-convert-command.d.ts.map +1 -1
  9. package/dist/cli-convert-command.js +9 -7
  10. package/dist/cli-convert-command.js.map +1 -1
  11. package/dist/cli-help/design.d.ts +10 -0
  12. package/dist/cli-help/design.d.ts.map +1 -1
  13. package/dist/cli-help/design.js +25 -0
  14. package/dist/cli-help/design.js.map +1 -1
  15. package/dist/cli-help/index.d.ts +10 -0
  16. package/dist/cli-help/index.d.ts.map +1 -1
  17. package/dist/cli-improve-command.d.ts +5 -0
  18. package/dist/cli-improve-command.d.ts.map +1 -0
  19. package/dist/cli-improve-command.js +213 -0
  20. package/dist/cli-improve-command.js.map +1 -0
  21. package/dist/cli-run.d.ts.map +1 -1
  22. package/dist/cli-run.js +8 -0
  23. package/dist/cli-run.js.map +1 -1
  24. package/dist/cli-usage.d.ts.map +1 -1
  25. package/dist/cli-usage.js +2 -0
  26. package/dist/cli-usage.js.map +1 -1
  27. package/dist/improve-added-specs.d.ts +32 -0
  28. package/dist/improve-added-specs.d.ts.map +1 -0
  29. package/dist/improve-added-specs.js +162 -0
  30. package/dist/improve-added-specs.js.map +1 -0
  31. package/dist/improve-concept.d.ts +10 -0
  32. package/dist/improve-concept.d.ts.map +1 -0
  33. package/dist/improve-concept.js +45 -0
  34. package/dist/improve-concept.js.map +1 -0
  35. package/dist/improve-conversion-stage.d.ts +28 -0
  36. package/dist/improve-conversion-stage.d.ts.map +1 -0
  37. package/dist/improve-conversion-stage.js +214 -0
  38. package/dist/improve-conversion-stage.js.map +1 -0
  39. package/dist/improve-convert-resilience.d.ts +23 -0
  40. package/dist/improve-convert-resilience.d.ts.map +1 -0
  41. package/dist/improve-convert-resilience.js +102 -0
  42. package/dist/improve-convert-resilience.js.map +1 -0
  43. package/dist/improve-delivery-stages.d.ts +10 -0
  44. package/dist/improve-delivery-stages.d.ts.map +1 -0
  45. package/dist/improve-delivery-stages.js +160 -0
  46. package/dist/improve-delivery-stages.js.map +1 -0
  47. package/dist/improve-dom-anchor.d.ts +18 -0
  48. package/dist/improve-dom-anchor.d.ts.map +1 -0
  49. package/dist/improve-dom-anchor.js +120 -0
  50. package/dist/improve-dom-anchor.js.map +1 -0
  51. package/dist/improve-dom-diff.d.ts +33 -0
  52. package/dist/improve-dom-diff.d.ts.map +1 -0
  53. package/dist/improve-dom-diff.js +129 -0
  54. package/dist/improve-dom-diff.js.map +1 -0
  55. package/dist/improve-dom-extract.d.ts +15 -0
  56. package/dist/improve-dom-extract.d.ts.map +1 -0
  57. package/dist/improve-dom-extract.js +343 -0
  58. package/dist/improve-dom-extract.js.map +1 -0
  59. package/dist/improve-dom-gate.d.ts +12 -0
  60. package/dist/improve-dom-gate.d.ts.map +1 -0
  61. package/dist/improve-dom-gate.js +34 -0
  62. package/dist/improve-dom-gate.js.map +1 -0
  63. package/dist/improve-dom-neighbour.d.ts +16 -0
  64. package/dist/improve-dom-neighbour.d.ts.map +1 -0
  65. package/dist/improve-dom-neighbour.js +95 -0
  66. package/dist/improve-dom-neighbour.js.map +1 -0
  67. package/dist/improve-dom-scale.d.ts +8 -0
  68. package/dist/improve-dom-scale.d.ts.map +1 -0
  69. package/dist/improve-dom-scale.js +63 -0
  70. package/dist/improve-dom-scale.js.map +1 -0
  71. package/dist/improve-generation-stages.d.ts +23 -0
  72. package/dist/improve-generation-stages.d.ts.map +1 -0
  73. package/dist/improve-generation-stages.js +166 -0
  74. package/dist/improve-generation-stages.js.map +1 -0
  75. package/dist/improve-kit-readme.d.ts +3 -0
  76. package/dist/improve-kit-readme.d.ts.map +1 -0
  77. package/dist/improve-kit-readme.js +32 -0
  78. package/dist/improve-kit-readme.js.map +1 -0
  79. package/dist/improve-layerdoc-diff.d.ts +27 -0
  80. package/dist/improve-layerdoc-diff.d.ts.map +1 -0
  81. package/dist/improve-layerdoc-diff.js +311 -0
  82. package/dist/improve-layerdoc-diff.js.map +1 -0
  83. package/dist/improve-layerdoc-types.d.ts +109 -0
  84. package/dist/improve-layerdoc-types.d.ts.map +1 -0
  85. package/dist/improve-layerdoc-types.js +2 -0
  86. package/dist/improve-layerdoc-types.js.map +1 -0
  87. package/dist/improve-options.d.ts +44 -0
  88. package/dist/improve-options.d.ts.map +1 -0
  89. package/dist/improve-options.js +163 -0
  90. package/dist/improve-options.js.map +1 -0
  91. package/dist/improve-plan-annotator.d.ts +14 -0
  92. package/dist/improve-plan-annotator.d.ts.map +1 -0
  93. package/dist/improve-plan-annotator.js +80 -0
  94. package/dist/improve-plan-annotator.js.map +1 -0
  95. package/dist/improve-plan-render.d.ts +23 -0
  96. package/dist/improve-plan-render.d.ts.map +1 -0
  97. package/dist/improve-plan-render.js +81 -0
  98. package/dist/improve-plan-render.js.map +1 -0
  99. package/dist/improve-pricing-plan.d.ts +20 -0
  100. package/dist/improve-pricing-plan.d.ts.map +1 -0
  101. package/dist/improve-pricing-plan.js +72 -0
  102. package/dist/improve-pricing-plan.js.map +1 -0
  103. package/dist/improve-source-hints.d.ts +31 -0
  104. package/dist/improve-source-hints.d.ts.map +1 -0
  105. package/dist/improve-source-hints.js +131 -0
  106. package/dist/improve-source-hints.js.map +1 -0
  107. package/dist/improve-stage-runners.d.ts +7 -0
  108. package/dist/improve-stage-runners.d.ts.map +1 -0
  109. package/dist/improve-stage-runners.js +6 -0
  110. package/dist/improve-stage-runners.js.map +1 -0
  111. package/dist/improve-stage-shared.d.ts +27 -0
  112. package/dist/improve-stage-shared.d.ts.map +1 -0
  113. package/dist/improve-stage-shared.js +34 -0
  114. package/dist/improve-stage-shared.js.map +1 -0
  115. package/dist/improve-token-patch.d.ts +19 -0
  116. package/dist/improve-token-patch.d.ts.map +1 -0
  117. package/dist/improve-token-patch.js +118 -0
  118. package/dist/improve-token-patch.js.map +1 -0
  119. package/dist/improve-workspace.d.ts +113 -0
  120. package/dist/improve-workspace.d.ts.map +1 -0
  121. package/dist/improve-workspace.js +122 -0
  122. package/dist/improve-workspace.js.map +1 -0
  123. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  124. package/dist/legacy-skill-catalog.js +8 -0
  125. package/dist/legacy-skill-catalog.js.map +1 -1
  126. package/dist/redesign-capture.d.ts +25 -0
  127. package/dist/redesign-capture.d.ts.map +1 -1
  128. package/dist/redesign-capture.js +50 -1
  129. package/dist/redesign-capture.js.map +1 -1
  130. package/dist/run-journal-commands.d.ts.map +1 -1
  131. package/dist/run-journal-commands.js +9 -0
  132. package/dist/run-journal-commands.js.map +1 -1
  133. package/open-design.json +2 -2
  134. package/package.json +1 -1
  135. package/skills/12ui-design/SKILL.md +11 -1
  136. package/skills/12ui-design/improve.md +74 -0
@@ -0,0 +1,28 @@
1
+ import { runConversionCommand } from './cli-convert-command.js';
2
+ import type { ImproveOptions } from './improve-options.js';
3
+ import { type ImproveCommandDependencies } from './improve-stage-shared.js';
4
+ import type { RunJournalNotes } from './run-journal.js';
5
+ import { type ImproveRecord } from './improve-workspace.js';
6
+ export declare const runImproveConversion: (args: {
7
+ input: string;
8
+ outDir: string;
9
+ output: "html" | "html_fixed" | "layerdoc";
10
+ model?: ImproveRecord["conversionModel"];
11
+ responsiveQuality?: ImproveRecord["responsiveQuality"];
12
+ timeoutMs?: number;
13
+ key: string;
14
+ runner: typeof runConversionCommand;
15
+ journal?: RunJournalNotes;
16
+ }) => Promise<{
17
+ artifacts: string[];
18
+ purchaseIds: string[];
19
+ runIds: string[];
20
+ }>;
21
+ export declare const runImproveConvertStage: (args: {
22
+ record: ImproveRecord;
23
+ options: ImproveOptions;
24
+ dependencies: ImproveCommandDependencies;
25
+ price: number;
26
+ freshConversionNonce?: string;
27
+ }) => Promise<ImproveRecord>;
28
+ //# sourceMappingURL=improve-conversion-stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-conversion-stage.d.ts","sourceRoot":"","sources":["../src/improve-conversion-stage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAahE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAyC,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnG,eAAO,MAAM,oBAAoB,GAAU,MAAM;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC;IAC3C,KAAK,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACzC,iBAAiB,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,oBAAoB,CAAC;IACpC,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B,KAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAoC3E,CAAC;AA6CF,eAAO,MAAM,sBAAsB,GAAU,MAAM;IACjD,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,0BAA0B,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,KAAG,OAAO,CAAC,aAAa,CAqIxB,CAAC"}
@@ -0,0 +1,214 @@
1
+ import { copyFile, cp, readFile, stat } from 'node:fs/promises';
2
+ import sharp from 'sharp';
3
+ import { runConversionCommand } from './cli-convert-command.js';
4
+ import { CliRefusal } from './cli-refusal.js';
5
+ import { prepareOutputDirectory } from './cli-output-paths.js';
6
+ import { fixedImproveHtml, improveConversionIdFromText, improveErrorText, IMPROVE_RESPONSIVE_TIMEOUT_MS, prepareImproveTargetAttempt, recordedImproveConversionId, responsiveFallbackReason, } from './improve-convert-resilience.js';
7
+ import { canvasOfDoc } from './improve-layerdoc-diff.js';
8
+ import { improveSha256, noteImproveStage, } from './improve-stage-shared.js';
9
+ import { readImproveRecord, writeImproveRecord } from './improve-workspace.js';
10
+ export const runImproveConversion = async (args) => {
11
+ const artifacts = [];
12
+ const purchaseIds = [];
13
+ const runIds = [];
14
+ const collector = {
15
+ note: (facts) => {
16
+ artifacts.push(...(facts.artifacts ?? []));
17
+ purchaseIds.push(...(facts.purchased ?? []));
18
+ if (facts.runId)
19
+ runIds.push(facts.runId);
20
+ args.journal?.note(facts);
21
+ },
22
+ heartbeat: (progress) => { args.journal?.heartbeat(progress); },
23
+ };
24
+ const flags = {
25
+ output: args.output,
26
+ ...(args.model ? { model: args.model } : {}),
27
+ ...(args.responsiveQuality ? { 'responsive-quality': args.responsiveQuality } : {}),
28
+ ...(args.timeoutMs === undefined ? {} : { 'timeout-ms': String(args.timeoutMs) }),
29
+ 'out-dir': args.outDir,
30
+ 'idempotency-key': args.key,
31
+ quiet: true,
32
+ };
33
+ try {
34
+ await args.runner(['convert', args.input], flags, collector, { writeResult: () => undefined });
35
+ }
36
+ catch (error) {
37
+ throw new ImproveConvertAttemptError(error, {
38
+ artifacts: [...new Set(artifacts)],
39
+ purchaseIds: [...new Set(purchaseIds)],
40
+ runIds: [...new Set(runIds)],
41
+ });
42
+ }
43
+ return {
44
+ artifacts: [...new Set(artifacts)],
45
+ purchaseIds: [...new Set(purchaseIds)],
46
+ runIds: [...new Set(runIds)],
47
+ };
48
+ };
49
+ class ImproveConvertAttemptError extends Error {
50
+ attempt;
51
+ constructor(error, attempt) {
52
+ super(improveErrorText(error), { cause: error });
53
+ this.name = 'ImproveConvertAttemptError';
54
+ this.attempt = attempt;
55
+ }
56
+ }
57
+ const recordFreshConversion = async (args) => {
58
+ const durable = await readImproveRecord(args.options.paths.record) ?? args.record;
59
+ const abandonedId = await recordedImproveConversionId(durable);
60
+ const abandonedConversions = [...(durable.abandonedConversions ?? [])];
61
+ if (abandonedId && !abandonedConversions.some((entry) => entry.id === abandonedId)) {
62
+ abandonedConversions.push({
63
+ id: abandonedId,
64
+ abandonedAt: new Date().toISOString(),
65
+ reason: 'fresh requested after recorded conversion remained unavailable',
66
+ });
67
+ (args.dependencies.warn ?? console.warn)(`[fresh] convert: abandoning recorded conversion ${abandonedId}; requesting a new purchase`);
68
+ }
69
+ const record = {
70
+ ...durable,
71
+ ...(abandonedConversions.length > 0 ? { abandonedConversions } : {}),
72
+ convert: undefined,
73
+ plan: undefined,
74
+ stages: Object.fromEntries(Object.entries(durable.stages).filter(([stage]) => !['convert', 'plan'].includes(stage))),
75
+ };
76
+ await writeImproveRecord(args.options.paths.record, record);
77
+ return record;
78
+ };
79
+ export const runImproveConvertStage = async (args) => {
80
+ if (args.record.convert && !args.options.fresh)
81
+ return noteImproveStage({
82
+ record: args.record, stage: 'convert', priceCeilingUsd: args.price, replayed: true, write: true,
83
+ });
84
+ if (!args.record.pick && !args.record.target)
85
+ throw new Error('Cannot convert before pick');
86
+ await prepareOutputDirectory(args.options.paths.targetDir);
87
+ if (args.record.target?.kind === 'layerdoc') {
88
+ const bytes = await readFile(args.record.target.value);
89
+ canvasOfDoc(JSON.parse(bytes.toString('utf8')));
90
+ await copyFile(args.record.target.value, args.options.paths.targetLayerDoc);
91
+ const assetSource = `${args.record.target.value}.assets`;
92
+ if ((await stat(assetSource).catch(() => undefined))?.isDirectory()) {
93
+ await cp(assetSource, `${args.options.paths.targetLayerDoc}.assets`, { recursive: true });
94
+ }
95
+ let record = {
96
+ ...args.record,
97
+ target: { ...args.record.target, sha256: improveSha256(bytes) },
98
+ convert: {
99
+ layerDoc: args.options.paths.targetLayerDoc,
100
+ html: '',
101
+ layout: 'document',
102
+ artifacts: [args.options.paths.targetLayerDoc],
103
+ purchaseIds: [],
104
+ },
105
+ };
106
+ record = await noteImproveStage({
107
+ record, stage: 'convert', priceCeilingUsd: args.price, replayed: false, write: false,
108
+ });
109
+ await writeImproveRecord(args.options.paths.record, record);
110
+ return record;
111
+ }
112
+ let recordBeforeConvert = args.options.fresh
113
+ ? await recordFreshConversion(args)
114
+ : args.record;
115
+ let input = args.record.pick?.imagePath;
116
+ let inputSha = args.record.pick?.sha256;
117
+ if (args.record.target?.kind === 'image') {
118
+ const bytes = await readFile(args.record.target.value);
119
+ const image = sharp(bytes, { animated: false, failOn: 'warning' });
120
+ const metadata = await image.metadata();
121
+ if (!metadata.width || !metadata.height || !['png', 'jpeg', 'webp'].includes(metadata.format ?? '')) {
122
+ throw new CliRefusal('--target image is not a usable PNG, JPEG, or WebP', 'improve_target_invalid');
123
+ }
124
+ await image.png().toFile(args.options.paths.winnerImage);
125
+ input = args.options.paths.winnerImage;
126
+ inputSha = improveSha256(bytes);
127
+ recordBeforeConvert = { ...recordBeforeConvert, target: { ...args.record.target, sha256: inputSha } };
128
+ }
129
+ if (!input || !inputSha)
130
+ throw new Error('Improve has no design image to convert');
131
+ const targetIdentity = improveSha256(Buffer.from(`${inputSha}:${args.record.conversionModel}:${args.options.responsiveQuality}`)).slice(0, 32);
132
+ const baseKey = `improve-target:v2:${targetIdentity}`;
133
+ const key = args.options.fresh
134
+ ? `${baseKey}:fresh:${args.freshConversionNonce}`
135
+ : baseKey;
136
+ const transaction = await prepareImproveTargetAttempt(args.options.paths.targetDir);
137
+ try {
138
+ const converted = await runImproveConversion({
139
+ input,
140
+ outDir: args.options.paths.targetDir,
141
+ output: 'html',
142
+ model: args.record.conversionModel,
143
+ responsiveQuality: args.options.responsiveQuality,
144
+ timeoutMs: IMPROVE_RESPONSIVE_TIMEOUT_MS,
145
+ key,
146
+ runner: args.dependencies.runConvert ?? runConversionCommand,
147
+ journal: args.dependencies.journal,
148
+ }).catch(async (error) => {
149
+ const attempt = error instanceof ImproveConvertAttemptError
150
+ ? error.attempt
151
+ : { artifacts: [], purchaseIds: [], runIds: [] };
152
+ const warning = responsiveFallbackReason(error);
153
+ const sourceConversionId = attempt.runIds[0]
154
+ ?? improveConversionIdFromText(improveErrorText(error));
155
+ const layerDocPresent = (await stat(args.options.paths.targetLayerDoc).catch(() => undefined))?.isFile();
156
+ const assetsPresent = (await stat(`${args.options.paths.targetLayerDoc}.assets`).catch(() => undefined))?.isDirectory();
157
+ if (!warning || !sourceConversionId || !layerDocPresent || !assetsPresent)
158
+ throw error;
159
+ (args.dependencies.warn ?? console.warn)(`Responsive HTML was unavailable; deriving fixed-layout HTML free from ${sourceConversionId}`);
160
+ const fixed = await runImproveConversion({
161
+ input: sourceConversionId,
162
+ outDir: args.options.paths.targetDir,
163
+ output: 'html_fixed',
164
+ key: `improve-fixed:v1:${sourceConversionId}`,
165
+ runner: args.dependencies.runConvert ?? runConversionCommand,
166
+ journal: args.dependencies.journal,
167
+ });
168
+ const fixedOutput = await fixedImproveHtml(args.options.paths.targetDir);
169
+ args.dependencies.journal?.note({ degradations: ['improve_fixed_layout_fallback'] });
170
+ return {
171
+ artifacts: [...new Set([
172
+ ...attempt.artifacts,
173
+ ...fixed.artifacts,
174
+ args.options.paths.targetLayerDoc,
175
+ `${args.options.paths.targetLayerDoc}.assets`,
176
+ fixedOutput.html,
177
+ fixedOutput.assets,
178
+ ])],
179
+ purchaseIds: [...new Set([...attempt.purchaseIds, ...fixed.purchaseIds])],
180
+ runIds: [...new Set([sourceConversionId, ...attempt.runIds, ...fixed.runIds])],
181
+ fallback: { html: fixedOutput.html, warning },
182
+ };
183
+ });
184
+ const html = 'fallback' in converted ? converted.fallback.html : args.options.paths.targetHtml;
185
+ for (const expected of [args.options.paths.targetLayerDoc, html]) {
186
+ if (!(await stat(expected).catch(() => undefined))?.isFile()) {
187
+ throw new Error(`Improve conversion completed without ${expected}`);
188
+ }
189
+ }
190
+ let record = {
191
+ ...recordBeforeConvert,
192
+ convert: {
193
+ layerDoc: args.options.paths.targetLayerDoc,
194
+ html,
195
+ layout: 'fallback' in converted ? 'fixed' : 'responsive',
196
+ ...(converted.runIds[0] ? { sourceConversionId: converted.runIds[0] } : {}),
197
+ ...('fallback' in converted ? { responsiveWarning: converted.fallback.warning } : {}),
198
+ artifacts: converted.artifacts,
199
+ purchaseIds: converted.purchaseIds,
200
+ },
201
+ };
202
+ record = await noteImproveStage({
203
+ record, stage: 'convert', priceCeilingUsd: args.price, replayed: false, write: false,
204
+ });
205
+ await writeImproveRecord(args.options.paths.record, record);
206
+ await transaction.commit();
207
+ return record;
208
+ }
209
+ catch (error) {
210
+ await transaction.restore();
211
+ throw error;
212
+ }
213
+ };
214
+ //# sourceMappingURL=improve-conversion-stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-conversion-stage.js","sourceRoot":"","sources":["../src/improve-conversion-stage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { ImproveRecord } from './improve-workspace.js';
2
+ export declare const IMPROVE_RESPONSIVE_TIMEOUT_MS: number;
3
+ export declare const IMPROVE_TEMPORARY_UNAVAILABLE_RETRY_DELAY_MS = 30000;
4
+ export declare const improveErrorText: (error: unknown) => string;
5
+ export declare const isImproveTemporarilyUnavailable: (error: unknown) => boolean;
6
+ export declare const retryImproveTemporarilyUnavailable: <T>(args: {
7
+ stage: string;
8
+ action: () => Promise<T>;
9
+ sleep?: (milliseconds: number) => Promise<void>;
10
+ warn?: (line: string) => void;
11
+ }) => Promise<T>;
12
+ export declare const improveConversionIdFromText: (value: string) => string | undefined;
13
+ export declare const recordedImproveConversionId: (record: ImproveRecord) => Promise<string | undefined>;
14
+ export declare const responsiveFallbackReason: (error: unknown) => string | undefined;
15
+ export declare const fixedImproveHtml: (targetDir: string) => Promise<{
16
+ html: string;
17
+ assets: string;
18
+ }>;
19
+ export declare const prepareImproveTargetAttempt: (targetDir: string) => Promise<{
20
+ commit: () => Promise<void>;
21
+ restore: () => Promise<void>;
22
+ }>;
23
+ //# sourceMappingURL=improve-convert-resilience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-convert-resilience.d.ts","sourceRoot":"","sources":["../src/improve-convert-resilience.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,eAAO,MAAM,6BAA6B,QAA0C,CAAC;AACrF,eAAO,MAAM,4CAA4C,QAAS,CAAC;AAKnE,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,MAOjD,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAAI,OAAO,OAAO,KAAG,OAEhE,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAAU,CAAC,EAAE,MAAM;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B,KAAG,OAAO,CAAC,CAAC,CAaZ,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,SAIpE,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,QAAQ,aAAa,KACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAc5B,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAYlE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAUA,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC;IAC5E,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAiBA,CAAC"}
@@ -0,0 +1,102 @@
1
+ import { mkdir, rename, rm, stat } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { CONVERSION_DURATION_HINTS } from './cli-progress.js';
4
+ import { derivedOutputFilePath } from './cli-conversion-output-directory.js';
5
+ import { readRunJournal } from './run-journal.js';
6
+ export const IMPROVE_RESPONSIVE_TIMEOUT_MS = CONVERSION_DURATION_HINTS.fused * 1_000;
7
+ export const IMPROVE_TEMPORARY_UNAVAILABLE_RETRY_DELAY_MS = 30_000;
8
+ const RESPONSIVE_PARTIAL_FAILURE = 'could not be completed for every required viewport size';
9
+ const UUID = /[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}/iu;
10
+ export const improveErrorText = (error) => {
11
+ const detail = error;
12
+ return [
13
+ error instanceof Error ? error.message : String(error),
14
+ typeof detail?.stdout === 'string' ? detail.stdout : undefined,
15
+ typeof detail?.stderr === 'string' ? detail.stderr : undefined,
16
+ ].filter((part) => Boolean(part)).join('\n');
17
+ };
18
+ export const isImproveTemporarilyUnavailable = (error) => (improveErrorText(error).toLowerCase().includes('temporarily unavailable'));
19
+ export const retryImproveTemporarilyUnavailable = async (args) => {
20
+ try {
21
+ return await args.action();
22
+ }
23
+ catch (error) {
24
+ if (!isImproveTemporarilyUnavailable(error))
25
+ throw error;
26
+ (args.warn ?? console.warn)(`[retry] ${args.stage}: temporarily unavailable; retrying once after 30s`);
27
+ await (args.sleep ?? ((milliseconds) => new Promise((resolve) => {
28
+ setTimeout(resolve, milliseconds);
29
+ })))(IMPROVE_TEMPORARY_UNAVAILABLE_RETRY_DELAY_MS);
30
+ return args.action();
31
+ }
32
+ };
33
+ export const improveConversionIdFromText = (value) => {
34
+ const keyed = /(?:(?:"id"|"run_id")\s*:\s*"|conversion(?:\s+id)?[^0-9a-f]*)([0-9a-f-]{36})/iu
35
+ .exec(value)?.[1];
36
+ return keyed ?? UUID.exec(value)?.[0];
37
+ };
38
+ export const recordedImproveConversionId = async (record) => {
39
+ if (record.convert?.sourceConversionId && UUID.test(record.convert.sourceConversionId)) {
40
+ return record.convert.sourceConversionId;
41
+ }
42
+ const purchase = record.convert?.purchaseIds.find((id) => UUID.test(id));
43
+ if (purchase)
44
+ return purchase;
45
+ const journal = await readRunJournal({ workspace: record.runDir });
46
+ const targetLayerDoc = path.join(record.runDir, 'target', 'winner.layerdoc.json');
47
+ for (const entry of [...journal.entries].reverse()) {
48
+ if (entry.run_id
49
+ && UUID.test(entry.run_id)
50
+ && entry.writes?.includes(targetLayerDoc))
51
+ return entry.run_id;
52
+ }
53
+ return undefined;
54
+ };
55
+ export const responsiveFallbackReason = (error) => {
56
+ if (isImproveTemporarilyUnavailable(error))
57
+ return undefined;
58
+ const text = improveErrorText(error);
59
+ const normalized = text.toLowerCase();
60
+ if (normalized.includes(RESPONSIVE_PARTIAL_FAILURE)
61
+ || /responsive html export[\s\S]*(?:did not|failed|running|timed out|deadline)/iu.test(text)
62
+ || /responsive[\s\S]*(?:timeout|timed out|deadline exceeded)/iu.test(text)) {
63
+ return normalized.includes(RESPONSIVE_PARTIAL_FAILURE)
64
+ ? 'Responsive HTML could not be completed for every required viewport size.'
65
+ : 'Responsive HTML did not settle before the improve stage deadline.';
66
+ }
67
+ return undefined;
68
+ };
69
+ export const fixedImproveHtml = async (targetDir) => {
70
+ const html = derivedOutputFilePath(targetDir, 'html_fixed');
71
+ const assets = `${html}.assets`;
72
+ if (!(await stat(html).catch(() => undefined))?.isFile()) {
73
+ throw new Error(`Fixed-layout derivation completed without ${html}`);
74
+ }
75
+ if (!(await stat(assets).catch(() => undefined))?.isDirectory()) {
76
+ throw new Error(`Fixed-layout derivation completed without ${assets}`);
77
+ }
78
+ return { html: path.resolve(html), assets: path.resolve(assets) };
79
+ };
80
+ export const prepareImproveTargetAttempt = async (targetDir) => {
81
+ const backupDir = `${targetDir}.previous`;
82
+ const targetExists = Boolean(await stat(targetDir).catch(() => undefined));
83
+ const backupExists = Boolean(await stat(backupDir).catch(() => undefined));
84
+ if (backupExists) {
85
+ if (!targetExists)
86
+ await rename(backupDir, targetDir);
87
+ else
88
+ await rm(backupDir, { recursive: true, force: true });
89
+ }
90
+ if (await stat(targetDir).catch(() => undefined))
91
+ await rename(targetDir, backupDir);
92
+ await mkdir(targetDir, { recursive: true });
93
+ return {
94
+ commit: async () => rm(backupDir, { recursive: true, force: true }),
95
+ restore: async () => {
96
+ await rm(targetDir, { recursive: true, force: true });
97
+ if (await stat(backupDir).catch(() => undefined))
98
+ await rename(backupDir, targetDir);
99
+ },
100
+ };
101
+ };
102
+ //# sourceMappingURL=improve-convert-resilience.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-convert-resilience.js","sourceRoot":"","sources":["../src/improve-convert-resilience.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ImproveOptions } from './improve-options.js';
2
+ import { type ImproveCommandDependencies } from './improve-stage-shared.js';
3
+ import { type ImproveRecord } from './improve-workspace.js';
4
+ export declare const runImprovePlanStage: (args: {
5
+ record: ImproveRecord;
6
+ options: ImproveOptions;
7
+ dependencies: ImproveCommandDependencies;
8
+ price: number;
9
+ }) => Promise<ImproveRecord>;
10
+ //# sourceMappingURL=improve-delivery-stages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-delivery-stages.d.ts","sourceRoot":"","sources":["../src/improve-delivery-stages.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA6FhF,eAAO,MAAM,mBAAmB,GAAU,MAAM;IAC9C,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,0BAA0B,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;CACf,KAAG,OAAO,CAAC,aAAa,CA6DxB,CAAC"}
@@ -0,0 +1,160 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { runConversionCommand } from './cli-convert-command.js';
4
+ import { prepareOutputDirectory } from './cli-output-paths.js';
5
+ import { runImproveConversion } from './improve-conversion-stage.js';
6
+ import { writeImproveDomDiff } from './improve-dom-diff.js';
7
+ import { evaluateImproveGate } from './improve-dom-gate.js';
8
+ import { normalizeLayerDoc } from './improve-dom-scale.js';
9
+ import { canvasOfDoc, diffLayerDocs, flattenLayerDoc } from './improve-layerdoc-diff.js';
10
+ import { writeImproveAnnotatedPlan } from './improve-plan-annotator.js';
11
+ import { renderLayerChanges } from './improve-plan-render.js';
12
+ import { noteImproveStage, } from './improve-stage-shared.js';
13
+ import { writeImproveRecord } from './improve-workspace.js';
14
+ const syntheticLayerDiff = (beforeDoc, targetDoc) => {
15
+ const beforeCanvas = canvasOfDoc(beforeDoc);
16
+ const targetCanvas = canvasOfDoc(targetDoc);
17
+ const normalizedBefore = normalizeLayerDoc(beforeDoc);
18
+ const normalizedTarget = normalizeLayerDoc(targetDoc, beforeCanvas.width / targetCanvas.width);
19
+ const beforeLeaves = flattenLayerDoc(normalizedBefore);
20
+ const targetLeaves = flattenLayerDoc(normalizedTarget);
21
+ const result = diffLayerDocs(normalizedBefore, normalizedTarget);
22
+ const coverage = result.meta.plausibleMatchedCount / Math.max(beforeLeaves.length, 1);
23
+ return {
24
+ result,
25
+ beforeLeaves,
26
+ targetLeaves,
27
+ beforeCanvas,
28
+ targetCanvas,
29
+ lengthScale: beforeCanvas.width / targetCanvas.width,
30
+ domCoverage: coverage,
31
+ designCoverage: result.meta.plausibleMatchedCount / Math.max(targetLeaves.length, 1),
32
+ gate: evaluateImproveGate(1, 0),
33
+ markdown: '',
34
+ };
35
+ };
36
+ const writeImagePlan = async (args) => {
37
+ const targetDoc = JSON.parse(await readFile(args.options.paths.targetLayerDoc, 'utf8'));
38
+ let record = args.record;
39
+ let computed;
40
+ let mode;
41
+ const artifacts = [];
42
+ if (args.record.planSourceConvert) {
43
+ if (!record.sourceConvert) {
44
+ await prepareOutputDirectory(args.options.paths.sourceConversionDir);
45
+ const source = await runImproveConversion({
46
+ input: args.options.paths.sourceImage,
47
+ outDir: args.options.paths.sourceConversionDir,
48
+ output: 'layerdoc',
49
+ model: record.conversionModel,
50
+ key: `improve-source:v1:${record.capture?.sha256}:${record.conversionModel}`,
51
+ runner: args.dependencies.runConvert ?? runConversionCommand,
52
+ journal: args.dependencies.journal,
53
+ });
54
+ const sourceLayerDoc = path.join(args.options.paths.sourceConversionDir, 'source.layerdoc.json');
55
+ record = { ...record, sourceConvert: { layerDoc: sourceLayerDoc, ...source } };
56
+ await writeImproveRecord(args.options.paths.record, record);
57
+ }
58
+ const beforeDoc = JSON.parse(await readFile(record.sourceConvert.layerDoc, 'utf8'));
59
+ computed = syntheticLayerDiff(beforeDoc, targetDoc);
60
+ mode = 'layerdoc-anchored';
61
+ const diffPath = path.join(args.options.paths.planDir, 'diff.json');
62
+ const changesPath = path.join(args.options.paths.planDir, 'changes.md');
63
+ await Promise.all([
64
+ writeFile(diffPath, `${JSON.stringify({
65
+ generatedAt: new Date().toISOString(), before: record.sourceConvert.layerDoc,
66
+ after: args.options.paths.targetLayerDoc, mode, ...computed.result,
67
+ }, null, 2)}\n`, 'utf8'),
68
+ writeFile(changesPath, renderLayerChanges({
69
+ result: computed.result,
70
+ beforePath: record.sourceConvert.layerDoc,
71
+ targetPath: args.options.paths.targetLayerDoc,
72
+ beforeDoc,
73
+ targetDoc,
74
+ }), 'utf8'),
75
+ ]);
76
+ artifacts.push(diffPath, changesPath);
77
+ }
78
+ else {
79
+ const empty = { version: 2, canvas: canvasOfDoc(targetDoc), layers: [] };
80
+ computed = syntheticLayerDiff(empty, targetDoc);
81
+ mode = 'unanchored';
82
+ const diffPath = path.join(args.options.paths.planDir, 'diff.json');
83
+ const changesPath = path.join(args.options.paths.planDir, 'changes.md');
84
+ await Promise.all([
85
+ writeFile(diffPath, `${JSON.stringify({
86
+ generatedAt: new Date().toISOString(), mode, after: args.options.paths.targetLayerDoc,
87
+ note: 'Target-only plan; no source conversion was purchased.', ...computed.result,
88
+ }, null, 2)}\n`, 'utf8'),
89
+ writeFile(changesPath, '# Target-only improve plan\n\nNo source conversion was purchased. Every target element is an unanchored implementation specification.\n', 'utf8'),
90
+ ]);
91
+ artifacts.push(diffPath, changesPath);
92
+ }
93
+ return { computed, mode, artifacts, record };
94
+ };
95
+ export const runImprovePlanStage = async (args) => {
96
+ if (args.record.plan)
97
+ return noteImproveStage({
98
+ record: args.record, stage: 'plan', priceCeilingUsd: args.price, replayed: true, write: true,
99
+ });
100
+ if (!args.record.convert)
101
+ throw new Error('Cannot plan before convert');
102
+ await mkdir(args.options.paths.planDir, { recursive: true });
103
+ const targetDoc = JSON.parse(await readFile(args.options.paths.targetLayerDoc, 'utf8'));
104
+ let record = args.record;
105
+ let mode;
106
+ let gate;
107
+ let artifacts;
108
+ if (args.options.input.kind === 'url') {
109
+ const diff = await writeImproveDomDiff({
110
+ beforePath: args.options.paths.currentDomDoc,
111
+ targetPath: args.options.paths.targetLayerDoc,
112
+ outDir: args.options.paths.planDir,
113
+ });
114
+ mode = 'dom-anchored';
115
+ gate = diff.gate.passed ? 'passed' : 'blocked';
116
+ artifacts = [...diff.artifacts];
117
+ if (diff.gate.passed) {
118
+ const annotated = await writeImproveAnnotatedPlan({
119
+ computed: diff,
120
+ targetDoc,
121
+ targetPath: args.options.paths.targetLayerDoc,
122
+ outDir: args.options.paths.planDir,
123
+ ...(args.record.repo ? { repo: args.record.repo } : {}),
124
+ mode,
125
+ });
126
+ artifacts.push(...annotated.artifacts);
127
+ }
128
+ }
129
+ else {
130
+ const imagePlan = await writeImagePlan({ record, options: args.options, dependencies: args.dependencies });
131
+ record = imagePlan.record;
132
+ mode = imagePlan.mode;
133
+ gate = 'not-applicable';
134
+ artifacts = [...imagePlan.artifacts];
135
+ const annotated = await writeImproveAnnotatedPlan({
136
+ computed: imagePlan.computed,
137
+ targetDoc,
138
+ targetPath: args.options.paths.targetLayerDoc,
139
+ outDir: args.options.paths.planDir,
140
+ mode,
141
+ });
142
+ artifacts.push(...annotated.artifacts);
143
+ }
144
+ record = {
145
+ ...record,
146
+ plan: {
147
+ mode,
148
+ gate,
149
+ artifacts: [...new Set(artifacts)],
150
+ ...(record.sourceConvert ? { sourceLayerDoc: record.sourceConvert.layerDoc } : {}),
151
+ purchaseIds: record.sourceConvert?.purchaseIds ?? [],
152
+ },
153
+ };
154
+ record = await noteImproveStage({
155
+ record, stage: 'plan', priceCeilingUsd: args.price, replayed: false, write: false,
156
+ });
157
+ await writeImproveRecord(args.options.paths.record, record);
158
+ return record;
159
+ };
160
+ //# sourceMappingURL=improve-delivery-stages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-delivery-stages.js","sourceRoot":"","sources":["../src/improve-delivery-stages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ImpliedPaddingDelta, LayerBox, LayerDiffMatch, LayerLeaf } from './improve-layerdoc-types.js';
2
+ export declare const selectorLabel: (leaf: LayerLeaf | undefined) => string;
3
+ export declare const containment: (inner: LayerBox | undefined, outer: LayerBox | undefined) => number;
4
+ export declare const confidentMatches: (matched: readonly LayerDiffMatch[], before: readonly LayerLeaf[], after: readonly LayerLeaf[], minimumIou?: number) => Set<number>;
5
+ export declare const insertionAnchor: (box: LayerBox, before: readonly LayerLeaf[]) => {
6
+ container: number;
7
+ after?: number;
8
+ before?: number;
9
+ };
10
+ export declare const impliedPaddingDeltas: (matched: readonly LayerDiffMatch[], before: readonly LayerLeaf[], after: readonly LayerLeaf[], canvas: {
11
+ width: number;
12
+ height: number;
13
+ }, confident: ReadonlySet<number>) => Map<number, ImpliedPaddingDelta[]>;
14
+ export declare const domPx: (box: LayerBox | undefined, canvas: {
15
+ width: number;
16
+ height: number;
17
+ }) => LayerBox | undefined;
18
+ //# sourceMappingURL=improve-dom-anchor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-dom-anchor.d.ts","sourceRoot":"","sources":["../src/improve-dom-anchor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,QAAQ,EACR,cAAc,EACd,SAAS,EACV,MAAM,6BAA6B,CAAC;AAErC,eAAO,MAAM,aAAa,GAAI,MAAM,SAAS,GAAG,SAAS,KAAG,MAQ3D,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,OAAO,QAAQ,GAAG,SAAS,EAAE,OAAO,QAAQ,GAAG,SAAS,KAAG,MAKtF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,SAAS,cAAc,EAAE,EAClC,QAAQ,SAAS,SAAS,EAAE,EAC5B,OAAO,SAAS,SAAS,EAAE,EAC3B,mBAAgB,KACf,GAAG,CAAC,MAAM,CAcZ,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,KAAK,QAAQ,EACb,QAAQ,SAAS,SAAS,EAAE,KAC3B;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CA6BtD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,SAAS,cAAc,EAAE,EAClC,QAAQ,SAAS,SAAS,EAAE,EAC5B,OAAO,SAAS,SAAS,EAAE,EAC3B,QAAQ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACzC,WAAW,WAAW,CAAC,MAAM,CAAC,KAC7B,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CA0CnC,CAAC;AAEF,eAAO,MAAM,KAAK;;;0BAAgB,CAAC"}