@12ui/design 0.2.58 → 0.2.59

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 (96) hide show
  1. package/SKILL.md +1 -1
  2. package/dist/atomic-file-replace.d.ts +21 -0
  3. package/dist/atomic-file-replace.d.ts.map +1 -0
  4. package/dist/atomic-file-replace.js +48 -0
  5. package/dist/atomic-file-replace.js.map +1 -0
  6. package/dist/cli-conversion-derivation.d.ts +14 -1
  7. package/dist/cli-conversion-derivation.d.ts.map +1 -1
  8. package/dist/cli-conversion-derivation.js +12 -5
  9. package/dist/cli-conversion-derivation.js.map +1 -1
  10. package/dist/cli-convert-command.d.ts.map +1 -1
  11. package/dist/cli-convert-command.js +13 -4
  12. package/dist/cli-convert-command.js.map +1 -1
  13. package/dist/cli-draft-command.d.ts +7 -0
  14. package/dist/cli-draft-command.d.ts.map +1 -1
  15. package/dist/cli-draft-command.js +21 -8
  16. package/dist/cli-draft-command.js.map +1 -1
  17. package/dist/cli-help/design.js +2 -2
  18. package/dist/cli-help/design.js.map +1 -1
  19. package/dist/cli-redesign-command.d.ts.map +1 -1
  20. package/dist/cli-redesign-command.js +177 -138
  21. package/dist/cli-redesign-command.js.map +1 -1
  22. package/dist/conversion-client.d.ts +48 -10
  23. package/dist/conversion-client.d.ts.map +1 -1
  24. package/dist/conversion-client.js +92 -20
  25. package/dist/conversion-client.js.map +1 -1
  26. package/dist/draft-identity.d.ts +7 -0
  27. package/dist/draft-identity.d.ts.map +1 -1
  28. package/dist/draft-identity.js +4 -0
  29. package/dist/draft-identity.js.map +1 -1
  30. package/dist/draft-run.d.ts +7 -0
  31. package/dist/draft-run.d.ts.map +1 -1
  32. package/dist/draft-run.js +8 -0
  33. package/dist/draft-run.js.map +1 -1
  34. package/dist/draft-workspace.d.ts +4 -0
  35. package/dist/draft-workspace.d.ts.map +1 -1
  36. package/dist/draft-workspace.js.map +1 -1
  37. package/dist/hosted-draft-identity.d.ts +10 -0
  38. package/dist/hosted-draft-identity.d.ts.map +1 -1
  39. package/dist/hosted-draft-identity.js +7 -0
  40. package/dist/hosted-draft-identity.js.map +1 -1
  41. package/dist/hosted-draft-run.d.ts +15 -0
  42. package/dist/hosted-draft-run.d.ts.map +1 -1
  43. package/dist/hosted-draft-run.js +27 -0
  44. package/dist/hosted-draft-run.js.map +1 -1
  45. package/dist/improve-core/improve-concept.d.ts +5 -1
  46. package/dist/improve-core/improve-concept.d.ts.map +1 -1
  47. package/dist/improve-core/improve-concept.js +11 -6
  48. package/dist/improve-core/improve-concept.js.map +1 -1
  49. package/dist/redesign-branch-adoption.d.ts +29 -0
  50. package/dist/redesign-branch-adoption.d.ts.map +1 -0
  51. package/dist/redesign-branch-adoption.js +183 -0
  52. package/dist/redesign-branch-adoption.js.map +1 -0
  53. package/dist/redesign-branch-identity.d.ts +23 -0
  54. package/dist/redesign-branch-identity.d.ts.map +1 -0
  55. package/dist/redesign-branch-identity.js +27 -0
  56. package/dist/redesign-branch-identity.js.map +1 -0
  57. package/dist/redesign-branch-record-verification.d.ts +51 -0
  58. package/dist/redesign-branch-record-verification.d.ts.map +1 -0
  59. package/dist/redesign-branch-record-verification.js +127 -0
  60. package/dist/redesign-branch-record-verification.js.map +1 -0
  61. package/dist/redesign-branch-stage.d.ts +17 -0
  62. package/dist/redesign-branch-stage.d.ts.map +1 -0
  63. package/dist/redesign-branch-stage.js +218 -0
  64. package/dist/redesign-branch-stage.js.map +1 -0
  65. package/dist/redesign-page-candidates.d.ts +40 -0
  66. package/dist/redesign-page-candidates.d.ts.map +1 -0
  67. package/dist/redesign-page-candidates.js +131 -0
  68. package/dist/redesign-page-candidates.js.map +1 -0
  69. package/dist/redesign-page-ownership.d.ts +36 -0
  70. package/dist/redesign-page-ownership.d.ts.map +1 -0
  71. package/dist/redesign-page-ownership.js +174 -0
  72. package/dist/redesign-page-ownership.js.map +1 -0
  73. package/dist/redesign-plan-identity.d.ts +3 -1
  74. package/dist/redesign-plan-identity.d.ts.map +1 -1
  75. package/dist/redesign-plan-identity.js +4 -1
  76. package/dist/redesign-plan-identity.js.map +1 -1
  77. package/dist/redesign-plan.d.ts.map +1 -1
  78. package/dist/redesign-plan.js +12 -6
  79. package/dist/redesign-plan.js.map +1 -1
  80. package/dist/redesign-record-validation.d.ts +4 -0
  81. package/dist/redesign-record-validation.d.ts.map +1 -0
  82. package/dist/redesign-record-validation.js +210 -0
  83. package/dist/redesign-record-validation.js.map +1 -0
  84. package/dist/redesign-workspace.d.ts +30 -5
  85. package/dist/redesign-workspace.d.ts.map +1 -1
  86. package/dist/redesign-workspace.js +52 -7
  87. package/dist/redesign-workspace.js.map +1 -1
  88. package/dist/run-journal.d.ts +3 -1
  89. package/dist/run-journal.d.ts.map +1 -1
  90. package/dist/run-journal.js +7 -1
  91. package/dist/run-journal.js.map +1 -1
  92. package/dist/spend-run-filter.d.ts.map +1 -1
  93. package/dist/spend-run-filter.js +3 -1
  94. package/dist/spend-run-filter.js.map +1 -1
  95. package/open-design.json +2 -2
  96. package/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ import type { RedesignPaths, RedesignRecord } from './redesign-workspace.js';
2
+ /** Generation zero retains the directory and key layout claimed before redraw. */
3
+ export declare const redesignBranchGeneration: (record: Pick<RedesignRecord, "redrawGeneration">) => number;
4
+ /**
5
+ * A redraw never enters an old child directory: it may contain either a
6
+ * terminal completion or a pre-spend attempt record that must remain evidence
7
+ * for the generation that created it.
8
+ */
9
+ export declare const redesignBranchPageDirectory: (args: {
10
+ paths: RedesignPaths;
11
+ record: Pick<RedesignRecord, "redrawGeneration">;
12
+ pageId: string;
13
+ }) => string;
14
+ /**
15
+ * The omitted generation term gives old primary branch keys byte-for-byte
16
+ * continuity. A positive generation is a new paid branch identity.
17
+ */
18
+ export declare const redesignBranchIdempotencyKey: (args: {
19
+ createdAt: string;
20
+ redrawGeneration?: number;
21
+ pageId: string;
22
+ }) => string;
23
+ //# sourceMappingURL=redesign-branch-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redesign-branch-identity.d.ts","sourceRoot":"","sources":["../src/redesign-branch-identity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE7E,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC,KAAG,MAE3F,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,GAAI,MAAM;IAChD,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB,KAAG,MAKH,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GAAI,MAAM;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,KAAG,MAMH,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { createHash } from 'node:crypto';
2
+ import path from 'node:path';
3
+ /** Generation zero retains the directory and key layout claimed before redraw. */
4
+ export const redesignBranchGeneration = (record) => (record.redrawGeneration ?? 0);
5
+ /**
6
+ * A redraw never enters an old child directory: it may contain either a
7
+ * terminal completion or a pre-spend attempt record that must remain evidence
8
+ * for the generation that created it.
9
+ */
10
+ export const redesignBranchPageDirectory = (args) => {
11
+ const generation = redesignBranchGeneration(args.record);
12
+ return generation === 0
13
+ ? path.join(args.paths.branchDir, args.pageId)
14
+ : path.join(args.paths.branchDir, `redraw-${generation}`, args.pageId);
15
+ };
16
+ /**
17
+ * The omitted generation term gives old primary branch keys byte-for-byte
18
+ * continuity. A positive generation is a new paid branch identity.
19
+ */
20
+ export const redesignBranchIdempotencyKey = (args) => {
21
+ const generation = args.redrawGeneration ?? 0;
22
+ const source = generation === 0
23
+ ? `${args.createdAt}\u0000${args.pageId}`
24
+ : `${args.createdAt}\u0000${args.pageId}\u0000redraw-generation:${generation}`;
25
+ return `redesign-branch:v2:${createHash('sha256').update(source).digest('hex')}`;
26
+ };
27
+ //# sourceMappingURL=redesign-branch-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redesign-branch-identity.js","sourceRoot":"","sources":["../src/redesign-branch-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,kFAAkF;AAClF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAgD,EAAU,EAAE,CAAC,CACpG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAC7B,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,IAI3C,EAAU,EAAE;IACX,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,OAAO,UAAU,KAAK,CAAC;QACrB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,UAAU,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,IAI5C,EAAU,EAAE;IACX,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,UAAU,KAAK,CAAC;QAC7B,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,SAAS,IAAI,CAAC,MAAM,EAAE;QACzC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,SAAS,IAAI,CAAC,MAAM,2BAA2B,UAAU,EAAE,CAAC;IACjF,OAAO,sBAAsB,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACnF,CAAC,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { type BranchAttempt } from './branch-run-record.js';
2
+ import type { BranchWinnerInput } from './branch-execution-types.js';
3
+ import { type AdoptedRedesignBranch } from './redesign-branch-adoption.js';
4
+ import { type VerifiedRedesignPageBranchInput } from './redesign-page-ownership.js';
5
+ import type { RedesignCapturedPageRecord, RedesignRecord } from './redesign-workspace.js';
6
+ /** A parent branch row is a pointer, never proof that its child settled. */
7
+ export declare class InvalidRedesignBranchRecordError extends Error {
8
+ constructor(pageId: string, detail: string);
9
+ }
10
+ /** A resumable child is durable input, not a hint for the executor to reinterpret. */
11
+ export declare class InvalidRedesignBranchAttemptError extends Error {
12
+ constructor(branchDir: string, detail: string);
13
+ }
14
+ export type VerifiedRedesignBranchPage = {
15
+ input: VerifiedRedesignPageBranchInput;
16
+ /** Present when redesign.json already claimed this page as done. */
17
+ recorded: boolean;
18
+ /** Present only when this generation's exact child completion exists. */
19
+ adopted?: AdoptedRedesignBranch;
20
+ };
21
+ /**
22
+ * Check a persisted, non-terminal native BranchAttempt against the exact
23
+ * verified page candidate before the executor gets a chance to resume it.
24
+ * Redesign's page idempotency key deliberately names the page/generation, not
25
+ * the candidate bytes, so this comparison must not be deferred to the native
26
+ * run-key check.
27
+ */
28
+ export declare const verifyResumableRedesignBranchAttempt: (args: {
29
+ attempt: BranchAttempt;
30
+ attemptPath: string;
31
+ branchDir: string;
32
+ input: VerifiedRedesignPageBranchInput;
33
+ winner: BranchWinnerInput;
34
+ runKey: string;
35
+ concept: string;
36
+ origin: string;
37
+ maxScreens: number;
38
+ conversionModel: string;
39
+ }) => void;
40
+ /**
41
+ * Verify every capture input first, then make a persisted parent row earn its
42
+ * `done` state from the child sentinel it names. This runs before dispatch and
43
+ * before polish, so shape-valid JSON cannot skip immutable-artifact checks.
44
+ */
45
+ export declare const verifyRedesignBranchPages: (args: {
46
+ record: RedesignRecord;
47
+ pages: readonly RedesignCapturedPageRecord[];
48
+ branchDirectory: (page: RedesignCapturedPageRecord) => string;
49
+ branchConcept: (page: RedesignCapturedPageRecord) => string;
50
+ }) => Promise<VerifiedRedesignBranchPage[]>;
51
+ //# sourceMappingURL=redesign-branch-record-verification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redesign-branch-record-verification.d.ts","sourceRoot":"","sources":["../src/redesign-branch-record-verification.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,0BAA0B,EAC1B,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,4EAA4E;AAC5E,qBAAa,gCAAiC,SAAQ,KAAK;gBAC7C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI3C;AAED,sFAAsF;AACtF,qBAAa,iCAAkC,SAAQ,KAAK;gBAC9C,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI9C;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,+BAA+B,CAAC;IACvC,oEAAoE;IACpE,QAAQ,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC,CAAC;AAeF;;;;;;GAMG;AACH,eAAO,MAAM,oCAAoC,GAAI,MAAM;IACzD,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,+BAA+B,CAAC;IACvC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB,KAAG,IA8DH,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAU,MAAM;IACpD,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC7C,eAAe,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,MAAM,CAAC;IAC9D,aAAa,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,MAAM,CAAC;CAC7D,KAAG,OAAO,CAAC,0BAA0B,EAAE,CA4CvC,CAAC"}
@@ -0,0 +1,127 @@
1
+ import path from 'node:path';
2
+ import { branchConceptDigest } from './branch-identity.js';
3
+ import { branchAttemptPath, branchCompletionPath, } from './branch-run-record.js';
4
+ import { adoptCompletedRedesignBranch, } from './redesign-branch-adoption.js';
5
+ import { verifyRedesignPageBranchInputs, } from './redesign-page-ownership.js';
6
+ /** A parent branch row is a pointer, never proof that its child settled. */
7
+ export class InvalidRedesignBranchRecordError extends Error {
8
+ constructor(pageId, detail) {
9
+ super(`Redesign branch page ${pageId} is invalid: ${detail}`);
10
+ this.name = 'InvalidRedesignBranchRecordError';
11
+ }
12
+ }
13
+ /** A resumable child is durable input, not a hint for the executor to reinterpret. */
14
+ export class InvalidRedesignBranchAttemptError extends Error {
15
+ constructor(branchDir, detail) {
16
+ super(`Redesign branch attempt in ${branchDir} is invalid: ${detail}`);
17
+ this.name = 'InvalidRedesignBranchAttemptError';
18
+ }
19
+ }
20
+ const samePath = (left, right) => path.resolve(left) === path.resolve(right);
21
+ const isResumableAttemptStatus = (value) => (value === 'claiming'
22
+ || value === 'dispatching'
23
+ || value === 'downloading'
24
+ || value === 'converting');
25
+ const isImageWinner = (winner) => winner.kind === 'image';
26
+ /**
27
+ * Check a persisted, non-terminal native BranchAttempt against the exact
28
+ * verified page candidate before the executor gets a chance to resume it.
29
+ * Redesign's page idempotency key deliberately names the page/generation, not
30
+ * the candidate bytes, so this comparison must not be deferred to the native
31
+ * run-key check.
32
+ */
33
+ export const verifyResumableRedesignBranchAttempt = (args) => {
34
+ const { attempt, winner } = args;
35
+ if (!isImageWinner(winner)) {
36
+ throw new InvalidRedesignBranchAttemptError(args.branchDir, 'redesign page branches require an image winner');
37
+ }
38
+ const recordedWinner = attempt.winner;
39
+ const winnerMatches = !!recordedWinner
40
+ && typeof recordedWinner === 'object'
41
+ && recordedWinner.kind === 'image'
42
+ && samePath(recordedWinner.imagePath, args.input.winner.path)
43
+ && samePath(recordedWinner.imagePath, winner.imagePath)
44
+ && recordedWinner.sha256 === args.input.winner.sha256
45
+ && recordedWinner.sha256 === winner.sha256
46
+ && recordedWinner.mediaType === winner.mediaType
47
+ && (recordedWinner.width === undefined || recordedWinner.width === winner.width)
48
+ && (recordedWinner.height === undefined || recordedWinner.height === winner.height);
49
+ const canvas = attempt.generationCanvas;
50
+ const canvasMatches = !!canvas && (!!canvas
51
+ && typeof canvas === 'object'
52
+ && !!canvas.winner
53
+ && typeof canvas.winner === 'object'
54
+ && canvas.provenance === 'inherited-from-winner'
55
+ && canvas.winner.width === winner.width
56
+ && canvas.winner.height === winner.height
57
+ && canvas.declaredAspect === undefined);
58
+ const convert = attempt.convert;
59
+ if (!samePath(args.attemptPath, branchAttemptPath(args.branchDir))
60
+ || attempt.version !== 1
61
+ || !isResumableAttemptStatus(attempt.status)
62
+ || typeof attempt.runKey !== 'string'
63
+ || attempt.runKey !== args.runKey
64
+ || typeof attempt.origin !== 'string'
65
+ || attempt.origin !== args.origin
66
+ || attempt.scope !== 'page'
67
+ || typeof attempt.concept !== 'string'
68
+ || attempt.concept !== args.concept
69
+ || typeof attempt.conceptSha256 !== 'string'
70
+ || attempt.conceptSha256 !== branchConceptDigest(args.concept)
71
+ || !winnerMatches
72
+ || !canvasMatches
73
+ || attempt.aspect !== undefined
74
+ || attempt.maxScreens !== args.maxScreens
75
+ || !convert
76
+ || convert.output !== 'html'
77
+ || convert.model !== args.conversionModel
78
+ || convert.responsiveQuality !== undefined
79
+ || attempt.sourceConversionId !== undefined
80
+ || attempt.prototype !== undefined
81
+ || attempt.polish !== undefined
82
+ || attempt.completionPath !== undefined
83
+ || attempt.completedAt !== undefined
84
+ || typeof attempt.createdAt !== 'string'
85
+ || attempt.createdAt.length === 0) {
86
+ throw new InvalidRedesignBranchAttemptError(args.branchDir, 'it does not bind to this page directory, owned selected candidate, and fixed branch inputs');
87
+ }
88
+ };
89
+ /**
90
+ * Verify every capture input first, then make a persisted parent row earn its
91
+ * `done` state from the child sentinel it names. This runs before dispatch and
92
+ * before polish, so shape-valid JSON cannot skip immutable-artifact checks.
93
+ */
94
+ export const verifyRedesignBranchPages = async (args) => {
95
+ const inputs = await verifyRedesignPageBranchInputs({ record: args.record, pages: args.pages });
96
+ const parentByPageId = new Map((args.record.branch?.pages ?? []).map((page) => [page.pageId, page]));
97
+ return Promise.all(inputs.map(async (input) => {
98
+ const branchDir = path.resolve(args.branchDirectory(input.page));
99
+ const parent = parentByPageId.get(input.page.id);
100
+ if (parent) {
101
+ const expectedCompletion = branchCompletionPath(branchDir);
102
+ if (!samePath(parent.branchDir, branchDir) || !samePath(parent.completionPath, expectedCompletion)) {
103
+ throw new InvalidRedesignBranchRecordError(input.page.id, 'parent branchDir or completionPath does not name this generation\'s exact child artifacts');
104
+ }
105
+ }
106
+ const adopted = await adoptCompletedRedesignBranch({
107
+ branchDir,
108
+ concept: args.branchConcept(input.page),
109
+ input,
110
+ });
111
+ if (!parent)
112
+ return { input, recorded: false, ...(adopted ? { adopted } : {}) };
113
+ if (!adopted) {
114
+ throw new InvalidRedesignBranchRecordError(input.page.id, 'parent says done but its exact branch.complete.json is absent');
115
+ }
116
+ const child = adopted.page;
117
+ if (parent.pageId !== child.pageId
118
+ || !samePath(parent.branchDir, child.branchDir)
119
+ || parent.runId !== child.runId
120
+ || parent.status !== child.status
121
+ || !samePath(parent.completionPath, child.completionPath)) {
122
+ throw new InvalidRedesignBranchRecordError(input.page.id, 'parent row contradicts its exact branch.complete.json');
123
+ }
124
+ return { input, recorded: true, adopted };
125
+ }));
126
+ };
127
+ //# sourceMappingURL=redesign-branch-record-verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redesign-branch-record-verification.js","sourceRoot":"","sources":["../src/redesign-branch-record-verification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { readConversionConfig } from './config.js';
2
+ import type { ConversionModel } from './conversion-models.js';
3
+ import { type RedesignPaths, type RedesignRecord } from './redesign-workspace.js';
4
+ import type { RedesignCommandDependencies } from './cli-redesign-command.js';
5
+ type BranchStageDependencies = Pick<RedesignCommandDependencies, 'createBranchClient' | 'createHostedClient' | 'createPackageClient' | 'createPrototypeLabelClient' | 'executeBranch' | 'runPrototype'>;
6
+ /** Execute or adopt one exact child per captured page, never a shared winner. */
7
+ export declare const runRedesignBranchStage: (args: {
8
+ record: RedesignRecord;
9
+ paths: RedesignPaths;
10
+ direction: string;
11
+ maxScreens: number;
12
+ conversionModel: ConversionModel;
13
+ config: ReturnType<typeof readConversionConfig>;
14
+ dependencies: BranchStageDependencies;
15
+ }) => Promise<RedesignRecord>;
16
+ export {};
17
+ //# sourceMappingURL=redesign-branch-stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redesign-branch-stage.d.ts","sourceRoot":"","sources":["../src/redesign-branch-stage.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAmB9D,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAE7E,KAAK,uBAAuB,GAAG,IAAI,CAAC,2BAA2B,EAC3D,oBAAoB,GACpB,oBAAoB,GACpB,qBAAqB,GACrB,4BAA4B,GAC5B,eAAe,GACf,cAAc,CACjB,CAAC;AAgDF,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,GAAU,MAAM;IACjD,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;IAChD,YAAY,EAAE,uBAAuB,CAAC;CACvC,KAAG,OAAO,CAAC,cAAc,CA2KzB,CAAC"}
@@ -0,0 +1,218 @@
1
+ import { stat } from 'node:fs/promises';
2
+ import { TwelveUiBranchClient } from './branch-client.js';
3
+ import { createConcurrencyLimiter } from './bounded-concurrency.js';
4
+ import { executeBranchRun } from './branch-execution.js';
5
+ import { branchAttemptPath, readBranchAttempt } from './branch-run-record.js';
6
+ import { imageWinner } from './branch-winner.js';
7
+ import { CliRefusal } from './cli-refusal.js';
8
+ import { prepareOutputDirectory } from './cli-output-paths.js';
9
+ import { BRANCH_PAGE_CONCURRENCY_DEFAULT } from './cli-progress.js';
10
+ import { readConceptValue } from './concept-input.js';
11
+ import { TwelveUiConversionPackageClient } from './package-client.js';
12
+ import { TwelveUiPrototypeLabelClient } from './prototype-label-client.js';
13
+ import { runPrototypePoststep } from './prototype-poststep.js';
14
+ import { InvalidRedesignBranchArtifactError, } from './redesign-branch-adoption.js';
15
+ import { redesignBranchIdempotencyKey, redesignBranchPageDirectory, } from './redesign-branch-identity.js';
16
+ import { InvalidRedesignBranchAttemptError, InvalidRedesignBranchRecordError, verifyResumableRedesignBranchAttempt, verifyRedesignBranchPages, } from './redesign-branch-record-verification.js';
17
+ import { InvalidRedesignPageOwnershipError } from './redesign-page-ownership.js';
18
+ import { writeRedesignRecord, } from './redesign-workspace.js';
19
+ const branchConcept = (direction, page) => readConceptValue({
20
+ value: `${direction} Rebuild the page at ${page.url}.`,
21
+ flag: '--direction',
22
+ trimHint: 'Shorten the direction; each page URL is appended automatically.',
23
+ });
24
+ const branchRefusal = (error) => {
25
+ if (error instanceof InvalidRedesignPageOwnershipError) {
26
+ throw new CliRefusal(`${error.message} Refusing branch dispatch.`, 'redesign_page_ownership_invalid', { cause: error });
27
+ }
28
+ if (error instanceof InvalidRedesignBranchArtifactError
29
+ || error instanceof InvalidRedesignBranchRecordError
30
+ || error instanceof InvalidRedesignBranchAttemptError) {
31
+ throw new CliRefusal(`${error.message} Refusing branch dispatch.`, 'redesign_branch_artifact_invalid', { cause: error });
32
+ }
33
+ throw error;
34
+ };
35
+ const recordAdoptedPages = async (args) => {
36
+ const added = new Map(args.entries
37
+ .filter((entry) => !entry.recorded && entry.adopted)
38
+ .map((entry) => [entry.input.page.id, entry.adopted.page]));
39
+ if (added.size === 0)
40
+ return args.record;
41
+ const existing = new Map((args.record.branch?.pages ?? []).map((page) => [page.pageId, page]));
42
+ for (const [pageId, page] of added)
43
+ existing.set(pageId, page);
44
+ const pages = args.record.capture.pages.flatMap((page) => {
45
+ const settled = existing.get(page.id);
46
+ return settled ? [settled] : [];
47
+ });
48
+ const record = { ...args.record, branch: { pages } };
49
+ await writeRedesignRecord(args.paths.record, record);
50
+ return record;
51
+ };
52
+ /** Execute or adopt one exact child per captured page, never a shared winner. */
53
+ export const runRedesignBranchStage = async (args) => {
54
+ if (!args.record.capture)
55
+ throw new Error('Cannot branch before capture has run');
56
+ if (!args.record.pick)
57
+ throw new Error('Cannot branch before pick has run');
58
+ const capture = args.record.capture;
59
+ let preflight;
60
+ try {
61
+ preflight = await verifyRedesignBranchPages({
62
+ record: args.record,
63
+ pages: capture.pages,
64
+ branchDirectory: (page) => redesignBranchPageDirectory({
65
+ paths: args.paths,
66
+ record: args.record,
67
+ pageId: page.id,
68
+ }),
69
+ branchConcept: (page) => branchConcept(args.direction, page),
70
+ });
71
+ }
72
+ catch (error) {
73
+ return branchRefusal(error);
74
+ }
75
+ // A completed child failed under native branch semantics. Persist a newly
76
+ // found child for truthful resume/spend evidence, then stop before either a
77
+ // sibling dispatch or polish can hide that failure.
78
+ const adoptedFailure = preflight.find((entry) => entry.adopted?.failure)?.adopted?.failure;
79
+ if (adoptedFailure) {
80
+ await recordAdoptedPages({ record: args.record, paths: args.paths, entries: preflight });
81
+ throw adoptedFailure;
82
+ }
83
+ const remaining = preflight.filter((entry) => !entry.recorded);
84
+ if (remaining.length === 0)
85
+ return args.record;
86
+ // Prove every resume target before the first sibling can dispatch. A
87
+ // redesign key is intentionally page/generation-scoped, so an old attempt
88
+ // with that key can still name a different picked candidate.
89
+ const prepared = await Promise.all(remaining.map(async (entry) => {
90
+ const branchDir = redesignBranchPageDirectory({
91
+ paths: args.paths,
92
+ record: args.record,
93
+ pageId: entry.input.page.id,
94
+ });
95
+ const winner = await imageWinner(entry.input.winner.path, `The picked candidate for ${entry.input.page.id}`);
96
+ if (winner.kind !== 'image'
97
+ || winner.sha256 !== entry.input.winner.sha256
98
+ || winner.bytes.byteLength !== entry.input.winner.bytes) {
99
+ throw new CliRefusal(`The picked candidate for ${entry.input.page.id} no longer matches its durable materialized digest.`, 'redesign_page_pick_changed');
100
+ }
101
+ const runKey = redesignBranchIdempotencyKey({
102
+ createdAt: args.record.createdAt,
103
+ ...(args.record.redrawGeneration ? { redrawGeneration: args.record.redrawGeneration } : {}),
104
+ pageId: entry.input.page.id,
105
+ });
106
+ const attemptPath = branchAttemptPath(branchDir);
107
+ const attempt = await readBranchAttempt(attemptPath);
108
+ if (!attempt && !entry.adopted) {
109
+ const exists = await stat(attemptPath)
110
+ .then(() => true)
111
+ .catch((error) => {
112
+ if (error.code === 'ENOENT')
113
+ return false;
114
+ throw error;
115
+ });
116
+ if (exists) {
117
+ return branchRefusal(new InvalidRedesignBranchAttemptError(branchDir, 'branch.attempt.json is not a readable native attempt record'));
118
+ }
119
+ }
120
+ if (attempt && !entry.adopted) {
121
+ try {
122
+ verifyResumableRedesignBranchAttempt({
123
+ attempt,
124
+ attemptPath,
125
+ branchDir,
126
+ input: entry.input,
127
+ winner,
128
+ runKey,
129
+ concept: branchConcept(args.direction, entry.input.page),
130
+ origin: args.config.origin,
131
+ maxScreens: args.maxScreens,
132
+ conversionModel: args.conversionModel,
133
+ });
134
+ }
135
+ catch (error) {
136
+ return branchRefusal(error);
137
+ }
138
+ }
139
+ return { entry, branchDir, winner, attempt };
140
+ }));
141
+ const branchClient = (args.dependencies.createBranchClient
142
+ ?? args.dependencies.createHostedClient
143
+ ?? ((value) => new TwelveUiBranchClient(value)))(args.config);
144
+ const packageClient = (args.dependencies.createPackageClient
145
+ ?? ((value) => new TwelveUiConversionPackageClient(value)))(args.config);
146
+ const limiter = createConcurrencyLimiter(BRANCH_PAGE_CONCURRENCY_DEFAULT);
147
+ const completed = await Promise.all(prepared.map(({ entry, branchDir, winner, attempt }) => limiter(async () => {
148
+ const labelClient = (args.dependencies.createPrototypeLabelClient
149
+ ?? ((value) => new TwelveUiPrototypeLabelClient(value)))(args.config);
150
+ if (entry.adopted) {
151
+ await (args.dependencies.runPrototype ?? runPrototypePoststep)({
152
+ branchDir,
153
+ resume: true,
154
+ labelClient,
155
+ });
156
+ return { page: entry.adopted.page, failure: entry.adopted.failure };
157
+ }
158
+ await prepareOutputDirectory(branchDir);
159
+ const result = await (args.dependencies.executeBranch ?? executeBranchRun)({
160
+ branchClient,
161
+ packageClient,
162
+ inputs: {
163
+ outDir: branchDir,
164
+ scope: 'page',
165
+ concept: branchConcept(args.direction, entry.input.page),
166
+ idempotencyKey: redesignBranchIdempotencyKey({
167
+ createdAt: args.record.createdAt,
168
+ ...(args.record.redrawGeneration ? { redrawGeneration: args.record.redrawGeneration } : {}),
169
+ pageId: entry.input.page.id,
170
+ }),
171
+ winner,
172
+ maxScreens: args.maxScreens,
173
+ convert: { output: 'html', model: args.conversionModel },
174
+ },
175
+ origin: args.config.origin,
176
+ resume: Boolean(attempt),
177
+ // The outer limiter owns redesign page fan-out. Each child has one page.
178
+ pageConcurrency: 1,
179
+ });
180
+ await (args.dependencies.runPrototype ?? runPrototypePoststep)({ branchDir, labelClient });
181
+ return {
182
+ page: {
183
+ pageId: entry.input.page.id,
184
+ branchDir,
185
+ runId: result.completion.runId,
186
+ status: result.completion.status,
187
+ completionPath: result.completionPath,
188
+ },
189
+ failure: result.failure,
190
+ };
191
+ })));
192
+ // Child work is parallel; redesign.json remains one capture-order writer.
193
+ const settled = new Map((args.record.branch?.pages ?? []).map((page) => [page.pageId, page]));
194
+ const completedByPageId = new Map(completed.map((entry) => [entry.page.pageId, entry]));
195
+ let record = args.record;
196
+ let failure = null;
197
+ for (const page of capture.pages) {
198
+ const completedPage = completedByPageId.get(page.id);
199
+ if (!completedPage)
200
+ continue;
201
+ settled.set(page.id, completedPage.page);
202
+ record = {
203
+ ...record,
204
+ branch: {
205
+ pages: capture.pages.flatMap((capturedPage) => {
206
+ const child = settled.get(capturedPage.id);
207
+ return child ? [child] : [];
208
+ }),
209
+ },
210
+ };
211
+ await writeRedesignRecord(args.paths.record, record);
212
+ failure ??= completedPage.failure;
213
+ }
214
+ if (failure)
215
+ throw failure;
216
+ return record;
217
+ };
218
+ //# sourceMappingURL=redesign-branch-stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redesign-branch-stage.js","sourceRoot":"","sources":["../src/redesign-branch-stage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { RedesignCapturedPageRecord, RedesignDraftPageRecord, RedesignPickPageRecord, RedesignRecord } from './redesign-workspace.js';
2
+ /**
3
+ * Per-page candidate ownership for `12ui redesign`.
4
+ *
5
+ * Capture already knows each page's route and screenshot. Draft and pick must
6
+ * use those facts: a shared homepage winner is not a design for a later
7
+ * captured page. This module is the one place that decides which pages still
8
+ * need their own draw, how that draw is identified, and that a missing pick
9
+ * is a failure rather than a silent reuse of another page's candidate.
10
+ */
11
+ export declare const redesignPrimaryPage: (pages: readonly RedesignCapturedPageRecord[]) => RedesignCapturedPageRecord;
12
+ export declare const isRedesignPrimaryPage: (pages: readonly RedesignCapturedPageRecord[], pageId: string) => boolean;
13
+ /**
14
+ * Primary pages keep the hosted plan concept so an ordinary one-page redesign
15
+ * claims the same draft it always did. Every other page appends its captured
16
+ * route so the image prompt, and therefore the purchase, is page-specific.
17
+ */
18
+ export declare const redesignPageDraftConcept: (args: {
19
+ planConcept: string;
20
+ page: RedesignCapturedPageRecord;
21
+ primary: RedesignCapturedPageRecord;
22
+ }) => string;
23
+ /**
24
+ * Paid-identity extra for a non-primary page. Omitted on the primary so keys
25
+ * claimed before per-page drafts existed still replay (CLAUDE.md item 3).
26
+ */
27
+ export declare const redesignPageDraftRoute: (args: {
28
+ page: RedesignCapturedPageRecord;
29
+ primary: RedesignCapturedPageRecord;
30
+ }) => string | undefined;
31
+ export declare const recordedDraftPages: (record: RedesignRecord) => RedesignDraftPageRecord[];
32
+ export declare const recordedPickPages: (record: RedesignRecord) => RedesignPickPageRecord[];
33
+ export declare const recordedDraftRunIds: (record: RedesignRecord) => string[];
34
+ export declare const pagesNeedingDraft: (record: RedesignRecord) => RedesignCapturedPageRecord[];
35
+ export declare const pagesNeedingPick: (record: RedesignRecord) => RedesignCapturedPageRecord[];
36
+ export declare const draftForPage: (record: RedesignRecord, pageId: string) => RedesignDraftPageRecord;
37
+ export declare const pickForPage: (record: RedesignRecord, pageId: string) => RedesignPickPageRecord;
38
+ export declare const withDraftPages: (pages: readonly RedesignDraftPageRecord[], primaryPageId: string) => NonNullable<RedesignRecord["draft"]>;
39
+ export declare const withPickPages: (pages: readonly RedesignPickPageRecord[], primaryPageId: string) => NonNullable<RedesignRecord["pick"]>;
40
+ //# sourceMappingURL=redesign-page-candidates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redesign-page-candidates.d.ts","sourceRoot":"","sources":["../src/redesign-page-candidates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAC1B,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;GAQG;AAEH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,SAAS,0BAA0B,EAAE,KAC3C,0BAIF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,OAAO,SAAS,0BAA0B,EAAE,EAC5C,QAAQ,MAAM,KACb,OAAkC,CAAC;AAEtC;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAI,MAAM;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,0BAA0B,CAAC;IACjC,OAAO,EAAE,0BAA0B,CAAC;CACrC,KAAG,MAOH,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM;IAC3C,IAAI,EAAE,0BAA0B,CAAC;IACjC,OAAO,EAAE,0BAA0B,CAAC;CACrC,KAAG,MAAM,GAAG,SAEZ,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,cAAc,KAAG,uBAAuB,EAgBlF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,cAAc,KAAG,sBAAsB,EAmBhF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,QAAQ,cAAc,KAAG,MAAM,EAIlE,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,cAAc,KAAG,0BAA0B,EAGpF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,cAAc,KAAG,0BAA0B,EAGnF,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,QAAQ,cAAc,EACtB,QAAQ,MAAM,KACb,uBAQF,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,QAAQ,cAAc,EACtB,QAAQ,MAAM,KACb,sBAQF,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,OAAO,SAAS,uBAAuB,EAAE,EACzC,eAAe,MAAM,KACpB,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAQrC,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,OAAO,SAAS,sBAAsB,EAAE,EACxC,eAAe,MAAM,KACpB,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CASpC,CAAC"}