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.
- package/AGENTS.md +6 -4
- package/README.md +40 -10
- package/dist/agents/judge.d.ts.map +1 -1
- package/dist/agents/judge.js +3 -2
- package/dist/agents/judge.js.map +1 -1
- package/dist/agents/planner.d.ts +93 -0
- package/dist/agents/planner.d.ts.map +1 -1
- package/dist/agents/planner.js +110 -80
- package/dist/agents/planner.js.map +1 -1
- package/dist/agents/repair.d.ts +2 -0
- package/dist/agents/repair.d.ts.map +1 -1
- package/dist/agents/repair.js +25 -16
- package/dist/agents/repair.js.map +1 -1
- package/dist/agents/types.d.ts +1 -0
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/workers/android.d.ts +2 -0
- package/dist/agents/workers/android.d.ts.map +1 -1
- package/dist/agents/workers/android.js +10 -6
- package/dist/agents/workers/android.js.map +1 -1
- package/dist/agents/workers/copy.d.ts +3 -0
- package/dist/agents/workers/copy.d.ts.map +1 -1
- package/dist/agents/workers/copy.js +46 -0
- package/dist/agents/workers/copy.js.map +1 -1
- package/dist/agents/workers/ios.d.ts +2 -0
- package/dist/agents/workers/ios.d.ts.map +1 -1
- package/dist/agents/workers/ios.js +22 -8
- package/dist/agents/workers/ios.js.map +1 -1
- package/dist/agents/workers/rails.d.ts +4 -1
- package/dist/agents/workers/rails.d.ts.map +1 -1
- package/dist/agents/workers/rails.js +18 -7
- package/dist/agents/workers/rails.js.map +1 -1
- package/dist/dispatch.d.ts +4 -0
- package/dist/dispatch.d.ts.map +1 -1
- package/dist/dispatch.js +23 -3
- package/dist/dispatch.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -9
- package/dist/index.js.map +1 -1
- package/dist/japanese-nouns.d.ts +5 -0
- package/dist/japanese-nouns.d.ts.map +1 -0
- package/dist/japanese-nouns.js +18 -0
- package/dist/japanese-nouns.js.map +1 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +7 -2
- package/dist/mcp.js.map +1 -1
- package/dist/models.d.ts +11 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +27 -0
- package/dist/models.js.map +1 -0
- package/dist/rename-overrides.d.ts +12 -0
- package/dist/rename-overrides.d.ts.map +1 -1
- package/dist/rename-overrides.js +49 -1
- package/dist/rename-overrides.js.map +1 -1
- package/dist/report/render.js +1 -1
- package/dist/report/render.js.map +1 -1
- package/dist/reserved-words.d.ts +13 -0
- package/dist/reserved-words.d.ts.map +1 -0
- package/dist/reserved-words.js +72 -0
- package/dist/reserved-words.js.map +1 -0
- package/dist/slug.js +1 -1
- package/dist/slug.js.map +1 -1
- package/dist/structured-output.d.ts +6 -0
- package/dist/structured-output.d.ts.map +1 -0
- package/dist/structured-output.js +32 -0
- package/dist/structured-output.js.map +1 -0
- package/dist/validation/layer1.d.ts.map +1 -1
- package/dist/validation/layer1.js +13 -1
- package/dist/validation/layer1.js.map +1 -1
- package/dist/validation/layer3.d.ts +21 -0
- package/dist/validation/layer3.d.ts.map +1 -1
- package/dist/validation/layer3.js +65 -51
- package/dist/validation/layer3.js.map +1 -1
- package/dist/validation/stage2-judge.d.ts.map +1 -1
- package/dist/validation/stage2-judge.js +2 -1
- package/dist/validation/stage2-judge.js.map +1 -1
- package/dist/validation/visual-judge.d.ts +1 -0
- package/dist/validation/visual-judge.d.ts.map +1 -1
- package/dist/validation/visual-judge.js +8 -2
- package/dist/validation/visual-judge.js.map +1 -1
- package/package.json +3 -3
- 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
|
-
//
|
|
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,
|
|
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;
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAmBnE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK;IAC1E,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;IAC/E,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU;
|
|
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":"
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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 ??
|
|
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
|
-
|
|
55
|
-
|
|
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":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
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;
|
|
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:
|
|
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,
|
|
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,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,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,EAAE,0BAA0B;KACrC;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"}
|
|
@@ -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;
|
|
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
|
|
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:
|
|
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.
|
|
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.
|
|
68
|
-
"@anthropic-ai/sdk": "^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"
|