tapline-host 1.0.0 → 1.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.
Files changed (50) hide show
  1. package/dist/actionlog.d.ts +43 -0
  2. package/dist/actionlog.js +62 -0
  3. package/dist/actionlog.js.map +1 -0
  4. package/dist/audit.d.ts +44 -0
  5. package/dist/audit.js +60 -0
  6. package/dist/audit.js.map +1 -0
  7. package/dist/cli.js +79 -17
  8. package/dist/cli.js.map +1 -1
  9. package/dist/confirm.d.ts +69 -0
  10. package/dist/confirm.js +120 -0
  11. package/dist/confirm.js.map +1 -0
  12. package/dist/format.d.ts +8 -1
  13. package/dist/format.js +53 -11
  14. package/dist/format.js.map +1 -1
  15. package/dist/init.d.ts +59 -0
  16. package/dist/init.js +475 -0
  17. package/dist/init.js.map +1 -0
  18. package/dist/inspect.d.ts +75 -0
  19. package/dist/inspect.js +127 -0
  20. package/dist/inspect.js.map +1 -0
  21. package/dist/mcp.d.ts +4 -1
  22. package/dist/mcp.js +56 -2
  23. package/dist/mcp.js.map +1 -1
  24. package/dist/policy.d.ts +42 -0
  25. package/dist/policy.js +74 -0
  26. package/dist/policy.js.map +1 -0
  27. package/dist/run.d.ts +47 -0
  28. package/dist/run.js +88 -0
  29. package/dist/run.js.map +1 -0
  30. package/dist/script.d.ts +68 -0
  31. package/dist/script.js +142 -0
  32. package/dist/script.js.map +1 -0
  33. package/dist/server.d.ts +39 -0
  34. package/dist/server.js +120 -0
  35. package/dist/server.js.map +1 -1
  36. package/dist/tool-text-data.d.ts +24 -7
  37. package/dist/tool-text-data.js +24 -7
  38. package/dist/tool-text-data.js.map +1 -1
  39. package/dist/tool-text.d.ts +1 -1
  40. package/dist/tools.d.ts +152 -6
  41. package/dist/tools.js +905 -118
  42. package/dist/tools.js.map +1 -1
  43. package/dist/viewer-page.js +1 -1
  44. package/dist/viewer-page.js.map +1 -1
  45. package/dist/viewer.d.ts +3 -0
  46. package/dist/viewer.js +21 -4
  47. package/dist/viewer.js.map +1 -1
  48. package/package.json +2 -2
  49. package/skills/tapline/SKILL.md +41 -11
  50. package/skills/tapline/references/setup.md +24 -2
package/dist/init.js ADDED
@@ -0,0 +1,475 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
3
+ import { dirname, join, resolve } from "node:path";
4
+ /** `tapline init`: sets up the app side of Tapline in a React Native or Expo app, in one go. */
5
+ export const ENV_NAME = "EXPO_PUBLIC_TAPLINE_ENABLED";
6
+ export const PACKAGES = ["react-native-tapline", "expo-secure-store", "react-native-view-shot"];
7
+ const REGISTER_LINE = "import 'react-native-tapline/register';";
8
+ const START_IMPORT = "import { startTapline } from 'react-native-tapline';";
9
+ const START_CALL = `startTapline({ enabled: process.env.${ENV_NAME} === '1' });`;
10
+ const METRO_REQUIRE = "const { withTapline } = require('react-native-tapline/metro');";
11
+ const METRO_FILE = "module.exports = withTapline(getDefaultConfig(__dirname));";
12
+ const NATIVE_INTENT = `import { isTaplineLink } from 'react-native-tapline';
13
+
14
+ export function redirectSystemPath({ path }: { path: string; initial: boolean }) {
15
+ return isTaplineLink(path) ? null : path;
16
+ }
17
+ `;
18
+ export function diskAccess(root) {
19
+ const full = (path) => join(root, path);
20
+ return {
21
+ isFile: (path) => existsSync(full(path)) && statSync(full(path)).isFile(),
22
+ isDir: (path) => existsSync(full(path)) && statSync(full(path)).isDirectory(),
23
+ read: (path) => readFileSync(full(path), "utf8"),
24
+ write: (path, content) => {
25
+ mkdirSync(dirname(full(path)), { recursive: true });
26
+ writeFileSync(full(path), content);
27
+ },
28
+ };
29
+ }
30
+ export class InitRefusal extends Error {
31
+ }
32
+ function asObject(value) {
33
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : undefined;
34
+ }
35
+ function dependencyNames(pkg) {
36
+ const names = new Set();
37
+ for (const key of ["dependencies", "devDependencies"]) {
38
+ const group = asObject(pkg[key]);
39
+ if (group !== undefined)
40
+ for (const name of Object.keys(group))
41
+ names.add(name);
42
+ }
43
+ return names;
44
+ }
45
+ function eolOf(text) {
46
+ return text.includes("\r\n") ? "\r\n" : "\n";
47
+ }
48
+ /** The offset just after the leading comments (and a shebang) of a source file: where new top lines go. */
49
+ function afterLeadingComments(text) {
50
+ let i = 0;
51
+ let end = 0;
52
+ for (;;) {
53
+ while (i < text.length && /\s/.test(text[i] ?? ""))
54
+ i++;
55
+ if (text.startsWith("#!", i) || text.startsWith("//", i)) {
56
+ const nl = text.indexOf("\n", i);
57
+ i = nl === -1 ? text.length : nl + 1;
58
+ end = i;
59
+ }
60
+ else if (text.startsWith("/*", i)) {
61
+ const close = text.indexOf("*/", i + 2);
62
+ if (close === -1)
63
+ return end;
64
+ const nl = text.indexOf("\n", close);
65
+ i = nl === -1 ? text.length : nl + 1;
66
+ end = i;
67
+ }
68
+ else {
69
+ return end;
70
+ }
71
+ }
72
+ }
73
+ function insertAtTop(text, lines) {
74
+ const eol = eolOf(text);
75
+ const at = afterLeadingComments(text);
76
+ const before = text.slice(0, at);
77
+ const needsBreak = before.length > 0 && !before.endsWith("\n") ? eol : "";
78
+ return `${before}${needsBreak}${lines.join(eol)}${eol}${eol}${text.slice(at)}`;
79
+ }
80
+ /** True when `expression` has a semicolon outside brackets, strings and comments (more than one statement). */
81
+ function hasTopLevelSemicolon(expression) {
82
+ let depth = 0;
83
+ for (let i = 0; i < expression.length; i++) {
84
+ const c = expression[i] ?? "";
85
+ const next = expression[i + 1] ?? "";
86
+ if (c === "/" && next === "/") {
87
+ const nl = expression.indexOf("\n", i);
88
+ if (nl === -1)
89
+ return false;
90
+ i = nl;
91
+ }
92
+ else if (c === "/" && next === "*") {
93
+ const close = expression.indexOf("*/", i + 2);
94
+ if (close === -1)
95
+ return false;
96
+ i = close + 1;
97
+ }
98
+ else if (c === "'" || c === '"' || c === "`") {
99
+ i++;
100
+ while (i < expression.length && expression[i] !== c) {
101
+ if (expression[i] === "\\")
102
+ i++;
103
+ i++;
104
+ }
105
+ }
106
+ else if ("([{".includes(c)) {
107
+ depth++;
108
+ }
109
+ else if (")]}".includes(c)) {
110
+ depth--;
111
+ }
112
+ else if (c === ";" && depth === 0) {
113
+ return true;
114
+ }
115
+ }
116
+ return false;
117
+ }
118
+ const SOURCE_EXTENSIONS = ["", ".js", ".ts", ".tsx", ".jsx"];
119
+ function findFile(files, base) {
120
+ return SOURCE_EXTENSIONS.map((ext) => `${base}${ext}`).find((path) => files.isFile(path));
121
+ }
122
+ function entrySteps(ctx) {
123
+ const { files } = ctx;
124
+ const main = typeof ctx.pkg.main === "string" ? ctx.pkg.main : undefined;
125
+ const wanted = [REGISTER_LINE, START_IMPORT, START_CALL];
126
+ const missingLines = (text) => {
127
+ const lines = [];
128
+ if (!text.includes("react-native-tapline/register"))
129
+ lines.push(REGISTER_LINE);
130
+ if (!text.includes("startTapline"))
131
+ lines.push(START_IMPORT, START_CALL);
132
+ return lines;
133
+ };
134
+ const steps = [];
135
+ let entryFile;
136
+ let mainEdit = false;
137
+ if (main === "expo-router/entry") {
138
+ if (files.isFile("index.js")) {
139
+ // An index.js that isn't Expo Router's entry is the app's own file for something else: leave main alone.
140
+ if (!/expo-router\/entry/.test(files.read("index.js"))) {
141
+ return [
142
+ {
143
+ file: "index.js",
144
+ action: "advice",
145
+ detail: `index.js exists but doesn't load expo-router/entry, so "main" stays as it is. Make an entry file that starts with the three Tapline lines (docs/setup.md, step 3), then import 'expo-router/entry', and set "main" to it.`,
146
+ },
147
+ ];
148
+ }
149
+ entryFile = "index.js";
150
+ mainEdit = true;
151
+ }
152
+ else {
153
+ const content = `${wanted.join("\n")}\nimport 'expo-router/entry';\n`;
154
+ steps.push({ file: "index.js", action: "create", detail: "register, startTapline, then expo-router/entry", content });
155
+ steps.push(mainStep(ctx, "expo-router/entry"));
156
+ return steps;
157
+ }
158
+ }
159
+ else if (main !== undefined) {
160
+ // Only a file inside the project: never node_modules, never a path that climbs out of it.
161
+ if (main.includes("node_modules") || main.split(/[\\/]/).includes("..") || main.startsWith("/") || !/^\.?\/?[\w@./-]+$/.test(main)) {
162
+ return [
163
+ {
164
+ file: "package.json",
165
+ action: "advice",
166
+ detail: `"main" is ${main}, which Tapline can't edit. Make your own index.js that starts with the three Tapline lines (docs/setup.md, step 3) and set "main" to it.`,
167
+ },
168
+ ];
169
+ }
170
+ entryFile = findFile(files, main.replace(/^\.\//, ""));
171
+ if (entryFile === undefined) {
172
+ return [{ file: main, action: "advice", detail: `the entry file named in package.json ("${main}") wasn't found. Add the three Tapline lines at the top of your entry file.` }];
173
+ }
174
+ }
175
+ else {
176
+ entryFile = ["index.js", "index.ts", "index.tsx", "index.jsx"].find((path) => files.isFile(path));
177
+ if (entryFile === undefined) {
178
+ return [{ file: "package.json", action: "advice", detail: 'there is no "main" and no index file. Add the three Tapline lines at the top of your entry file.' }];
179
+ }
180
+ }
181
+ const text = files.read(entryFile);
182
+ const lines = missingLines(text);
183
+ if (lines.length === 0) {
184
+ steps.push({ file: entryFile, action: "skip", detail: "already starts Tapline" });
185
+ }
186
+ else {
187
+ const detail = lines.length === wanted.length ? "added the register and startTapline lines at the top" : "added the missing Tapline lines at the top";
188
+ steps.push({ file: entryFile, action: "edit", detail, content: insertAtTop(text, lines) });
189
+ }
190
+ if (mainEdit)
191
+ steps.push(mainStep(ctx, "expo-router/entry"));
192
+ return steps;
193
+ }
194
+ function mainStep(ctx, from) {
195
+ const pattern = new RegExp(`("main"\\s*:\\s*)"${from.replace(/[.*+?^${}()|[\]\\/]/g, "\\$&")}"`);
196
+ if (!pattern.test(ctx.pkgText)) {
197
+ return { file: "package.json", action: "advice", detail: 'set "main" to "index.js"' };
198
+ }
199
+ return { file: "package.json", action: "edit", detail: 'main → index.js', content: ctx.pkgText.replace(pattern, '$1"index.js"') };
200
+ }
201
+ function metroSteps(ctx) {
202
+ const { files } = ctx;
203
+ const existing = ["metro.config.js", "metro.config.cjs"].find((path) => files.isFile(path));
204
+ if (existing === undefined) {
205
+ if (!ctx.isExpo) {
206
+ return [
207
+ {
208
+ file: "metro.config.js",
209
+ action: "advice",
210
+ detail: "this is bare React Native, so add the helper yourself: wrap your config, module.exports = withTapline(mergeConfig(getDefaultConfig(__dirname), config)), with const { withTapline } = require('react-native-tapline/metro');",
211
+ },
212
+ ];
213
+ }
214
+ const name = ctx.pkg.type === "module" ? "metro.config.cjs" : "metro.config.js";
215
+ const content = `const { getDefaultConfig } = require('expo/metro-config');\n${METRO_REQUIRE}\n\n${METRO_FILE}\n`;
216
+ return [{ file: name, action: "create", detail: "the withTapline helper", content }];
217
+ }
218
+ const text = files.read(existing);
219
+ if (text.includes("withTapline"))
220
+ return [{ file: existing, action: "skip", detail: "already has withTapline" }];
221
+ const advice = () => [
222
+ {
223
+ file: existing,
224
+ action: "advice",
225
+ detail: `add ${METRO_REQUIRE} and wrap what you export: module.exports = withTapline(<your config>);`,
226
+ },
227
+ ];
228
+ const assignments = text.match(/module\.exports\s*=/g) ?? [];
229
+ if (assignments.length !== 1 || /\bexport\s+default\b/.test(text))
230
+ return advice();
231
+ const match = /module\.exports\s*=\s*/.exec(text);
232
+ if (match === null)
233
+ return advice();
234
+ const expression = text.slice(match.index + match[0].length).trim().replace(/;\s*$/, "").trim();
235
+ if (expression.length === 0 || hasTopLevelSemicolon(expression))
236
+ return advice();
237
+ const eol = eolOf(text);
238
+ const wrapped = `${text.slice(0, match.index)}module.exports = withTapline(${expression});${eol}`;
239
+ return [{ file: existing, action: "edit", detail: "required the helper and wrapped the exported config in withTapline", content: insertAtTop(wrapped, [METRO_REQUIRE]) }];
240
+ }
241
+ function routesDir(files) {
242
+ if (files.isDir("app"))
243
+ return "app";
244
+ if (files.isDir("src/app"))
245
+ return "src/app";
246
+ return "app";
247
+ }
248
+ function nativeIntentSteps(ctx) {
249
+ if (!ctx.isRouter)
250
+ return [];
251
+ const dir = routesDir(ctx.files);
252
+ const existing = ["ts", "tsx", "js", "jsx"].map((ext) => `${dir}/+native-intent.${ext}`).find((path) => ctx.files.isFile(path));
253
+ if (existing === undefined) {
254
+ return [{ file: `${dir}/+native-intent.ts`, action: "create", detail: "lets pairing links through", content: NATIVE_INTENT }];
255
+ }
256
+ if (ctx.files.read(existing).includes("isTaplineLink"))
257
+ return [{ file: existing, action: "skip", detail: "already lets pairing links through" }];
258
+ return [
259
+ {
260
+ file: existing,
261
+ action: "advice",
262
+ detail: "add import { isTaplineLink } from 'react-native-tapline'; and return null from redirectSystemPath when isTaplineLink(path) is true, before your own code",
263
+ },
264
+ ];
265
+ }
266
+ function envSteps(ctx) {
267
+ const { files } = ctx;
268
+ const line = `${ENV_NAME}=1`;
269
+ const steps = [];
270
+ if (!files.isFile(".env.local")) {
271
+ steps.push({ file: ".env.local", action: "create", detail: `${line}, for local Metro`, content: `${line}\n` });
272
+ }
273
+ else {
274
+ const text = files.read(".env.local");
275
+ const found = new RegExp(`^\\s*${ENV_NAME}\\s*=\\s*(.*?)\\s*$`, "m").exec(text);
276
+ if (found === null) {
277
+ const eol = eolOf(text);
278
+ const lead = text.length === 0 || text.endsWith("\n") ? "" : eol;
279
+ steps.push({ file: ".env.local", action: "edit", detail: `added ${line}`, content: `${text}${lead}${line}${eol}` });
280
+ }
281
+ else if ((found[1] ?? "").replace(/^["']|["']$/g, "") === "1") {
282
+ steps.push({ file: ".env.local", action: "skip", detail: `already has ${line}` });
283
+ }
284
+ else {
285
+ steps.push({ file: ".env.local", action: "advice", detail: `${ENV_NAME} is set to something other than 1. Change it to 1 to test with Tapline` });
286
+ }
287
+ }
288
+ const ignore = files.isFile(".gitignore") ? files.read(".gitignore") : "";
289
+ const ignored = ignore.split(/\r?\n/).some((raw) => {
290
+ const entry = raw.trim().replace(/^\//, "");
291
+ return [".env.local", ".env*.local", ".env*", "*.local", ".env.*"].includes(entry);
292
+ });
293
+ if (!ignored) {
294
+ steps.push({ file: ".gitignore", action: "advice", detail: "doesn't list .env.local. Add the line .env.local so it isn't committed" });
295
+ }
296
+ return steps;
297
+ }
298
+ function easSteps(ctx) {
299
+ const { files } = ctx;
300
+ if (!files.isFile("eas.json"))
301
+ return [];
302
+ let build;
303
+ try {
304
+ build = asObject(asObject(JSON.parse(files.read("eas.json")))?.build);
305
+ }
306
+ catch {
307
+ return [{ file: "eas.json", action: "advice", detail: "couldn't be read as JSON, so its profiles weren't checked" }];
308
+ }
309
+ if (build === undefined)
310
+ return [{ file: "eas.json", action: "skip", detail: "has no build profiles" }];
311
+ const on = [];
312
+ const off = [];
313
+ for (const [name, value] of Object.entries(build)) {
314
+ const profile = asObject(value);
315
+ if (profile === undefined)
316
+ continue;
317
+ const setting = asObject(profile.env)?.[ENV_NAME];
318
+ if (setting === undefined)
319
+ off.push(name);
320
+ else
321
+ on.push(`${name} (${String(setting)})`);
322
+ }
323
+ const steps = [];
324
+ const production = asObject(build.production);
325
+ const prodValue = asObject(production?.env)?.[ENV_NAME];
326
+ if (prodValue !== undefined && String(prodValue) === "1") {
327
+ steps.push({
328
+ file: "eas.json",
329
+ action: "warn",
330
+ detail: `the production profile turns Tapline on - remove ${ENV_NAME} there`,
331
+ });
332
+ }
333
+ if (on.length === 0) {
334
+ steps.push({ file: "eas.json", action: "advice", detail: `no profile sets ${ENV_NAME}. Set it to "1" in env in the profiles you test with (development, testflight), never in production` });
335
+ }
336
+ else {
337
+ steps.push({ file: "eas.json", action: "skip", detail: `profiles that set ${ENV_NAME}: ${on.join(", ")}${off.length > 0 ? `; not set in: ${off.join(", ")}` : ""}` });
338
+ }
339
+ return steps;
340
+ }
341
+ function installPlan(ctx) {
342
+ const packages = PACKAGES.filter((name) => !ctx.deps.has(name));
343
+ if (packages.length === 0)
344
+ return undefined;
345
+ return ctx.isExpo
346
+ ? { command: "npx", args: ["expo", "install", ...packages], packages }
347
+ : { command: "npm", args: ["install", ...packages], packages };
348
+ }
349
+ /** Works out what init would do, without changing anything. Throws InitRefusal when this isn't an app. */
350
+ export function planInit(files) {
351
+ if (!files.isFile("package.json")) {
352
+ throw new InitRefusal("There is no package.json here. Run this in your React Native or Expo app's folder, or pass --project <folder>.");
353
+ }
354
+ const pkgText = files.read("package.json");
355
+ let pkg;
356
+ try {
357
+ pkg = asObject(JSON.parse(pkgText));
358
+ }
359
+ catch {
360
+ pkg = undefined;
361
+ }
362
+ if (pkg === undefined)
363
+ throw new InitRefusal("package.json can't be read as JSON. Fix it and run this again.");
364
+ const deps = dependencyNames(pkg);
365
+ if (!deps.has("react-native") && !deps.has("expo")) {
366
+ throw new InitRefusal("This doesn't look like a React Native or Expo app: package.json lists neither react-native nor expo.");
367
+ }
368
+ const isExpo = deps.has("expo");
369
+ const isRouter = pkg.main === "expo-router/entry" || deps.has("expo-router");
370
+ const ctx = { files, pkg, pkgText, deps, isExpo, isRouter };
371
+ return {
372
+ steps: [...entrySteps(ctx), ...metroSteps(ctx), ...nativeIntentSteps(ctx), ...envSteps(ctx), ...easSteps(ctx)],
373
+ install: installPlan(ctx),
374
+ };
375
+ }
376
+ /** Writes the files of a plan. Returns the files it wrote. */
377
+ export function applyInit(plan, files) {
378
+ const written = [];
379
+ for (const step of plan.steps) {
380
+ if ((step.action === "create" || step.action === "edit") && step.content !== undefined) {
381
+ files.write(step.file, step.content);
382
+ written.push(step.file);
383
+ }
384
+ }
385
+ return written;
386
+ }
387
+ export const runInstallCommand = (command, args, cwd) => {
388
+ const result = spawnSync(command, args, { cwd, stdio: "inherit", shell: process.platform === "win32" });
389
+ if (result.error !== undefined)
390
+ throw result.error;
391
+ return result.status ?? 1;
392
+ };
393
+ const ICONS = { create: "✓", edit: "✓", skip: "•", advice: "!", warn: "!" };
394
+ export function formatStep(step, dryRun) {
395
+ const icon = ICONS[step.action];
396
+ const bracket = step.detail.length > 0 ? ` (${step.detail})` : "";
397
+ switch (step.action) {
398
+ case "create":
399
+ return `${icon} ${step.file}: ${dryRun ? "would create" : "created"}${bracket}`;
400
+ case "edit":
401
+ return `${icon} ${step.file}: ${dryRun ? "would edit" : "edited"}${bracket}`;
402
+ case "warn":
403
+ return `${icon} WARNING ${step.file}: ${step.detail}`;
404
+ default:
405
+ return `${icon} ${step.file}: ${step.detail}`;
406
+ }
407
+ }
408
+ const NEXT_STEPS = [
409
+ "",
410
+ "Next steps:",
411
+ "New native packages: make a new development build (eas build --profile development), then ask your agent to call pair. A development build loaded from this computer asks to connect by itself; tap Connect.",
412
+ ];
413
+ /** The whole command. Exit 0 on success, 1 when this isn't an app, 2 on an unexpected error. */
414
+ export function runInit(options = {}, deps = {}) {
415
+ const dir = resolve(options.project ?? ".");
416
+ const dryRun = options.dryRun === true;
417
+ const lines = [];
418
+ const emit = (line) => {
419
+ lines.push(line);
420
+ deps.print?.(line);
421
+ };
422
+ try {
423
+ if (!(existsSync(dir) && statSync(dir).isDirectory())) {
424
+ throw new InitRefusal(`${dir} is not a folder. Pass your app's folder to --project.`);
425
+ }
426
+ const files = deps.files ?? diskAccess(dir);
427
+ const plan = planInit(files);
428
+ if (dryRun)
429
+ emit("Dry run: nothing will be changed.");
430
+ for (const step of plan.steps)
431
+ emit(formatStep(step, dryRun));
432
+ let changed = plan.steps.some((s) => s.action === "create" || s.action === "edit");
433
+ if (!dryRun)
434
+ applyInit(plan, files);
435
+ if (plan.install !== undefined) {
436
+ const text = [plan.install.command, ...plan.install.args].join(" ");
437
+ if (dryRun) {
438
+ emit(`• packages: would run ${text}`);
439
+ changed = true;
440
+ }
441
+ else if (options.install === false) {
442
+ emit(`! packages: not installed. Run this yourself: ${text}`);
443
+ changed = true;
444
+ }
445
+ else {
446
+ emit(`• packages: running ${text}`);
447
+ const status = (deps.runInstall ?? runInstallCommand)(plan.install.command, plan.install.args, dir);
448
+ if (status !== 0) {
449
+ emit(`! packages: the install failed (exit ${status}). The file changes above are done. Run this yourself: ${text}`);
450
+ return { exitCode: 2, lines, changed: true };
451
+ }
452
+ emit(`✓ packages: installed ${plan.install.packages.join(", ")}`);
453
+ changed = true;
454
+ }
455
+ }
456
+ else {
457
+ emit("• packages: already installed");
458
+ }
459
+ if (changed)
460
+ for (const line of NEXT_STEPS)
461
+ emit(line);
462
+ else
463
+ emit("\nNothing to change. Tapline is already set up here.");
464
+ return { exitCode: 0, lines, changed };
465
+ }
466
+ catch (error) {
467
+ if (error instanceof InitRefusal) {
468
+ emit(error.message);
469
+ return { exitCode: 1, lines, changed: false };
470
+ }
471
+ emit(`tapline init stopped: ${error instanceof Error ? error.message : String(error)}`);
472
+ return { exitCode: 2, lines, changed: false };
473
+ }
474
+ }
475
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * `inspect` (Tapline 1.1): from the screen to the code. The app finds the components and the source line
4
+ * (React's `_debugStack`, mapped by Metro); the host turns the path into one relative to the app's project
5
+ * and, when the file is on this computer, shows the line itself.
6
+ */
7
+ export declare const inspectResultSchema: z.ZodObject<{
8
+ element: z.ZodObject<{
9
+ ref: z.ZodString;
10
+ type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11
+ role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12
+ testID: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
14
+ text: z.ZodOptional<z.ZodNullable<z.ZodString>>;
15
+ textMore: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
16
+ value: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
17
+ placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
18
+ frame: z.ZodOptional<z.ZodNullable<z.ZodObject<{
19
+ x: z.ZodNumber;
20
+ y: z.ZodNumber;
21
+ width: z.ZodNumber;
22
+ height: z.ZodNumber;
23
+ }, z.core.$strip>>>;
24
+ actions: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
25
+ disabled: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
26
+ selected: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
27
+ checked: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>>;
28
+ }, z.core.$strip>;
29
+ source: z.ZodObject<{
30
+ components: z.ZodArray<z.ZodString>;
31
+ location: z.ZodNullable<z.ZodObject<{
32
+ file: z.ZodString;
33
+ line: z.ZodNumber;
34
+ column: z.ZodNumber;
35
+ component: z.ZodOptional<z.ZodNullable<z.ZodString>>;
36
+ direct: z.ZodOptional<z.ZodBoolean>;
37
+ }, z.core.$strip>>;
38
+ usedAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodObject<{
39
+ file: z.ZodString;
40
+ line: z.ZodNumber;
41
+ column: z.ZodNumber;
42
+ component: z.ZodOptional<z.ZodNullable<z.ZodString>>;
43
+ }, z.core.$strip>>, z.ZodPipe<z.ZodObject<{
44
+ file: z.ZodString;
45
+ line: z.ZodNumber;
46
+ column: z.ZodNumber;
47
+ component: z.ZodOptional<z.ZodNullable<z.ZodString>>;
48
+ }, z.core.$strip>, z.ZodTransform<{
49
+ file: string;
50
+ line: number;
51
+ column: number;
52
+ component?: string | null | undefined;
53
+ }[], {
54
+ file: string;
55
+ line: number;
56
+ column: number;
57
+ component?: string | null | undefined;
58
+ }>>]>>;
59
+ props: z.ZodRecord<z.ZodString, z.ZodString>;
60
+ }, z.core.$strip>;
61
+ }, z.core.$strip>;
62
+ export type InspectResult = z.infer<typeof inspectResultSchema>;
63
+ export interface FileAccess {
64
+ exists(path: string): boolean;
65
+ read(path: string): string;
66
+ }
67
+ /** The app's project folder for a source file: the nearest folder above it with a package.json. */
68
+ export declare function projectRoot(file: string, files?: FileAccess): string | null;
69
+ /** A path for people and agents: relative to the app's project, with forward slashes; never absolute. */
70
+ export declare function shownPath(file: string, files?: FileAccess): string;
71
+ /** The source line, trimmed and cut to 120 characters; null when the file isn't on this computer. */
72
+ export declare function sourceLine(file: string, line: number, files?: FileAccess): string | null;
73
+ /** The first line of a file that writes this id as a string literal ("id", 'id' or `id`); null when none. */
74
+ export declare function literalLine(file: string, id: string, files?: FileAccess): number | null;
75
+ export declare function formatInspect(result: InspectResult, files?: FileAccess): string;