nativeapptemplate-agent 0.2.4 → 0.3.1

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 (82) hide show
  1. package/AGENTS.md +6 -4
  2. package/README.md +40 -10
  3. package/dist/agents/judge.d.ts.map +1 -1
  4. package/dist/agents/judge.js +3 -2
  5. package/dist/agents/judge.js.map +1 -1
  6. package/dist/agents/planner.d.ts +93 -0
  7. package/dist/agents/planner.d.ts.map +1 -1
  8. package/dist/agents/planner.js +110 -80
  9. package/dist/agents/planner.js.map +1 -1
  10. package/dist/agents/repair.d.ts +2 -0
  11. package/dist/agents/repair.d.ts.map +1 -1
  12. package/dist/agents/repair.js +25 -16
  13. package/dist/agents/repair.js.map +1 -1
  14. package/dist/agents/types.d.ts +1 -0
  15. package/dist/agents/types.d.ts.map +1 -1
  16. package/dist/agents/workers/android.d.ts +2 -0
  17. package/dist/agents/workers/android.d.ts.map +1 -1
  18. package/dist/agents/workers/android.js +10 -6
  19. package/dist/agents/workers/android.js.map +1 -1
  20. package/dist/agents/workers/copy.d.ts +3 -0
  21. package/dist/agents/workers/copy.d.ts.map +1 -1
  22. package/dist/agents/workers/copy.js +46 -0
  23. package/dist/agents/workers/copy.js.map +1 -1
  24. package/dist/agents/workers/ios.d.ts +2 -0
  25. package/dist/agents/workers/ios.d.ts.map +1 -1
  26. package/dist/agents/workers/ios.js +22 -8
  27. package/dist/agents/workers/ios.js.map +1 -1
  28. package/dist/agents/workers/rails.d.ts +4 -1
  29. package/dist/agents/workers/rails.d.ts.map +1 -1
  30. package/dist/agents/workers/rails.js +18 -7
  31. package/dist/agents/workers/rails.js.map +1 -1
  32. package/dist/dispatch.d.ts +4 -0
  33. package/dist/dispatch.d.ts.map +1 -1
  34. package/dist/dispatch.js +23 -3
  35. package/dist/dispatch.js.map +1 -1
  36. package/dist/index.d.ts +1 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +28 -9
  39. package/dist/index.js.map +1 -1
  40. package/dist/japanese-nouns.d.ts +5 -0
  41. package/dist/japanese-nouns.d.ts.map +1 -0
  42. package/dist/japanese-nouns.js +18 -0
  43. package/dist/japanese-nouns.js.map +1 -0
  44. package/dist/mcp.d.ts.map +1 -1
  45. package/dist/mcp.js +7 -2
  46. package/dist/mcp.js.map +1 -1
  47. package/dist/models.d.ts +11 -0
  48. package/dist/models.d.ts.map +1 -0
  49. package/dist/models.js +27 -0
  50. package/dist/models.js.map +1 -0
  51. package/dist/rename-overrides.d.ts +12 -0
  52. package/dist/rename-overrides.d.ts.map +1 -1
  53. package/dist/rename-overrides.js +49 -1
  54. package/dist/rename-overrides.js.map +1 -1
  55. package/dist/report/render.js +1 -1
  56. package/dist/report/render.js.map +1 -1
  57. package/dist/reserved-words.d.ts +13 -0
  58. package/dist/reserved-words.d.ts.map +1 -0
  59. package/dist/reserved-words.js +72 -0
  60. package/dist/reserved-words.js.map +1 -0
  61. package/dist/slug.js +1 -1
  62. package/dist/slug.js.map +1 -1
  63. package/dist/structured-output.d.ts +6 -0
  64. package/dist/structured-output.d.ts.map +1 -0
  65. package/dist/structured-output.js +32 -0
  66. package/dist/structured-output.js.map +1 -0
  67. package/dist/validation/layer1.d.ts.map +1 -1
  68. package/dist/validation/layer1.js +13 -1
  69. package/dist/validation/layer1.js.map +1 -1
  70. package/dist/validation/layer3.d.ts +21 -0
  71. package/dist/validation/layer3.d.ts.map +1 -1
  72. package/dist/validation/layer3.js +65 -51
  73. package/dist/validation/layer3.js.map +1 -1
  74. package/dist/validation/stage2-judge.d.ts.map +1 -1
  75. package/dist/validation/stage2-judge.js +2 -1
  76. package/dist/validation/stage2-judge.js.map +1 -1
  77. package/dist/validation/visual-judge.d.ts +1 -0
  78. package/dist/validation/visual-judge.d.ts.map +1 -1
  79. package/dist/validation/visual-judge.js +8 -2
  80. package/dist/validation/visual-judge.js.map +1 -1
  81. package/package.json +3 -3
  82. package/scripts/ruby/rename.rb +30 -5
@@ -0,0 +1,72 @@
1
+ // Rename targets that collide with identifiers the substrate already uses.
2
+ // A lexical rename into one of these produces duplicate or shadowed types
3
+ // (build errors), so the planner is told to avoid them and manual overrides
4
+ // into them are rejected (src/rename-overrides.ts).
5
+ // The substrate's auth/admin layer.
6
+ export const SUBSTRATE_RESERVED = [
7
+ "Owner", "Account", "Admin", "Personal", "Role", "Permission", "User", "App", "Version",
8
+ "Privacy", "Terms", "Invitation", "Error", "Scan", "Redirect", "Notification", "Session",
9
+ ];
10
+ // The paid templates' RevenueCat billing layer. The first group are the
11
+ // templates' own billing type stems (SubscriptionRepository, PaywallView,
12
+ // SubscriptionPlan, FreeTrial…; iOS docs/subscription.md "Keeping it safe for
13
+ // nativeapptemplate-agent's rename"); the second are RevenueCat / StoreKit /
14
+ // Play Billing type names the billing code refers to.
15
+ export const BILLING_RESERVED = [
16
+ "Subscription", "Paywall", "Plan", "Purchase", "Purchases", "Billing", "Entitlement", "Trial", "Customer",
17
+ "Package", "Offering", "Store", "StoreProduct", "Product", "Transaction", "Price", "Period",
18
+ ];
19
+ // The paid templates' optional Sentry error monitoring. ErrorReport /
20
+ // ErrorReporter / ErrorReporting are the templates' own types (iOS and Android;
21
+ // ErrorReportPolicy etc. only extend them). Sentry is the SDK's module (iOS
22
+ // `Sentry.Event`) and the Ruby gem's top-level module, so a class of that name
23
+ // would reopen it. Event is the iOS template's own logging type (Logger.swift),
24
+ // which is why the reporter has to write `Sentry.Event`. Breadcrumb and
25
+ // Exception are Sentry SDK types the iOS tests use unqualified (an app type of
26
+ // that name makes them ambiguous); Exception is also Ruby's base exception.
27
+ export const ERROR_MONITORING_RESERVED = [
28
+ "Sentry", "ErrorReport", "ErrorReporter", "ErrorReporting", "Event", "Breadcrumb", "Exception",
29
+ ];
30
+ export const STDLIB_RESERVED = {
31
+ Swift: [
32
+ "Task", "Actor", "Result", "Error", "View", "Text", "Image", "State", "Binding",
33
+ "Data", "Date", "URL", "UUID", "Set", "Array", "Dictionary", "Optional",
34
+ ],
35
+ Kotlin: [
36
+ "Unit", "Nothing", "Any", "List", "Map", "Set", "Flow", "Sequence", "Result",
37
+ "Continuation", "Deferred", "Context",
38
+ ],
39
+ "Ruby/Rails": [
40
+ "Object", "Module", "Class", "Array", "Hash", "String", "Integer", "Proc",
41
+ "Thread", "Request", "Response", "Session",
42
+ ],
43
+ };
44
+ // Why `target` can't be a rename target, or null when it can. Case-insensitive:
45
+ // rename.rb derives every case form from the target, so `store` and `Store`
46
+ // produce the same identifiers.
47
+ export function reservedReason(target) {
48
+ const t = target.trim().toLowerCase();
49
+ const hit = (words) => words.find((w) => w.toLowerCase() === t);
50
+ const substrate = hit(SUBSTRATE_RESERVED);
51
+ if (substrate)
52
+ return `"${substrate}" is used by the substrate's auth/admin layer`;
53
+ const billing = hit(BILLING_RESERVED);
54
+ if (billing)
55
+ return `"${billing}" is used by the substrate's subscription (RevenueCat) layer`;
56
+ const monitoring = hit(ERROR_MONITORING_RESERVED);
57
+ if (monitoring)
58
+ return `"${monitoring}" is used by the substrate's error monitoring (Sentry) layer`;
59
+ for (const [lang, words] of Object.entries(STDLIB_RESERVED)) {
60
+ const w = hit(words);
61
+ if (w)
62
+ return `"${w}" is a ${lang} standard-library type`;
63
+ }
64
+ return null;
65
+ }
66
+ export function reservedTargets(plan) {
67
+ return plan.flatMap((p) => {
68
+ const reason = reservedReason(p.to);
69
+ return reason ? [{ from: p.from, to: p.to, reason }] : [];
70
+ });
71
+ }
72
+ //# sourceMappingURL=reserved-words.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reserved-words.js","sourceRoot":"","sources":["../src/reserved-words.ts"],"names":[],"mappings":"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"}
package/dist/slug.js CHANGED
@@ -9,7 +9,7 @@ export function slugToSnake(slug) {
9
9
  return slug.replace(/-/g, "_");
10
10
  }
11
11
  // Kebab-case, filesystem-safe, leading alphanumeric. Mirrors the planner's
12
- // DOMAIN_TOOL slug pattern so a derived/overridden slug obeys the same contract
12
+ // DOMAIN_SPEC_SCHEMA slug rule so a derived/overridden slug obeys the same contract
13
13
  // the planner does (it drives the output dir, DB prefix, and Pascal project
14
14
  // name via slugToPascal).
15
15
  export function isValidSlug(slug) {
package/dist/slug.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"slug.js","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,KAAK,CAAC,MAAM,CAAC;SACb,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,2EAA2E;AAC3E,gFAAgF;AAChF,4EAA4E;AAC5E,0BAA0B;AAC1B,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,sEAAsE;AACtE,qEAAqE;AACrE,6EAA6E;AAC7E,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,KAAK,CAAC,SAAS,CAAC;SAChB,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,uEAAuE;AACvE,+EAA+E;AAC/E,oEAAoE;AACpE,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzE,CAAC;AAED,6EAA6E;AAC7E,6DAA6D;AAC7D,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,mBAAmB,CAAC,IAAI,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAChE,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"slug.js","sourceRoot":"","sources":["../src/slug.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,KAAK,CAAC,MAAM,CAAC;SACb,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,2EAA2E;AAC3E,oFAAoF;AACpF,4EAA4E;AAC5E,0BAA0B;AAC1B,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,sEAAsE;AACtE,qEAAqE;AACrE,6EAA6E;AAC7E,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,KAAK,CAAC,SAAS,CAAC;SAChB,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,uEAAuE;AACvE,+EAA+E;AAC/E,oEAAoE;AACpE,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzE,CAAC;AAED,6EAA6E;AAC7E,6DAA6D;AAC7D,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,mBAAmB,CAAC,IAAI,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAChE,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type Anthropic from "@anthropic-ai/sdk";
2
+ type BetaMessage = Anthropic.Beta.Messages.BetaMessage;
3
+ export declare function readStructuredJson(response: BetaMessage, label: string): unknown;
4
+ export declare function usageLine(response: BetaMessage, requestedModel: string): string;
5
+ export {};
6
+ //# sourceMappingURL=structured-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-output.d.ts","sourceRoot":"","sources":["../src/structured-output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAE/C,KAAK,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AAKvD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAqBhF;AAID,wBAAgB,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAG/E"}
@@ -0,0 +1,32 @@
1
+ // Reads the JSON body of a structured-output (`output_config.format`)
2
+ // response. Checks stop_reason before touching content: a refusal may carry
3
+ // no text at all, and a max_tokens cut leaves truncated JSON.
4
+ export function readStructuredJson(response, label) {
5
+ if (response.stop_reason === "refusal") {
6
+ const category = response.stop_details?.category ?? "unknown";
7
+ throw new Error(`${label}: request was declined (stop_reason refusal, category ${category})`);
8
+ }
9
+ if (response.stop_reason === "max_tokens") {
10
+ throw new Error(`${label}: response hit max_tokens before the JSON was complete`);
11
+ }
12
+ const text = response.content
13
+ .filter((b) => b.type === "text")
14
+ .map((b) => b.text)
15
+ .join("");
16
+ if (text.trim() === "") {
17
+ throw new Error(`${label}: expected JSON text in response, got: ${JSON.stringify(response.content)}`);
18
+ }
19
+ try {
20
+ return JSON.parse(text);
21
+ }
22
+ catch (error) {
23
+ throw new Error(`${label}: response is not valid JSON (${String(error)}): ${text.slice(0, 200)}`);
24
+ }
25
+ }
26
+ // One trace line per call: tokens, plus the model that actually answered
27
+ // (differs from the requested one when a refusal fallback served it).
28
+ export function usageLine(response, requestedModel) {
29
+ const servedBy = response.model !== requestedModel ? ` (served by ${response.model})` : "";
30
+ return `usage: ${response.usage.input_tokens} in / ${response.usage.output_tokens} out${servedBy}`;
31
+ }
32
+ //# sourceMappingURL=structured-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-output.js","sourceRoot":"","sources":["../src/structured-output.ts"],"names":[],"mappings":"AAIA,sEAAsE;AACtE,4EAA4E;AAC5E,8DAA8D;AAC9D,MAAM,UAAU,kBAAkB,CAAC,QAAqB,EAAE,KAAa;IACrE,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,QAAQ,IAAI,SAAS,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yDAAyD,QAAQ,GAAG,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,QAAQ,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,wDAAwD,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO;SAC1B,MAAM,CAAC,CAAC,CAAC,EAA8C,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SAC5E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,0CAA0C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iCAAiC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,sEAAsE;AACtE,MAAM,UAAU,SAAS,CAAC,QAAqB,EAAE,cAAsB;IACrE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,eAAe,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,OAAO,UAAU,QAAQ,CAAC,KAAK,CAAC,YAAY,SAAS,QAAQ,CAAC,KAAK,CAAC,aAAa,OAAO,QAAQ,EAAE,CAAC;AACrG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"layer1.d.ts","sourceRoot":"","sources":["../../src/validation/layer1.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B,CAAC;AA+BF,wBAAsB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAiCzE"}
1
+ {"version":3,"file":"layer1.d.ts","sourceRoot":"","sources":["../../src/validation/layer1.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B,CAAC;AAyCF,wBAAsB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAmCzE"}
@@ -4,7 +4,7 @@ const TEXT_EXTS = new Set([
4
4
  ".rb", ".erb", ".yml", ".yaml", ".json", ".md", ".gemspec", ".rake", ".ru",
5
5
  ".txt", ".sample", ".example", ".conf", ".html", ".css", ".scss", ".js", ".mjs",
6
6
  ".tt", ".lock",
7
- ".swift", ".plist", ".strings", ".xcconfig", ".entitlements", ".pbxproj",
7
+ ".swift", ".plist", ".strings", ".xcstrings", ".xcconfig", ".entitlements", ".pbxproj",
8
8
  ".xcworkspacedata", ".modulemap", ".xcscheme",
9
9
  ".kt", ".kts", ".xml", ".gradle", ".pro", ".toml", ".properties", ".cfg",
10
10
  ".proto",
@@ -12,6 +12,9 @@ const TEXT_EXTS = new Set([
12
12
  const TEXT_BASENAMES = new Set([
13
13
  "Gemfile", "Gemfile.lock", "Rakefile", "Procfile", "Procfile.dev",
14
14
  "config.ru", "Dockerfile",
15
+ // Kamal's extensionless secrets files (.kamal/secrets, .kamal/secrets-common).
16
+ // config/deploy.yml names the secret keys defined there, so both must rename.
17
+ "secrets", "secrets-common",
15
18
  "Podfile", "Podfile.lock", "Package.swift", "Cartfile", "Makefile",
16
19
  "gradlew", "gradlew.bat", "gradle.properties", "local.properties",
17
20
  ]);
@@ -25,6 +28,12 @@ const SKIP_SEGMENTS = new Set([
25
28
  // source by the bundler — e.g. Turbo's `visitCompleted` in application.js), so
26
29
  // Layer 1 must not scan them either, or it flags tokens we intentionally left.
27
30
  const SKIP_SUBPATHS = ["app/assets/builds", "public/assets"];
31
+ // Ordinary words that begin with a forbidden token but aren't the domain noun.
32
+ // rename.rb leaves them alone (the token is followed by a lowercase letter, not
33
+ // a word boundary), so they aren't leftovers, and "repairing" them would break
34
+ // the build. ShoppingCart / AddShoppingCart are Material icons in the paid
35
+ // Android template's subscription settings.
36
+ const NON_DOMAIN_WORDS = ["Shopping"];
28
37
  export async function runLayer1(input) {
29
38
  if (input.forbiddenTokens.length === 0) {
30
39
  return { pass: true, findings: [] };
@@ -45,6 +54,9 @@ export async function runLayer1(input) {
45
54
  regex.lastIndex = 0;
46
55
  let m;
47
56
  while ((m = regex.exec(line)) !== null) {
57
+ const at = m.index;
58
+ if (NON_DOMAIN_WORDS.some((w) => w.startsWith(m[0]) && line.startsWith(w, at)))
59
+ continue;
48
60
  findings.push({
49
61
  token: m[0],
50
62
  file: relative(root, filePath),
@@ -1 +1 @@
1
- {"version":3,"file":"layer1.js","sourceRoot":"","sources":["../../src/validation/layer1.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer1.js","sourceRoot":"","sources":["../../src/validation/layer1.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import Anthropic from "@anthropic-ai/sdk";
1
2
  export type Layer3Criterion = {
2
3
  id: string;
3
4
  question: string;
@@ -18,5 +19,25 @@ export type Layer3Result = {
18
19
  pass: boolean;
19
20
  scores: Layer3Score[];
20
21
  };
22
+ export declare const VERDICT_SCHEMA: {
23
+ readonly type: "object";
24
+ readonly properties: {
25
+ readonly pass: {
26
+ readonly type: "boolean";
27
+ readonly description: "true if the criterion is met based on what is visible in the screenshot; false otherwise. Be conservative — when uncertain, answer false.";
28
+ };
29
+ readonly rationale: {
30
+ readonly type: "string";
31
+ readonly description: "One-sentence rationale grounded in what is visible.";
32
+ };
33
+ };
34
+ readonly required: readonly ["pass", "rationale"];
35
+ readonly additionalProperties: false;
36
+ };
37
+ export declare function buildJudgeRequest(model: string, imageBase64: string, spec: string, criterion: Layer3Criterion): Anthropic.Beta.Messages.MessageCreateParamsNonStreaming;
38
+ export declare function parseVerdict(response: Anthropic.Beta.Messages.BetaMessage): {
39
+ pass: boolean;
40
+ rationale: string;
41
+ };
21
42
  export declare function runLayer3(input: Layer3Input): Promise<Layer3Result>;
22
43
  //# sourceMappingURL=layer3.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layer3.d.ts","sourceRoot":"","sources":["../../src/validation/layer3.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AA8BF,wBAAsB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAgCzE"}
1
+ {"version":3,"file":"layer3.d.ts","sourceRoot":"","sources":["../../src/validation/layer3.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAO1C,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAcF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAcjB,CAAC;AAIX,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,eAAe,GACzB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CA4BzD;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAMhH;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAgCzE"}
@@ -1,36 +1,79 @@
1
1
  import Anthropic from "@anthropic-ai/sdk";
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { isStub } from "../stub.js";
4
- const DEFAULT_MODEL = "claude-opus-4-7";
4
+ import { trace } from "../trace.js";
5
+ import { FALLBACK_BETA, FALLBACKS, JUDGE_EFFORT, JUDGE_MODEL } from "../models.js";
6
+ import { readStructuredJson, usageLine } from "../structured-output.js";
5
7
  const DEFAULT_SAMPLES = 3;
6
- const MAX_TOKENS = 1024;
8
+ // Opus 5.5 always thinks, and thinking counts toward max_tokens: leave room
9
+ // for it on top of the short verdict JSON.
10
+ const MAX_TOKENS = 8192;
7
11
  const SYSTEM_PROMPT = `You are a vision judge for a SaaS code generator. You receive a one-sentence natural-language spec describing a SaaS product and a screenshot of a generated app's home screen, and you assess one rubric criterion at a time.
8
12
 
9
13
  Score conservatively: when in doubt, answer No. Base the verdict ONLY on what is visible in the screenshot — do not assume features that aren't shown.`;
10
- const VERDICT_TOOL = {
11
- name: "submit_verdict",
12
- description: "Record the Yes/No verdict and one-sentence rationale for this rubric criterion.",
13
- input_schema: {
14
- type: "object",
15
- properties: {
16
- pass: {
17
- type: "boolean",
18
- description: "true if the criterion is met based on what is visible in the screenshot; false otherwise. Be conservative — when uncertain, answer false.",
19
- },
20
- rationale: {
21
- type: "string",
22
- description: "One-sentence rationale grounded in what is visible.",
23
- },
14
+ // JSON schema for the judge's structured output (output_config.format).
15
+ // Opus 5.5 rejects forced tool_choice, so the verdict is the response body
16
+ // instead of a submit_verdict tool call.
17
+ export const VERDICT_SCHEMA = {
18
+ type: "object",
19
+ properties: {
20
+ pass: {
21
+ type: "boolean",
22
+ description: "true if the criterion is met based on what is visible in the screenshot; false otherwise. Be conservative — when uncertain, answer false.",
23
+ },
24
+ rationale: {
25
+ type: "string",
26
+ description: "One-sentence rationale grounded in what is visible.",
24
27
  },
25
- required: ["pass", "rationale"],
26
- additionalProperties: false,
27
28
  },
29
+ required: ["pass", "rationale"],
30
+ additionalProperties: false,
28
31
  };
32
+ // The Messages API request for one judge sample. Exported so tests can check
33
+ // its shape without a network call.
34
+ export function buildJudgeRequest(model, imageBase64, spec, criterion) {
35
+ return {
36
+ model,
37
+ max_tokens: MAX_TOKENS,
38
+ system: SYSTEM_PROMPT,
39
+ output_config: {
40
+ effort: JUDGE_EFFORT,
41
+ format: { type: "json_schema", schema: VERDICT_SCHEMA },
42
+ },
43
+ betas: [FALLBACK_BETA],
44
+ fallbacks: FALLBACKS,
45
+ messages: [
46
+ {
47
+ role: "user",
48
+ content: [
49
+ {
50
+ type: "image",
51
+ source: { type: "base64", media_type: "image/png", data: imageBase64 },
52
+ cache_control: { type: "ephemeral" },
53
+ },
54
+ {
55
+ type: "text",
56
+ text: `Spec: ${spec}\n\nCriterion: ${criterion.question}`,
57
+ },
58
+ ],
59
+ },
60
+ ],
61
+ };
62
+ }
63
+ // Reads one verdict, failing loudly on a refusal, a truncated response, or a
64
+ // malformed verdict.
65
+ export function parseVerdict(response) {
66
+ const verdict = readStructuredJson(response, "layer3 judge");
67
+ if (typeof verdict.pass !== "boolean" || typeof verdict.rationale !== "string") {
68
+ throw new Error("layer3 judge: malformed verdict: " + JSON.stringify(verdict));
69
+ }
70
+ return { pass: verdict.pass, rationale: verdict.rationale };
71
+ }
29
72
  export async function runLayer3(input) {
30
73
  if (isStub("judge"))
31
74
  return runStubLayer3(input);
32
75
  const samplesPerCriterion = input.samplesPerCriterion ?? DEFAULT_SAMPLES;
33
- const model = input.model ?? DEFAULT_MODEL;
76
+ const model = input.model ?? JUDGE_MODEL;
34
77
  const png = await readFile(input.screenshotPath);
35
78
  const imageBase64 = png.toString("base64");
36
79
  const apiKey = process.env['NATIVEAPPTEMPLATE_AGENT_ANTHROPIC_KEY'] ?? process.env['ANTHROPIC_API_KEY'];
@@ -50,38 +93,9 @@ export async function runLayer3(input) {
50
93
  return { pass, scores };
51
94
  }
52
95
  async function judgeOne(client, model, imageBase64, spec, criterion) {
53
- const response = await client.messages.create({
54
- model,
55
- max_tokens: MAX_TOKENS,
56
- system: SYSTEM_PROMPT,
57
- tools: [VERDICT_TOOL],
58
- tool_choice: { type: "tool", name: "submit_verdict" },
59
- messages: [
60
- {
61
- role: "user",
62
- content: [
63
- {
64
- type: "image",
65
- source: { type: "base64", media_type: "image/png", data: imageBase64 },
66
- cache_control: { type: "ephemeral" },
67
- },
68
- {
69
- type: "text",
70
- text: `Spec: ${spec}\n\nCriterion: ${criterion.question}`,
71
- },
72
- ],
73
- },
74
- ],
75
- });
76
- const toolUse = response.content.find((c) => c.type === "tool_use");
77
- if (!toolUse || toolUse.type !== "tool_use") {
78
- throw new Error("layer3 judge: expected tool_use in response, got: " + JSON.stringify(response.content));
79
- }
80
- const verdict = toolUse.input;
81
- if (typeof verdict.pass !== "boolean" || typeof verdict.rationale !== "string") {
82
- throw new Error("layer3 judge: malformed verdict: " + JSON.stringify(verdict));
83
- }
84
- return verdict;
96
+ const response = await client.beta.messages.create(buildJudgeRequest(model, imageBase64, spec, criterion));
97
+ trace("judge", `layer3 ${criterion.id}: ${usageLine(response, model)}`);
98
+ return parseVerdict(response);
85
99
  }
86
100
  async function runStubLayer3(input) {
87
101
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"layer3.js","sourceRoot":"","sources":["../../src/validation/layer3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer3.js","sourceRoot":"","sources":["../../src/validation/layer3.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stage2-judge.d.ts","sourceRoot":"","sources":["../../src/validation/stage2-judge.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAChH,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAsB,KAAK,YAAY,EAAsB,MAAM,cAAc,CAAC;AACzF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAsB/D,MAAM,MAAM,iBAAiB,GAAG;IAI9B,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAKpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,CAAC,EAAE,oBAAoB,CAAC;IAC3B,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAMF,eAAO,MAAM,qBAAqB,EAAE,SAAS,eAAe,EAW3D,CAAC;AAEF,wBAAsB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6B3F;AA4GD,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,KAAK,GAAG,SAAS,GAC1B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoD7B"}
1
+ {"version":3,"file":"stage2-judge.d.ts","sourceRoot":"","sources":["../../src/validation/stage2-judge.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAChH,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAsB,KAAK,YAAY,EAAsB,MAAM,cAAc,CAAC;AACzF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAsB/D,MAAM,MAAM,iBAAiB,GAAG;IAI9B,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAKpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,CAAC,EAAE,oBAAoB,CAAC;IAC3B,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAMF,eAAO,MAAM,qBAAqB,EAAE,SAAS,eAAe,EAU3D,CAAC;AAEF,wBAAsB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6B3F;AA4GD,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,KAAK,GAAG,SAAS,GAC1B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoD7B"}
@@ -3,6 +3,7 @@ import { mkdir } from "node:fs/promises";
3
3
  import { setTimeout as sleep } from "node:timers/promises";
4
4
  import { runStage2Scenario, recoverFromErrorScreen } from "./stage2.js";
5
5
  import { runLayer3 } from "./layer3.js";
6
+ import { NO_SUBSTRATE_LEAK_QUESTION } from "./visual-judge.js";
6
7
  import { createMobileClient } from "../mobile.js";
7
8
  // Stage 2 rubric — domain content (because we've now navigated to the
8
9
  // list/detail view past auth) plus a defensive substrate-leak check.
@@ -15,7 +16,7 @@ export const DEFAULT_STAGE2_RUBRIC = [
15
16
  },
16
17
  {
17
18
  id: "no-substrate-leak",
18
- question: "Is the screen free of substrate-original tokens like 'Shop', 'Shopkeeper', 'ItemTag', 'NativeAppTemplate', or 'Number Tag'?",
19
+ question: NO_SUBSTRATE_LEAK_QUESTION,
19
20
  },
20
21
  ];
21
22
  export async function runStage2Visual(input) {
@@ -1 +1 @@
1
- {"version":3,"file":"stage2-judge.js","sourceRoot":"","sources":["../../src/validation/stage2-judge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAA0C,MAAM,aAAa,CAAC;AAChH,OAAO,EAAE,SAAS,EAAwB,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAyC,MAAM,cAAc,CAAC;AAiDzF,sEAAsE;AACtE,qEAAqE;AACrE,uEAAuE;AACvE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,qBAAqB,GAA+B;IAC/D;QACE,EAAE,EAAE,gBAAgB;QACpB,QAAQ,EACN,sTAAsT;KACzT;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,QAAQ,EACN,6HAA6H;KAChI;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAwB;IAC5D,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACvF,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,qBAAqB,CAAC;IAErD,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,GAAG,MAAM,oBAAoB,CAAC;YACtC,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK,CAAC,WAAW;YAC3B,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC;YACzC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM;YACN,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,MAAM,CAAC,OAAO,GAAG,MAAM,oBAAoB,CAAC;YAC1C,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,KAAK,CAAC,eAAe;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;YAC7C,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM;YACN,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9E,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAYD,yEAAyE;AACzE,iEAAiE;AACjE,KAAK,UAAU,oBAAoB,CAAC,IAAgB;IAClD,IAAI,CAAC;QACH,OAAO,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,IAAI,EAAE,KAAK;YACX,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAChC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;YACrC,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAgB;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,kBAAkB,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,8DAA8D;QAC9D,iEAAiE;QACjE,mEAAmE;QACnE,qCAAqC;QACrC,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;gBAChC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;gBACrC,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,EAAE;gBACf,KAAK,EAAE,YAAY;aACpB,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,wEAAwE;QACxE,yEAAyE;QACzE,uEAAuE;QACvE,mDAAmD;QACnD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,sDAAsD;gBAC1E,kEAAkE;gBAClE,0EAA0E;gBAC1E,IAAI,MAAM,sBAAsB,CAAC,MAAM,CAAC;oBAAE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/D,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;YACvE,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;YACvC,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE1C,8DAA8D;QAC9D,gEAAgE;QAChE,4DAA4D;QAC5D,gEAAgE;QAChE,6CAA6C;QAC7C,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QAC9E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;YAC7B,cAAc,EAAE,cAAc;YAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,UAAU;YACb,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI;YAChC,wBAAwB,EAAE,cAAc;YACxC,YAAY,EAAE,MAAM,CAAC,MAAM;SAC5B,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,UAAU;YAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,gEAAgE;AAChE,gEAAgE;AAChE,oEAAoE;AACpE,mEAAmE;AACnE,qEAAqE;AACrE,iDAAiD;AACjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAoB,EACpB,QAA2B;IAE3B,MAAM,WAAW,GACf,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,yCAAyC,CAAC;IACzG,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE1C,IAAI,OAAiC,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,0EAA0E;QAC1E,2DAA2D;QAC3D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9F,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,oEAAoE;QACpE,yEAAyE;QACzE,2EAA2E;QAC3E,mEAAmE;QACnE,qEAAqE;QACrE,mEAAmE;QACnE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClE,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACrB,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,OAAO,GAAG,WAAW,KAAK,QAAQ,oCAAoC,IAAI,0CAA0C,CAAC;IACvH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,6CAA6C,QAAQ,sBAAsB,CAAC;IACrF,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,OAAO,yCAAyC,QAAQ,UAAU,KAAK,oBAAoB,WAAW,uBAAuB,CAAC;IAChI,CAAC;IACD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,iEAAiE,CAAC;IAC3E,CAAC;IACD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,2EAA2E;AAC3E,0EAA0E;AAC1E,oCAAoC;AACpC,SAAS,mBAAmB,CAAC,CAAgB,EAAE,MAAc;IAC3D,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAU,EAAE,CAAC;QAC1E,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,CAAgB;IACpC,mEAAmE;IACnE,iEAAiE;IACjE,oEAAoE;IACpE,4DAA4D;IAC5D,0DAA0D;IAC1D,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAU,EAAE,CAAC;QAC1E,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,CAAgB,EAAE,QAA2B;IAC1E,0CAA0C;IAC1C,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAU,EAAE,CAAC;QACtD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;IAC/E,CAAC;IACD,mCAAmC;IACnC,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,OAAO,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,YAAY,CAAC,QAAsB;IAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAC9D,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;IAC9D,MAAM,MAAM,GAAyB;QACnC,IAAI,EAAE,QAAQ,CAAC,EAAE;QACjB,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;QAChC,WAAW;QACX,WAAW,EAAE,QAAQ,CAAC,WAAW;KAClC,CAAC;IACF,IAAI,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC;IAC5D,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"stage2-judge.js","sourceRoot":"","sources":["../../src/validation/stage2-judge.ts"],"names":[],"mappings":"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"}
@@ -58,5 +58,6 @@ export declare function judgeWithRetry(deps: JudgeRetryDeps, opts: {
58
58
  layer3?: Layer3Result;
59
59
  error?: string;
60
60
  }>;
61
+ export declare const NO_SUBSTRATE_LEAK_QUESTION = "Is the app's own content free of substrate-original tokens like 'Shop', 'Shopkeeper', 'ItemTag', 'NativeAppTemplate', or 'Number Tag'? Judge only what the app draws. Ignore the operating system's UI around it: the status bar (clock, signal, battery, and the iOS '\u25C0 <app name>' link back to a previously open app), notification icons, and the home indicator.";
61
62
  export declare const DEFAULT_STAGE1_RUBRIC: readonly Layer3Criterion[];
62
63
  //# sourceMappingURL=visual-judge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"visual-judge.d.ts","sourceRoot":"","sources":["../../src/validation/visual-judge.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,eAAe,CAAC;IAE1B,YAAY,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAGnC,YAAY,CAAC,EAAE,MAAM,CAAC;IAItB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAsBF,wBAAsB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmFxF;AAKD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB5D;AAMD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAInE;AAOD,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,KAAK,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAInC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B,CAAC;AAEF,wBAAsB,cAAc,CAClC,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+BjE;AAeD,eAAO,MAAM,qBAAqB,EAAE,SAAS,eAAe,EAW3D,CAAC"}
1
+ {"version":3,"file":"visual-judge.d.ts","sourceRoot":"","sources":["../../src/validation/visual-judge.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,eAAe,CAAC;IAE1B,YAAY,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAGnC,YAAY,CAAC,EAAE,MAAM,CAAC;IAItB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAsBF,wBAAsB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmFxF;AAKD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB5D;AAMD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAInE;AAOD,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,KAAK,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAInC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B,CAAC;AAEF,wBAAsB,cAAc,CAClC,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+BjE;AAoBD,eAAO,MAAM,0BAA0B,+WACkU,CAAC;AAE1W,eAAO,MAAM,qBAAqB,EAAE,SAAS,eAAe,EAU3D,CAAC"}
@@ -15,7 +15,7 @@ const RETRYABLE_CRITERIA = new Set(["renders-cleanly"]);
15
15
  // 1. install + launch the built app on the booted sim/emulator
16
16
  // 2. wait for render
17
17
  // 3. capture the home screen as PNG
18
- // 4. send PNG + rubric to the Opus 4.7 vision judge (median-of-3 per criterion)
18
+ // 4. send PNG + rubric to the Opus 5.5 vision judge (median-of-3 per criterion)
19
19
  //
20
20
  // Fail-fast: any step's failure short-circuits and surfaces in the result.
21
21
  // Caller is responsible for: building the artifact (Layer 2 build mode),
@@ -174,10 +174,16 @@ export async function judgeWithRetry(deps, opts) {
174
174
  // judging. Adding a domain-match criterion here would false-fail any
175
175
  // substrate that ships with onboarding-before-domain-UI — which is the
176
176
  // substrate's intentional design.
177
+ // The leak check judges the generated app's own pixels only. The OS draws
178
+ // its own UI over the app: the iOS status bar shows a "◀ <previous app>"
179
+ // back link when the app was opened from another app (on a shared simulator
180
+ // that is often the substrate itself), and Android can show notification
181
+ // icons. Those are not the app's text, so the judge must not fail on them.
182
+ export const NO_SUBSTRATE_LEAK_QUESTION = "Is the app's own content free of substrate-original tokens like 'Shop', 'Shopkeeper', 'ItemTag', 'NativeAppTemplate', or 'Number Tag'? Judge only what the app draws. Ignore the operating system's UI around it: the status bar (clock, signal, battery, and the iOS '◀ <app name>' link back to a previously open app), notification icons, and the home indicator.";
177
183
  export const DEFAULT_STAGE1_RUBRIC = [
178
184
  {
179
185
  id: "no-substrate-leak",
180
- question: "Is the screen free of substrate-original tokens like 'Shop', 'Shopkeeper', 'ItemTag', 'NativeAppTemplate', or 'Number Tag'?",
186
+ question: NO_SUBSTRATE_LEAK_QUESTION,
181
187
  },
182
188
  {
183
189
  id: "renders-cleanly",
@@ -1 +1 @@
1
- {"version":3,"file":"visual-judge.js","sourceRoot":"","sources":["../../src/validation/visual-judge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"visual-judge.js","sourceRoot":"","sources":["../../src/validation/visual-judge.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nativeapptemplate-agent",
3
- "version": "0.2.4",
3
+ "version": "0.3.1",
4
4
  "description": "A Claude Code agent that turns a natural-language SaaS spec into a working three-platform implementation (Rails API + SwiftUI iOS + Jetpack Compose Android).",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -64,8 +64,8 @@
64
64
  "typescript": "^6.0.3"
65
65
  },
66
66
  "dependencies": {
67
- "@anthropic-ai/claude-agent-sdk": "^0.2.114",
68
- "@anthropic-ai/sdk": "^0.90.0",
67
+ "@anthropic-ai/claude-agent-sdk": "^0.3.286",
68
+ "@anthropic-ai/sdk": "^0.131.0",
69
69
  "@modelcontextprotocol/sdk": "^1.29.0",
70
70
  "yaml": "^2.8.4",
71
71
  "zod": "^4.3.6"