tapline-host 1.0.0 → 1.2.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/dist/actionlog.d.ts +43 -0
- package/dist/actionlog.js +62 -0
- package/dist/actionlog.js.map +1 -0
- package/dist/audit.d.ts +44 -0
- package/dist/audit.js +60 -0
- package/dist/audit.js.map +1 -0
- package/dist/cli.js +82 -17
- package/dist/cli.js.map +1 -1
- package/dist/confirm.d.ts +69 -0
- package/dist/confirm.js +120 -0
- package/dist/confirm.js.map +1 -0
- package/dist/format.d.ts +8 -1
- package/dist/format.js +53 -11
- package/dist/format.js.map +1 -1
- package/dist/images.d.ts +7 -0
- package/dist/images.js +10 -0
- package/dist/images.js.map +1 -1
- package/dist/init.d.ts +59 -0
- package/dist/init.js +475 -0
- package/dist/init.js.map +1 -0
- package/dist/inspect.d.ts +75 -0
- package/dist/inspect.js +127 -0
- package/dist/inspect.js.map +1 -0
- package/dist/mcp.d.ts +4 -1
- package/dist/mcp.js +56 -2
- package/dist/mcp.js.map +1 -1
- package/dist/policy.d.ts +42 -0
- package/dist/policy.js +74 -0
- package/dist/policy.js.map +1 -0
- package/dist/run.d.ts +53 -0
- package/dist/run.js +97 -0
- package/dist/run.js.map +1 -0
- package/dist/script.d.ts +76 -0
- package/dist/script.js +169 -0
- package/dist/script.js.map +1 -0
- package/dist/server.d.ts +39 -0
- package/dist/server.js +120 -0
- package/dist/server.js.map +1 -1
- package/dist/tool-text-data.d.ts +25 -8
- package/dist/tool-text-data.js +25 -8
- package/dist/tool-text-data.js.map +1 -1
- package/dist/tool-text.d.ts +1 -1
- package/dist/tools.d.ts +221 -7
- package/dist/tools.js +1451 -168
- package/dist/tools.js.map +1 -1
- package/dist/viewer-page.js +1 -1
- package/dist/viewer-page.js.map +1 -1
- package/dist/viewer.d.ts +3 -0
- package/dist/viewer.js +21 -4
- package/dist/viewer.js.map +1 -1
- package/package.json +2 -2
- package/skills/tapline/SKILL.md +42 -12
- package/skills/tapline/references/setup.md +24 -2
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AGENT-TOOLS 1.8 §12: the action log. One JSON object per line in `actions-YYYY-MM-DD.jsonl`, the same
|
|
3
|
+
* schema as Tapwright's. Typed text is never logged, only its length; a secure field only ever its length.
|
|
4
|
+
*/
|
|
5
|
+
export interface ActionLogEntry {
|
|
6
|
+
/** ISO 8601 UTC with milliseconds. */
|
|
7
|
+
t: string;
|
|
8
|
+
source: "tapline";
|
|
9
|
+
by: "agent" | "person";
|
|
10
|
+
tool: string;
|
|
11
|
+
target?: unknown;
|
|
12
|
+
/** The element's line without its ref; absent for a point or when unknown. */
|
|
13
|
+
element?: string;
|
|
14
|
+
ok: boolean;
|
|
15
|
+
code?: string;
|
|
16
|
+
reason?: string;
|
|
17
|
+
ms?: number;
|
|
18
|
+
app?: string;
|
|
19
|
+
batch?: {
|
|
20
|
+
id: string;
|
|
21
|
+
step: number;
|
|
22
|
+
};
|
|
23
|
+
dry_run?: boolean;
|
|
24
|
+
confirmed?: boolean;
|
|
25
|
+
/** For typing: how many characters, never the text. */
|
|
26
|
+
chars?: number;
|
|
27
|
+
}
|
|
28
|
+
export declare const LOG_KEEP_DAYS = 14;
|
|
29
|
+
export declare class ActionLog {
|
|
30
|
+
private readonly dir;
|
|
31
|
+
private readonly now;
|
|
32
|
+
private ready;
|
|
33
|
+
constructor(dir: string, now?: () => Date);
|
|
34
|
+
/** Creates the folder and deletes files older than 14 days. Never throws. */
|
|
35
|
+
open(): void;
|
|
36
|
+
/** Appends one line. A log that can't be written never fails the action. */
|
|
37
|
+
write(entry: Omit<ActionLogEntry, "t" | "source">): void;
|
|
38
|
+
}
|
|
39
|
+
/** A tool's parameters fit for the log: the target as given; typed text replaced by its length. */
|
|
40
|
+
export declare function loggedTarget(params: unknown): {
|
|
41
|
+
target?: unknown;
|
|
42
|
+
chars?: number;
|
|
43
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { appendFileSync, mkdirSync, readdirSync, rmSync, statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
export const LOG_KEEP_DAYS = 14;
|
|
4
|
+
export class ActionLog {
|
|
5
|
+
dir;
|
|
6
|
+
now;
|
|
7
|
+
ready = false;
|
|
8
|
+
constructor(dir, now = () => new Date()) {
|
|
9
|
+
this.dir = dir;
|
|
10
|
+
this.now = now;
|
|
11
|
+
}
|
|
12
|
+
/** Creates the folder and deletes files older than 14 days. Never throws. */
|
|
13
|
+
open() {
|
|
14
|
+
try {
|
|
15
|
+
mkdirSync(this.dir, { recursive: true, mode: 0o700 });
|
|
16
|
+
const cutoff = this.now().getTime() - LOG_KEEP_DAYS * 24 * 3600 * 1000;
|
|
17
|
+
for (const name of readdirSync(this.dir)) {
|
|
18
|
+
if (!/^actions-\d{4}-\d{2}-\d{2}\.jsonl$/.test(name))
|
|
19
|
+
continue;
|
|
20
|
+
const path = join(this.dir, name);
|
|
21
|
+
if (statSync(path).mtimeMs < cutoff)
|
|
22
|
+
rmSync(path, { force: true });
|
|
23
|
+
}
|
|
24
|
+
this.ready = true;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
this.ready = false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Appends one line. A log that can't be written never fails the action. */
|
|
31
|
+
write(entry) {
|
|
32
|
+
if (!this.ready)
|
|
33
|
+
return;
|
|
34
|
+
const at = this.now();
|
|
35
|
+
const line = { t: at.toISOString(), source: "tapline", ...entry };
|
|
36
|
+
try {
|
|
37
|
+
appendFileSync(join(this.dir, `actions-${at.toISOString().slice(0, 10)}.jsonl`), `${JSON.stringify(line)}\n`, { mode: 0o600 });
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// the disk is full or the folder went away: the action still happened
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** A tool's parameters fit for the log: the target as given; typed text replaced by its length. */
|
|
45
|
+
export function loggedTarget(params) {
|
|
46
|
+
if (typeof params !== "object" || params === null)
|
|
47
|
+
return {};
|
|
48
|
+
const p = params;
|
|
49
|
+
const out = {};
|
|
50
|
+
const target = p["target"];
|
|
51
|
+
// as the agent gave it: the app's testID is the tool's id
|
|
52
|
+
if (typeof target === "object" && target !== null && "testID" in target) {
|
|
53
|
+
const { testID, ...rest } = target;
|
|
54
|
+
out.target = { id: testID, ...rest };
|
|
55
|
+
}
|
|
56
|
+
else if (target !== undefined)
|
|
57
|
+
out.target = target;
|
|
58
|
+
if (typeof p["text"] === "string")
|
|
59
|
+
out.chars = [...p["text"]].length;
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=actionlog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionlog.js","sourceRoot":"","sources":["../src/actionlog.ts"],"names":[],"mappings":"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"}
|
package/dist/audit.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** AGENT-TOOLS 1.8 §10: the accessibility audit's shared types and its one report format. */
|
|
3
|
+
export declare const AUDIT_TYPES: readonly ["contrast", "hit_region", "description", "dynamic_type", "clipped_text", "trait", "element_detection", "overlap", "duplicate_id"];
|
|
4
|
+
export type AuditType = (typeof AUDIT_TYPES)[number];
|
|
5
|
+
export declare const MAX_ISSUES = 30;
|
|
6
|
+
export declare const auditResultSchema: z.ZodObject<{
|
|
7
|
+
issues: z.ZodArray<z.ZodObject<{
|
|
8
|
+
type: z.ZodString;
|
|
9
|
+
element: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
10
|
+
ref: z.ZodString;
|
|
11
|
+
type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
12
|
+
role: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
13
|
+
testID: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
14
|
+
label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
15
|
+
text: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
16
|
+
textMore: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
17
|
+
value: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
|
|
18
|
+
placeholder: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
19
|
+
frame: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
20
|
+
x: z.ZodNumber;
|
|
21
|
+
y: z.ZodNumber;
|
|
22
|
+
width: z.ZodNumber;
|
|
23
|
+
height: z.ZodNumber;
|
|
24
|
+
}, z.core.$strip>>>;
|
|
25
|
+
actions: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
|
|
26
|
+
disabled: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
27
|
+
selected: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
28
|
+
checked: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>>;
|
|
29
|
+
}, z.core.$strip>>>;
|
|
30
|
+
problem: z.ZodString;
|
|
31
|
+
fix: z.ZodString;
|
|
32
|
+
at: z.ZodOptional<z.ZodObject<{
|
|
33
|
+
file: z.ZodString;
|
|
34
|
+
line: z.ZodNumber;
|
|
35
|
+
direct: z.ZodOptional<z.ZodBoolean>;
|
|
36
|
+
}, z.core.$strip>>;
|
|
37
|
+
}, z.core.$strip>>;
|
|
38
|
+
checked: z.ZodArray<z.ZodString>;
|
|
39
|
+
}, z.core.$strip>;
|
|
40
|
+
export type AuditResult = z.infer<typeof auditResultSchema>;
|
|
41
|
+
/** The report: header, numbered issues (each `at` on its own line when known), then what was checked. */
|
|
42
|
+
export declare function formatAudit(title: string, result: AuditResult, asked: readonly string[] | undefined, pathOf?: (file: string) => string): string;
|
|
43
|
+
/** The screen's name for the header: the focused route's, else the app's. */
|
|
44
|
+
export declare function auditTitle(route: string[] | null, appName: string): string;
|
package/dist/audit.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatElement } from "./format.js";
|
|
3
|
+
import { shownPath } from "./inspect.js";
|
|
4
|
+
import { elementSchema } from "./protocol.js";
|
|
5
|
+
/** AGENT-TOOLS 1.8 §10: the accessibility audit's shared types and its one report format. */
|
|
6
|
+
export const AUDIT_TYPES = [
|
|
7
|
+
"contrast",
|
|
8
|
+
"hit_region",
|
|
9
|
+
"description",
|
|
10
|
+
"dynamic_type",
|
|
11
|
+
"clipped_text",
|
|
12
|
+
"trait",
|
|
13
|
+
"element_detection",
|
|
14
|
+
"overlap",
|
|
15
|
+
"duplicate_id",
|
|
16
|
+
];
|
|
17
|
+
export const MAX_ISSUES = 30;
|
|
18
|
+
export const auditResultSchema = z.object({
|
|
19
|
+
issues: z.array(z.object({
|
|
20
|
+
type: z.string(),
|
|
21
|
+
element: elementSchema.nullish(),
|
|
22
|
+
problem: z.string(),
|
|
23
|
+
fix: z.string(),
|
|
24
|
+
at: z.object({ file: z.string(), line: z.number(), direct: z.boolean().optional() }).optional(),
|
|
25
|
+
})),
|
|
26
|
+
checked: z.array(z.string()),
|
|
27
|
+
});
|
|
28
|
+
/** The report: header, numbered issues (each `at` on its own line when known), then what was checked. */
|
|
29
|
+
export function formatAudit(title, result, asked, pathOf = shownPath) {
|
|
30
|
+
const wanted = asked ?? AUDIT_TYPES;
|
|
31
|
+
const checked = AUDIT_TYPES.filter((t) => result.checked.includes(t) && wanted.includes(t));
|
|
32
|
+
const notChecked = wanted.filter((t) => !checked.includes(t));
|
|
33
|
+
const tail = `Checked: ${checked.join(", ")}.${notChecked.length > 0 ? ` Not checked here: ${notChecked.join(", ")}.` : ""}`;
|
|
34
|
+
const issues = result.issues;
|
|
35
|
+
if (issues.length === 0)
|
|
36
|
+
return [`Audit of ${JSON.stringify(title)}: no issues found.`, tail].join("\n");
|
|
37
|
+
const counts = new Map();
|
|
38
|
+
for (const issue of issues)
|
|
39
|
+
counts.set(issue.type, (counts.get(issue.type) ?? 0) + 1);
|
|
40
|
+
const summary = [...counts].map(([type, n]) => `${type} ${n}`).join(", ");
|
|
41
|
+
const lines = [`Audit of ${JSON.stringify(title)}: ${issues.length} issue${issues.length === 1 ? "" : "s"} (${summary}).`];
|
|
42
|
+
issues.slice(0, MAX_ISSUES).forEach((issue, i) => {
|
|
43
|
+
const what = issue.element ? formatElement(issue.element, { actions: false }) : "the screen";
|
|
44
|
+
lines.push(`${i + 1}. ${issue.type}: ${what}: ${issue.problem}. Fix: ${issue.fix}.`);
|
|
45
|
+
if (issue.at !== undefined) {
|
|
46
|
+
const library = issue.at.direct === false ? " (a library draws it; this is the app's line around it)" : "";
|
|
47
|
+
lines.push(` at ${pathOf(issue.at.file)}:${issue.at.line}${library}`);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
if (issues.length > MAX_ISSUES)
|
|
51
|
+
lines.push(`(+${issues.length - MAX_ISSUES} more issues; pass types to narrow it.)`);
|
|
52
|
+
lines.push(tail);
|
|
53
|
+
return lines.join("\n");
|
|
54
|
+
}
|
|
55
|
+
/** The screen's name for the header: the focused route's, else the app's. */
|
|
56
|
+
export function auditTitle(route, appName) {
|
|
57
|
+
const last = route?.[route.length - 1];
|
|
58
|
+
return last !== undefined && last !== "" && !/^[_(]/.test(last) && last !== "index" ? last : appName;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { spawn } from "node:child_process";
|
|
3
|
+
import { writeFileSync } from "node:fs";
|
|
3
4
|
import { join } from "node:path";
|
|
4
5
|
import { parseArgs } from "node:util";
|
|
5
6
|
import { toString as qrText } from "qrcode";
|
|
@@ -7,8 +8,10 @@ import { configDir, connectSnippet, hostUrl, nativeIntentSnippet, reachableHost,
|
|
|
7
8
|
import { setUpDevServe } from "./dev.js";
|
|
8
9
|
import { formatDoctor, runDoctor } from "./doctor.js";
|
|
9
10
|
import { formatLogs } from "./format.js";
|
|
11
|
+
import { runInit } from "./init.js";
|
|
10
12
|
import { runMcp } from "./mcp.js";
|
|
11
13
|
import { createPairCode, forgetLink, pairingLink } from "./pairing.js";
|
|
14
|
+
import { failureWithDiff, junitXml } from "./script.js";
|
|
12
15
|
import { TaplineHost } from "./server.js";
|
|
13
16
|
import { formatInstalled, installSkill, skillSource } from "./skill.js";
|
|
14
17
|
import { TaplineTools } from "./tools.js";
|
|
@@ -21,10 +24,14 @@ Commands:
|
|
|
21
24
|
host Run the host in the foreground and log connections and app logs
|
|
22
25
|
pair Print a pairing link and QR code for a phone (needs --scheme)
|
|
23
26
|
info Show this computer's address and how to add Tapline to an app
|
|
24
|
-
doctor Check the setup (Node, the Wi-Fi address, Tailscale if used, token, ports, firewall)
|
|
27
|
+
doctor Check the setup (Node, the Wi-Fi address, Tailscale if used, token, ports, firewall);
|
|
28
|
+
--app also checks the app side in --project (or here), as tapline init would
|
|
29
|
+
init Set up Tapline in your app in one go: packages, entry file, Metro helper, .env.local
|
|
30
|
+
(run it in the app's folder; --dry-run shows the plan, --no-install skips the install)
|
|
25
31
|
dev Serve Metro over https in your tailnet (iOS needs it); \`tapline dev -- <command>\`
|
|
26
32
|
also runs your Metro command with EXPO_PACKAGER_PROXY_URL set
|
|
27
|
-
replay Replay
|
|
33
|
+
replay Replay scripts without an agent: tapline replay <file.json | name>… [--junit out.xml] [--update-references]
|
|
34
|
+
(exit 0: all held, 1: one stopped, 2: one couldn't start)
|
|
28
35
|
token Print the token (only for connecting without pairing, e.g. a simulator)
|
|
29
36
|
skill \`tapline skill install\` gives agents the skill for testing with Tapline:
|
|
30
37
|
Claude Code (~/.claude/skills), Codex and other agents (~/.agents/skills);
|
|
@@ -38,6 +45,12 @@ Options:
|
|
|
38
45
|
--screenshots <inline|file>
|
|
39
46
|
For mcp: put screenshots in the tool result (default), or save them in
|
|
40
47
|
~/.tapline/shots and return the path (or TAPLINE_SCREENSHOTS)
|
|
48
|
+
--no-log For mcp: don't write the action log (~/.tapline/log/actions-YYYY-MM-DD.jsonl)
|
|
49
|
+
--policy <file> For mcp: the safety policy (JSON: words that need a person's OK, words that are blocked)
|
|
50
|
+
--no-policy For mcp: no confirmation and nothing blocked (a test device with test data)
|
|
51
|
+
--viewer-link For mcp: the viewer tool gives the agent the live view's link (benchmarks, scripts); by
|
|
52
|
+
default it opens the live view in a browser here and keeps the link (its key) from the agent
|
|
53
|
+
(or TAPLINE_VIEWER_LINK=1)
|
|
41
54
|
--viewer <local|remote|off>
|
|
42
55
|
For mcp: the live viewer on this computer only (default), also on your
|
|
43
56
|
own Tailscale devices, or off (or TAPLINE_VIEWER)
|
|
@@ -45,8 +58,13 @@ Options:
|
|
|
45
58
|
--https-port <n> For dev: the https port Tailscale serves Metro on (default 8443)
|
|
46
59
|
--stop For dev: stop serving Metro
|
|
47
60
|
--wait <s> For replay: how long to wait for the app to connect (default 60)
|
|
61
|
+
--update-references For replay: compare_screen steps and matches checks save the screen into the
|
|
62
|
+
script's .references folder instead of comparing (exit 0 when every step ran)
|
|
48
63
|
--project <dir> For skill install: install into that project's .claude/skills and
|
|
49
|
-
.agents/skills instead of your home folder
|
|
64
|
+
.agents/skills instead of your home folder. For init: the app's folder
|
|
65
|
+
(default: this folder)
|
|
66
|
+
--dry-run For init: print what it would do and change nothing
|
|
67
|
+
--no-install For init: don't install packages; print the command instead
|
|
50
68
|
-h, --help Show this help
|
|
51
69
|
|
|
52
70
|
Claude Code: claude mcp add tapline -- tapline mcp
|
|
@@ -146,12 +164,16 @@ async function runDev(values, command) {
|
|
|
146
164
|
});
|
|
147
165
|
});
|
|
148
166
|
}
|
|
149
|
-
/**
|
|
150
|
-
|
|
167
|
+
/**
|
|
168
|
+
* Replays scripts with its own host, no agent (AGENT-TOOLS 1.8 §9.4): each argument is a script file or a saved
|
|
169
|
+
* script's name. Exit 0 when every script held, 1 when one stopped, 2 when one couldn't start (no app, a bad
|
|
170
|
+
* file). `--junit out.xml` writes one test case per script.
|
|
171
|
+
*/
|
|
172
|
+
async function runReplay(config, scripts, waitRaw, junitPath, updateReferences = false) {
|
|
151
173
|
const waitSeconds = waitRaw === undefined ? 60 : Number(waitRaw);
|
|
152
174
|
if (!(waitSeconds > 0)) {
|
|
153
175
|
process.stderr.write("--wait is in seconds, above 0\n");
|
|
154
|
-
return
|
|
176
|
+
return 2;
|
|
155
177
|
}
|
|
156
178
|
const host = new TaplineHost({ token: config.token, port: config.port, portFallback: config.portFallback, hosts: config.hosts });
|
|
157
179
|
const result = await host.listen();
|
|
@@ -172,12 +194,26 @@ async function runReplay(config, name, waitRaw) {
|
|
|
172
194
|
await new Promise((r) => setTimeout(r, 250));
|
|
173
195
|
if (host.current() === undefined) {
|
|
174
196
|
process.stderr.write("The app didn't connect. Is it open, on the same Wi-Fi as this computer?\n");
|
|
175
|
-
return
|
|
197
|
+
return 2;
|
|
198
|
+
}
|
|
199
|
+
let code = 0;
|
|
200
|
+
const results = [];
|
|
201
|
+
for (const script of scripts) {
|
|
202
|
+
const isFile = /[\\/]|\.json$/i.test(script);
|
|
203
|
+
const started = Date.now();
|
|
204
|
+
const outcome = await tools.replay(isFile ? { path: script } : { name: script }, { updateReferences });
|
|
205
|
+
const textOut = outcome.content.map((block) => (block.type === "text" ? block.text : "")).join("\n");
|
|
206
|
+
process.stdout.write(`${script}\n${textOut}\n\n`);
|
|
207
|
+
const couldntStart = outcome.isError === true && /^Error (not_found|bad_params|not_connected|internal):/.test(textOut) && !/^Error \w+: Ran \d+ of/.test(textOut);
|
|
208
|
+
if (couldntStart)
|
|
209
|
+
code = 2;
|
|
210
|
+
else if (outcome.isError === true && code === 0)
|
|
211
|
+
code = 1;
|
|
212
|
+
results.push({ name: script, seconds: (Date.now() - started) / 1000, failure: outcome.isError === true ? failureWithDiff(textOut) : null });
|
|
176
213
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
return outcome.isError ? 1 : 0;
|
|
214
|
+
if (junitPath !== undefined)
|
|
215
|
+
writeFileSync(junitPath, junitXml(results));
|
|
216
|
+
return code;
|
|
181
217
|
}
|
|
182
218
|
finally {
|
|
183
219
|
await host.close();
|
|
@@ -197,7 +233,16 @@ async function main(argv) {
|
|
|
197
233
|
"https-port": { type: "string" },
|
|
198
234
|
stop: { type: "boolean" },
|
|
199
235
|
wait: { type: "string" },
|
|
236
|
+
junit: { type: "string" },
|
|
237
|
+
"update-references": { type: "boolean" },
|
|
238
|
+
"no-log": { type: "boolean" },
|
|
239
|
+
policy: { type: "string" },
|
|
240
|
+
"no-policy": { type: "boolean" },
|
|
241
|
+
"viewer-link": { type: "boolean" },
|
|
200
242
|
project: { type: "string" },
|
|
243
|
+
"dry-run": { type: "boolean" },
|
|
244
|
+
app: { type: "boolean" },
|
|
245
|
+
"no-install": { type: "boolean" },
|
|
201
246
|
help: { type: "boolean", short: "h" },
|
|
202
247
|
},
|
|
203
248
|
});
|
|
@@ -216,6 +261,10 @@ async function main(argv) {
|
|
|
216
261
|
...options,
|
|
217
262
|
...(values.screenshots !== undefined ? { screenshots: values.screenshots } : {}),
|
|
218
263
|
...(values.viewer !== undefined ? { viewer: values.viewer } : {}),
|
|
264
|
+
...(values["no-log"] === true ? { noLog: true } : {}),
|
|
265
|
+
...(values.policy !== undefined ? { policy: values.policy } : {}),
|
|
266
|
+
...(values["no-policy"] === true ? { noPolicy: true } : {}),
|
|
267
|
+
...(values["viewer-link"] === true ? { viewerLink: true } : {}),
|
|
219
268
|
}))
|
|
220
269
|
? -1 // keep running
|
|
221
270
|
: 1;
|
|
@@ -238,17 +287,25 @@ async function main(argv) {
|
|
|
238
287
|
case "doctor": {
|
|
239
288
|
const results = await runDoctor();
|
|
240
289
|
process.stdout.write(`${formatDoctor(results)}\n`);
|
|
241
|
-
|
|
290
|
+
let failed = results.some((r) => r.status === "fail");
|
|
291
|
+
if (values.app === true) {
|
|
292
|
+
// The app side, as `tapline init` sees it; nothing is changed.
|
|
293
|
+
process.stdout.write("\nApp side (what tapline init would do):\n");
|
|
294
|
+
const app = runInit({ ...(values.project !== undefined ? { project: values.project } : {}), dryRun: true, install: false }, { print: (line) => (line.startsWith("Dry run:") ? undefined : process.stdout.write(`${line}\n`)) });
|
|
295
|
+
if (app.exitCode !== 0 || app.changed)
|
|
296
|
+
failed = true;
|
|
297
|
+
}
|
|
298
|
+
return failed ? 1 : 0;
|
|
242
299
|
}
|
|
243
300
|
case "dev":
|
|
244
301
|
return runDev(values, positionals.slice(1));
|
|
245
302
|
case "replay": {
|
|
246
|
-
const
|
|
247
|
-
if (
|
|
248
|
-
process.stderr.write("replay needs
|
|
249
|
-
return
|
|
303
|
+
const scripts = positionals.slice(1);
|
|
304
|
+
if (scripts.length === 0) {
|
|
305
|
+
process.stderr.write("replay needs scripts: tapline replay <file.json | name>… [--junit out.xml]\n");
|
|
306
|
+
return 2;
|
|
250
307
|
}
|
|
251
|
-
return runReplay(await resolveConfig(options),
|
|
308
|
+
return runReplay(await resolveConfig(options), scripts, values.wait, values.junit, values["update-references"] === true);
|
|
252
309
|
}
|
|
253
310
|
case "token":
|
|
254
311
|
process.stdout.write(`${(await resolveConfig(options)).token}\n`);
|
|
@@ -266,6 +323,14 @@ async function main(argv) {
|
|
|
266
323
|
process.stdout.write(`${formatInstalled(written)}\n`);
|
|
267
324
|
return 0;
|
|
268
325
|
}
|
|
326
|
+
case "init": {
|
|
327
|
+
const result = runInit({
|
|
328
|
+
...(values.project !== undefined ? { project: values.project } : {}),
|
|
329
|
+
...(values["dry-run"] === true ? { dryRun: true } : {}),
|
|
330
|
+
...(values["no-install"] === true ? { install: false } : {}),
|
|
331
|
+
}, { print: (line) => process.stdout.write(`${line}\n`) });
|
|
332
|
+
return result.exitCode;
|
|
333
|
+
}
|
|
269
334
|
case "info":
|
|
270
335
|
printInfo(await resolveConfig(options));
|
|
271
336
|
return 0;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AGENT-TOOLS 1.8 §11.3 / VIEWER-PROTOCOL 1.5: a person's OK for a touch the policy guards. The live view
|
|
3
|
+
* is the only place a request is answered; an allow lets exactly one matching call through within 120 s.
|
|
4
|
+
*/
|
|
5
|
+
export declare const CONFIRM_TTL_MS = 120000;
|
|
6
|
+
/** After a person says no, the same touch asks no one for this long (AGENT-TOOLS 1.8 §11.3). */
|
|
7
|
+
export declare const DECLINE_HOLD_MS = 60000;
|
|
8
|
+
export interface ConfirmRequest {
|
|
9
|
+
type: "confirm";
|
|
10
|
+
id: string;
|
|
11
|
+
by: "agent";
|
|
12
|
+
kind: string;
|
|
13
|
+
caption: string;
|
|
14
|
+
word: string;
|
|
15
|
+
/** When the request lapses, ms since the epoch. */
|
|
16
|
+
expires: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ConfirmClosed {
|
|
19
|
+
type: "confirm_closed";
|
|
20
|
+
id: string;
|
|
21
|
+
allow: boolean;
|
|
22
|
+
}
|
|
23
|
+
export type ConfirmEvent = ConfirmRequest | ConfirmClosed;
|
|
24
|
+
/** What a guarded call may do now. */
|
|
25
|
+
export type ConfirmCheck = {
|
|
26
|
+
granted: true;
|
|
27
|
+
}
|
|
28
|
+
/** A person said no a moment ago: nobody is asked again yet. */
|
|
29
|
+
| {
|
|
30
|
+
granted: false;
|
|
31
|
+
held: true;
|
|
32
|
+
} | {
|
|
33
|
+
granted: false;
|
|
34
|
+
request: ConfirmRequest; /** " They declined." or " Nobody answered." after a first ask. */
|
|
35
|
+
suffix: string;
|
|
36
|
+
};
|
|
37
|
+
export declare class Confirmations {
|
|
38
|
+
private readonly now;
|
|
39
|
+
private readonly ttlMs;
|
|
40
|
+
private readonly pending;
|
|
41
|
+
/** key → when the allow lapses */
|
|
42
|
+
private readonly grants;
|
|
43
|
+
/** key → how the last ask ended without an allow */
|
|
44
|
+
private readonly endings;
|
|
45
|
+
/** key → when a person last declined it */
|
|
46
|
+
private readonly declinedAt;
|
|
47
|
+
private readonly listeners;
|
|
48
|
+
private next;
|
|
49
|
+
constructor(now?: () => number, ttlMs?: number);
|
|
50
|
+
/** The viewer hub listens here; returns the unsubscribe. */
|
|
51
|
+
onEvent(listener: (event: ConfirmEvent) => void): () => void;
|
|
52
|
+
/** Requests still open, for a viewer that joins later. */
|
|
53
|
+
open(): ConfirmRequest[];
|
|
54
|
+
/**
|
|
55
|
+
* A guarded call on `key` (the tool and the element). Uses up an allow when there is one; otherwise
|
|
56
|
+
* keeps the open request for that key or opens a new one.
|
|
57
|
+
*/
|
|
58
|
+
check(key: string, ask: {
|
|
59
|
+
kind: string;
|
|
60
|
+
caption: string;
|
|
61
|
+
word: string;
|
|
62
|
+
}): ConfirmCheck;
|
|
63
|
+
/** A viewer's answer. The first answer wins; later ones and unknown ids are ignored. */
|
|
64
|
+
answer(id: string, allow: boolean): boolean;
|
|
65
|
+
/** Closes everything (the server stops). */
|
|
66
|
+
close(): void;
|
|
67
|
+
private lapse;
|
|
68
|
+
private emit;
|
|
69
|
+
}
|