tapline-host 1.4.0 → 1.6.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 (122) hide show
  1. package/dist/accounts.d.ts +72 -0
  2. package/dist/accounts.js +208 -0
  3. package/dist/accounts.js.map +1 -0
  4. package/dist/actionlog.d.ts +20 -0
  5. package/dist/actionlog.js.map +1 -1
  6. package/dist/animations.d.ts +39 -0
  7. package/dist/animations.js +124 -0
  8. package/dist/animations.js.map +1 -0
  9. package/dist/api.d.ts +43 -0
  10. package/dist/api.js +154 -0
  11. package/dist/api.js.map +1 -0
  12. package/dist/audit.d.ts +3 -0
  13. package/dist/audit.js +1 -1
  14. package/dist/audit.js.map +1 -1
  15. package/dist/bin.d.ts +2 -0
  16. package/dist/bin.js +19 -0
  17. package/dist/bin.js.map +1 -0
  18. package/dist/brief.d.ts +41 -0
  19. package/dist/brief.js +78 -0
  20. package/dist/brief.js.map +1 -0
  21. package/dist/cli.d.ts +41 -1
  22. package/dist/cli.js +100 -53
  23. package/dist/cli.js.map +1 -1
  24. package/dist/conditions.d.ts +36 -0
  25. package/dist/conditions.js +67 -0
  26. package/dist/conditions.js.map +1 -0
  27. package/dist/confirm.d.ts +21 -2
  28. package/dist/confirm.js +39 -6
  29. package/dist/confirm.js.map +1 -1
  30. package/dist/dispatch.d.ts +27 -0
  31. package/dist/dispatch.js +114 -0
  32. package/dist/dispatch.js.map +1 -0
  33. package/dist/doctor.d.ts +5 -0
  34. package/dist/doctor.js +20 -0
  35. package/dist/doctor.js.map +1 -1
  36. package/dist/drive.d.ts +184 -0
  37. package/dist/drive.js +908 -0
  38. package/dist/drive.js.map +1 -0
  39. package/dist/elicit.d.ts +90 -0
  40. package/dist/elicit.js +179 -0
  41. package/dist/elicit.js.map +1 -0
  42. package/dist/format.d.ts +16 -0
  43. package/dist/format.js +81 -24
  44. package/dist/format.js.map +1 -1
  45. package/dist/images.d.ts +35 -0
  46. package/dist/images.js +76 -6
  47. package/dist/images.js.map +1 -1
  48. package/dist/inspect.d.ts +1 -0
  49. package/dist/journey.d.ts +276 -0
  50. package/dist/journey.js +368 -0
  51. package/dist/journey.js.map +1 -0
  52. package/dist/journeyexport.d.ts +58 -0
  53. package/dist/journeyexport.js +318 -0
  54. package/dist/journeyexport.js.map +1 -0
  55. package/dist/journeygif.d.ts +62 -0
  56. package/dist/journeygif.js +192 -0
  57. package/dist/journeygif.js.map +1 -0
  58. package/dist/journeyreport.d.ts +202 -0
  59. package/dist/journeyreport.js +666 -0
  60. package/dist/journeyreport.js.map +1 -0
  61. package/dist/mapcmd.d.ts +200 -0
  62. package/dist/mapcmd.js +412 -0
  63. package/dist/mapcmd.js.map +1 -0
  64. package/dist/mapfile.d.ts +155 -0
  65. package/dist/mapfile.js +575 -0
  66. package/dist/mapfile.js.map +1 -0
  67. package/dist/mcp.d.ts +14 -11
  68. package/dist/mcp.js +50 -318
  69. package/dist/mcp.js.map +1 -1
  70. package/dist/media.d.ts +88 -0
  71. package/dist/media.js +263 -0
  72. package/dist/media.js.map +1 -0
  73. package/dist/nochange.d.ts +77 -0
  74. package/dist/nochange.js +77 -0
  75. package/dist/nochange.js.map +1 -0
  76. package/dist/places.d.ts +239 -0
  77. package/dist/places.js +823 -0
  78. package/dist/places.js.map +1 -0
  79. package/dist/policy.d.ts +18 -0
  80. package/dist/policy.js +52 -0
  81. package/dist/policy.js.map +1 -1
  82. package/dist/protocol.d.ts +27 -1
  83. package/dist/protocol.js +25 -0
  84. package/dist/protocol.js.map +1 -1
  85. package/dist/reflexes.d.ts +59 -0
  86. package/dist/reflexes.js +133 -0
  87. package/dist/reflexes.js.map +1 -0
  88. package/dist/report.d.ts +32 -2
  89. package/dist/report.js +154 -9
  90. package/dist/report.js.map +1 -1
  91. package/dist/routes.d.ts +115 -0
  92. package/dist/routes.js +287 -0
  93. package/dist/routes.js.map +1 -0
  94. package/dist/run.d.ts +28 -1
  95. package/dist/run.js +32 -3
  96. package/dist/run.js.map +1 -1
  97. package/dist/runtime.d.ts +60 -0
  98. package/dist/runtime.js +255 -0
  99. package/dist/runtime.js.map +1 -0
  100. package/dist/script.d.ts +114 -10
  101. package/dist/script.js +30 -2
  102. package/dist/script.js.map +1 -1
  103. package/dist/server.d.ts +48 -2
  104. package/dist/server.js +88 -13
  105. package/dist/server.js.map +1 -1
  106. package/dist/thincall.d.ts +13 -0
  107. package/dist/thincall.js +335 -0
  108. package/dist/thincall.js.map +1 -0
  109. package/dist/tool-text-data.d.ts +10 -5
  110. package/dist/tool-text-data.js +11 -6
  111. package/dist/tool-text-data.js.map +1 -1
  112. package/dist/tool-text.d.ts +1 -1
  113. package/dist/tools.d.ts +585 -5
  114. package/dist/tools.js +2926 -185
  115. package/dist/tools.js.map +1 -1
  116. package/dist/uxcheck.d.ts +103 -0
  117. package/dist/uxcheck.js +128 -0
  118. package/dist/uxcheck.js.map +1 -0
  119. package/package.json +3 -2
  120. package/skills/tapline/SKILL.md +57 -11
  121. package/skills/tapline/references/personas.md +45 -0
  122. package/skills/tapline/references/setup.md +6 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journey.js","sourceRoot":"","sources":["../src/journey.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { Finding } from "./journeyreport.js";
2
+ import type { JourneyExport } from "./journey.js";
3
+ /**
4
+ * Export of a journey report to GitHub (AGENT-TOOLS 1.12 §17.5), only when `stop` carries `export` with `confirm`.
5
+ * It runs through the user's own `gh` and git, by a runner that tests replace. It works in a temporary clone, never
6
+ * the user's working tree, writes one commit holding only the report's files (not every raw frame), and the report
7
+ * stays local when anything fails.
8
+ */
9
+ export interface RunResult {
10
+ /** The exit code; null when the program couldn't start. */
11
+ code: number | null;
12
+ stdout: string;
13
+ stderr: string;
14
+ /** The program isn't installed (or not on the PATH). */
15
+ missing?: boolean;
16
+ }
17
+ export type Runner = (command: string, args: string[], options?: {
18
+ cwd?: string;
19
+ }) => Promise<RunResult>;
20
+ /** The real runner: the user's own `gh` and `git`. Only the host's `mcp` command builds one; tests never do. */
21
+ export declare const realRunner: Runner;
22
+ export interface ExportInput {
23
+ target: JourneyExport;
24
+ /** The report folder on this computer, and its name. */
25
+ folder: string;
26
+ name: string;
27
+ goal: string;
28
+ summary: string;
29
+ findingsLine: string;
30
+ findings: readonly Finding[];
31
+ /** The files to upload, relative to the folder: the report, its GIF and the pictures it uses; never every raw frame. */
32
+ files: readonly string[];
33
+ /** What the comment shows first: the GIF, else the first picture of the path. */
34
+ headline: string | undefined;
35
+ }
36
+ export type ExportOutcome = {
37
+ ok: true;
38
+ lines: string[];
39
+ } | {
40
+ ok: false;
41
+ message: string;
42
+ };
43
+ /**
44
+ * App text made inert in a GitHub comment: no @mention that pings, no picture, link or HTML it can add (finding 7).
45
+ * Markdown's own escapes, a zero-width space after `@`, and links broken so they don't render.
46
+ */
47
+ export declare function inert(text: string): string;
48
+ /**
49
+ * Whether the export's repository is public and the agent didn't say `public: true`, asked before the journey ends so a
50
+ * refused public export can be tried again. Everything else (an invalid target, gh missing or not signed in, an answer
51
+ * that can't be read) is null here: the export itself says so, after the journey has ended and its report is written.
52
+ */
53
+ export declare function exportRefusal(target: JourneyExport, run: Runner): Promise<string | null>;
54
+ /**
55
+ * Puts the report on GitHub. `{to: "pr"}`: into the pull request's own branch under `.tapline/reports/<name>/`, with a
56
+ * comment. `{to: "issue"}`: to the `qa-reports` branch (made as an orphan when missing), with an issue linking it.
57
+ */
58
+ export declare function exportReport(input: ExportInput, run: Runner, makeTemp?: () => string): Promise<ExportOutcome>;
@@ -0,0 +1,318 @@
1
+ import { execFile } from "node:child_process";
2
+ import { copyFileSync, existsSync, lstatSync, mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
5
+ /** The real runner: the user's own `gh` and `git`. Only the host's `mcp` command builds one; tests never do. */
6
+ export const realRunner = (command, args, options) => new Promise((resolve) => {
7
+ execFile(command, args, { ...(options?.cwd !== undefined ? { cwd: options.cwd } : {}), timeout: 120_000, maxBuffer: 16 * 1024 * 1024, windowsHide: true, env: { ...process.env, GIT_TERMINAL_PROMPT: "0", GH_PROMPT_DISABLED: "1" } }, (error, stdout, stderr) => {
8
+ if (error === null)
9
+ return resolve({ code: 0, stdout, stderr });
10
+ const code = error.code;
11
+ if (code === "ENOENT")
12
+ return resolve({ code: null, stdout, stderr: error.message, missing: true });
13
+ resolve({ code: typeof code === "number" ? code : 1, stdout, stderr: stderr !== "" ? stderr : error.message });
14
+ });
15
+ });
16
+ /** owner/name as GitHub allows them: no leading dash or dot, no `..` (1.5 review, finding 7). */
17
+ const REPO = /^[A-Za-z0-9][A-Za-z0-9-]*\/[A-Za-z0-9_][A-Za-z0-9._-]*$/;
18
+ const QA_BRANCH = "qa-reports";
19
+ /** Tokens never reach a message. */
20
+ function plain(text) {
21
+ const line = text.split(/\r?\n/).map((l) => l.trim()).find((l) => l !== "") ?? "";
22
+ return line.replace(/gh[pousr]_[A-Za-z0-9]{20,}/g, "***").replace(/(https?:\/\/)[^/@\s]+@/g, "$1").slice(0, 240);
23
+ }
24
+ function explain(result, what, repo) {
25
+ if (result.missing === true) {
26
+ return "the GitHub CLI (gh) isn't installed or isn't on the PATH; install it from https://cli.github.com and sign in with `gh auth login`";
27
+ }
28
+ const said = `${result.stderr}\n${result.stdout}`;
29
+ if (/not logged in|gh auth login|authentication required|bad credentials|requires authentication/i.test(said)) {
30
+ return "gh isn't signed in; run `gh auth login`, then export again";
31
+ }
32
+ if (what.startsWith("git push") && /permission|403|denied|protected branch|not allowed|forbidden/i.test(said)) {
33
+ return `${what} was refused: you may have no write access to ${repo}, or the branch is protected`;
34
+ }
35
+ if (/could not resolve|404|not found|no such/i.test(said)) {
36
+ return `GitHub says ${repo} (or that pull request) wasn't found, or you have no access to it`;
37
+ }
38
+ if (/permission|403|forbidden/i.test(said))
39
+ return `you have no access to ${repo} (${plain(said)})`;
40
+ const reason = plain(said);
41
+ return `${what} failed${reason !== "" ? `: ${reason}` : ""}`;
42
+ }
43
+ /** `https://github.com/owner/name/raw/branch/path`: opens for people signed in to GitHub, private repositories too. */
44
+ function rawUrl(repo, branch, path) {
45
+ const encode = (value) => value.split("/").map(encodeURIComponent).join("/");
46
+ return `https://github.com/${repo}/raw/${encode(branch)}/${encode(path)}`;
47
+ }
48
+ /**
49
+ * App text made inert in a GitHub comment: no @mention that pings, no picture, link or HTML it can add (finding 7).
50
+ * Markdown's own escapes, a zero-width space after `@`, and links broken so they don't render.
51
+ */
52
+ export function inert(text) {
53
+ return text
54
+ .replace(/[\\`*_[\]<>|!]/g, (c) => `\\${c}`)
55
+ .replace(/@/g, "@\u200b")
56
+ .replace(/(https?):\/\//gi, "$1\u200b://")
57
+ // GitHub also turns a bare `www.` word into a link.
58
+ .replace(/\bwww\./gi, (w) => `${w.slice(0, 3)}\u200b.`);
59
+ }
60
+ function bodyOf(input, pictureUrl, reportUrl, all) {
61
+ const lines = [inert(input.summary), "", input.findingsLine, ""];
62
+ if (input.headline !== undefined)
63
+ lines.push(`![The journey](${pictureUrl(input.headline)})`, "");
64
+ const shown = all ? input.findings : input.findings.slice(0, 8);
65
+ shown.forEach((f, i) => {
66
+ lines.push(`${i + 1}. **${f.severity}** ${f.kind}: ${inert(f.title)}`);
67
+ if (all && f.shot !== undefined)
68
+ lines.push("", `![Finding ${i + 1}](${pictureUrl(f.shot)})`, "");
69
+ });
70
+ if (!all && input.findings.length > shown.length)
71
+ lines.push(`(+${input.findings.length - shown.length} more in the report.)`);
72
+ lines.push("", `Full report: [report.md](${reportUrl}) (also report.html in the same folder).`, "", "Written by Tapline.");
73
+ return lines.join("\n");
74
+ }
75
+ function validTarget(target) {
76
+ if (!REPO.test(target.repo) || target.repo.includes(".."))
77
+ return `export repo ${JSON.stringify(target.repo)} isn't owner/name`;
78
+ if (target.to === "pr" && (target.pr === undefined || !Number.isInteger(target.pr) || target.pr < 1))
79
+ return "export to a pull request needs its number";
80
+ return null;
81
+ }
82
+ function safeBranch(branch) {
83
+ return branch !== "" && !branch.startsWith("-") && !/[\s~^:?*[\\]|\.\.|@\{/.test(branch);
84
+ }
85
+ function inside(root, path) {
86
+ return path === root || path.startsWith(root + sep);
87
+ }
88
+ /**
89
+ * Makes the folders from `base` down to `dir` one at a time, refusing any that is a link (a symlink or a junction):
90
+ * a repository can hold a `reports` link that points out of the clone (Codex review of 1.5.0).
91
+ */
92
+ function makeFoldersInside(base, dir) {
93
+ const steps = relative(base, dir).split(sep).filter((step) => step !== "");
94
+ let at = base;
95
+ for (const step of steps) {
96
+ at = join(at, step);
97
+ if (existsSync(at) || isLink(at)) {
98
+ if (isLink(at) || !lstatSync(at).isDirectory())
99
+ throw new Error(`the repository has a link or a file where the report goes (${step}); nothing was exported`);
100
+ }
101
+ else {
102
+ mkdirSync(at);
103
+ }
104
+ }
105
+ }
106
+ function isLink(path) {
107
+ try {
108
+ return lstatSync(path).isSymbolicLink();
109
+ }
110
+ catch {
111
+ return false;
112
+ }
113
+ }
114
+ /**
115
+ * The files, and only them, into `into` (made if need be), keeping their folders. Both ends are checked: a source is
116
+ * a plain file inside the report folder, and every folder and file written is inside the clone, with no link on the way.
117
+ */
118
+ function copyReport(folder, clone, into, files) {
119
+ const root = realpathSync(resolve(folder));
120
+ const cloneRoot = realpathSync(resolve(clone));
121
+ const target = resolve(into);
122
+ if (!inside(resolve(clone), target))
123
+ throw new Error("the report would go outside the clone; nothing was exported");
124
+ for (const file of files) {
125
+ // Never outside the report folder, whatever a list holds (1.5 review, finding 7).
126
+ const from = resolve(root, file);
127
+ if (isAbsolute(file) || file.split(/[\\/]/).includes("..") || !inside(root, from)) {
128
+ throw new Error(`the report lists a file outside its folder (${JSON.stringify(file)}); nothing was exported`);
129
+ }
130
+ if (isLink(from) || !inside(root, realpathSync(from))) {
131
+ throw new Error(`the report lists a link (${JSON.stringify(file)}); nothing was exported`);
132
+ }
133
+ const to = join(target, file);
134
+ makeFoldersInside(resolve(clone), dirname(to));
135
+ if (!inside(cloneRoot, realpathSync(dirname(to))))
136
+ throw new Error("the report would go outside the clone; nothing was exported");
137
+ if (isLink(to))
138
+ throw new Error(`the repository has a link where a report file goes (${JSON.stringify(file)}); nothing was exported`);
139
+ copyFileSync(from, to);
140
+ }
141
+ }
142
+ /** A public repository is refused unless the agent said `public: true`; what can't be read is refused too. */
143
+ async function visibilityRefusal(run, repo, allowed) {
144
+ const seen = await run("gh", ["repo", "view", repo, "--json", "visibility"]);
145
+ if (seen.code !== 0)
146
+ return explain(seen, "gh repo view", repo);
147
+ let visibility = "";
148
+ try {
149
+ const parsed = JSON.parse(seen.stdout);
150
+ if (typeof parsed === "object" && parsed !== null && "visibility" in parsed && typeof parsed.visibility === "string")
151
+ visibility = parsed.visibility.toUpperCase();
152
+ }
153
+ catch {
154
+ // refused below
155
+ }
156
+ if (visibility === "")
157
+ return `Tapline couldn't tell whether ${repo} is public, so it wrote nothing`;
158
+ if (visibility === "PUBLIC" && !allowed)
159
+ return publicWords(repo);
160
+ return null;
161
+ }
162
+ function publicWords(repo) {
163
+ return `${repo} is a public repository, so the report (screenshots of the app included) would be visible to everyone; export again with public: true if your user wants that`;
164
+ }
165
+ /**
166
+ * Whether the export's repository is public and the agent didn't say `public: true`, asked before the journey ends so a
167
+ * refused public export can be tried again. Everything else (an invalid target, gh missing or not signed in, an answer
168
+ * that can't be read) is null here: the export itself says so, after the journey has ended and its report is written.
169
+ */
170
+ export async function exportRefusal(target, run) {
171
+ if (target.confirm !== true || target.public === true || validTarget(target) !== null)
172
+ return null;
173
+ try {
174
+ const seen = await run("gh", ["repo", "view", target.repo, "--json", "visibility"]);
175
+ if (seen.code !== 0)
176
+ return null;
177
+ const parsed = JSON.parse(seen.stdout);
178
+ const visibility = typeof parsed === "object" && parsed !== null && "visibility" in parsed && typeof parsed.visibility === "string" ? parsed.visibility.toUpperCase() : "";
179
+ return visibility === "PUBLIC" ? publicWords(target.repo) : null;
180
+ }
181
+ catch {
182
+ return null;
183
+ }
184
+ }
185
+ /**
186
+ * Puts the report on GitHub. `{to: "pr"}`: into the pull request's own branch under `.tapline/reports/<name>/`, with a
187
+ * comment. `{to: "issue"}`: to the `qa-reports` branch (made as an orphan when missing), with an issue linking it.
188
+ */
189
+ export async function exportReport(input, run, makeTemp = () => mkdtempSync(join(tmpdir(), "tapline-export-"))) {
190
+ if (input.target.confirm !== true)
191
+ return { ok: false, message: "export needs confirm: true (your user asked for it)" };
192
+ const bad = validTarget(input.target);
193
+ if (bad !== null)
194
+ return { ok: false, message: bad };
195
+ const repo = input.target.repo;
196
+ const tmp = makeTemp();
197
+ const clone = join(tmp, "repo");
198
+ try {
199
+ const auth = await run("gh", ["auth", "status"]);
200
+ if (auth.code !== 0)
201
+ return { ok: false, message: explain(auth, "gh auth status", repo) };
202
+ return input.target.to === "pr" ? await toPullRequest(input, run, repo, input.target.pr ?? 0, tmp, clone) : await toIssue(input, run, repo, tmp, clone);
203
+ }
204
+ catch (error) {
205
+ return { ok: false, message: error instanceof Error ? error.message : String(error) };
206
+ }
207
+ finally {
208
+ // A temporary folder that won't go away must not turn a done export into a failure (finding 12).
209
+ try {
210
+ rmSync(tmp, { recursive: true, force: true });
211
+ }
212
+ catch {
213
+ // left for the system to clean up
214
+ }
215
+ }
216
+ }
217
+ async function toPullRequest(input, run, repo, pr, tmp, clone) {
218
+ const view = await run("gh", ["pr", "view", String(pr), "--repo", repo, "--json", "headRefName,headRepository,headRepositoryOwner,isCrossRepository,url"]);
219
+ if (view.code !== 0)
220
+ return { ok: false, message: explain(view, "gh pr view", repo) };
221
+ let head = "";
222
+ let url = `https://github.com/${repo}/pull/${pr}`;
223
+ let headRepo = repo;
224
+ try {
225
+ const parsed = JSON.parse(view.stdout);
226
+ if (typeof parsed === "object" && parsed !== null) {
227
+ const o = parsed;
228
+ if (typeof o["headRefName"] === "string")
229
+ head = o["headRefName"];
230
+ if (typeof o["url"] === "string")
231
+ url = o["url"];
232
+ const owner = typeof o["headRepositoryOwner"] === "object" && o["headRepositoryOwner"] !== null ? o["headRepositoryOwner"]["login"] : undefined;
233
+ const name = typeof o["headRepository"] === "object" && o["headRepository"] !== null ? o["headRepository"]["name"] : undefined;
234
+ if (typeof owner === "string" && typeof name === "string")
235
+ headRepo = `${owner}/${name}`;
236
+ else if (o["isCrossRepository"] === true)
237
+ headRepo = "";
238
+ }
239
+ }
240
+ catch {
241
+ return { ok: false, message: "gh pr view answered something Tapline couldn't read" };
242
+ }
243
+ if (!safeBranch(head))
244
+ return { ok: false, message: "the pull request's branch name isn't one Tapline will push to" };
245
+ if (headRepo === "")
246
+ return { ok: false, message: "the pull request's head repository couldn't be told, so nothing was written" };
247
+ const fork = headRepo.toLowerCase() !== repo.toLowerCase();
248
+ if (fork && input.target.fork !== true) {
249
+ return { ok: false, message: `the pull request's branch lives in ${headRepo}, not ${repo}, so the report would be written there; export again with fork: true if your user wants that, or export to an issue` };
250
+ }
251
+ const refusedComment = await visibilityRefusal(run, repo, input.target.public === true);
252
+ if (refusedComment !== null)
253
+ return { ok: false, message: refusedComment };
254
+ if (fork) {
255
+ const refusedFork = await visibilityRefusal(run, headRepo, input.target.public === true);
256
+ if (refusedFork !== null)
257
+ return { ok: false, message: refusedFork };
258
+ }
259
+ const cloned = await run("gh", ["repo", "clone", headRepo, clone, "--", "--branch", head, "--single-branch", "--depth", "1"]);
260
+ if (cloned.code !== 0)
261
+ return { ok: false, message: explain(cloned, "gh repo clone", headRepo) };
262
+ const where = `.tapline/reports/${input.name}`;
263
+ copyReport(input.folder, clone, join(clone, where), input.files);
264
+ const git = async (args, what) => {
265
+ const done = await run("git", args, { cwd: clone });
266
+ return done.code === 0 ? null : explain(done, what, headRepo);
267
+ };
268
+ const failure = (await git(["add", "-f", "--", where], "git add")) ??
269
+ (await git(["commit", "-m", `QA journey report: ${input.goal}`.slice(0, 120)], "git commit")) ??
270
+ (await git(["push", "origin", `HEAD:refs/heads/${head}`], "git push"));
271
+ if (failure !== null)
272
+ return { ok: false, message: failure };
273
+ const comment = join(tmp, "comment.md");
274
+ writeFileSync(comment, bodyOf(input, (p) => rawUrl(headRepo, head, `${where}/${p}`), rawUrl(headRepo, head, `${where}/report.md`), false), "utf8");
275
+ const posted = await run("gh", ["pr", "comment", String(pr), "--repo", repo, "--body-file", comment]);
276
+ if (posted.code !== 0)
277
+ return { ok: false, message: `${explain(posted, "gh pr comment", repo)} (the report was already pushed to ${where}/ on ${head} of ${headRepo})` };
278
+ return { ok: true, lines: [`Exported: committed ${input.files.length} files of the report to ${where}/ on branch ${head} of ${headRepo}, and commented on ${url}.`] };
279
+ }
280
+ async function toIssue(input, run, repo, tmp, clone) {
281
+ const refused = await visibilityRefusal(run, repo, input.target.public === true);
282
+ if (refused !== null)
283
+ return { ok: false, message: refused };
284
+ const branch = await run("gh", ["api", `repos/${repo}/branches/${QA_BRANCH}`, "--silent"]);
285
+ const exists = branch.code === 0;
286
+ if (!exists && !/404|not found/i.test(`${branch.stderr}${branch.stdout}`))
287
+ return { ok: false, message: explain(branch, "gh api", repo) };
288
+ const cloned = exists
289
+ ? await run("gh", ["repo", "clone", repo, clone, "--", "--branch", QA_BRANCH, "--single-branch", "--depth", "1"])
290
+ : await run("gh", ["repo", "clone", repo, clone, "--", "--depth", "1", "--no-checkout"]);
291
+ if (cloned.code !== 0)
292
+ return { ok: false, message: explain(cloned, "gh repo clone", repo) };
293
+ const git = async (args, what) => {
294
+ const done = await run("git", args, { cwd: clone });
295
+ return done.code === 0 ? null : explain(done, what, repo);
296
+ };
297
+ if (!exists) {
298
+ const orphan = (await git(["checkout", "--orphan", QA_BRANCH], "git checkout --orphan")) ?? (await git(["rm", "-rf", "-q", "--ignore-unmatch", "."], "git rm"));
299
+ if (orphan !== null)
300
+ return { ok: false, message: orphan };
301
+ }
302
+ const where = `reports/${input.name}`;
303
+ copyReport(input.folder, clone, join(clone, where), input.files);
304
+ const failure = (await git(["add", "-f", "--", where], "git add")) ??
305
+ (await git(["commit", "-m", `QA journey report: ${input.goal}`.slice(0, 120)], "git commit")) ??
306
+ (await git(["push", "origin", `HEAD:refs/heads/${QA_BRANCH}`], "git push"));
307
+ if (failure !== null)
308
+ return { ok: false, message: failure };
309
+ const body = join(tmp, "issue.md");
310
+ writeFileSync(body, bodyOf(input, (p) => rawUrl(repo, QA_BRANCH, `${where}/${p}`), rawUrl(repo, QA_BRANCH, `${where}/report.md`), true), "utf8");
311
+ const title = `QA journey: ${input.goal}`.slice(0, 120);
312
+ const created = await run("gh", ["issue", "create", "--repo", repo, "--title", title, "--body-file", body]);
313
+ if (created.code !== 0)
314
+ return { ok: false, message: `${explain(created, "gh issue create", repo)} (the report was already pushed to ${where}/ on ${QA_BRANCH})` };
315
+ const url = created.stdout.trim().split(/\s+/).find((w) => w.startsWith("https://")) ?? "";
316
+ return { ok: true, lines: [`Exported: pushed ${input.files.length} files of the report to ${where}/ on branch ${QA_BRANCH} of ${repo}${exists ? "" : " (made it)"}, and opened an issue${url !== "" ? `: ${url}` : "."}`] };
317
+ }
318
+ //# sourceMappingURL=journeyexport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journeyexport.js","sourceRoot":"","sources":["../src/journeyexport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { type Pixels } from "./images.js";
2
+ export declare const GIF_WIDTH = 360;
3
+ export declare const GIF_MAX_BYTES: number;
4
+ /** One kept frame: the screen after a step, when it was taken, and where the step touched (shares of the screen). */
5
+ export interface GifFrame {
6
+ pixels: Pixels;
7
+ at: number;
8
+ tap?: {
9
+ x: number;
10
+ y: number;
11
+ };
12
+ /** Set by `fitted` when the picture was letterboxed: its place in the canvas, as shares of it. */
13
+ fit?: {
14
+ x: number;
15
+ y: number;
16
+ w: number;
17
+ h: number;
18
+ };
19
+ }
20
+ export interface GifResult {
21
+ bytes: Uint8Array;
22
+ /** Pictures in the file (frames and tap rings). */
23
+ frames: number;
24
+ width: number;
25
+ height: number;
26
+ /** Pictures dropped to stay under the cap. */
27
+ dropped: number;
28
+ /** The cap needed the pictures at half the size. */
29
+ shrunk: boolean;
30
+ }
31
+ export interface Slide {
32
+ pixels: Pixels;
33
+ delay: number;
34
+ /** A frame of a still stretch: the first to go when the file is too big. */
35
+ still: boolean;
36
+ /** The screen before a tap, with the ring drawn on it. */
37
+ ring: boolean;
38
+ }
39
+ /** The frames made the same size as the first one. */
40
+ export declare function fitted(frames: GifFrame[], width: number): GifFrame[];
41
+ export declare function slidesOf(frames: GifFrame[]): Slide[];
42
+ /** How the frames are laid out in time (for tests): each picture's delay in ms, whether it is a still stretch, whether it is a tap ring. */
43
+ export declare function slidePlan(frames: GifFrame[]): Array<{
44
+ delay: number;
45
+ still: boolean;
46
+ ring: boolean;
47
+ }>;
48
+ /** The GIF of a journey. `maxBytes` and `width` are for tests; the defaults are the spec's (3 MB, 360 px). */
49
+ export declare function encodeJourneyGif(frames: GifFrame[], options?: {
50
+ maxBytes?: number;
51
+ width?: number;
52
+ }): GifResult;
53
+ export interface GifInfo {
54
+ version: string;
55
+ width: number;
56
+ height: number;
57
+ frames: number;
58
+ /** 0 = forever; undefined when the file says nothing. */
59
+ loops: number | undefined;
60
+ }
61
+ /** Reads a GIF's header and counts its pictures by walking its blocks; throws when it isn't one. */
62
+ export declare function gifInfo(bytes: Uint8Array): GifInfo;