@12ui/design 0.2.55 → 0.2.56
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/SKILL.md +1 -1
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +1 -0
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli-conversion-derivation.d.ts +2 -1
- package/dist/cli-conversion-derivation.d.ts.map +1 -1
- package/dist/cli-conversion-derivation.js +9 -1
- package/dist/cli-conversion-derivation.js.map +1 -1
- package/dist/cli-convert-command.js +1 -1
- package/dist/cli-convert-command.js.map +1 -1
- package/dist/cli-draft-command.d.ts +11 -0
- package/dist/cli-draft-command.d.ts.map +1 -1
- package/dist/cli-draft-command.js +10 -1
- package/dist/cli-draft-command.js.map +1 -1
- package/dist/cli-help/design.d.ts +1 -1
- package/dist/cli-help/design.d.ts.map +1 -1
- package/dist/cli-help/design.js +7 -1
- package/dist/cli-help/design.js.map +1 -1
- package/dist/cli-help/index.d.ts +1 -1
- package/dist/cli-improve-command.d.ts.map +1 -1
- package/dist/cli-improve-command.js +252 -68
- package/dist/cli-improve-command.js.map +1 -1
- package/dist/cli-next-command.d.ts.map +1 -1
- package/dist/cli-next-command.js +44 -4
- package/dist/cli-next-command.js.map +1 -1
- package/dist/cli-usage.js +1 -1
- package/dist/improve-conversion-attempts.d.ts +92 -0
- package/dist/improve-conversion-attempts.d.ts.map +1 -0
- package/dist/improve-conversion-attempts.js +88 -0
- package/dist/improve-conversion-attempts.js.map +1 -0
- package/dist/improve-conversion-stage.d.ts +7 -0
- package/dist/improve-conversion-stage.d.ts.map +1 -1
- package/dist/improve-conversion-stage.js +197 -30
- package/dist/improve-conversion-stage.js.map +1 -1
- package/dist/improve-convert-resilience.d.ts +125 -0
- package/dist/improve-convert-resilience.d.ts.map +1 -1
- package/dist/improve-convert-resilience.js +165 -1
- package/dist/improve-convert-resilience.js.map +1 -1
- package/dist/improve-delivery-stages.d.ts.map +1 -1
- package/dist/improve-delivery-stages.js +1 -0
- package/dist/improve-delivery-stages.js.map +1 -1
- package/dist/improve-dom-diff.d.ts +2 -0
- package/dist/improve-dom-diff.d.ts.map +1 -1
- package/dist/improve-dom-diff.js +7 -0
- package/dist/improve-dom-diff.js.map +1 -1
- package/dist/improve-dom-gate.d.ts +7 -0
- package/dist/improve-dom-gate.d.ts.map +1 -1
- package/dist/improve-dom-gate.js +13 -0
- package/dist/improve-dom-gate.js.map +1 -1
- package/dist/improve-generation-stages.d.ts +3 -0
- package/dist/improve-generation-stages.d.ts.map +1 -1
- package/dist/improve-generation-stages.js +24 -7
- package/dist/improve-generation-stages.js.map +1 -1
- package/dist/improve-kit-assets.d.ts +129 -0
- package/dist/improve-kit-assets.d.ts.map +1 -0
- package/dist/improve-kit-assets.js +333 -0
- package/dist/improve-kit-assets.js.map +1 -0
- package/dist/improve-kit-readme.d.ts +11 -2
- package/dist/improve-kit-readme.d.ts.map +1 -1
- package/dist/improve-kit-readme.js +192 -26
- package/dist/improve-kit-readme.js.map +1 -1
- package/dist/improve-kit-stall.d.ts +67 -0
- package/dist/improve-kit-stall.d.ts.map +1 -0
- package/dist/improve-kit-stall.js +159 -0
- package/dist/improve-kit-stall.js.map +1 -0
- package/dist/improve-kit-status.d.ts +69 -0
- package/dist/improve-kit-status.d.ts.map +1 -0
- package/dist/improve-kit-status.js +145 -0
- package/dist/improve-kit-status.js.map +1 -0
- package/dist/improve-options.d.ts +10 -1
- package/dist/improve-options.d.ts.map +1 -1
- package/dist/improve-options.js +62 -15
- package/dist/improve-options.js.map +1 -1
- package/dist/improve-plan-annotated-render.d.ts +33 -0
- package/dist/improve-plan-annotated-render.d.ts.map +1 -0
- package/dist/improve-plan-annotated-render.js +175 -0
- package/dist/improve-plan-annotated-render.js.map +1 -0
- package/dist/improve-plan-annotator.d.ts +2 -1
- package/dist/improve-plan-annotator.d.ts.map +1 -1
- package/dist/improve-plan-annotator.js +21 -45
- package/dist/improve-plan-annotator.js.map +1 -1
- package/dist/improve-raster-layers-section.d.ts +21 -0
- package/dist/improve-raster-layers-section.d.ts.map +1 -0
- package/dist/improve-raster-layers-section.js +45 -0
- package/dist/improve-raster-layers-section.js.map +1 -0
- package/dist/improve-reset.d.ts +122 -0
- package/dist/improve-reset.d.ts.map +1 -0
- package/dist/improve-reset.js +141 -0
- package/dist/improve-reset.js.map +1 -0
- package/dist/improve-run-summary.d.ts +35 -0
- package/dist/improve-run-summary.d.ts.map +1 -0
- package/dist/improve-run-summary.js +134 -0
- package/dist/improve-run-summary.js.map +1 -0
- package/dist/improve-stage-shared.d.ts +5 -0
- package/dist/improve-stage-shared.d.ts.map +1 -1
- package/dist/improve-stage-shared.js.map +1 -1
- package/dist/improve-stop-handler.d.ts +73 -0
- package/dist/improve-stop-handler.d.ts.map +1 -0
- package/dist/improve-stop-handler.js +126 -0
- package/dist/improve-stop-handler.js.map +1 -0
- package/dist/improve-terminal-event.d.ts +118 -0
- package/dist/improve-terminal-event.d.ts.map +1 -0
- package/dist/improve-terminal-event.js +81 -0
- package/dist/improve-terminal-event.js.map +1 -0
- package/dist/improve-workspace.d.ts +15 -0
- package/dist/improve-workspace.d.ts.map +1 -1
- package/dist/improve-workspace.js +3 -0
- package/dist/improve-workspace.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +20 -0
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/redesign-capture.d.ts +16 -0
- package/dist/redesign-capture.d.ts.map +1 -1
- package/dist/redesign-capture.js +49 -3
- package/dist/redesign-capture.js.map +1 -1
- package/dist/run-journal-unfinished.d.ts +56 -0
- package/dist/run-journal-unfinished.d.ts.map +1 -0
- package/dist/run-journal-unfinished.js +126 -0
- package/dist/run-journal-unfinished.js.map +1 -0
- package/dist/run-journal.d.ts +25 -1
- package/dist/run-journal.d.ts.map +1 -1
- package/dist/run-journal.js +15 -1
- package/dist/run-journal.js.map +1 -1
- package/open-design.json +2 -2
- package/package.json +1 -1
- package/skills/12ui-design/SKILL.md +2 -0
- package/skills/12ui-design/improve.md +67 -5
package/dist/cli-usage.js
CHANGED
|
@@ -64,7 +64,7 @@ export const CLI_USAGE = `Usage:
|
|
|
64
64
|
12ui branch resume <run-dir>
|
|
65
65
|
12ui prototype <run-dir> [--polish]
|
|
66
66
|
12ui redesign <url> --direction ${CONCEPT_PLACEHOLDER} [--pages <1-10,default-5>] [--candidates <2-16,default-4>] [--max-screens <1-8,default-8>] [--convert-model fast|standard|pro,default-standard] [--slot <A-P,default-A>] [--from capture|plan|draft|pick|branch|polish] [--to capture|plan|draft|pick|branch|polish] [--out-dir <run-directory>] [--dry-run]
|
|
67
|
-
12ui improve <url|image.png|jpg|webp> [--target <image.png|layerdoc.json>] [--direction <text,0-${IMPROVE_DIRECTION_MAX_CHARACTERS}-chars>] [--candidates <2-16,default-4>] [--retain <set,default-layout,content>] [--pick <A-P,
|
|
67
|
+
12ui improve <url|image.png|jpg|webp> [--target <image.png|layerdoc.json>] [--direction <text,0-${IMPROVE_DIRECTION_MAX_CHARACTERS}-chars>] [--candidates <2-16,default-4>] [--retain <set,default-layout,content>] [--pick <A-P,required-before-convert>] [--convert-model fast|standard|pro,default-standard] [--responsive-quality standard|pro,default-standard] [--convert-stall-seconds <seconds,default-2x-model-typical>] [--viewport <WxH,default-1440x900>] [--full-page] [--bootstrap '<url>|<click-selector>|<wait-url>'] [--repo <source-repo>] [--plan-source-convert] [--fresh] [--redraw] [--from capture|draft|pick|convert|plan] [--to capture|draft|pick|convert|plan] [--out-dir <directory>] [--dry-run]
|
|
68
68
|
12ui next <run-dir|run-id> [--wait] [--timeout-ms <ms>] [--json]
|
|
69
69
|
12ui review <run-dir>
|
|
70
70
|
12ui review --all
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { ImproveRecord } from './improve-workspace.js';
|
|
2
|
+
/**
|
|
3
|
+
* The kit's ledger of conversions dispatched under a key that is not the base
|
|
4
|
+
* key — written BEFORE the dispatch, so a later invocation can rebuild it.
|
|
5
|
+
*
|
|
6
|
+
* THE MONEY LEAK THIS CLOSES. `--fresh` dispatched under
|
|
7
|
+
* `${baseKey}:fresh:${randomUUID()}` and nothing durable recorded that nonce.
|
|
8
|
+
* A fresh conversion that was stopped or that stalled could therefore never be
|
|
9
|
+
* reached again: `--from convert` rebuilt the BASE key, the server's dedupe
|
|
10
|
+
* attached it to the older recorded conversion, and the fresh one kept running
|
|
11
|
+
* and kept billing with nothing able to collect it. The stall retry had the
|
|
12
|
+
* same shape and was patched by DERIVING its key from the count of stall
|
|
13
|
+
* abandonments (`improveConvertStallCount`), which only becomes true once the
|
|
14
|
+
* stalled conversion has been abandoned — a retry stopped mid-flight was still
|
|
15
|
+
* unreachable, because the conversion it was waiting on had not been abandoned
|
|
16
|
+
* by anything.
|
|
17
|
+
*
|
|
18
|
+
* So both now use ONE mechanism. The exact key goes on the record before the
|
|
19
|
+
* conversion is dispatched, the hosted id joins it as soon as the run reports
|
|
20
|
+
* one, and a resume prefers the newest attempt nothing has abandoned. The
|
|
21
|
+
* derived stall key stays as the fallback for kits written before this ledger.
|
|
22
|
+
*
|
|
23
|
+
* WHY THE BASE-KEY ATTEMPT IS NOT IN HERE. It is the deterministic identity
|
|
24
|
+
* every invocation of this kit computes from the winner, so it needs no record
|
|
25
|
+
* to be rebuilt. Only keys carrying entropy (`--fresh`) or history (the retry)
|
|
26
|
+
* do, and a ledger that also held the ordinary path would make every
|
|
27
|
+
* conversion cost an extra durable write for nothing.
|
|
28
|
+
*
|
|
29
|
+
* WHAT THE STOP PATH OWES. Nothing. Because the key is recorded before the
|
|
30
|
+
* dispatch, a run killed mid-attempt is already resumable from what is on
|
|
31
|
+
* disk, and `improve-stop-handler.ts` still writes no `improve.json` of its
|
|
32
|
+
* own — it reads the durable record after its journal end line and reports it.
|
|
33
|
+
*/
|
|
34
|
+
export type ImproveConversionAttempt = NonNullable<ImproveRecord['conversionAttempts']>[number];
|
|
35
|
+
export type ImproveConversionAttemptReason = ImproveConversionAttempt['reason'];
|
|
36
|
+
/** `--fresh`: one conversion of the same winner under a key nothing replays. */
|
|
37
|
+
export declare const improveFreshConversionKey: (baseKey: string, nonce: string) => string;
|
|
38
|
+
/**
|
|
39
|
+
* The attempt a resume rebuilds its key from: the newest one still open.
|
|
40
|
+
*
|
|
41
|
+
* Newest rather than oldest, for the reason the stall retry already states —
|
|
42
|
+
* the newest conversion is the one that is running and billing now, and
|
|
43
|
+
* re-attaching to it is the only way to get anything back for it.
|
|
44
|
+
*/
|
|
45
|
+
export declare const openImproveConversionAttempt: (record: ImproveRecord) => ImproveConversionAttempt | undefined;
|
|
46
|
+
/** How many conversions of this winner the ledger says one reason has bought. */
|
|
47
|
+
export declare const improveConversionAttemptCount: (record: ImproveRecord, reason: ImproveConversionAttemptReason) => number;
|
|
48
|
+
/**
|
|
49
|
+
* Walk away from every attempt still open. The ids are returned rather than
|
|
50
|
+
* written to `abandonedConversions` here, because that ledger is owned by
|
|
51
|
+
* `improve-reset.ts` and says its own sentence about billing.
|
|
52
|
+
*/
|
|
53
|
+
export declare const abandonImproveConversionAttempts: (record: ImproveRecord, args: {
|
|
54
|
+
reason: string;
|
|
55
|
+
at?: string;
|
|
56
|
+
/** The attempt this invocation is about to dispatch, which is not abandoned. */
|
|
57
|
+
except?: string;
|
|
58
|
+
}) => {
|
|
59
|
+
record: ImproveRecord;
|
|
60
|
+
abandoned: ImproveConversionAttempt[];
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Record a dispatch, deduped by key so replaying the same attempt — the
|
|
64
|
+
* temporarily-unavailable retry re-enters the whole stage — is one entry and
|
|
65
|
+
* not two. `supersedes` is the reason written against every OTHER open
|
|
66
|
+
* attempt: `--fresh` replaces whatever this kit was waiting on, and leaving
|
|
67
|
+
* that one open would send the next resume back to it.
|
|
68
|
+
*/
|
|
69
|
+
export declare const startImproveConversionAttempt: (record: ImproveRecord, args: {
|
|
70
|
+
key: string;
|
|
71
|
+
reason: ImproveConversionAttemptReason;
|
|
72
|
+
at?: string;
|
|
73
|
+
supersedes?: string;
|
|
74
|
+
}) => {
|
|
75
|
+
record: ImproveRecord;
|
|
76
|
+
superseded: ImproveConversionAttempt[];
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* The hosted id, the first time the conversion reports one. First wins: the
|
|
80
|
+
* dispatch names the conversion this key bought, and a fused run's later ids
|
|
81
|
+
* belong to its export half.
|
|
82
|
+
*/
|
|
83
|
+
export declare const noteImproveConversionAttemptId: (record: ImproveRecord, args: {
|
|
84
|
+
key: string;
|
|
85
|
+
conversionId: string;
|
|
86
|
+
}) => ImproveRecord;
|
|
87
|
+
/** The attempt delivered. It is no longer what a resume should re-attach to. */
|
|
88
|
+
export declare const settleImproveConversionAttempt: (record: ImproveRecord, args: {
|
|
89
|
+
key?: string;
|
|
90
|
+
at?: string;
|
|
91
|
+
}) => ImproveRecord;
|
|
92
|
+
//# sourceMappingURL=improve-conversion-attempts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-conversion-attempts.d.ts","sourceRoot":"","sources":["../src/improve-conversion-attempts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,MAAM,MAAM,wBAAwB,GAAG,WAAW,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChG,MAAM,MAAM,8BAA8B,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAEhF,gFAAgF;AAChF,eAAO,MAAM,yBAAyB,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,KAAG,MAE1E,CAAC;AAOF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,GACvC,QAAQ,aAAa,KACpB,wBAAwB,GAAG,SAE7B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,6BAA6B,GACxC,QAAQ,aAAa,EACrB,QAAQ,8BAA8B,KACrC,MAAiG,CAAC;AAErG;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,GAAI,QAAQ,aAAa,EAAE,MAAM;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,KAAG;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,wBAAwB,EAAE,CAAA;CAWjE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,GAAI,QAAQ,aAAa,EAAE,MAAM;IACzE,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,8BAA8B,CAAC;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KAAG;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,wBAAwB,EAAE,CAAA;CAgBlE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,GAAI,QAAQ,aAAa,EAAE,MAAM;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB,KAAG,aAaH,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,8BAA8B,GAAI,QAAQ,aAAa,EAAE,MAAM;IAC1E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,KAAG,aAaH,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/** `--fresh`: one conversion of the same winner under a key nothing replays. */
|
|
2
|
+
export const improveFreshConversionKey = (baseKey, nonce) => (`${baseKey}:fresh:${nonce}`);
|
|
3
|
+
/** Still owed a result: dispatched, and neither settled nor walked away from. */
|
|
4
|
+
const isOpen = (attempt) => (attempt.abandonedAt === undefined && attempt.settledAt === undefined);
|
|
5
|
+
/**
|
|
6
|
+
* The attempt a resume rebuilds its key from: the newest one still open.
|
|
7
|
+
*
|
|
8
|
+
* Newest rather than oldest, for the reason the stall retry already states —
|
|
9
|
+
* the newest conversion is the one that is running and billing now, and
|
|
10
|
+
* re-attaching to it is the only way to get anything back for it.
|
|
11
|
+
*/
|
|
12
|
+
export const openImproveConversionAttempt = (record) => ([...(record.conversionAttempts ?? [])].reverse().find(isOpen));
|
|
13
|
+
/** How many conversions of this winner the ledger says one reason has bought. */
|
|
14
|
+
export const improveConversionAttemptCount = (record, reason) => (record.conversionAttempts ?? []).filter((attempt) => attempt.reason === reason).length;
|
|
15
|
+
/**
|
|
16
|
+
* Walk away from every attempt still open. The ids are returned rather than
|
|
17
|
+
* written to `abandonedConversions` here, because that ledger is owned by
|
|
18
|
+
* `improve-reset.ts` and says its own sentence about billing.
|
|
19
|
+
*/
|
|
20
|
+
export const abandonImproveConversionAttempts = (record, args) => {
|
|
21
|
+
const at = args.at ?? new Date().toISOString();
|
|
22
|
+
const abandoned = [];
|
|
23
|
+
const attempts = (record.conversionAttempts ?? []).map((attempt) => {
|
|
24
|
+
if (!isOpen(attempt) || attempt.key === args.except)
|
|
25
|
+
return attempt;
|
|
26
|
+
const closed = { ...attempt, abandonedAt: at, abandonedReason: args.reason };
|
|
27
|
+
abandoned.push(closed);
|
|
28
|
+
return closed;
|
|
29
|
+
});
|
|
30
|
+
if (abandoned.length === 0)
|
|
31
|
+
return { record, abandoned };
|
|
32
|
+
return { record: { ...record, conversionAttempts: attempts }, abandoned };
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Record a dispatch, deduped by key so replaying the same attempt — the
|
|
36
|
+
* temporarily-unavailable retry re-enters the whole stage — is one entry and
|
|
37
|
+
* not two. `supersedes` is the reason written against every OTHER open
|
|
38
|
+
* attempt: `--fresh` replaces whatever this kit was waiting on, and leaving
|
|
39
|
+
* that one open would send the next resume back to it.
|
|
40
|
+
*/
|
|
41
|
+
export const startImproveConversionAttempt = (record, args) => {
|
|
42
|
+
const at = args.at ?? new Date().toISOString();
|
|
43
|
+
const rotated = args.supersedes === undefined
|
|
44
|
+
? { record, abandoned: [] }
|
|
45
|
+
: abandonImproveConversionAttempts(record, { reason: args.supersedes, at, except: args.key });
|
|
46
|
+
const attempts = rotated.record.conversionAttempts ?? [];
|
|
47
|
+
if (attempts.some((attempt) => attempt.key === args.key)) {
|
|
48
|
+
return { record: rotated.record, superseded: rotated.abandoned };
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
record: {
|
|
52
|
+
...rotated.record,
|
|
53
|
+
conversionAttempts: [...attempts, { key: args.key, reason: args.reason, dispatchedAt: at }],
|
|
54
|
+
},
|
|
55
|
+
superseded: rotated.abandoned,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* The hosted id, the first time the conversion reports one. First wins: the
|
|
60
|
+
* dispatch names the conversion this key bought, and a fused run's later ids
|
|
61
|
+
* belong to its export half.
|
|
62
|
+
*/
|
|
63
|
+
export const noteImproveConversionAttemptId = (record, args) => {
|
|
64
|
+
const attempts = record.conversionAttempts ?? [];
|
|
65
|
+
if (!attempts.some((attempt) => attempt.key === args.key && attempt.conversionId === undefined)) {
|
|
66
|
+
return record;
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
...record,
|
|
70
|
+
conversionAttempts: attempts.map((attempt) => (attempt.key === args.key && attempt.conversionId === undefined
|
|
71
|
+
? { ...attempt, conversionId: args.conversionId }
|
|
72
|
+
: attempt)),
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
/** The attempt delivered. It is no longer what a resume should re-attach to. */
|
|
76
|
+
export const settleImproveConversionAttempt = (record, args) => {
|
|
77
|
+
const key = args.key;
|
|
78
|
+
const attempts = record.conversionAttempts ?? [];
|
|
79
|
+
if (key === undefined || !attempts.some((attempt) => attempt.key === key && isOpen(attempt))) {
|
|
80
|
+
return record;
|
|
81
|
+
}
|
|
82
|
+
const at = args.at ?? new Date().toISOString();
|
|
83
|
+
return {
|
|
84
|
+
...record,
|
|
85
|
+
conversionAttempts: attempts.map((attempt) => (attempt.key === key && isOpen(attempt) ? { ...attempt, settledAt: at } : attempt)),
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=improve-conversion-attempts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-conversion-attempts.js","sourceRoot":"","sources":["../src/improve-conversion-attempts.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,13 @@ export declare const runImproveConversion: (args: {
|
|
|
13
13
|
key: string;
|
|
14
14
|
runner: typeof runConversionCommand;
|
|
15
15
|
journal?: RunJournalNotes;
|
|
16
|
+
/**
|
|
17
|
+
* The hosted id, the first time this conversion reports one. It fires from
|
|
18
|
+
* the dispatch note `cli-convert-command.ts` makes immediately after
|
|
19
|
+
* `createConversion`, which is what lets the attempt ledger join a key to the
|
|
20
|
+
* conversion it bought while that conversion is still running.
|
|
21
|
+
*/
|
|
22
|
+
onConversionId?: (id: string) => void;
|
|
16
23
|
}) => Promise<{
|
|
17
24
|
artifacts: string[];
|
|
18
25
|
purchaseIds: string[];
|
|
@@ -1 +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;
|
|
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;AAkChE,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;IAC1B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,KAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAuC3E,CAAC;AAmCF,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,CA+SxB,CAAC"}
|
|
@@ -3,8 +3,10 @@ import sharp from 'sharp';
|
|
|
3
3
|
import { runConversionCommand } from './cli-convert-command.js';
|
|
4
4
|
import { CliRefusal } from './cli-refusal.js';
|
|
5
5
|
import { prepareOutputDirectory } from './cli-output-paths.js';
|
|
6
|
-
import { fixedImproveHtml, improveConversionIdFromText, improveErrorText,
|
|
6
|
+
import { fixedImproveHtml, improveConversionIdFromText, improveConvertRetryKey, improveConvertStallCount, improveConvertStallExhausted, improveConvertStallReason, improveConvertStallRetryAllowed, improveErrorText, improveStalled, IMPROVE_CONVERT_STALL_ATTEMPTS, IMPROVE_FRESH_ABANDON_REASON, prepareImproveTargetAttempt, resetImproveTargetAttempt, responsiveFallbackReason, } from './improve-convert-resilience.js';
|
|
7
|
+
import { improveFreshConversionKey, noteImproveConversionAttemptId, openImproveConversionAttempt, settleImproveConversionAttempt, startImproveConversionAttempt, } from './improve-conversion-attempts.js';
|
|
7
8
|
import { canvasOfDoc } from './improve-layerdoc-diff.js';
|
|
9
|
+
import { abandonImproveConversion, abandonImproveConversions, noteAbandonedAttempts, withoutImproveStages, } from './improve-reset.js';
|
|
8
10
|
import { improveSha256, noteImproveStage, } from './improve-stage-shared.js';
|
|
9
11
|
import { readImproveRecord, writeImproveRecord } from './improve-workspace.js';
|
|
10
12
|
export const runImproveConversion = async (args) => {
|
|
@@ -15,8 +17,11 @@ export const runImproveConversion = async (args) => {
|
|
|
15
17
|
note: (facts) => {
|
|
16
18
|
artifacts.push(...(facts.artifacts ?? []));
|
|
17
19
|
purchaseIds.push(...(facts.purchased ?? []));
|
|
18
|
-
if (facts.runId)
|
|
20
|
+
if (facts.runId) {
|
|
21
|
+
if (!runIds.includes(facts.runId))
|
|
22
|
+
args.onConversionId?.(facts.runId);
|
|
19
23
|
runIds.push(facts.runId);
|
|
24
|
+
}
|
|
20
25
|
args.journal?.note(facts);
|
|
21
26
|
},
|
|
22
27
|
heartbeat: (progress) => { args.journal?.heartbeat(progress); },
|
|
@@ -54,25 +59,19 @@ class ImproveConvertAttemptError extends Error {
|
|
|
54
59
|
this.attempt = attempt;
|
|
55
60
|
}
|
|
56
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* `--fresh` re-buys ONE conversion of the SAME settled winner under a new
|
|
64
|
+
* idempotency key. Capture, draft and pick stay settled and are not redrawn —
|
|
65
|
+
* `--redraw` is the flag for that.
|
|
66
|
+
*/
|
|
57
67
|
const recordFreshConversion = async (args) => {
|
|
58
68
|
const durable = await readImproveRecord(args.options.paths.record) ?? args.record;
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
};
|
|
69
|
+
const abandoned = await abandonImproveConversion({
|
|
70
|
+
record: durable,
|
|
71
|
+
reason: IMPROVE_FRESH_ABANDON_REASON,
|
|
72
|
+
warn: args.dependencies.warn ?? ((line) => { console.warn(line); }),
|
|
73
|
+
});
|
|
74
|
+
const record = withoutImproveStages(abandoned.record, ['convert', 'plan']);
|
|
76
75
|
await writeImproveRecord(args.options.paths.record, record);
|
|
77
76
|
return record;
|
|
78
77
|
};
|
|
@@ -130,21 +129,78 @@ export const runImproveConvertStage = async (args) => {
|
|
|
130
129
|
throw new Error('Improve has no design image to convert');
|
|
131
130
|
const targetIdentity = improveSha256(Buffer.from(`${inputSha}:${args.record.conversionModel}:${args.options.responsiveQuality}`)).slice(0, 32);
|
|
132
131
|
const baseKey = `improve-target:v2:${targetIdentity}`;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
132
|
+
// How many conversions of this winner the kit has already bought and
|
|
133
|
+
// abandoned to a stall, and which of them to wait on now. A resume
|
|
134
|
+
// re-attaches to the NEWEST one — it is bought, it is still running, and it
|
|
135
|
+
// is the only way to get anything back for it — instead of rebuilding the
|
|
136
|
+
// base key and waiting out the whole bound on the first, oldest, already
|
|
137
|
+
// declared-dead conversion.
|
|
138
|
+
let bought = args.options.fresh ? 0 : improveConvertStallCount(recordBeforeConvert);
|
|
139
|
+
let index = Math.max(1, bought);
|
|
140
|
+
// WHICH CONVERSION THIS INVOCATION IS ABOUT TO WAIT ON. The attempt ledger
|
|
141
|
+
// decides, because it holds the exact key: a `--fresh` or retry attempt that
|
|
142
|
+
// was stopped mid-flight is reachable only through the key it was dispatched
|
|
143
|
+
// under, and the derived stall key below cannot express a nonce. Without it,
|
|
144
|
+
// `--from convert` rebuilt the base key, the server's dedupe handed back the
|
|
145
|
+
// older recorded conversion, and the fresh one kept running and kept billing
|
|
146
|
+
// with nothing able to collect it. The derived key stays the fallback for
|
|
147
|
+
// kits written before the ledger.
|
|
148
|
+
//
|
|
149
|
+
// Only an attempt minted for THIS winner counts: every recorded key is the
|
|
150
|
+
// base key plus a suffix, so the prefix is what says the conversion behind it
|
|
151
|
+
// is of the design this run is converting. A redraw or a re-pick already
|
|
152
|
+
// closes its attempts (`abandonImproveConversions`); this is the second lock
|
|
153
|
+
// on that door, because re-attaching to a conversion of a discarded design
|
|
154
|
+
// would deliver the wrong page and read as a replay.
|
|
155
|
+
const open = args.options.fresh ? undefined : openImproveConversionAttempt(recordBeforeConvert);
|
|
156
|
+
const resumed = open?.key.startsWith(`${baseKey}:`) ? open : undefined;
|
|
157
|
+
const nonce = args.freshConversionNonce;
|
|
158
|
+
if (args.options.fresh && !nonce) {
|
|
159
|
+
throw new Error('improve --fresh needs a per-invocation conversion nonce, so the conversion it dispatches'
|
|
160
|
+
+ ' can be recorded and resumed rather than orphaned');
|
|
161
|
+
}
|
|
162
|
+
const key = args.options.fresh && nonce
|
|
163
|
+
? improveFreshConversionKey(baseKey, nonce)
|
|
164
|
+
: resumed?.key ?? (index === 1 ? baseKey : improveConvertRetryKey(baseKey, index));
|
|
165
|
+
// The transaction is taken ONCE, outside the retry: a second
|
|
166
|
+
// `prepareImproveTargetAttempt` while the first backup exists would delete
|
|
167
|
+
// the previous good target instead of preserving it.
|
|
136
168
|
const transaction = await prepareImproveTargetAttempt(args.options.paths.targetDir);
|
|
169
|
+
const warn = args.dependencies.warn ?? ((line) => { console.warn(line); });
|
|
137
170
|
try {
|
|
138
|
-
|
|
171
|
+
// The hosted id joins its key on the record as soon as the conversion
|
|
172
|
+
// reports one, so a reader of `improve.json` alone can say which conversion
|
|
173
|
+
// a recorded key bought. Only ledger attempts have anywhere to put it, so
|
|
174
|
+
// the ordinary base-key path writes nothing extra. The writes are chained
|
|
175
|
+
// and drained before the stage writes the record itself: a stamp landing
|
|
176
|
+
// after the settled record would write a record that has no convert block.
|
|
177
|
+
let pendingLedgerWrite = Promise.resolve();
|
|
178
|
+
const rememberConversionId = (attemptKey, id) => {
|
|
179
|
+
const noted = noteImproveConversionAttemptId(recordBeforeConvert, {
|
|
180
|
+
key: attemptKey,
|
|
181
|
+
conversionId: id,
|
|
182
|
+
});
|
|
183
|
+
if (noted === recordBeforeConvert)
|
|
184
|
+
return;
|
|
185
|
+
recordBeforeConvert = noted;
|
|
186
|
+
pendingLedgerWrite = pendingLedgerWrite
|
|
187
|
+
.then(async () => writeImproveRecord(args.options.paths.record, recordBeforeConvert))
|
|
188
|
+
.catch((error) => {
|
|
189
|
+
warn(`[ledger] convert: could not record conversion ${id} against its key:`
|
|
190
|
+
+ ` ${improveErrorText(error)}`);
|
|
191
|
+
});
|
|
192
|
+
};
|
|
193
|
+
const attemptConversion = async (attemptKey) => runImproveConversion({
|
|
139
194
|
input,
|
|
140
195
|
outDir: args.options.paths.targetDir,
|
|
141
196
|
output: 'html',
|
|
142
197
|
model: args.record.conversionModel,
|
|
143
198
|
responsiveQuality: args.options.responsiveQuality,
|
|
144
|
-
timeoutMs:
|
|
145
|
-
key,
|
|
199
|
+
timeoutMs: args.options.convertStallSeconds * 1_000,
|
|
200
|
+
key: attemptKey,
|
|
146
201
|
runner: args.dependencies.runConvert ?? runConversionCommand,
|
|
147
202
|
journal: args.dependencies.journal,
|
|
203
|
+
onConversionId: (id) => { rememberConversionId(attemptKey, id); },
|
|
148
204
|
}).catch(async (error) => {
|
|
149
205
|
const attempt = error instanceof ImproveConvertAttemptError
|
|
150
206
|
? error.attempt
|
|
@@ -157,10 +213,16 @@ export const runImproveConvertStage = async (args) => {
|
|
|
157
213
|
if (!warning || !sourceConversionId || !layerDocPresent || !assetsPresent)
|
|
158
214
|
throw error;
|
|
159
215
|
(args.dependencies.warn ?? console.warn)(`Responsive HTML was unavailable; deriving fixed-layout HTML free from ${sourceConversionId}`);
|
|
216
|
+
// The derivation is free, not unbounded. Passing no timeout dropped it
|
|
217
|
+
// through to waitForOperation's twenty-minute default while the docs
|
|
218
|
+
// promised `--convert-stall-seconds` bounds the conversion wait, so a
|
|
219
|
+
// wedged derivation hung the run for twenty minutes with no STALL.md —
|
|
220
|
+
// the pipedrive shape, on the one path the reader was told was bounded.
|
|
160
221
|
const fixed = await runImproveConversion({
|
|
161
222
|
input: sourceConversionId,
|
|
162
223
|
outDir: args.options.paths.targetDir,
|
|
163
224
|
output: 'html_fixed',
|
|
225
|
+
timeoutMs: args.options.convertStallSeconds * 1_000,
|
|
164
226
|
key: `improve-fixed:v1:${sourceConversionId}`,
|
|
165
227
|
runner: args.dependencies.runConvert ?? runConversionCommand,
|
|
166
228
|
journal: args.dependencies.journal,
|
|
@@ -181,24 +243,129 @@ export const runImproveConvertStage = async (args) => {
|
|
|
181
243
|
fallback: { html: fixedOutput.html, warning },
|
|
182
244
|
};
|
|
183
245
|
});
|
|
184
|
-
|
|
246
|
+
// ONE retry, and only for the stall with nothing to derive: the wait ended,
|
|
247
|
+
// no LayerDoc reached disk, so no fixed-layout fallback is possible and the
|
|
248
|
+
// stage has nothing at all. The guard is the LayerDoc on disk rather than
|
|
249
|
+
// the error text — if the conversion delivered, re-dispatching is pure
|
|
250
|
+
// waste of a second paid conversion.
|
|
251
|
+
//
|
|
252
|
+
// What is actually guaranteed, stated exactly: the default bound is twice
|
|
253
|
+
// the model's typical wall (see improveConvertStallDefaultSeconds), and an
|
|
254
|
+
// explicit --convert-stall-seconds is refused below one typical wall. So
|
|
255
|
+
// the retry sits outside the median by construction and inside no measured
|
|
256
|
+
// healthy population — nobody has measured P(convert half > bound | healthy)
|
|
257
|
+
// on the fused population, so it is a bound, not a proof.
|
|
258
|
+
//
|
|
259
|
+
// The budget belongs to the KIT, not to this process. Both the retry's
|
|
260
|
+
// identity and its count come from the durable ledgers, so a resume
|
|
261
|
+
// attaches to the conversion the retry actually dispatched instead of to
|
|
262
|
+
// the first, known-stalled one, and a kit that has already retried refuses
|
|
263
|
+
// to buy a third rather than dispatching one per resume forever.
|
|
264
|
+
let converted;
|
|
265
|
+
let convertedKey;
|
|
266
|
+
const retries = bought === 0 && improveConvertStallRetryAllowed(args.record.conversionModel)
|
|
267
|
+
? IMPROVE_CONVERT_STALL_ATTEMPTS - 1
|
|
268
|
+
: 0;
|
|
269
|
+
// Why an attempt is being dispatched, which is what the ledger records it
|
|
270
|
+
// as. A resume of a recorded attempt re-declares the reason it was opened
|
|
271
|
+
// with and dedupes to a no-op; the plain base key is not recorded at all.
|
|
272
|
+
const dispatchReason = (attempt) => {
|
|
273
|
+
if (attempt > 0)
|
|
274
|
+
return 'stall-retry';
|
|
275
|
+
if (args.options.fresh)
|
|
276
|
+
return 'fresh';
|
|
277
|
+
return resumed?.reason ?? (index === 1 ? undefined : 'stall-retry');
|
|
278
|
+
};
|
|
279
|
+
for (let attempt = 0; attempt <= retries; attempt += 1) {
|
|
280
|
+
const attemptKey = attempt === 0 ? key : improveConvertRetryKey(key, index);
|
|
281
|
+
// BEFORE THE DISPATCH, because a conversion nothing wrote down before it
|
|
282
|
+
// started is a conversion a stop cannot leave resumable. `--fresh` also
|
|
283
|
+
// walks away here from whatever attempt this kit still had open: it is
|
|
284
|
+
// buying a replacement for it, and an attempt left open would send the
|
|
285
|
+
// next resume back to the run this one supersedes.
|
|
286
|
+
const reason = dispatchReason(attempt);
|
|
287
|
+
if (reason) {
|
|
288
|
+
const started = startImproveConversionAttempt(recordBeforeConvert, {
|
|
289
|
+
key: attemptKey,
|
|
290
|
+
reason,
|
|
291
|
+
...(args.options.fresh ? { supersedes: IMPROVE_FRESH_ABANDON_REASON } : {}),
|
|
292
|
+
});
|
|
293
|
+
if (started.record !== recordBeforeConvert) {
|
|
294
|
+
recordBeforeConvert = noteAbandonedAttempts({
|
|
295
|
+
record: started.record,
|
|
296
|
+
attempts: started.superseded,
|
|
297
|
+
reason: IMPROVE_FRESH_ABANDON_REASON,
|
|
298
|
+
warn,
|
|
299
|
+
});
|
|
300
|
+
await writeImproveRecord(args.options.paths.record, recordBeforeConvert);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
try {
|
|
304
|
+
converted = await attemptConversion(attemptKey);
|
|
305
|
+
convertedKey = attemptKey;
|
|
306
|
+
await pendingLedgerWrite;
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
await pendingLedgerWrite;
|
|
311
|
+
const layerDocPresent = (await stat(args.options.paths.targetLayerDoc)
|
|
312
|
+
.catch(() => undefined))?.isFile();
|
|
313
|
+
if (layerDocPresent || !improveStalled(error))
|
|
314
|
+
throw error;
|
|
315
|
+
// The stalled attempt knows its own id even when the record does not:
|
|
316
|
+
// nothing settled, so `recordedImproveConversionId` has nowhere to look.
|
|
317
|
+
const stalledId = (error instanceof ImproveConvertAttemptError
|
|
318
|
+
? error.attempt.runIds[0]
|
|
319
|
+
: undefined) ?? improveConversionIdFromText(improveErrorText(error));
|
|
320
|
+
// The attempt ledger closes with the conversion, by key: the run this
|
|
321
|
+
// key reaches is dead, and a later resume must not rebuild it.
|
|
322
|
+
const abandoned = await abandonImproveConversions({
|
|
323
|
+
record: recordBeforeConvert,
|
|
324
|
+
reason: improveConvertStallReason(args.options.convertStallSeconds),
|
|
325
|
+
...(stalledId ? { id: stalledId } : {}),
|
|
326
|
+
warn,
|
|
327
|
+
});
|
|
328
|
+
recordBeforeConvert = abandoned.record;
|
|
329
|
+
await writeImproveRecord(args.options.paths.record, recordBeforeConvert);
|
|
330
|
+
// The ledger is the source of truth, and it cannot record a stall whose
|
|
331
|
+
// id nothing reported. Taking the larger of the two keeps the next key
|
|
332
|
+
// distinct in that case without ever going backwards.
|
|
333
|
+
bought = Math.max(bought + 1, improveConvertStallCount(recordBeforeConvert));
|
|
334
|
+
index = bought + 1;
|
|
335
|
+
if (attempt >= retries) {
|
|
336
|
+
throw improveConvertStallExhausted({
|
|
337
|
+
seconds: args.options.convertStallSeconds,
|
|
338
|
+
bought,
|
|
339
|
+
model: args.record.conversionModel,
|
|
340
|
+
cause: error,
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
args.dependencies.journal?.note({ degradations: ['improve_convert_stall_retry'] });
|
|
344
|
+
warn(`[stall] convert: nothing materialized in ${args.options.convertStallSeconds}s;`
|
|
345
|
+
+ ' dispatching one fresh conversion of the same winner');
|
|
346
|
+
await resetImproveTargetAttempt(args.options.paths.targetDir);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
if (!converted)
|
|
350
|
+
throw new Error('Improve conversion ended without a result');
|
|
351
|
+
const html = converted.fallback ? converted.fallback.html : args.options.paths.targetHtml;
|
|
185
352
|
for (const expected of [args.options.paths.targetLayerDoc, html]) {
|
|
186
353
|
if (!(await stat(expected).catch(() => undefined))?.isFile()) {
|
|
187
354
|
throw new Error(`Improve conversion completed without ${expected}`);
|
|
188
355
|
}
|
|
189
356
|
}
|
|
190
|
-
let record = {
|
|
357
|
+
let record = settleImproveConversionAttempt({
|
|
191
358
|
...recordBeforeConvert,
|
|
192
359
|
convert: {
|
|
193
360
|
layerDoc: args.options.paths.targetLayerDoc,
|
|
194
361
|
html,
|
|
195
|
-
layout:
|
|
362
|
+
layout: converted.fallback ? 'fixed' : 'responsive',
|
|
196
363
|
...(converted.runIds[0] ? { sourceConversionId: converted.runIds[0] } : {}),
|
|
197
|
-
...(
|
|
364
|
+
...(converted.fallback ? { responsiveWarning: converted.fallback.warning } : {}),
|
|
198
365
|
artifacts: converted.artifacts,
|
|
199
366
|
purchaseIds: converted.purchaseIds,
|
|
200
367
|
},
|
|
201
|
-
};
|
|
368
|
+
}, { ...(convertedKey === undefined ? {} : { key: convertedKey }) });
|
|
202
369
|
record = await noteImproveStage({
|
|
203
370
|
record, stage: 'convert', priceCeilingUsd: args.price, replayed: false, write: false,
|
|
204
371
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"improve-conversion-stage.js","sourceRoot":"","sources":["../src/improve-conversion-stage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"improve-conversion-stage.js","sourceRoot":"","sources":["../src/improve-conversion-stage.ts"],"names":[],"mappings":"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"}
|