@12ui/design 0.2.25 → 0.2.26

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 CHANGED
@@ -28,7 +28,7 @@ dispatch paid work when it is absent, rejected, or times out.
28
28
  Use `12ui` when it is available on `PATH`. Otherwise invoke the pinned CLI that
29
29
  the plugin's `open-design.json` MCP entry uses:
30
30
 
31
- npx -y @12ui/design@0.2.25 <command> ...
31
+ npx -y @12ui/design@0.2.26 <command> ...
32
32
 
33
33
  Run `12ui auth status --json` (or its pinned `npx` equivalent) before the paid
34
34
  preflight. A desktop user can authenticate with `12ui auth login`; a headless
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export { LAYERDOC_V2_MEDIA_TYPE, MAX_LAYERDOC_INPUT_BYTES, TwelveUiConversionCli
3
3
  export { CONVERSION_FIXED_EXPORT_OUTPUTS, CONVERSION_OUTPUT_EXTENSIONS, CONVERSION_OUTPUT_FILENAME_SUFFIXES, CONVERSION_OUTPUT_FORMATS, CONVERSION_OUTPUT_MEDIA_TYPES, CONVERSION_OUTPUTS, LAYERDOC_INPUT_OUTPUTS, isConversionOutput, isLayerDocInputOutput, type ConversionFixedExportOutput, type ConversionOutputFormat, type LayerDocInputOutput, } from './conversion-outputs.js';
4
4
  export { APP_PROJECT_CAPABILITIES, APP_PROJECT_FRAMEWORKS, APP_PROJECT_LANGUAGES, APP_PROJECT_PACKAGINGS, APP_PROJECT_STYLINGS, CONVERSION_PROJECT_OUTPUTS, PROJECT_PROFILE_REQUIRED_FIELDS, PROJECT_PROFILE_SCHEMA, WEB_PROJECT_CAPABILITIES, WEB_PROJECT_FRAMEWORKS, WEB_PROJECT_LANGUAGES, WEB_PROJECT_PACKAGINGS, WEB_PROJECT_STYLINGS, canonicalConversionOutputProfileJson, isProjectConversionOutput, parseConversionOutputProfile, type AppProjectFramework, type AppProjectLanguage, type AppProjectPackaging, type AppProjectProfileV1, type AppProjectStyling, type ConversionOutputProfile, type ConversionProjectOutput, type WebProjectFramework, type WebProjectLanguage, type WebProjectPackaging, type WebProjectProfileV1, type WebProjectStyling, } from './project-profiles.js';
5
5
  export { CONVERSION_PROBLEM_CODES, type ConversionProblemCode, } from './conversion-problems.js';
6
- export { RESPONSIVE_CONVERSION_QUALITIES, PERSISTED_RESPONSIVE_CONVERSION_QUALITIES, RESPONSIVE_ANCHOR_PLAN_REVISION, LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION, RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION, THREE_TIER_RESPONSIVE_ANCHOR_PLAN_REVISION, LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION, isResponsiveConversionQuality, isPersistedResponsiveConversionQuality, parseResponsiveConversionPlan, type ResponsiveConversionPlan, type ResponsiveConversionQuality, type PersistedResponsiveConversionQuality, } from './responsive-quality.js';
6
+ export { RESPONSIVE_CONVERSION_QUALITIES, PERSISTED_RESPONSIVE_CONVERSION_QUALITIES, RESPONSIVE_CONVERSION_ANCHOR_IDS, RESPONSIVE_CONVERSION_ANCHOR_GENERATORS, RESPONSIVE_CONVERSION_ANCHOR_GENERATOR_QUALITIES, RESPONSIVE_CONVERSION_ANCHOR_IMAGE_SIZES, isResponsiveConversionQuality, isPersistedResponsiveConversionQuality, parseResponsiveConversionPlan, type ResponsiveConversionAnchor, type ResponsiveConversionAnchorId, type ResponsiveConversionPlan, type ResponsiveConversionQuality, type PersistedResponsiveConversionQuality, } from './responsive-quality.js';
7
7
  export { materializeConversionArtifacts, type MaterializedArtifact, type MaterializedArtifactManifest, } from './artifact-materializer.js';
8
8
  export { normalizeConversionOrigin, readConversionConfig, type ConversionConfig } from './config.js';
9
9
  export { DEFAULT_TWELVE_UI_DEVICE_SCOPES, DEFAULT_TWELVE_UI_LOGIN_ORIGIN, TWELVE_UI_DEVICE_SCOPES, authenticateTwelveUiDevice, normalizeLoginOrigin, revokeTwelveUiCredential, verifyTwelveUiCredential, type TwelveUiDeviceCredential, type TwelveUiDeviceScope, type VerifiedTwelveUiCredential, } from './login-auth.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ export { LAYERDOC_V2_MEDIA_TYPE, MAX_LAYERDOC_INPUT_BYTES, TwelveUiConversionCli
3
3
  export { CONVERSION_FIXED_EXPORT_OUTPUTS, CONVERSION_OUTPUT_EXTENSIONS, CONVERSION_OUTPUT_FILENAME_SUFFIXES, CONVERSION_OUTPUT_FORMATS, CONVERSION_OUTPUT_MEDIA_TYPES, CONVERSION_OUTPUTS, LAYERDOC_INPUT_OUTPUTS, isConversionOutput, isLayerDocInputOutput, } from './conversion-outputs.js';
4
4
  export { APP_PROJECT_CAPABILITIES, APP_PROJECT_FRAMEWORKS, APP_PROJECT_LANGUAGES, APP_PROJECT_PACKAGINGS, APP_PROJECT_STYLINGS, CONVERSION_PROJECT_OUTPUTS, PROJECT_PROFILE_REQUIRED_FIELDS, PROJECT_PROFILE_SCHEMA, WEB_PROJECT_CAPABILITIES, WEB_PROJECT_FRAMEWORKS, WEB_PROJECT_LANGUAGES, WEB_PROJECT_PACKAGINGS, WEB_PROJECT_STYLINGS, canonicalConversionOutputProfileJson, isProjectConversionOutput, parseConversionOutputProfile, } from './project-profiles.js';
5
5
  export { CONVERSION_PROBLEM_CODES, } from './conversion-problems.js';
6
- export { RESPONSIVE_CONVERSION_QUALITIES, PERSISTED_RESPONSIVE_CONVERSION_QUALITIES, RESPONSIVE_ANCHOR_PLAN_REVISION, LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION, RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION, THREE_TIER_RESPONSIVE_ANCHOR_PLAN_REVISION, LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION, isResponsiveConversionQuality, isPersistedResponsiveConversionQuality, parseResponsiveConversionPlan, } from './responsive-quality.js';
6
+ export { RESPONSIVE_CONVERSION_QUALITIES, PERSISTED_RESPONSIVE_CONVERSION_QUALITIES, RESPONSIVE_CONVERSION_ANCHOR_IDS, RESPONSIVE_CONVERSION_ANCHOR_GENERATORS, RESPONSIVE_CONVERSION_ANCHOR_GENERATOR_QUALITIES, RESPONSIVE_CONVERSION_ANCHOR_IMAGE_SIZES, isResponsiveConversionQuality, isPersistedResponsiveConversionQuality, parseResponsiveConversionPlan, } from './responsive-quality.js';
7
7
  export { materializeConversionArtifacts, } from './artifact-materializer.js';
8
8
  export { normalizeConversionOrigin, readConversionConfig } from './config.js';
9
9
  export { DEFAULT_TWELVE_UI_DEVICE_SCOPES, DEFAULT_TWELVE_UI_LOGIN_ORIGIN, TWELVE_UI_DEVICE_SCOPES, authenticateTwelveUiDevice, normalizeLoginOrigin, revokeTwelveUiCredential, verifyTwelveUiCredential, } from './login-auth.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,GAmBzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,+BAA+B,EAC/B,4BAA4B,EAC5B,mCAAmC,EACnC,yBAAyB,EACzB,6BAA6B,EAC7B,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,GAItB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,+BAA+B,EAC/B,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,oCAAoC,EACpC,yBAAyB,EACzB,4BAA4B,GAa7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,wBAAwB,GAEzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,+BAA+B,EAC/B,yCAAyC,EACzC,+BAA+B,EAC/B,6CAA6C,EAC7C,4CAA4C,EAC5C,0CAA0C,EAC1C,sCAAsC,EACtC,6BAA6B,EAC7B,sCAAsC,EACtC,6BAA6B,GAI9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,8BAA8B,GAG/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAyB,MAAM,aAAa,CAAC;AACrG,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,EAC9B,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GAIzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,EAClC,6BAA6B,EAC7B,+BAA+B,GAQhC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,cAAc,EACd,oBAAoB,EACpB,kBAAkB,GASnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,cAAc,GAKf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,GAKxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAyB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D;;;GAGG;AACH,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,cAAc,GAMf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,iCAAiC,EACjC,iBAAiB,EACjB,gCAAgC,EAChC,oBAAoB,GAkBrB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,GAmBzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,+BAA+B,EAC/B,4BAA4B,EAC5B,mCAAmC,EACnC,yBAAyB,EACzB,6BAA6B,EAC7B,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,GAItB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,+BAA+B,EAC/B,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,oCAAoC,EACpC,yBAAyB,EACzB,4BAA4B,GAa7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,wBAAwB,GAEzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,+BAA+B,EAC/B,yCAAyC,EACzC,gCAAgC,EAChC,uCAAuC,EACvC,gDAAgD,EAChD,wCAAwC,EACxC,6BAA6B,EAC7B,sCAAsC,EACtC,6BAA6B,GAM9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,8BAA8B,GAG/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAyB,MAAM,aAAa,CAAC;AACrG,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,EAC9B,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GAIzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,EAClC,6BAA6B,EAC7B,+BAA+B,GAQhC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,cAAc,EACd,oBAAoB,EACpB,kBAAkB,GASnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,cAAc,GAKf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,GAKxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAyB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D;;;GAGG;AACH,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,cAAc,GAMf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,iCAAiC,EACjC,iBAAiB,EACjB,gCAAgC,EAChC,oBAAoB,GAkBrB,MAAM,oBAAoB,CAAC"}
@@ -2,25 +2,76 @@ export declare const RESPONSIVE_CONVERSION_QUALITIES: readonly ["standard", "pro
2
2
  export type ResponsiveConversionQuality = typeof RESPONSIVE_CONVERSION_QUALITIES[number];
3
3
  export declare const PERSISTED_RESPONSIVE_CONVERSION_QUALITIES: readonly ["standard", "enhanced", "pro"];
4
4
  export type PersistedResponsiveConversionQuality = typeof PERSISTED_RESPONSIVE_CONVERSION_QUALITIES[number];
5
- export declare const RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v6";
6
- export declare const LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v5";
7
- export declare const RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v4";
8
- export declare const THREE_TIER_RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v3";
9
- export declare const PRE_NATIVE_RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v2";
10
- export declare const LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION: "responsive-anchor-plan-v1";
5
+ /**
6
+ * The anchor vocabulary the published contract declares.
7
+ *
8
+ * These three lists are the closed sets in
9
+ * `packages/design-contract/src/conversion.ts` `ResponsiveConversionAnchor`,
10
+ * mirrored here because this package publishes standalone and cannot depend on
11
+ * the contract workspace. `workers/api/test/conversionResponsivePlanContract.test.ts`
12
+ * asserts the mirror against every anchor the service can actually emit, so a
13
+ * new direction, generator, or image size fails a local test rather than a
14
+ * customer's install.
15
+ */
16
+ export declare const RESPONSIVE_CONVERSION_ANCHOR_IDS: readonly ["mobile", "tablet", "compact-desktop"];
17
+ export type ResponsiveConversionAnchorId = typeof RESPONSIVE_CONVERSION_ANCHOR_IDS[number];
18
+ export declare const RESPONSIVE_CONVERSION_ANCHOR_GENERATORS: readonly ["gpt-image-2"];
19
+ export declare const RESPONSIVE_CONVERSION_ANCHOR_GENERATOR_QUALITIES: readonly ["low"];
20
+ export declare const RESPONSIVE_CONVERSION_ANCHOR_IMAGE_SIZES: readonly ["1024x3072", "1536x2048", "2048x1536"];
11
21
  export declare const isResponsiveConversionQuality: (value: unknown) => value is ResponsiveConversionQuality;
12
22
  export declare const isPersistedResponsiveConversionQuality: (value: unknown) => value is PersistedResponsiveConversionQuality;
23
+ export type ResponsiveConversionAnchor = {
24
+ id: ResponsiveConversionAnchorId;
25
+ viewport_width: number;
26
+ generator: typeof RESPONSIVE_CONVERSION_ANCHOR_GENERATORS[number];
27
+ generator_quality: typeof RESPONSIVE_CONVERSION_ANCHOR_GENERATOR_QUALITIES[number];
28
+ image_size: typeof RESPONSIVE_CONVERSION_ANCHOR_IMAGE_SIZES[number];
29
+ };
13
30
  export type ResponsiveConversionPlan = {
14
- revision: typeof RESPONSIVE_ANCHOR_PLAN_REVISION | typeof LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION | typeof RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION | typeof THREE_TIER_RESPONSIVE_ANCHOR_PLAN_REVISION | typeof PRE_NATIVE_RESPONSIVE_ANCHOR_PLAN_REVISION | typeof LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION;
31
+ /**
32
+ * The service's name for its own anchor derivation. OPAQUE to every client:
33
+ * the published contract types it as a plain string
34
+ * (`packages/design-contract/src/conversion.ts`), and this package reads it
35
+ * only to hand it back to the caller as evidence.
36
+ *
37
+ * Until 0.2.26 this was a union of six literals. See the note on
38
+ * `parseResponsiveConversionPlan` for what that cost.
39
+ */
40
+ revision: string;
15
41
  quality: PersistedResponsiveConversionQuality;
16
42
  native_width: number;
17
- anchors: Array<{
18
- id: 'mobile' | 'tablet' | 'compact-desktop';
19
- viewport_width: number;
20
- generator: 'gpt-image-2';
21
- generator_quality: 'low';
22
- image_size: '1024x3072' | '1536x2048' | '2048x1536';
23
- }>;
43
+ anchors: ResponsiveConversionAnchor[];
24
44
  };
45
+ /**
46
+ * Validate the SHAPE of a responsive plan, and only the shape.
47
+ *
48
+ * ## Why there is no revision list here
49
+ *
50
+ * A plan names which anchor directions a quality bought at a given native
51
+ * width — a *service pricing decision*. Until 0.2.26 this parser refused any
52
+ * `revision` outside a closed `v1…v6` list and, worse, recomputed the topology
53
+ * the service had chosen and asserted equality. That made every published
54
+ * client a reader that must know every derivation the service will ever use,
55
+ * by name.
56
+ *
57
+ * On 2026-08-15 the service shipped `responsive-anchor-plan-v7` (pipeline
58
+ * v175, `workers/api/src/conversion/responsiveAnchorPlan.ts`). From that deploy
59
+ * every API-key client refused the whole conversion operation with
60
+ * "Conversion operation has an invalid responsive plan" — including operations
61
+ * for responsive exports it had already paid for and that had already
62
+ * succeeded, so `--export html`, `convert --output html`, and `resume --output
63
+ * html` all failed and the delivered work could not even be collected. The
64
+ * payload had not changed shape: a Standard v6 plan and a Standard v7 plan for
65
+ * the same source are byte-identical apart from that one string.
66
+ *
67
+ * So: `revision` is opaque, anchor *topology* is not re-derived, and what is
68
+ * checked is what this package actually reads — the declared vocabulary of
69
+ * `packages/design-contract/src/conversion.ts`. A malformed plan still refuses.
70
+ *
71
+ * The fence against this returning is
72
+ * `workers/api/test/conversionResponsivePlanContract.test.ts`: it walks every
73
+ * plan the service can emit, current and every frozen compatibility
74
+ * derivation, through this function.
75
+ */
25
76
  export declare const parseResponsiveConversionPlan: (value: unknown) => ResponsiveConversionPlan;
26
77
  //# sourceMappingURL=responsive-quality.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"responsive-quality.d.ts","sourceRoot":"","sources":["../src/responsive-quality.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,8BAA+B,CAAC;AAC5E,MAAM,MAAM,2BAA2B,GAAG,OAAO,+BAA+B,CAAC,MAAM,CAAC,CAAC;AACzF,eAAO,MAAM,yCAAyC,0CAA2C,CAAC;AAClG,MAAM,MAAM,oCAAoC,GAAG,OAAO,yCAAyC,CAAC,MAAM,CAAC,CAAC;AAC5G,eAAO,MAAM,+BAA+B,EAAG,2BAAoC,CAAC;AACpF,eAAO,MAAM,6CAA6C,EAAG,2BAAoC,CAAC;AAClG,eAAO,MAAM,4CAA4C,EAAG,2BAAoC,CAAC;AACjG,eAAO,MAAM,0CAA0C,EAAG,2BAAoC,CAAC;AAC/F,eAAO,MAAM,0CAA0C,EAAG,2BAAoC,CAAC;AAC/F,eAAO,MAAM,sCAAsC,EAAG,2BAAoC,CAAC;AAE3F,eAAO,MAAM,6BAA6B,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,2BAEvE,CAAC;AAEF,eAAO,MAAM,sCAAsC,GACjD,OAAO,OAAO,KACb,KAAK,IAAI,oCAGX,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,OAAO,+BAA+B,GAC5C,OAAO,6CAA6C,GACpD,OAAO,4CAA4C,GACnD,OAAO,0CAA0C,GACjD,OAAO,0CAA0C,GACjD,OAAO,sCAAsC,CAAC;IAClD,OAAO,EAAE,oCAAoC,CAAC;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,QAAQ,GAAG,QAAQ,GAAG,iBAAiB,CAAC;QAC5C,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,aAAa,CAAC;QACzB,iBAAiB,EAAE,KAAK,CAAC;QACzB,UAAU,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;KACrD,CAAC,CAAC;CACJ,CAAC;AAkBF,eAAO,MAAM,6BAA6B,GAAI,OAAO,OAAO,KAAG,wBA4C9D,CAAC"}
1
+ {"version":3,"file":"responsive-quality.d.ts","sourceRoot":"","sources":["../src/responsive-quality.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,8BAA+B,CAAC;AAC5E,MAAM,MAAM,2BAA2B,GAAG,OAAO,+BAA+B,CAAC,MAAM,CAAC,CAAC;AACzF,eAAO,MAAM,yCAAyC,0CAA2C,CAAC;AAClG,MAAM,MAAM,oCAAoC,GAAG,OAAO,yCAAyC,CAAC,MAAM,CAAC,CAAC;AAE5G;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gCAAgC,kDAAmD,CAAC;AACjG,MAAM,MAAM,4BAA4B,GAAG,OAAO,gCAAgC,CAAC,MAAM,CAAC,CAAC;AAC3F,eAAO,MAAM,uCAAuC,0BAA2B,CAAC;AAChF,eAAO,MAAM,gDAAgD,kBAAmB,CAAC;AACjF,eAAO,MAAM,wCAAwC,kDAAmD,CAAC;AAEzG,eAAO,MAAM,6BAA6B,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,2BAEvE,CAAC;AAEF,eAAO,MAAM,sCAAsC,GACjD,OAAO,OAAO,KACb,KAAK,IAAI,oCAGX,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,4BAA4B,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,uCAAuC,CAAC,MAAM,CAAC,CAAC;IAClE,iBAAiB,EAAE,OAAO,gDAAgD,CAAC,MAAM,CAAC,CAAC;IACnF,UAAU,EAAE,OAAO,wCAAwC,CAAC,MAAM,CAAC,CAAC;CACrE,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;;;;;;OAQG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,oCAAoC,CAAC;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,0BAA0B,EAAE,CAAC;CACvC,CAAC;AAcF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,6BAA6B,GAAI,OAAO,OAAO,KAAG,wBAoB9D,CAAC"}
@@ -1,65 +1,73 @@
1
1
  export const RESPONSIVE_CONVERSION_QUALITIES = ['standard', 'pro'];
2
2
  export const PERSISTED_RESPONSIVE_CONVERSION_QUALITIES = ['standard', 'enhanced', 'pro'];
3
- export const RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v6';
4
- export const LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v5';
5
- export const RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v4';
6
- export const THREE_TIER_RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v3';
7
- export const PRE_NATIVE_RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v2';
8
- export const LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION = 'responsive-anchor-plan-v1';
3
+ /**
4
+ * The anchor vocabulary the published contract declares.
5
+ *
6
+ * These three lists are the closed sets in
7
+ * `packages/design-contract/src/conversion.ts` `ResponsiveConversionAnchor`,
8
+ * mirrored here because this package publishes standalone and cannot depend on
9
+ * the contract workspace. `workers/api/test/conversionResponsivePlanContract.test.ts`
10
+ * asserts the mirror against every anchor the service can actually emit, so a
11
+ * new direction, generator, or image size fails a local test rather than a
12
+ * customer's install.
13
+ */
14
+ export const RESPONSIVE_CONVERSION_ANCHOR_IDS = ['mobile', 'tablet', 'compact-desktop'];
15
+ export const RESPONSIVE_CONVERSION_ANCHOR_GENERATORS = ['gpt-image-2'];
16
+ export const RESPONSIVE_CONVERSION_ANCHOR_GENERATOR_QUALITIES = ['low'];
17
+ export const RESPONSIVE_CONVERSION_ANCHOR_IMAGE_SIZES = ['1024x3072', '1536x2048', '2048x1536'];
9
18
  export const isResponsiveConversionQuality = (value) => (typeof value === 'string' && RESPONSIVE_CONVERSION_QUALITIES.includes(value));
10
19
  export const isPersistedResponsiveConversionQuality = (value) => (typeof value === 'string'
11
20
  && PERSISTED_RESPONSIVE_CONVERSION_QUALITIES.includes(value));
12
- const THREE_TIER_ANCHORS = [
13
- { id: 'mobile', viewport_width: 390 },
14
- { id: 'tablet', viewport_width: 768 },
15
- { id: 'compact-desktop', viewport_width: 1024 },
16
- ];
17
- const CURRENT_ANCHORS = [
18
- { id: 'mobile', viewport_width: 390, image_size: '1024x3072' },
19
- { id: 'tablet', viewport_width: 768, image_size: '1536x2048' },
20
- { id: 'compact-desktop', viewport_width: 1280, image_size: '2048x1536' },
21
- ];
22
21
  const isRecord = (value) => (typeof value === 'object' && value !== null && !Array.isArray(value));
22
+ const isPositiveInteger = (value) => (Number.isSafeInteger(value) && Number(value) > 0);
23
+ const oneOf = (value, allowed) => (typeof value === 'string' && allowed.includes(value));
24
+ /**
25
+ * Validate the SHAPE of a responsive plan, and only the shape.
26
+ *
27
+ * ## Why there is no revision list here
28
+ *
29
+ * A plan names which anchor directions a quality bought at a given native
30
+ * width — a *service pricing decision*. Until 0.2.26 this parser refused any
31
+ * `revision` outside a closed `v1…v6` list and, worse, recomputed the topology
32
+ * the service had chosen and asserted equality. That made every published
33
+ * client a reader that must know every derivation the service will ever use,
34
+ * by name.
35
+ *
36
+ * On 2026-08-15 the service shipped `responsive-anchor-plan-v7` (pipeline
37
+ * v175, `workers/api/src/conversion/responsiveAnchorPlan.ts`). From that deploy
38
+ * every API-key client refused the whole conversion operation with
39
+ * "Conversion operation has an invalid responsive plan" — including operations
40
+ * for responsive exports it had already paid for and that had already
41
+ * succeeded, so `--export html`, `convert --output html`, and `resume --output
42
+ * html` all failed and the delivered work could not even be collected. The
43
+ * payload had not changed shape: a Standard v6 plan and a Standard v7 plan for
44
+ * the same source are byte-identical apart from that one string.
45
+ *
46
+ * So: `revision` is opaque, anchor *topology* is not re-derived, and what is
47
+ * checked is what this package actually reads — the declared vocabulary of
48
+ * `packages/design-contract/src/conversion.ts`. A malformed plan still refuses.
49
+ *
50
+ * The fence against this returning is
51
+ * `workers/api/test/conversionResponsivePlanContract.test.ts`: it walks every
52
+ * plan the service can emit, current and every frozen compatibility
53
+ * derivation, through this function.
54
+ */
23
55
  export const parseResponsiveConversionPlan = (value) => {
24
- if (!isRecord(value) || (value.revision !== RESPONSIVE_ANCHOR_PLAN_REVISION
25
- && value.revision !== LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION
26
- && value.revision !== RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION
27
- && value.revision !== THREE_TIER_RESPONSIVE_ANCHOR_PLAN_REVISION
28
- && value.revision !== PRE_NATIVE_RESPONSIVE_ANCHOR_PLAN_REVISION
29
- && value.revision !== LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION)
56
+ if (!isRecord(value)
57
+ || typeof value.revision !== 'string' || value.revision.trim() === ''
30
58
  || !isPersistedResponsiveConversionQuality(value.quality)
31
- || !Number.isSafeInteger(value.native_width) || !(Number(value.native_width) > 390)
32
- || !Array.isArray(value.anchors)) {
59
+ || !isPositiveInteger(value.native_width)
60
+ || !Array.isArray(value.anchors) || value.anchors.length === 0) {
33
61
  throw new TypeError('Invalid responsive conversion plan.');
34
62
  }
35
- const nativeWidth = Number(value.native_width);
36
- const currentTopologyRevision = value.revision === RESPONSIVE_ANCHOR_PLAN_REVISION
37
- || value.revision === LOGICAL_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION
38
- || value.revision === RASTER_WIDTH_RESPONSIVE_ANCHOR_PLAN_REVISION;
39
- if (currentTopologyRevision && value.quality === 'enhanced') {
40
- throw new TypeError('Current responsive conversion plans do not support Enhanced quality.');
41
- }
42
- const oldLimit = value.quality === 'standard' ? 1 : value.quality === 'enhanced' ? 2 : 3;
43
- const oldBudget = THREE_TIER_ANCHORS.slice(0, oldLimit);
44
- const expected = currentTopologyRevision
45
- ? CURRENT_ANCHORS.slice(0, value.quality === 'standard' ? 1 : nativeWidth > 1440 ? 3 : 2)
46
- : value.revision === LEGACY_RESPONSIVE_ANCHOR_PLAN_REVISION
47
- ? oldBudget.filter((anchor) => anchor.viewport_width < nativeWidth)
48
- : oldBudget;
49
- if (value.anchors.length !== expected.length || expected.length === 0) {
50
- throw new TypeError('Responsive conversion plan has an invalid anchor count.');
51
- }
52
63
  for (const [index, anchorValue] of value.anchors.entries()) {
53
64
  const anchor = isRecord(anchorValue) ? anchorValue : null;
54
- const expectedAnchor = expected[index];
55
- const expectedImageSize = value.revision === RESPONSIVE_ANCHOR_PLAN_REVISION
56
- ? (expectedAnchor && 'image_size' in expectedAnchor ? expectedAnchor.image_size : null)
57
- : '1024x3072';
58
- if (!anchor || anchor.id !== expectedAnchor?.id
59
- || anchor.viewport_width !== expectedAnchor.viewport_width
60
- || anchor.generator !== 'gpt-image-2'
61
- || anchor.generator_quality !== 'low'
62
- || anchor.image_size !== expectedImageSize) {
65
+ if (!anchor
66
+ || !oneOf(anchor.id, RESPONSIVE_CONVERSION_ANCHOR_IDS)
67
+ || !isPositiveInteger(anchor.viewport_width)
68
+ || !oneOf(anchor.generator, RESPONSIVE_CONVERSION_ANCHOR_GENERATORS)
69
+ || !oneOf(anchor.generator_quality, RESPONSIVE_CONVERSION_ANCHOR_GENERATOR_QUALITIES)
70
+ || !oneOf(anchor.image_size, RESPONSIVE_CONVERSION_ANCHOR_IMAGE_SIZES)) {
63
71
  throw new TypeError(`Responsive conversion plan anchor ${index} is invalid.`);
64
72
  }
65
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"responsive-quality.js","sourceRoot":"","sources":["../src/responsive-quality.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"responsive-quality.js","sourceRoot":"","sources":["../src/responsive-quality.ts"],"names":[],"mappings":"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"}
package/open-design.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "specVersion": "1.0.0",
4
4
  "name": "12ui-design",
5
5
  "title": "12UI Design",
6
- "version": "0.2.25",
6
+ "version": "0.2.26",
7
7
  "description": "Explore corpus-grounded interface directions, choose one, and convert it into production-ready responsive or native artifacts with 12UI.",
8
8
  "author": {
9
9
  "name": "Just Every",
@@ -49,7 +49,7 @@
49
49
  "command": "npx",
50
50
  "args": [
51
51
  "-y",
52
- "@12ui/design@0.2.25",
52
+ "@12ui/design@0.2.26",
53
53
  "mcp"
54
54
  ]
55
55
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@12ui/design",
3
- "version": "0.2.25",
3
+ "version": "0.2.26",
4
4
  "type": "module",
5
5
  "description": "The canonical 12ui CLI, SDK, MCP server, and visual interface design skills",
6
6
  "main": "dist/index.js",