nativeapptemplate-agent 0.3.1 → 0.4.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/AGENTS.md +1 -1
- package/README.md +45 -15
- package/dist/agents/judge.d.ts.map +1 -1
- package/dist/agents/judge.js +8 -2
- package/dist/agents/judge.js.map +1 -1
- package/dist/agents/repair.d.ts +5 -0
- package/dist/agents/repair.d.ts.map +1 -1
- package/dist/agents/repair.js +9 -1
- package/dist/agents/repair.js.map +1 -1
- package/dist/agents/types.d.ts +14 -0
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/workers/android.d.ts.map +1 -1
- package/dist/agents/workers/android.js +27 -3
- package/dist/agents/workers/android.js.map +1 -1
- package/dist/agents/workers/copy.d.ts +1 -0
- package/dist/agents/workers/copy.d.ts.map +1 -1
- package/dist/agents/workers/copy.js +23 -4
- package/dist/agents/workers/copy.js.map +1 -1
- package/dist/agents/workers/ios.d.ts.map +1 -1
- package/dist/agents/workers/ios.js +23 -3
- package/dist/agents/workers/ios.js.map +1 -1
- package/dist/agents/workers/rails.d.ts.map +1 -1
- package/dist/agents/workers/rails.js +6 -1
- package/dist/agents/workers/rails.js.map +1 -1
- package/dist/app-domain.d.ts +32 -0
- package/dist/app-domain.d.ts.map +1 -0
- package/dist/app-domain.js +93 -0
- package/dist/app-domain.js.map +1 -0
- package/dist/dispatch.d.ts +7 -0
- package/dist/dispatch.d.ts.map +1 -1
- package/dist/dispatch.js +61 -10
- package/dist/dispatch.js.map +1 -1
- package/dist/env-bridge.d.ts +1 -0
- package/dist/env-bridge.d.ts.map +1 -1
- package/dist/env-bridge.js +53 -16
- package/dist/env-bridge.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -9
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +5 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +43 -16
- package/dist/mcp.js.map +1 -1
- package/dist/mobile.d.ts +1 -1
- package/dist/mobile.d.ts.map +1 -1
- package/dist/mobile.js +3 -3
- package/dist/mobile.js.map +1 -1
- package/dist/models.d.ts +6 -0
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +11 -0
- package/dist/models.js.map +1 -1
- package/dist/preflight.d.ts +27 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +106 -0
- package/dist/preflight.js.map +1 -0
- package/dist/report/collect.d.ts +5 -0
- package/dist/report/collect.d.ts.map +1 -1
- package/dist/report/collect.js +15 -0
- package/dist/report/collect.js.map +1 -1
- package/dist/report/model.d.ts +14 -0
- package/dist/report/model.d.ts.map +1 -1
- package/dist/report/render.d.ts.map +1 -1
- package/dist/report/render.js +69 -6
- package/dist/report/render.js.map +1 -1
- package/dist/report/theme.d.ts +1 -1
- package/dist/report/theme.d.ts.map +1 -1
- package/dist/report/theme.js +1 -0
- package/dist/report/theme.js.map +1 -1
- package/dist/run-options.d.ts +7 -0
- package/dist/run-options.d.ts.map +1 -0
- package/dist/run-options.js +24 -0
- package/dist/run-options.js.map +1 -0
- package/dist/structured-output.d.ts +7 -0
- package/dist/structured-output.d.ts.map +1 -1
- package/dist/structured-output.js +10 -1
- package/dist/structured-output.js.map +1 -1
- package/dist/validation/autoformat.d.ts +9 -0
- package/dist/validation/autoformat.d.ts.map +1 -0
- package/dist/validation/autoformat.js +131 -0
- package/dist/validation/autoformat.js.map +1 -0
- package/dist/validation/launch.d.ts +23 -2
- package/dist/validation/launch.d.ts.map +1 -1
- package/dist/validation/launch.js +47 -18
- package/dist/validation/launch.js.map +1 -1
- package/dist/validation/layer1.d.ts.map +1 -1
- package/dist/validation/layer1.js +4 -0
- package/dist/validation/layer1.js.map +1 -1
- package/dist/validation/layer3.d.ts +1 -0
- package/dist/validation/layer3.d.ts.map +1 -1
- package/dist/validation/layer3.js +20 -3
- package/dist/validation/layer3.js.map +1 -1
- package/dist/validation/protected-references.d.ts +2 -0
- package/dist/validation/protected-references.d.ts.map +1 -0
- package/dist/validation/protected-references.js +18 -0
- package/dist/validation/protected-references.js.map +1 -0
- package/dist/validation/run-step.d.ts +16 -0
- package/dist/validation/run-step.d.ts.map +1 -0
- package/dist/validation/run-step.js +49 -0
- package/dist/validation/run-step.js.map +1 -0
- package/dist/validation/scenarios/queue.d.ts.map +1 -1
- package/dist/validation/scenarios/queue.js +7 -3
- package/dist/validation/scenarios/queue.js.map +1 -1
- package/dist/validation/stage2-judge.d.ts +4 -2
- package/dist/validation/stage2-judge.d.ts.map +1 -1
- package/dist/validation/stage2-judge.js +79 -4
- package/dist/validation/stage2-judge.js.map +1 -1
- package/dist/validation/test-suites.d.ts +10 -0
- package/dist/validation/test-suites.d.ts.map +1 -0
- package/dist/validation/test-suites.js +135 -0
- package/dist/validation/test-suites.js.map +1 -0
- package/package.json +1 -1
- package/scripts/ruby/rename.rb +97 -2
package/dist/env-bridge.js
CHANGED
|
@@ -93,7 +93,7 @@ export async function buildBridgeValues(domain) {
|
|
|
93
93
|
for (const [suffix, value] of Object.entries(substrate)) {
|
|
94
94
|
values[`${product}_${suffix}`] = value;
|
|
95
95
|
}
|
|
96
|
-
return { values };
|
|
96
|
+
return { product, values };
|
|
97
97
|
}
|
|
98
98
|
// Set ORG_GRADLE_PROJECT_<KEY> and SIMCTL_CHILD_<KEY> entries in the
|
|
99
99
|
// agent's own process.env so any subsequent child spawn that inherits
|
|
@@ -106,11 +106,13 @@ export function applyBridgeToProcessEnv(bridge) {
|
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
// Write a sentinel block to ~/.gradle/gradle.properties containing the
|
|
109
|
-
// mirrored keys.
|
|
110
|
-
//
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
//
|
|
109
|
+
// mirrored keys. The block holds one set of lines per product: a run
|
|
110
|
+
// replaces only its own product's lines, so an app generated earlier keeps
|
|
111
|
+
// its <PRODUCT>_API_* and its next Debug build still reaches the local
|
|
112
|
+
// Rails. Every line outside the block is preserved. If gradle.properties
|
|
113
|
+
// doesn't exist, creates it. If the bridge has no values (substrate vars
|
|
114
|
+
// unset), drops its product's lines (so stale values from a prior run
|
|
115
|
+
// don't linger) and removes the block once nothing is left in it.
|
|
114
116
|
//
|
|
115
117
|
// Safety knobs (env vars, both default to off):
|
|
116
118
|
// NATIVEAPPTEMPLATE_BRIDGE=off — skip the file write entirely;
|
|
@@ -131,13 +133,17 @@ export async function syncGradleProperties(bridge) {
|
|
|
131
133
|
const existing = await readFileOrEmpty(path);
|
|
132
134
|
const stripped = removeSentinelBlock(existing);
|
|
133
135
|
const hasValues = Object.keys(bridge.values).length > 0;
|
|
134
|
-
const
|
|
136
|
+
const owned = ownedKeys(bridge);
|
|
137
|
+
const blockLines = sentinelBlockLines(existing);
|
|
138
|
+
const kept = blockLines.filter((line) => !owned.has(lineKey(line)));
|
|
139
|
+
const removedStale = !hasValues && kept.length < blockLines.length;
|
|
140
|
+
const lines = [...kept, ...Object.entries(bridge.values).map(([key, value]) => `${key}=${value}`)];
|
|
135
141
|
let next;
|
|
136
|
-
if (
|
|
142
|
+
if (lines.length === 0) {
|
|
137
143
|
next = stripped;
|
|
138
144
|
}
|
|
139
145
|
else {
|
|
140
|
-
const block = formatSentinelBlock(
|
|
146
|
+
const block = formatSentinelBlock(lines);
|
|
141
147
|
next = ensureTrailingNewline(stripped) + block + "\n";
|
|
142
148
|
}
|
|
143
149
|
const dryRun = process.env['NATIVEAPPTEMPLATE_BRIDGE_DRY_RUN'] === "1";
|
|
@@ -196,13 +202,44 @@ function removeSentinelBlock(content) {
|
|
|
196
202
|
}
|
|
197
203
|
return content.slice(0, before) + content.slice(trailing);
|
|
198
204
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
205
|
+
// Every key this bridge's product may have written: <PRODUCT>_<SUFFIX> for
|
|
206
|
+
// each mirrored suffix, for bridge.product and for any product its values
|
|
207
|
+
// name. Exact keys, not a prefix, so CLINIC never claims CLINICQUEUE's lines.
|
|
208
|
+
function ownedKeys(bridge) {
|
|
209
|
+
const products = new Set(bridge.product ? [bridge.product] : []);
|
|
210
|
+
for (const key of Object.keys(bridge.values)) {
|
|
211
|
+
const suffix = MIRRORED_SUFFIXES.find((sfx) => key.endsWith(`_${sfx}`));
|
|
212
|
+
if (suffix)
|
|
213
|
+
products.add(key.slice(0, -(suffix.length + 1)));
|
|
214
|
+
}
|
|
215
|
+
const keys = new Set();
|
|
216
|
+
for (const product of products) {
|
|
217
|
+
for (const suffix of MIRRORED_SUFFIXES)
|
|
218
|
+
keys.add(`${product}_${suffix}`);
|
|
219
|
+
}
|
|
220
|
+
return keys;
|
|
221
|
+
}
|
|
222
|
+
// The non-blank lines between the sentinels, or [] when there is no block.
|
|
223
|
+
function sentinelBlockLines(content) {
|
|
224
|
+
const beginIdx = content.indexOf(SENTINEL_BEGIN);
|
|
225
|
+
if (beginIdx === -1)
|
|
226
|
+
return [];
|
|
227
|
+
const endIdx = content.indexOf(SENTINEL_END, beginIdx);
|
|
228
|
+
if (endIdx === -1)
|
|
229
|
+
return [];
|
|
230
|
+
return content
|
|
231
|
+
.slice(beginIdx + SENTINEL_BEGIN.length, endIdx)
|
|
232
|
+
.split("\n")
|
|
233
|
+
.map((line) => line.trim())
|
|
234
|
+
.filter(Boolean);
|
|
235
|
+
}
|
|
236
|
+
function lineKey(line) {
|
|
237
|
+
const eq = line.indexOf("=");
|
|
238
|
+
return (eq === -1 ? line : line.slice(0, eq)).trim();
|
|
239
|
+
}
|
|
240
|
+
function formatSentinelBlock(lines) {
|
|
241
|
+
const sorted = [...lines].sort((a, b) => (lineKey(a) < lineKey(b) ? -1 : lineKey(a) > lineKey(b) ? 1 : 0));
|
|
242
|
+
return [SENTINEL_BEGIN, ...sorted, SENTINEL_END].join("\n");
|
|
206
243
|
}
|
|
207
244
|
function ensureTrailingNewline(s) {
|
|
208
245
|
if (s === "")
|
package/dist/env-bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-bridge.js","sourceRoot":"","sources":["../src/env-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,sEAAsE;AACtE,qEAAqE;AACrE,mEAAmE;AACnE,yCAAyC;AACzC,EAAE;AACF,qCAAqC;AACrC,yEAAyE;AACzE,sEAAsE;AACtE,wEAAwE;AACxE,sEAAsE;AACtE,wEAAwE;AACxE,yEAAyE;AACzE,qEAAqE;AACrE,0DAA0D;AAC1D,EAAE;AACF,8BAA8B;AAC9B,kDAAkD;AAClD,kDAAkD;AAClD,sEAAsE;AACtE,qEAAqE;AACrE,mDAAmD;AACnD,EAAE;AACF,sEAAsE;AACtE,yEAAyE;AACzE,qEAAqE;AACrE,sEAAsE;AAEtE,wEAAwE;AACxE,sEAAsE;AACtE,gEAAgE;AAChE,aAAa;AACb,MAAM,iBAAiB,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AAE5E,MAAM,cAAc,GAAG,6EAA6E,CAAC;AACrG,MAAM,YAAY,GAAG,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"env-bridge.js","sourceRoot":"","sources":["../src/env-bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { type DispatchReportOptions } from "./dispatch.js";
|
|
3
3
|
import type { RenamePair } from "./agents/types.js";
|
|
4
4
|
import type { RunReport } from "./report/model.js";
|
|
5
|
+
import { type VisualLevel } from "./run-options.js";
|
|
5
6
|
export type ParsedArgs = {
|
|
6
7
|
action?: "help" | "version";
|
|
7
8
|
errors: string[];
|
|
@@ -12,6 +13,9 @@ export type ParsedArgs = {
|
|
|
12
13
|
renameOverrides: RenamePair[];
|
|
13
14
|
japaneseOverrides: RenamePair[];
|
|
14
15
|
projectName?: string;
|
|
16
|
+
domain?: string;
|
|
17
|
+
visual?: VisualLevel;
|
|
18
|
+
tests?: boolean;
|
|
15
19
|
};
|
|
16
20
|
export declare function parseArgs(argv: readonly string[]): ParsedArgs;
|
|
17
21
|
export declare function overallLine(report: RunReport): string;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAIA,OAAO,EAAY,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAIA,OAAO,EAAY,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAMrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAStE,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAiE7D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAKrD;AAED,wBAAsB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFvD"}
|
package/dist/index.js
CHANGED
|
@@ -7,8 +7,11 @@ import { loadDotenvIfPresent } from "./env.js";
|
|
|
7
7
|
import { describeRenameOverride, parseRenamePair } from "./rename-overrides.js";
|
|
8
8
|
import { projectNameToSlug, slugToPascal, isValidSlug } from "./slug.js";
|
|
9
9
|
import { readPackageVersion } from "./version.js";
|
|
10
|
+
import { describeAppIdentifiers, validateAppDomain } from "./app-domain.js";
|
|
11
|
+
import { parseVisualLevel } from "./run-options.js";
|
|
12
|
+
import { PreflightError } from "./preflight.js";
|
|
10
13
|
loadDotenvIfPresent();
|
|
11
|
-
const USAGE = 'Usage: nativeapptemplate-agent "your spec here" [--project-name="Vet Clinic"] [--rename From=To]... [--rename-ja From=名前]... [--no-report] [--report-format=html|json|both] [--report-embed=true|false] [--report-open] [--exit-zero]\n' +
|
|
14
|
+
const USAGE = 'Usage: nativeapptemplate-agent "your spec here" [--project-name="Vet Clinic"] [--rename From=To]... [--rename-ja From=名前]... [--domain=orangebaton.app] [--visual=0|1|2] [--tests|--no-tests] [--no-report] [--report-format=html|json|both] [--report-embed=true|false] [--report-open] [--exit-zero]\n' +
|
|
12
15
|
' nativeapptemplate-agent --version | --help';
|
|
13
16
|
export function parseArgs(argv) {
|
|
14
17
|
const specParts = [];
|
|
@@ -18,6 +21,9 @@ export function parseArgs(argv) {
|
|
|
18
21
|
let open = false;
|
|
19
22
|
let exitZero = false;
|
|
20
23
|
let projectName;
|
|
24
|
+
let domain;
|
|
25
|
+
let visual;
|
|
26
|
+
let tests;
|
|
21
27
|
let action;
|
|
22
28
|
const errors = [];
|
|
23
29
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -70,6 +76,28 @@ export function parseArgs(argv) {
|
|
|
70
76
|
else
|
|
71
77
|
console.error(`warning: ignoring invalid --project-name "${raw ?? ""}" (e.g. --project-name="Vet Clinic")`);
|
|
72
78
|
}
|
|
79
|
+
else if (arg === "--domain" || arg.startsWith("--domain=")) {
|
|
80
|
+
const raw = arg === "--domain" ? argv[++i] : arg.slice("--domain=".length);
|
|
81
|
+
const check = validateAppDomain(raw ?? "");
|
|
82
|
+
if (check.ok)
|
|
83
|
+
domain = check.domain;
|
|
84
|
+
else
|
|
85
|
+
errors.push(check.error);
|
|
86
|
+
}
|
|
87
|
+
else if (arg === "--visual" || arg.startsWith("--visual=")) {
|
|
88
|
+
const raw = arg === "--visual" ? argv[++i] : arg.slice("--visual=".length);
|
|
89
|
+
const level = parseVisualLevel(raw ?? "");
|
|
90
|
+
if (level !== undefined)
|
|
91
|
+
visual = level;
|
|
92
|
+
else
|
|
93
|
+
errors.push(`--visual must be 0, 1, or 2 (got ${raw === undefined ? "nothing" : `"${raw}"`})`);
|
|
94
|
+
}
|
|
95
|
+
else if (arg === "--tests") {
|
|
96
|
+
tests = true;
|
|
97
|
+
}
|
|
98
|
+
else if (arg === "--no-tests") {
|
|
99
|
+
tests = false;
|
|
100
|
+
}
|
|
73
101
|
else if (/^-./.test(arg)) {
|
|
74
102
|
errors.push(`unknown option "${arg}"`);
|
|
75
103
|
}
|
|
@@ -77,11 +105,11 @@ export function parseArgs(argv) {
|
|
|
77
105
|
specParts.push(arg);
|
|
78
106
|
}
|
|
79
107
|
}
|
|
80
|
-
return { ...(action !== undefined ? { action } : {}), errors, spec: specParts.join(" ").trim(), report, open, exitZero, renameOverrides, japaneseOverrides, ...(projectName !== undefined ? { projectName } : {}) };
|
|
108
|
+
return { ...(action !== undefined ? { action } : {}), errors, spec: specParts.join(" ").trim(), report, open, exitZero, renameOverrides, japaneseOverrides, ...(projectName !== undefined ? { projectName } : {}), ...(domain !== undefined ? { domain } : {}), ...(visual !== undefined ? { visual } : {}), ...(tests !== undefined ? { tests } : {}) };
|
|
81
109
|
}
|
|
82
110
|
export function overallLine(report) {
|
|
83
111
|
if (report.verdict === "partial") {
|
|
84
|
-
return "overall: PARTIAL (nothing failed, but Layer 3 did not judge the UI;
|
|
112
|
+
return "overall: PARTIAL (nothing failed, but Layer 3 did not judge the UI; re-run with --visual=1 for a full run)";
|
|
85
113
|
}
|
|
86
114
|
return `overall: ${report.verdict === "pass" ? "PASS" : "FAIL"}`;
|
|
87
115
|
}
|
|
@@ -110,16 +138,34 @@ export async function main(spec) {
|
|
|
110
138
|
}
|
|
111
139
|
console.log(`nativeapptemplate-agent: received spec: ${input}`);
|
|
112
140
|
console.log('(tail tmp/trace/*.log in a tiled view via scripts/demo-tmux.sh)');
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
141
|
+
let result;
|
|
142
|
+
try {
|
|
143
|
+
result = await dispatch(input, {
|
|
144
|
+
report: parsed.report,
|
|
145
|
+
renameOverrides: parsed.renameOverrides,
|
|
146
|
+
japaneseOverrides: parsed.japaneseOverrides,
|
|
147
|
+
...(parsed.projectName !== undefined ? { projectName: parsed.projectName } : {}),
|
|
148
|
+
...(parsed.domain !== undefined ? { domain: parsed.domain } : {}),
|
|
149
|
+
...(parsed.visual !== undefined ? { visual: parsed.visual } : {}),
|
|
150
|
+
...(parsed.tests !== undefined ? { tests: parsed.tests } : {}),
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
if (!(err instanceof PreflightError))
|
|
155
|
+
throw err;
|
|
156
|
+
console.error(`error: ${err.message}`);
|
|
157
|
+
console.error("Nothing was generated and no API call was made.");
|
|
158
|
+
process.exitCode = 2;
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
119
161
|
if (parsed.projectName !== undefined) {
|
|
120
162
|
const finalSlug = result.report.meta.slug;
|
|
121
163
|
console.log(`project: ${slugToPascal(finalSlug)} (output out/${finalSlug}/)`);
|
|
122
164
|
}
|
|
165
|
+
if (parsed.domain !== undefined) {
|
|
166
|
+
for (const line of describeAppIdentifiers(result.appIdentifiers))
|
|
167
|
+
console.log(line);
|
|
168
|
+
}
|
|
123
169
|
const renamable = result.report.domain.renamePlan.map((p) => p.from);
|
|
124
170
|
for (const o of result.renameOverrideOutcomes) {
|
|
125
171
|
const line = describeRenameOverride(o, renamable);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAA8B,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAA8B,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAG5E,OAAO,EAAE,gBAAgB,EAAoB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,mBAAmB,EAAE,CAAC;AAEtB,MAAM,KAAK,GACT,0SAA0S;IAC1S,mDAAmD,CAAC;AAkBtD,MAAM,UAAU,SAAS,CAAC,IAAuB;IAC/C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,MAAM,eAAe,GAAiB,EAAE,CAAC;IACzC,MAAM,iBAAiB,GAAiB,EAAE,CAAC;IAC3C,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,WAA+B,CAAC;IACpC,IAAI,MAA0B,CAAC;IAC/B,IAAI,MAA+B,CAAC;IACpC,IAAI,KAA0B,CAAC;IAC/B,IAAI,MAA4B,CAAC;IACjC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,SAAS;YAAE,SAAS;QAChC,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM,KAAK,SAAS,CAAC;aACzD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM,KAAK,MAAM,CAAC;aACxD,IAAI,GAAG,KAAK,aAAa;YAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;aAClD,IAAI,GAAG,KAAK,eAAe;YAAE,IAAI,GAAG,IAAI,CAAC;aACzC,IAAI,GAAG,KAAK,aAAa;YAAE,QAAQ,GAAG,IAAI,CAAC;aAC3C,IAAI,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACnD,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;;gBAC/E,OAAO,CAAC,KAAK,CAAC,8CAA8C,KAAK,kCAAkC,CAAC,CAAC;QAC5G,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;QACjE,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7D,uEAAuE;YACvE,MAAM,GAAG,GAAG,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,IAAI;gBAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;gBAChC,OAAO,CAAC,KAAK,CAAC,yCAAyC,GAAG,IAAI,EAAE,iDAAiD,CAAC,CAAC;QAC1H,CAAC;aAAM,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACnE,MAAM,GAAG,GAAG,GAAG,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACjF,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,IAAI;gBAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;gBAClC,OAAO,CAAC,KAAK,CAAC,4CAA4C,GAAG,IAAI,EAAE,gDAAgD,CAAC,CAAC;QAC5H,CAAC;aAAM,IAAI,GAAG,KAAK,gBAAgB,IAAI,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACzE,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YACjG,wEAAwE;YACxE,sEAAsE;YACtE,IAAI,GAAG,IAAI,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAAE,WAAW,GAAG,GAAG,CAAC;;gBAC7D,OAAO,CAAC,KAAK,CAAC,6CAA6C,GAAG,IAAI,EAAE,sCAAsC,CAAC,CAAC;QACnH,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,EAAE;gBAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;;gBAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YAC1C,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,GAAG,KAAK,CAAC;;gBACnC,MAAM,CAAC,IAAI,CAAC,oCAAoC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;QACtG,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YAChC,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3V,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAiB;IAC3C,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,4GAA4G,CAAC;IACtH,CAAC;IACD,OAAO,YAAY,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAa;IACtC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2CAA2C,KAAK,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAE/E,IAAI,MAA4C,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,cAAc,CAAC;YAAE,MAAM,GAAG,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,CAAC,SAAS,CAAC,gBAAgB,SAAS,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,sBAAsB,CAAC,MAAM,CAAC,cAAc,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,sBAAsB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;YAC5D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,wBAAwB,EAAE,CAAC;QAChD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aACzH,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC;;YACtG,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,sCAAsC,CAAC,CAAC;IACnG,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,mCAAmC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjD,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC5F,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,sEAAsE;IACtE,iEAAiE;IACjE,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC5C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAC1E,0EAA0E;AAC1E,+BAA+B;AAC/B,IAAI,YAAY,EAAE,EAAE,CAAC;IACnB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,SAAS,KAAK,UAAU,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/mcp.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
-
|
|
3
|
+
import { dispatch } from "./dispatch.js";
|
|
4
|
+
export type McpServerDeps = {
|
|
5
|
+
dispatch?: typeof dispatch;
|
|
6
|
+
};
|
|
7
|
+
export declare function createMcpServer(deps?: McpServerDeps): McpServer;
|
|
4
8
|
export declare function main(): Promise<void>;
|
|
5
9
|
//# sourceMappingURL=mcp.d.ts.map
|
package/dist/mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAezC,MAAM,MAAM,aAAa,GAAG;IAE1B,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAC;CAC5B,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,GAAE,aAAkB,GAAG,SAAS,CAkGnE;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAK1C"}
|
package/dist/mcp.js
CHANGED
|
@@ -7,22 +7,17 @@ import { z } from "zod";
|
|
|
7
7
|
import { dispatch } from "./dispatch.js";
|
|
8
8
|
import { loadDotenvIfPresent } from "./env.js";
|
|
9
9
|
import { readPackageVersion } from "./version.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
//
|
|
15
|
-
// Run via: `npx -y -p nativeapptemplate-agent nativeapptemplate-agent-mcp` from
|
|
16
|
-
// an MCP client config (the -mcp bin lives in the nativeapptemplate-agent
|
|
17
|
-
// package; `npx -y nativeapptemplate-agent-mcp` 404s).
|
|
18
|
-
export function createMcpServer() {
|
|
10
|
+
import { validateAppDomain } from "./app-domain.js";
|
|
11
|
+
import { PreflightError } from "./preflight.js";
|
|
12
|
+
export function createMcpServer(deps = {}) {
|
|
13
|
+
const run = deps.dispatch ?? dispatch;
|
|
19
14
|
const server = new McpServer({
|
|
20
15
|
name: "nativeapptemplate-agent",
|
|
21
16
|
version: readPackageVersion(),
|
|
22
17
|
});
|
|
23
18
|
server.registerTool("generate_app", {
|
|
24
19
|
title: "Generate three-platform SaaS app",
|
|
25
|
-
description: "Generate a working three-platform SaaS app from a natural-language spec — Rails 8.1 API + SwiftUI iOS + Jetpack Compose Android. Validated end-to-end (rename completeness, build, vision judge). Output lands in ./out/<spec-slug>/{rails,ios,android}/. Each invocation runs ~3-5 minutes and consumes Anthropic API usage on the configured key, separate from the calling assistant's session.",
|
|
20
|
+
description: "Generate a working three-platform SaaS app from a natural-language spec — Rails 8.1 API + SwiftUI iOS + Jetpack Compose Android. Validated end-to-end (rename completeness, build, vision judge). Output lands in ./out/<spec-slug>/{rails,ios,android}/. Each invocation runs ~3-5 minutes at visual 0 (~7-9 minutes at visual 2) and consumes Anthropic API usage on the configured key, separate from the calling assistant's session.",
|
|
26
21
|
inputSchema: {
|
|
27
22
|
spec: z
|
|
28
23
|
.string()
|
|
@@ -40,13 +35,45 @@ export function createMcpServer() {
|
|
|
40
35
|
.string()
|
|
41
36
|
.optional()
|
|
42
37
|
.describe('Optional project name (e.g. "Vet Clinic" or "VetClinic"). Overrides the planner\'s name; the slug — which sets the output directory, DB prefix, and the Pascal project name across all three platforms — and the display name are derived from it. Ignored if it yields no valid slug.'),
|
|
38
|
+
domain: z
|
|
39
|
+
.string()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('Optional domain of the app, e.g. "orangebaton.app" (at least two labels). Replaces the template\'s nativeapptemplate.com, subdomains and email addresses included, and its reverse sets the iOS bundle ID (app.orangebaton.OrangeBaton.ios) and the Android applicationId / package (app.orangebaton.orangebaton). A label that isn\'t a valid Java/Kotlin package segment is written differently there (hyphens become underscores, a keyword gets a trailing underscore). Default: <project name, flat lowercase>.com.'),
|
|
42
|
+
visual: z
|
|
43
|
+
.union([z.literal(0), z.literal(1), z.literal(2)])
|
|
44
|
+
.optional()
|
|
45
|
+
.describe('Optional visual validation level for this call, overriding NATIVEAPPTEMPLATE_VISUAL. 0 (default): no UI judging, verdict PARTIAL at best. 1: full iOS/Android builds + the home screen judged by the vision model on a booted iOS simulator and Android emulator. 2: 1 + the Rails API booted under mise and a scripted sign-up/sign-in walk through both apps (~7-9 min). 1 and 2 fail fast, before generating, if no simulator is booted, no emulator is attached, or (2) mise is missing.'),
|
|
46
|
+
tests: z
|
|
47
|
+
.boolean()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe("Optional: run the generated apps' own test suites (bin/rails test, xcodebuild test, ./gradlew testDebugUnitTest) for this call, overriding NATIVEAPPTEMPLATE_TESTS. Implies full builds; adds several minutes."),
|
|
43
50
|
},
|
|
44
|
-
}, async ({ spec, renameOverrides, japaneseOverrides, projectName }) => {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
}, async ({ spec, renameOverrides, japaneseOverrides, projectName, domain, visual, tests }) => {
|
|
52
|
+
let appDomain;
|
|
53
|
+
if (domain !== undefined) {
|
|
54
|
+
const check = validateAppDomain(domain);
|
|
55
|
+
if (!check.ok)
|
|
56
|
+
return { content: [{ type: "text", text: `error: ${check.error}` }], isError: true };
|
|
57
|
+
appDomain = check.domain;
|
|
58
|
+
}
|
|
59
|
+
// Per call: visual / tests go to dispatch() as options, never into
|
|
60
|
+
// process.env, so they don't carry over to the server's next call.
|
|
61
|
+
let result;
|
|
62
|
+
try {
|
|
63
|
+
result = await run(spec, {
|
|
64
|
+
...(appDomain !== undefined ? { domain: appDomain } : {}),
|
|
65
|
+
...(renameOverrides ? { renameOverrides } : {}),
|
|
66
|
+
...(japaneseOverrides ? { japaneseOverrides } : {}),
|
|
67
|
+
...(projectName !== undefined ? { projectName } : {}),
|
|
68
|
+
...(visual !== undefined ? { visual } : {}),
|
|
69
|
+
...(tests !== undefined ? { tests } : {}),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (!(err instanceof PreflightError))
|
|
74
|
+
throw err;
|
|
75
|
+
return { content: [{ type: "text", text: `error: ${err.message}\nNothing was generated and no API call was made.` }], isError: true };
|
|
76
|
+
}
|
|
50
77
|
return {
|
|
51
78
|
content: [{ type: "text", text: result.summary }],
|
|
52
79
|
structuredContent: {
|
package/dist/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAgBhD,MAAM,UAAU,eAAe,CAAC,OAAsB,EAAE;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,kBAAkB,EAAE;KAC9B,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,kCAAkC;QACzC,WAAW,EACT,2aAA2a;QAC7a,WAAW,EAAE;YACX,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CACP,qEAAqE,CACtE;YACH,eAAe,EAAE,CAAC;iBACf,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACnE,QAAQ,EAAE;iBACV,QAAQ,CACP,4hBAA4hB,CAC7hB;YACH,iBAAiB,EAAE,CAAC;iBACjB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACnE,QAAQ,EAAE;iBACV,QAAQ,CACP,uQAAuQ,CACxQ;YACH,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,wRAAwR,CACzR;YACH,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,0fAA0f,CAC3f;YACH,MAAM,EAAE,CAAC;iBACN,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjD,QAAQ,EAAE;iBACV,QAAQ,CACP,8dAA8d,CAC/d;YACH,KAAK,EAAE,CAAC;iBACL,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,gNAAgN,CACjN;SACJ;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACzF,IAAI,SAA6B,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACpG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,CAAC;QACD,mEAAmE;QACnE,mEAAmE;QACnE,IAAI,MAA4C,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;gBACvB,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,YAAY,cAAc,CAAC;gBAAE,MAAM,GAAG,CAAC;YAChD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,OAAO,mDAAmD,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACxI,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YACjD,iBAAiB,EAAE;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;gBAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvF,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxF;YACD,OAAO,EAAE,CAAC,MAAM,CAAC,WAAW;SAC7B,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,mBAAmB,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,YAAY,EAAE,EAAE,CAAC;IACnB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,SAAS,KAAK,UAAU,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/mobile.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export type MobileClient = {
|
|
|
16
16
|
click(x: number, y: number): Promise<void>;
|
|
17
17
|
typeKeys(text: string, submit?: boolean): Promise<void>;
|
|
18
18
|
pressButton(button: string): Promise<void>;
|
|
19
|
-
launchApp(packageName: string): Promise<void>;
|
|
19
|
+
launchApp(packageName: string, locale?: string): Promise<void>;
|
|
20
20
|
takeScreenshot(): Promise<Screenshot>;
|
|
21
21
|
saveScreenshot(absolutePath: string): Promise<void>;
|
|
22
22
|
close(): Promise<void>;
|
package/dist/mobile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile.d.ts","sourceRoot":"","sources":["../src/mobile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAgBzE,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,CAAC;AAE/C,MAAM,MAAM,aAAa,GAAG;IAI1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAEvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAKhF,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1C,WAAW,IAAI,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;IACjD,YAAY,IAAI,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;IAClD,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAK3C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mobile.d.ts","sourceRoot":"","sources":["../src/mobile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAgBzE,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,CAAC;AAE/C,MAAM,MAAM,aAAa,GAAG;IAI1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAEvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAKhF,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1C,WAAW,IAAI,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;IACjD,YAAY,IAAI,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;IAClD,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAK3C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAO3C,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAGhC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B,CAAC;AAmBF,wBAAsB,kBAAkB,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAY1F;AAKD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAE/D;AAED,wBAAgB,YAAY,IAAI,OAAO,CAKtC"}
|
package/dist/mobile.js
CHANGED
|
@@ -129,10 +129,10 @@ function wrapClient(client) {
|
|
|
129
129
|
async pressButton(button) {
|
|
130
130
|
await callTool("mobile_press_button", { button });
|
|
131
131
|
},
|
|
132
|
-
async launchApp(packageName) {
|
|
132
|
+
async launchApp(packageName, locale) {
|
|
133
133
|
// mobile-mcp uses `packageName` for the app id on both platforms (the
|
|
134
134
|
// bundle id on iOS). `device` is injected by callTool.
|
|
135
|
-
await callTool("mobile_launch_app", { packageName });
|
|
135
|
+
await callTool("mobile_launch_app", { packageName, ...(locale !== undefined ? { locale } : {}) });
|
|
136
136
|
},
|
|
137
137
|
async takeScreenshot() {
|
|
138
138
|
const result = await callTool("mobile_take_screenshot");
|
|
@@ -170,7 +170,7 @@ function createStubMobileClient() {
|
|
|
170
170
|
click: async () => { },
|
|
171
171
|
typeKeys: async (_text, _submit) => { },
|
|
172
172
|
pressButton: async () => { },
|
|
173
|
-
launchApp: async (_packageName) => { },
|
|
173
|
+
launchApp: async (_packageName, _locale) => { },
|
|
174
174
|
takeScreenshot: async () => ({ data: Buffer.alloc(0), mimeType: "image/png" }),
|
|
175
175
|
saveScreenshot: async () => { },
|
|
176
176
|
close: async () => { },
|
package/dist/mobile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile.js","sourceRoot":"","sources":["../src/mobile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"mobile.js","sourceRoot":"","sources":["../src/mobile.ts"],"names":[],"mappings":"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"}
|
package/dist/models.d.ts
CHANGED
|
@@ -8,4 +8,10 @@ export declare const JUDGE_EFFORT: Effort;
|
|
|
8
8
|
export declare const REPAIR_EFFORT: Effort;
|
|
9
9
|
export declare const FALLBACK_BETA = "server-side-fallback-2026-07-01";
|
|
10
10
|
export declare const FALLBACKS: "default";
|
|
11
|
+
export declare const OPUS_PRICE_PER_MTOK: {
|
|
12
|
+
readonly input: 4;
|
|
13
|
+
readonly output: 20;
|
|
14
|
+
readonly cacheWrite5m: 5;
|
|
15
|
+
readonly cacheRead: 0.4;
|
|
16
|
+
};
|
|
11
17
|
//# sourceMappingURL=models.d.ts.map
|
package/dist/models.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,oBAAoB,CAAC;AAE5C,eAAO,MAAM,aAAa,oBAAa,CAAC;AACxC,eAAO,MAAM,WAAW,oBAAa,CAAC;AACtC,eAAO,MAAM,YAAY,oBAAa,CAAC;AAEvC,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAajE,eAAO,MAAM,cAAc,EAAE,MAAe,CAAC;AAC7C,eAAO,MAAM,YAAY,EAAE,MAAiB,CAAC;AAC7C,eAAO,MAAM,aAAa,EAAE,MAAe,CAAC;AAM5C,eAAO,MAAM,aAAa,oCAAoC,CAAC;AAC/D,eAAO,MAAM,SAAS,EAAG,SAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,oBAAoB,CAAC;AAE5C,eAAO,MAAM,aAAa,oBAAa,CAAC;AACxC,eAAO,MAAM,WAAW,oBAAa,CAAC;AACtC,eAAO,MAAM,YAAY,oBAAa,CAAC;AAEvC,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAajE,eAAO,MAAM,cAAc,EAAE,MAAe,CAAC;AAC7C,eAAO,MAAM,YAAY,EAAE,MAAiB,CAAC;AAC7C,eAAO,MAAM,aAAa,EAAE,MAAe,CAAC;AAM5C,eAAO,MAAM,aAAa,oCAAoC,CAAC;AAC/D,eAAO,MAAM,SAAS,EAAG,SAAkB,CAAC;AAO5C,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC"}
|
package/dist/models.js
CHANGED
|
@@ -24,4 +24,15 @@ export const REPAIR_EFFORT = "high";
|
|
|
24
24
|
// this beta header (the array form uses server-side-fallback-2026-06-01).
|
|
25
25
|
export const FALLBACK_BETA = "server-side-fallback-2026-07-01";
|
|
26
26
|
export const FALLBACKS = "default";
|
|
27
|
+
// Claude Opus 5.5 list prices, USD per million tokens (Anthropic pricing page,
|
|
28
|
+
// checked 2026-10-15). Cache writes use the 5-minute TTL rate (1.25x input),
|
|
29
|
+
// which is what the judge's `cache_control: { type: "ephemeral" }` gets;
|
|
30
|
+
// cache reads are 0.1x input. scripts/cost.sh repeats these as RATE_* and a
|
|
31
|
+
// test keeps the two in sync — update both on a model or price change.
|
|
32
|
+
export const OPUS_PRICE_PER_MTOK = {
|
|
33
|
+
input: 4,
|
|
34
|
+
output: 20,
|
|
35
|
+
cacheWrite5m: 5,
|
|
36
|
+
cacheRead: 0.4,
|
|
37
|
+
};
|
|
27
38
|
//# sourceMappingURL=models.js.map
|
package/dist/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,yDAAyD;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AACxC,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAIvC,6EAA6E;AAC7E,6DAA6D;AAC7D,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,uBAAuB;AACvB,8EAA8E;AAC9E,+EAA+E;AAC/E,0CAA0C;AAC1C,4EAA4E;AAC5E,uEAAuE;AACvE,MAAM,CAAC,MAAM,cAAc,GAAW,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAW,QAAQ,CAAC;AAC7C,MAAM,CAAC,MAAM,aAAa,GAAW,MAAM,CAAC;AAE5C,2EAA2E;AAC3E,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,aAAa,GAAG,iCAAiC,CAAC;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAG,SAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,yDAAyD;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AACxC,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAIvC,6EAA6E;AAC7E,6DAA6D;AAC7D,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,uBAAuB;AACvB,8EAA8E;AAC9E,+EAA+E;AAC/E,0CAA0C;AAC1C,4EAA4E;AAC5E,uEAAuE;AACvE,MAAM,CAAC,MAAM,cAAc,GAAW,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAW,QAAQ,CAAC;AAC7C,MAAM,CAAC,MAAM,aAAa,GAAW,MAAM,CAAC;AAE5C,2EAA2E;AAC3E,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,aAAa,GAAG,iCAAiC,CAAC;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAG,SAAkB,CAAC;AAE5C,+EAA+E;AAC/E,6EAA6E;AAC7E,yEAAyE;AACzE,4EAA4E;AAC5E,uEAAuE;AACvE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,CAAC;IACf,SAAS,EAAE,GAAG;CACN,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { VisualLevel } from "./run-options.js";
|
|
2
|
+
export type IosSimulator = {
|
|
3
|
+
udid: string;
|
|
4
|
+
name: string;
|
|
5
|
+
};
|
|
6
|
+
type Listing<T> = {
|
|
7
|
+
ok: true;
|
|
8
|
+
items: readonly T[];
|
|
9
|
+
} | {
|
|
10
|
+
ok: false;
|
|
11
|
+
error: string;
|
|
12
|
+
};
|
|
13
|
+
export type PreflightDeps = {
|
|
14
|
+
bootedIosSimulators(): Promise<Listing<IosSimulator>>;
|
|
15
|
+
adbDevices(): Promise<Listing<string>>;
|
|
16
|
+
hasMise(): Promise<boolean>;
|
|
17
|
+
};
|
|
18
|
+
export declare class PreflightError extends Error {
|
|
19
|
+
readonly problems: readonly string[];
|
|
20
|
+
constructor(level: VisualLevel, problems: readonly string[]);
|
|
21
|
+
}
|
|
22
|
+
export declare function preflightVisual(level: VisualLevel, deps?: PreflightDeps, env?: NodeJS.ProcessEnv): Promise<readonly string[]>;
|
|
23
|
+
export declare function assertVisualPreflight(level: VisualLevel, deps?: PreflightDeps, env?: NodeJS.ProcessEnv): Promise<void>;
|
|
24
|
+
export declare const defaultPreflightDeps: PreflightDeps;
|
|
25
|
+
export declare function parseBootedIosSimulators(json: string): readonly IosSimulator[];
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQpD,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1D,KAAK,OAAO,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,aAAa,GAAG;IAC1B,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAEtD,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7B,CAAC;AAEF,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;gBACzB,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE;CAK5D;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,aAAoC,EAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAY5B;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5H;AA8BD,eAAO,MAAM,oBAAoB,EAAE,aAiBlC,CAAC;AAIF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAU9E"}
|