nativeapptemplate-agent 0.1.0
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/CLAUDE.md +137 -0
- package/LICENSE +21 -0
- package/README.md +192 -0
- package/dist/adb.d.ts +2 -0
- package/dist/adb.d.ts.map +1 -0
- package/dist/adb.js +31 -0
- package/dist/adb.js.map +1 -0
- package/dist/agents/contract-extract.d.ts +26 -0
- package/dist/agents/contract-extract.d.ts.map +1 -0
- package/dist/agents/contract-extract.js +205 -0
- package/dist/agents/contract-extract.js.map +1 -0
- package/dist/agents/judge.d.ts +21 -0
- package/dist/agents/judge.d.ts.map +1 -0
- package/dist/agents/judge.js +119 -0
- package/dist/agents/judge.js.map +1 -0
- package/dist/agents/planner.d.ts +3 -0
- package/dist/agents/planner.d.ts.map +1 -0
- package/dist/agents/planner.js +154 -0
- package/dist/agents/planner.js.map +1 -0
- package/dist/agents/reviewer.d.ts +9 -0
- package/dist/agents/reviewer.d.ts.map +1 -0
- package/dist/agents/reviewer.js +108 -0
- package/dist/agents/reviewer.js.map +1 -0
- package/dist/agents/types.d.ts +54 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/workers/android.d.ts +3 -0
- package/dist/agents/workers/android.d.ts.map +1 -0
- package/dist/agents/workers/android.js +116 -0
- package/dist/agents/workers/android.js.map +1 -0
- package/dist/agents/workers/ios.d.ts +3 -0
- package/dist/agents/workers/ios.d.ts.map +1 -0
- package/dist/agents/workers/ios.js +110 -0
- package/dist/agents/workers/ios.js.map +1 -0
- package/dist/agents/workers/rails.d.ts +3 -0
- package/dist/agents/workers/rails.d.ts.map +1 -0
- package/dist/agents/workers/rails.js +145 -0
- package/dist/agents/workers/rails.js.map +1 -0
- package/dist/dispatch.d.ts +3 -0
- package/dist/dispatch.d.ts.map +1 -0
- package/dist/dispatch.js +38 -0
- package/dist/dispatch.js.map +1 -0
- package/dist/env.d.ts +3 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +48 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/ruby.d.ts +2 -0
- package/dist/ruby.d.ts.map +1 -0
- package/dist/ruby.js +21 -0
- package/dist/ruby.js.map +1 -0
- package/dist/slug.d.ts +3 -0
- package/dist/slug.d.ts.map +1 -0
- package/dist/slug.js +11 -0
- package/dist/slug.js.map +1 -0
- package/dist/stub.d.ts +3 -0
- package/dist/stub.d.ts.map +1 -0
- package/dist/stub.js +6 -0
- package/dist/stub.js.map +1 -0
- package/dist/trace.d.ts +3 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +13 -0
- package/dist/trace.js.map +1 -0
- package/dist/validation/capture.d.ts +15 -0
- package/dist/validation/capture.d.ts.map +1 -0
- package/dist/validation/capture.js +141 -0
- package/dist/validation/capture.js.map +1 -0
- package/dist/validation/discover.d.ts +11 -0
- package/dist/validation/discover.d.ts.map +1 -0
- package/dist/validation/discover.js +113 -0
- package/dist/validation/discover.js.map +1 -0
- package/dist/validation/index.d.ts +17 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +9 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/launch.d.ts +21 -0
- package/dist/validation/launch.d.ts.map +1 -0
- package/dist/validation/launch.js +109 -0
- package/dist/validation/launch.js.map +1 -0
- package/dist/validation/layer1.d.ts +16 -0
- package/dist/validation/layer1.d.ts.map +1 -0
- package/dist/validation/layer1.js +98 -0
- package/dist/validation/layer1.js.map +1 -0
- package/dist/validation/layer2.d.ts +17 -0
- package/dist/validation/layer2.d.ts.map +1 -0
- package/dist/validation/layer2.js +168 -0
- package/dist/validation/layer2.js.map +1 -0
- package/dist/validation/layer3.d.ts +22 -0
- package/dist/validation/layer3.d.ts.map +1 -0
- package/dist/validation/layer3.js +96 -0
- package/dist/validation/layer3.js.map +1 -0
- package/dist/validation/stage1.d.ts +17 -0
- package/dist/validation/stage1.d.ts.map +1 -0
- package/dist/validation/stage1.js +71 -0
- package/dist/validation/stage1.js.map +1 -0
- package/dist/validation/visual-judge.d.ts +25 -0
- package/dist/validation/visual-judge.d.ts.map +1 -0
- package/dist/validation/visual-judge.js +89 -0
- package/dist/validation/visual-judge.js.map +1 -0
- package/package.json +69 -0
- package/scripts/ruby/.gitkeep +0 -0
- package/scripts/ruby/rename.rb +221 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-extract.js","sourceRoot":"","sources":["../../src/agents/contract-extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type Layer2Mode } from "../validation/layer2.js";
|
|
2
|
+
import type { Layer3Criterion } from "../validation/layer3.js";
|
|
3
|
+
import type { DomainSpec, JudgeResult, ReviewerResult, WorkerResult } from "./types.js";
|
|
4
|
+
export type JudgeInput = {
|
|
5
|
+
domain: DomainSpec;
|
|
6
|
+
rails: WorkerResult;
|
|
7
|
+
ios: WorkerResult;
|
|
8
|
+
android: WorkerResult;
|
|
9
|
+
reviewer: ReviewerResult;
|
|
10
|
+
layer2Mode?: Layer2Mode;
|
|
11
|
+
visual?: VisualJudgeConfig;
|
|
12
|
+
};
|
|
13
|
+
export type VisualJudgeConfig = {
|
|
14
|
+
iosDir?: string;
|
|
15
|
+
androidDir?: string;
|
|
16
|
+
screenshotDir?: string;
|
|
17
|
+
rubric?: readonly Layer3Criterion[];
|
|
18
|
+
spec?: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function runJudge(input: JudgeInput): Promise<JudgeResult>;
|
|
21
|
+
//# sourceMappingURL=judge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../src/agents/judge.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAEX,cAAc,EAEd,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,YAAY,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAKF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAWF,wBAAsB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CA2CtE"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { trace } from "../trace.js";
|
|
3
|
+
import { isStub } from "../stub.js";
|
|
4
|
+
import { runLayer1 } from "../validation/layer1.js";
|
|
5
|
+
import { runLayer2 } from "../validation/layer2.js";
|
|
6
|
+
import { runStage1Visual } from "../validation/stage1.js";
|
|
7
|
+
export async function runJudge(input) {
|
|
8
|
+
if (isStub("judge"))
|
|
9
|
+
return runStubJudge();
|
|
10
|
+
const layer2Mode = input.layer2Mode ?? "fast";
|
|
11
|
+
trace("judge", "Layer 1 (structural) — scanning for leftover tokens");
|
|
12
|
+
trace("judge", `Layer 2 (runtime, ${layer2Mode} mode) — validating toolchains load`);
|
|
13
|
+
const reports = await Promise.all([
|
|
14
|
+
evaluate(input.rails, layer2Mode),
|
|
15
|
+
evaluate(input.ios, layer2Mode),
|
|
16
|
+
evaluate(input.android, layer2Mode),
|
|
17
|
+
]);
|
|
18
|
+
for (const r of reports) {
|
|
19
|
+
const l1 = r.layer1Pass ? "PASS" : `FAIL (${r.layer1Findings} leftover tokens)`;
|
|
20
|
+
const l2 = r.layer2Pass ? `PASS (${(r.layer2DurationMs / 1000).toFixed(1)}s)` : "FAIL";
|
|
21
|
+
trace("judge", `${r.platform}: Layer 1 ${l1} · Layer 2 ${l2} [${r.layer2Command}]`);
|
|
22
|
+
}
|
|
23
|
+
let visualReport;
|
|
24
|
+
let layer3Summary = "Layer 3 skipped";
|
|
25
|
+
if (input.visual && (input.visual.iosDir || input.visual.androidDir)) {
|
|
26
|
+
visualReport = await runVisualPhase(input.visual, input.domain);
|
|
27
|
+
layer3Summary = formatLayer3Summary(visualReport);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
trace("judge", "Layer 3 (semantic, Opus 4.7 vision judge) — visual config not provided; skipped");
|
|
31
|
+
}
|
|
32
|
+
const layer1Layer2Pass = reports.every((r) => r.layer1Pass && r.layer2Pass);
|
|
33
|
+
const visualPass = visualReport
|
|
34
|
+
? Object.values(visualReport).every((r) => Boolean(r) && r.pass)
|
|
35
|
+
: true;
|
|
36
|
+
const reviewerPass = input.reviewer.contractParity === "pass";
|
|
37
|
+
const overallPass = layer1Layer2Pass && visualPass && reviewerPass;
|
|
38
|
+
const l1Total = reports.filter((r) => r.layer1Pass).length;
|
|
39
|
+
const l2Total = reports.filter((r) => r.layer2Pass).length;
|
|
40
|
+
const reviewerSummary = reviewerPass ? "reviewer PASS" : "reviewer FAIL";
|
|
41
|
+
return {
|
|
42
|
+
overallPass,
|
|
43
|
+
summary: `Layer 1 ${l1Total}/3 pass · Layer 2 ${l2Total}/3 pass · ${layer3Summary} · ${reviewerSummary}`,
|
|
44
|
+
...(visualReport ? { visual: visualReport } : {}),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async function runVisualPhase(config, domain) {
|
|
48
|
+
const platforms = [];
|
|
49
|
+
if (config.iosDir)
|
|
50
|
+
platforms.push("ios");
|
|
51
|
+
if (config.androidDir)
|
|
52
|
+
platforms.push("android");
|
|
53
|
+
const rubric = config.rubric;
|
|
54
|
+
trace("judge", `Layer 3 (semantic) — judging ${platforms.join(" + ")} home screen against rubric`);
|
|
55
|
+
const stage1 = await runStage1Visual({
|
|
56
|
+
...(config.iosDir !== undefined ? { iosDir: config.iosDir } : {}),
|
|
57
|
+
...(config.androidDir !== undefined ? { androidDir: config.androidDir } : {}),
|
|
58
|
+
spec: config.spec ?? domain.displayName,
|
|
59
|
+
...(rubric !== undefined ? { rubric } : {}),
|
|
60
|
+
...(config.screenshotDir !== undefined ? { screenshotDir: config.screenshotDir } : {}),
|
|
61
|
+
});
|
|
62
|
+
const report = {};
|
|
63
|
+
if (stage1.ios) {
|
|
64
|
+
report.ios = toPlatformReport(stage1.ios);
|
|
65
|
+
trace("judge", `Layer 3 ios: ${stage1.ios.ok ? "PASS" : "FAIL"}` + (stage1.ios.error ? ` — ${stage1.ios.error}` : ""));
|
|
66
|
+
}
|
|
67
|
+
if (stage1.android) {
|
|
68
|
+
report.android = toPlatformReport(stage1.android);
|
|
69
|
+
trace("judge", `Layer 3 android: ${stage1.android.ok ? "PASS" : "FAIL"}` + (stage1.android.error ? ` — ${stage1.android.error}` : ""));
|
|
70
|
+
}
|
|
71
|
+
return report;
|
|
72
|
+
}
|
|
73
|
+
function toPlatformReport(result) {
|
|
74
|
+
const report = { pass: result.ok };
|
|
75
|
+
if (result.screenshotPath !== undefined)
|
|
76
|
+
report.screenshotPath = result.screenshotPath;
|
|
77
|
+
if (result.layer3?.scores)
|
|
78
|
+
report.scores = result.layer3.scores;
|
|
79
|
+
if (result.error !== undefined)
|
|
80
|
+
report.error = result.error;
|
|
81
|
+
return report;
|
|
82
|
+
}
|
|
83
|
+
function formatLayer3Summary(report) {
|
|
84
|
+
const platforms = ["ios", "android"].filter((p) => report[p] !== undefined);
|
|
85
|
+
const passing = platforms.filter((p) => report[p]?.pass).length;
|
|
86
|
+
return `Layer 3 ${passing}/${platforms.length} pass`;
|
|
87
|
+
}
|
|
88
|
+
const delay = (ms) => new Promise((r) => { setTimeout(r, ms); });
|
|
89
|
+
async function runStubJudge() {
|
|
90
|
+
trace("judge", "(stub mode)");
|
|
91
|
+
trace("judge", "Layer 1 (structural): ripgrep leftover tokens");
|
|
92
|
+
await delay(200);
|
|
93
|
+
trace("judge", "Layer 1: PASS");
|
|
94
|
+
await delay(100);
|
|
95
|
+
trace("judge", "Layer 2 (runtime): boot Rails, launch iOS, launch Android");
|
|
96
|
+
await delay(400);
|
|
97
|
+
trace("judge", "Layer 2: PASS (scripted CRUD walk)");
|
|
98
|
+
await delay(100);
|
|
99
|
+
trace("judge", "Layer 3 (semantic): Opus 4.7 judge, median of 3 runs");
|
|
100
|
+
await delay(300);
|
|
101
|
+
trace("judge", "Layer 3: PASS (semantic score above threshold)");
|
|
102
|
+
return { overallPass: true, summary: "Layer 1/2/3 PASS" };
|
|
103
|
+
}
|
|
104
|
+
async function evaluate(worker, layer2Mode) {
|
|
105
|
+
const outDir = resolve(process.cwd(), worker.outDir);
|
|
106
|
+
const [layer1, layer2] = await Promise.all([
|
|
107
|
+
runLayer1({ projectDir: outDir, forbiddenTokens: worker.renamedFrom }),
|
|
108
|
+
runLayer2({ platform: worker.platform, outDir, mode: layer2Mode }),
|
|
109
|
+
]);
|
|
110
|
+
return {
|
|
111
|
+
platform: worker.platform,
|
|
112
|
+
layer1Pass: layer1.pass,
|
|
113
|
+
layer1Findings: layer1.findings.length,
|
|
114
|
+
layer2Pass: layer2.pass,
|
|
115
|
+
layer2Command: layer2.command,
|
|
116
|
+
layer2DurationMs: layer2.durationMs,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/agents/judge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/agents/planner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAoG7C,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAqClE"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
2
|
+
import { trace } from "../trace.js";
|
|
3
|
+
import { isStub } from "../stub.js";
|
|
4
|
+
const MODEL = "claude-opus-4-7";
|
|
5
|
+
const MAX_TOKENS = 4096;
|
|
6
|
+
const SYSTEM_PROMPT = `You are a domain modeler for a three-platform SaaS code generator. You receive a one-sentence natural-language specification of a SaaS product and output a structured DomainSpec that drives code generation across Rails 8.1 (API), SwiftUI (iOS), and Jetpack Compose (Android).
|
|
7
|
+
|
|
8
|
+
The substrate you specialize is a walk-in queue management system. Its generic types are:
|
|
9
|
+
- Shop (the primary tenant resource) — renamed to a domain-appropriate noun
|
|
10
|
+
- Shopkeeper (the user/owner) — renamed to match
|
|
11
|
+
- ItemTag (a queue entry with Idled/Completed states) — adapted for queue-like specs, or replaced with a new entity for non-queue specs
|
|
12
|
+
|
|
13
|
+
For queue-like specs (restaurant waitlist, walk-in clinic, barbershop queue), keep ItemTag as an adapted queue entry; rename its states only if the spec requires it.
|
|
14
|
+
For non-queue specs (task tracker, note-taking, inventory), propose replacing ItemTag with a new entity and include that replacement in renamePlan.
|
|
15
|
+
|
|
16
|
+
IMPORTANT — substrate-reserved vocabulary: the substrate's auth/admin layer already uses these tokens as unrelated identifiers, so rename targets MUST NOT collide with them (a lexical rename would produce duplicate-identifier build errors):
|
|
17
|
+
|
|
18
|
+
Owner, Account, Admin, Personal, Role, Permission, User, App, Version,
|
|
19
|
+
Privacy, Terms, Invitation, Error, Scan, Redirect, Notification, Session
|
|
20
|
+
|
|
21
|
+
IMPORTANT — language-stdlib-reserved vocabulary: the generated code must compile in Swift, Kotlin, and Ruby. A rename target that collides with any of these standard-library types silently shadows the stdlib and breaks compilation (e.g. Task.isCancelled no longer resolves if Task is shadowed):
|
|
22
|
+
|
|
23
|
+
Swift — Task, Actor, Result, Error, View, Text, Image, State, Binding,
|
|
24
|
+
Data, Date, URL, UUID, Set, Array, Dictionary, Optional
|
|
25
|
+
Kotlin — Unit, Nothing, Any, List, Map, Set, Flow, Sequence, Result,
|
|
26
|
+
Continuation, Deferred, Context
|
|
27
|
+
Ruby/Rails — Object, Module, Class, Array, Hash, String, Integer, Proc,
|
|
28
|
+
Thread, Request, Response, Session
|
|
29
|
+
|
|
30
|
+
For Shopkeeper, prefer domain-distinctive nouns: Assignee, Maintainer, Host, Vet, Barber, Stylist, Staff, Curator, Editor, Author — NOT Owner / User / Admin.
|
|
31
|
+
For Shop, prefer: Clinic, Restaurant, Workspace, Project, Board, Journal, Space, Studio — NOT Account.
|
|
32
|
+
For ItemTag replacements, prefer: Todo, Ticket, Entry, Card, Issue, Note, Memo, Patient, Reservation — NOT Task (Swift Concurrency) / Actor (Swift Concurrency) / Scan / Notification.
|
|
33
|
+
|
|
34
|
+
Never emit identity rename pairs (from === to). If the target happens to equal the source, pick a different target.
|
|
35
|
+
|
|
36
|
+
slug must be kebab-case and filesystem-safe. Keep entities tight (2-4 per spec). Keep jsonApiContract minimal — a later reviewer sub-agent expands it.`;
|
|
37
|
+
const DOMAIN_TOOL = {
|
|
38
|
+
name: "submit_domain_spec",
|
|
39
|
+
description: "Submit the parsed DomainSpec for downstream code generation.",
|
|
40
|
+
input_schema: {
|
|
41
|
+
type: "object",
|
|
42
|
+
properties: {
|
|
43
|
+
slug: {
|
|
44
|
+
type: "string",
|
|
45
|
+
pattern: "^[a-z0-9][a-z0-9-]*$",
|
|
46
|
+
description: "kebab-case filesystem slug, e.g. 'clinic-queue'",
|
|
47
|
+
},
|
|
48
|
+
displayName: {
|
|
49
|
+
type: "string",
|
|
50
|
+
description: "Human-readable name, e.g. 'Clinic Queue'",
|
|
51
|
+
},
|
|
52
|
+
entities: {
|
|
53
|
+
type: "array",
|
|
54
|
+
items: {
|
|
55
|
+
type: "object",
|
|
56
|
+
properties: {
|
|
57
|
+
name: { type: "string", description: "Entity name in PascalCase" },
|
|
58
|
+
replaces: { type: "string", description: "Which substrate type this replaces: Shop, Shopkeeper, or ItemTag" },
|
|
59
|
+
fields: {
|
|
60
|
+
type: "array",
|
|
61
|
+
items: {
|
|
62
|
+
type: "object",
|
|
63
|
+
properties: {
|
|
64
|
+
name: { type: "string" },
|
|
65
|
+
type: { type: "string", enum: ["string", "integer", "boolean", "datetime", "reference"] },
|
|
66
|
+
references: { type: "string", description: "If type=reference, the target entity name" },
|
|
67
|
+
},
|
|
68
|
+
required: ["name", "type"],
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
states: {
|
|
72
|
+
type: "array",
|
|
73
|
+
items: { type: "string" },
|
|
74
|
+
description: "Optional state-machine states for this entity",
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
required: ["name", "replaces", "fields"],
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
renamePlan: {
|
|
81
|
+
type: "array",
|
|
82
|
+
items: {
|
|
83
|
+
type: "object",
|
|
84
|
+
properties: {
|
|
85
|
+
from: { type: "string", description: "Substrate token, e.g. 'Shop'" },
|
|
86
|
+
to: { type: "string", description: "Replacement token, e.g. 'Clinic'" },
|
|
87
|
+
},
|
|
88
|
+
required: ["from", "to"],
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
jsonApiContract: {
|
|
92
|
+
type: "object",
|
|
93
|
+
description: "Placeholder JSON:API contract object; can be empty {} for now",
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
required: ["slug", "displayName", "entities", "renamePlan", "jsonApiContract"],
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
export async function runPlanner(spec) {
|
|
100
|
+
trace("planner", `received spec: "${spec}"`);
|
|
101
|
+
if (isStub("planner")) {
|
|
102
|
+
return runStubPlanner(spec);
|
|
103
|
+
}
|
|
104
|
+
// Prefer a dedicated workspace key when set so the agent's spend, rate
|
|
105
|
+
// limits, and revocability are isolated from the user's other Anthropic
|
|
106
|
+
// SDK / Claude Code usage. Falls back to ANTHROPIC_API_KEY for the
|
|
107
|
+
// single-key default path.
|
|
108
|
+
const apiKey = process.env['NATIVEAPPTEMPLATE_AGENT_ANTHROPIC_KEY'] ?? process.env['ANTHROPIC_API_KEY'];
|
|
109
|
+
const client = new Anthropic({ apiKey });
|
|
110
|
+
trace("planner", `calling ${MODEL} to extract domain`);
|
|
111
|
+
const response = await client.messages.create({
|
|
112
|
+
model: MODEL,
|
|
113
|
+
max_tokens: MAX_TOKENS,
|
|
114
|
+
system: SYSTEM_PROMPT,
|
|
115
|
+
tools: [DOMAIN_TOOL],
|
|
116
|
+
tool_choice: { type: "tool", name: "submit_domain_spec" },
|
|
117
|
+
messages: [{ role: "user", content: spec }],
|
|
118
|
+
});
|
|
119
|
+
const toolUse = response.content.find((c) => c.type === "tool_use");
|
|
120
|
+
if (!toolUse || toolUse.type !== "tool_use") {
|
|
121
|
+
throw new Error("planner: expected tool_use in response, got: " + JSON.stringify(response.content));
|
|
122
|
+
}
|
|
123
|
+
const domain = toolUse.input;
|
|
124
|
+
trace("planner", `derived slug: ${domain.slug}`);
|
|
125
|
+
trace("planner", `rename plan: ${domain.renamePlan.map((r) => `${r.from}->${r.to}`).join(", ")}`);
|
|
126
|
+
trace("planner", `entities: ${domain.entities.map((e) => e.name).join(", ")}`);
|
|
127
|
+
trace("planner", `usage: ${response.usage.input_tokens} in / ${response.usage.output_tokens} out`);
|
|
128
|
+
trace("planner", "done");
|
|
129
|
+
return domain;
|
|
130
|
+
}
|
|
131
|
+
const delay = (ms) => new Promise((r) => { setTimeout(r, ms); });
|
|
132
|
+
async function runStubPlanner(spec) {
|
|
133
|
+
trace("planner", "(stub mode — NATIVEAPPTEMPLATE_STUB_ALL or NATIVEAPPTEMPLATE_STUB_PLANNER set)");
|
|
134
|
+
await delay(200);
|
|
135
|
+
trace("planner", "extracting entities and fields");
|
|
136
|
+
await delay(250);
|
|
137
|
+
trace("planner", "choosing rename plan: Shop -> Clinic, Shopkeeper -> Vet");
|
|
138
|
+
await delay(200);
|
|
139
|
+
trace("planner", "freezing JSON:API contract");
|
|
140
|
+
await delay(150);
|
|
141
|
+
trace("planner", "done");
|
|
142
|
+
void spec;
|
|
143
|
+
return {
|
|
144
|
+
slug: "clinic-queue",
|
|
145
|
+
displayName: "Clinic Queue",
|
|
146
|
+
entities: [],
|
|
147
|
+
renamePlan: [
|
|
148
|
+
{ from: "Shop", to: "Clinic" },
|
|
149
|
+
{ from: "Shopkeeper", to: "Vet" },
|
|
150
|
+
],
|
|
151
|
+
jsonApiContract: {},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/agents/planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DomainSpec, ReviewerResult, WorkerResult } from "./types.js";
|
|
2
|
+
export type ReviewerInput = {
|
|
3
|
+
domain: DomainSpec;
|
|
4
|
+
rails: WorkerResult;
|
|
5
|
+
ios: WorkerResult;
|
|
6
|
+
android: WorkerResult;
|
|
7
|
+
};
|
|
8
|
+
export declare function runReviewer(input: ReviewerInput): Promise<ReviewerResult>;
|
|
9
|
+
//# sourceMappingURL=reviewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,YAAY,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AAeF,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAgE/E"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { trace } from "../trace.js";
|
|
3
|
+
import { isStub } from "../stub.js";
|
|
4
|
+
import { extractRailsContract, extractAndroidEndpoints, extractIosEndpoints, diffContracts, } from "./contract-extract.js";
|
|
5
|
+
// Phase 3: extract from all three platforms (Rails OpenAPI, iOS Request
|
|
6
|
+
// structs, Android Retrofit interfaces), canonicalize their path encodings
|
|
7
|
+
// (strip tenant {account_id}, /api/v<N>, role segment, normalize path-param
|
|
8
|
+
// names), then diff.
|
|
9
|
+
//
|
|
10
|
+
// Pass/fail policy:
|
|
11
|
+
// - PASS if every iOS and Android endpoint maps to a Rails endpoint AND
|
|
12
|
+
// the two mobile clients implement the same set.
|
|
13
|
+
// - FAIL if any mobile-orphan exists (client calls something Rails
|
|
14
|
+
// doesn't expose — runtime 404), or if iOS and Android implement
|
|
15
|
+
// different subsets ("mobile clients must agree" per project USP).
|
|
16
|
+
// - rails-only endpoints are informational (admin / server-only routes
|
|
17
|
+
// that aren't supposed to be called from mobile).
|
|
18
|
+
export async function runReviewer(input) {
|
|
19
|
+
if (isStub("reviewer"))
|
|
20
|
+
return runStubReviewer(input);
|
|
21
|
+
const { domain, rails, ios, android } = input;
|
|
22
|
+
const railsDir = resolve(process.cwd(), rails.outDir);
|
|
23
|
+
const iosDir = resolve(process.cwd(), ios.outDir);
|
|
24
|
+
const androidDir = resolve(process.cwd(), android.outDir);
|
|
25
|
+
trace("reviewer", `extracting Rails OpenAPI from ${rails.outDir}`);
|
|
26
|
+
const railsContract = await extractRailsContract(railsDir);
|
|
27
|
+
if (!railsContract) {
|
|
28
|
+
trace("reviewer", `${domain.displayName}: contract parity FAIL — Rails OpenAPI unreadable`);
|
|
29
|
+
return {
|
|
30
|
+
contractParity: "fail",
|
|
31
|
+
diffs: ["rails: OpenAPI spec missing or did not parse as OpenAPI 3.x"],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
trace("reviewer", `Rails: ${railsContract.endpoints.length} endpoints, ${railsContract.schemaCount} schemas, openapi=${railsContract.openapiVersion}, title="${railsContract.title}"`);
|
|
35
|
+
const iosEndpoints = await extractIosEndpoints(iosDir);
|
|
36
|
+
const androidEndpoints = await extractAndroidEndpoints(androidDir);
|
|
37
|
+
trace("reviewer", `iOS: ${iosEndpoints.length} request endpoints`);
|
|
38
|
+
trace("reviewer", `Android: ${androidEndpoints.length} Retrofit endpoints`);
|
|
39
|
+
const role = deriveRole(domain);
|
|
40
|
+
const diff = diffContracts(railsContract.endpoints, iosEndpoints, androidEndpoints, { role });
|
|
41
|
+
const summary = formatDiffSummary(diff);
|
|
42
|
+
for (const line of summary)
|
|
43
|
+
trace("reviewer", line);
|
|
44
|
+
const fatalCount = diff.iosOrphan.length + diff.androidOrphan.length + diff.iosOnly.length + diff.androidOnly.length;
|
|
45
|
+
const baseDiffs = [
|
|
46
|
+
`rails:openapi=${railsContract.openapiVersion}`,
|
|
47
|
+
`rails:title=${railsContract.title}`,
|
|
48
|
+
`rails:endpoints=${railsContract.endpoints.length}`,
|
|
49
|
+
`rails:schemas=${railsContract.schemaCount}`,
|
|
50
|
+
`ios:endpoints=${iosEndpoints.length}`,
|
|
51
|
+
`android:endpoints=${androidEndpoints.length}`,
|
|
52
|
+
`role=${role}`,
|
|
53
|
+
`rails-only=${diff.railsOnly.length}`,
|
|
54
|
+
`ios-orphan=${diff.iosOrphan.length}`,
|
|
55
|
+
`android-orphan=${diff.androidOrphan.length}`,
|
|
56
|
+
`ios-only=${diff.iosOnly.length}`,
|
|
57
|
+
`android-only=${diff.androidOnly.length}`,
|
|
58
|
+
];
|
|
59
|
+
const findings = [
|
|
60
|
+
...formatFindings("ios-orphan", diff.iosOrphan),
|
|
61
|
+
...formatFindings("android-orphan", diff.androidOrphan),
|
|
62
|
+
...formatFindings("ios-only", diff.iosOnly),
|
|
63
|
+
...formatFindings("android-only", diff.androidOnly),
|
|
64
|
+
];
|
|
65
|
+
if (fatalCount > 0) {
|
|
66
|
+
trace("reviewer", `${domain.displayName}: contract parity FAIL — ${fatalCount} drift(s)`);
|
|
67
|
+
return { contractParity: "fail", diffs: [...baseDiffs, ...findings] };
|
|
68
|
+
}
|
|
69
|
+
trace("reviewer", `${domain.displayName}: contract parity PASS`);
|
|
70
|
+
return { contractParity: "pass", diffs: [...baseDiffs, ...findings] };
|
|
71
|
+
}
|
|
72
|
+
function deriveRole(domain) {
|
|
73
|
+
const pair = domain.renamePlan.find((p) => p.from === "Shopkeeper");
|
|
74
|
+
return (pair?.to ?? "Shopkeeper").toLowerCase();
|
|
75
|
+
}
|
|
76
|
+
function formatDiffSummary(diff) {
|
|
77
|
+
const lines = [];
|
|
78
|
+
lines.push(`diff: rails-only=${diff.railsOnly.length}, ios-orphan=${diff.iosOrphan.length}, android-orphan=${diff.androidOrphan.length}, ios-only=${diff.iosOnly.length}, android-only=${diff.androidOnly.length}`);
|
|
79
|
+
if (diff.iosOrphan.length > 0)
|
|
80
|
+
lines.push(`iOS calls endpoints not in Rails: ${preview(diff.iosOrphan)}`);
|
|
81
|
+
if (diff.androidOrphan.length > 0)
|
|
82
|
+
lines.push(`Android calls endpoints not in Rails: ${preview(diff.androidOrphan)}`);
|
|
83
|
+
if (diff.iosOnly.length > 0)
|
|
84
|
+
lines.push(`iOS-only (Android missing): ${preview(diff.iosOnly)}`);
|
|
85
|
+
if (diff.androidOnly.length > 0)
|
|
86
|
+
lines.push(`Android-only (iOS missing): ${preview(diff.androidOnly)}`);
|
|
87
|
+
return lines;
|
|
88
|
+
}
|
|
89
|
+
function formatFindings(label, endpoints) {
|
|
90
|
+
return endpoints.map((e) => `${label}:${e.method} ${e.path}`);
|
|
91
|
+
}
|
|
92
|
+
function preview(endpoints, max = 3) {
|
|
93
|
+
const sample = endpoints.slice(0, max).map((e) => `${e.method} ${e.path}`).join(", ");
|
|
94
|
+
return endpoints.length > max ? `${sample}, ... (+${endpoints.length - max} more)` : sample;
|
|
95
|
+
}
|
|
96
|
+
const delay = (ms) => new Promise((r) => { setTimeout(r, ms); });
|
|
97
|
+
async function runStubReviewer(input) {
|
|
98
|
+
trace("reviewer", "(stub mode)");
|
|
99
|
+
trace("reviewer", `extracting OpenAPI from ${input.rails.outDir}`);
|
|
100
|
+
await delay(200);
|
|
101
|
+
trace("reviewer", "diffing iOS networking layer against contract");
|
|
102
|
+
await delay(200);
|
|
103
|
+
trace("reviewer", "diffing Android repository layer against contract");
|
|
104
|
+
await delay(200);
|
|
105
|
+
trace("reviewer", `${input.domain.displayName}: contract parity PASS (stub)`);
|
|
106
|
+
return { contractParity: "pass", diffs: [] };
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=reviewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,GAGd,MAAM,uBAAuB,CAAC;AAU/B,wEAAwE;AACxE,2EAA2E;AAC3E,4EAA4E;AAC5E,qBAAqB;AACrB,EAAE;AACF,oBAAoB;AACpB,2EAA2E;AAC3E,2DAA2D;AAC3D,sEAAsE;AACtE,2EAA2E;AAC3E,6EAA6E;AAC7E,yEAAyE;AACzE,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAoB;IACpD,IAAI,MAAM,CAAC,UAAU,CAAC;QAAE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAEtD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1D,KAAK,CAAC,UAAU,EAAE,iCAAiC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,KAAK,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,WAAW,mDAAmD,CAAC,CAAC;QAC5F,OAAO;YACL,cAAc,EAAE,MAAM;YACtB,KAAK,EAAE,CAAC,6DAA6D,CAAC;SACvE,CAAC;IACJ,CAAC;IACD,KAAK,CACH,UAAU,EACV,UAAU,aAAa,CAAC,SAAS,CAAC,MAAM,eAAe,aAAa,CAAC,WAAW,qBAAqB,aAAa,CAAC,cAAc,YAAY,aAAa,CAAC,KAAK,GAAG,CACpK,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,MAAM,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACnE,KAAK,CAAC,UAAU,EAAE,QAAQ,YAAY,CAAC,MAAM,oBAAoB,CAAC,CAAC;IACnE,KAAK,CAAC,UAAU,EAAE,YAAY,gBAAgB,CAAC,MAAM,qBAAqB,CAAC,CAAC;IAE5E,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9F,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,OAAO;QAAE,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAEpD,MAAM,UAAU,GACd,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IAEpG,MAAM,SAAS,GAAa;QAC1B,iBAAiB,aAAa,CAAC,cAAc,EAAE;QAC/C,eAAe,aAAa,CAAC,KAAK,EAAE;QACpC,mBAAmB,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE;QACnD,iBAAiB,aAAa,CAAC,WAAW,EAAE;QAC5C,iBAAiB,YAAY,CAAC,MAAM,EAAE;QACtC,qBAAqB,gBAAgB,CAAC,MAAM,EAAE;QAC9C,QAAQ,IAAI,EAAE;QACd,cAAc,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;QACrC,cAAc,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;QACrC,kBAAkB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;QAC7C,YAAY,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACjC,gBAAgB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;KAC1C,CAAC;IACF,MAAM,QAAQ,GAAa;QACzB,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;QAC/C,GAAG,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC;QACvD,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC;QAC3C,GAAG,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC;KACpD,CAAC;IAEF,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,KAAK,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,WAAW,4BAA4B,UAAU,WAAW,CAAC,CAAC;QAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,WAAW,wBAAwB,CAAC,CAAC;IACjE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,UAAU,CAAC,MAAkB;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAkB;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CACR,oBAAoB,IAAI,CAAC,SAAS,CAAC,MAAM,gBAAgB,IAAI,CAAC,SAAS,CAAC,MAAM,oBAAoB,IAAI,CAAC,aAAa,CAAC,MAAM,cAAc,IAAI,CAAC,OAAO,CAAC,MAAM,kBAAkB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CACxM,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,qCAAqC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC1G,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,yCAAyC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtH,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,SAA8B;IACnE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,OAAO,CAAC,SAA8B,EAAE,MAAc,CAAC;IAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtF,OAAO,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,SAAS,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9F,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExF,KAAK,UAAU,eAAe,CAAC,KAAoB;IACjD,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACjC,KAAK,CAAC,UAAU,EAAE,2BAA2B,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,KAAK,CAAC,UAAU,EAAE,+CAA+C,CAAC,CAAC;IACnE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,KAAK,CAAC,UAAU,EAAE,mDAAmD,CAAC,CAAC;IACvE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,KAAK,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,+BAA+B,CAAC,CAAC;IAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export type DomainSpec = {
|
|
2
|
+
slug: string;
|
|
3
|
+
displayName: string;
|
|
4
|
+
entities: readonly Entity[];
|
|
5
|
+
renamePlan: readonly RenamePair[];
|
|
6
|
+
jsonApiContract: unknown;
|
|
7
|
+
};
|
|
8
|
+
export type Entity = {
|
|
9
|
+
name: string;
|
|
10
|
+
replaces: string;
|
|
11
|
+
fields: readonly Field[];
|
|
12
|
+
states?: readonly string[];
|
|
13
|
+
};
|
|
14
|
+
export type Field = {
|
|
15
|
+
name: string;
|
|
16
|
+
type: "string" | "integer" | "boolean" | "datetime" | "reference";
|
|
17
|
+
references?: string;
|
|
18
|
+
};
|
|
19
|
+
export type RenamePair = {
|
|
20
|
+
from: string;
|
|
21
|
+
to: string;
|
|
22
|
+
};
|
|
23
|
+
export type Platform = "rails" | "ios" | "android";
|
|
24
|
+
export type AgentName = "planner" | Platform | "reviewer" | "judge";
|
|
25
|
+
export type WorkerResult = {
|
|
26
|
+
platform: Platform;
|
|
27
|
+
outDir: string;
|
|
28
|
+
filesTouched: number;
|
|
29
|
+
renamedFrom: readonly string[];
|
|
30
|
+
};
|
|
31
|
+
export type ReviewerResult = {
|
|
32
|
+
contractParity: "pass" | "fail";
|
|
33
|
+
diffs: readonly string[];
|
|
34
|
+
};
|
|
35
|
+
export type JudgeResult = {
|
|
36
|
+
overallPass: boolean;
|
|
37
|
+
summary: string;
|
|
38
|
+
visual?: VisualJudgeReport;
|
|
39
|
+
};
|
|
40
|
+
export type VisualJudgeReport = {
|
|
41
|
+
ios?: VisualJudgePlatformReport;
|
|
42
|
+
android?: VisualJudgePlatformReport;
|
|
43
|
+
};
|
|
44
|
+
export type VisualJudgePlatformReport = {
|
|
45
|
+
pass: boolean;
|
|
46
|
+
screenshotPath?: string;
|
|
47
|
+
scores?: readonly {
|
|
48
|
+
criterionId: string;
|
|
49
|
+
pass: boolean;
|
|
50
|
+
rationale: string;
|
|
51
|
+
}[];
|
|
52
|
+
error?: string;
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,SAAS,UAAU,EAAE,CAAC;IAClC,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;AAEnD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEpE,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,CAAC,EAAE,yBAAyB,CAAC;IAChC,OAAO,CAAC,EAAE,yBAAyB,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../../src/agents/workers/android.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAoBxE,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAwChF"}
|