libretto 0.5.0 → 0.5.1
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/README.md +106 -36
- package/dist/cli/cli.js +22 -97
- package/dist/cli/commands/browser.js +86 -59
- package/dist/cli/commands/execution.js +199 -86
- package/dist/cli/commands/init.js +30 -8
- package/dist/cli/commands/logs.js +4 -5
- package/dist/cli/commands/shared.js +30 -29
- package/dist/cli/commands/snapshot.js +26 -39
- package/dist/cli/core/ai-config.js +9 -2
- package/dist/cli/core/api-snapshot-analyzer.js +15 -5
- package/dist/cli/core/browser.js +132 -29
- package/dist/cli/core/context.js +4 -1
- package/dist/cli/core/session-telemetry.js +5 -2
- package/dist/cli/core/session.js +21 -8
- package/dist/cli/core/snapshot-analyzer.js +14 -31
- package/dist/cli/core/snapshot-api-config.js +2 -6
- package/dist/cli/core/telemetry.js +10 -2
- package/dist/cli/framework/simple-cli.js +45 -25
- package/dist/cli/router.js +14 -21
- package/dist/cli/workers/run-integration-runtime.js +24 -5
- package/dist/cli/workers/run-integration-worker-protocol.js +3 -1
- package/dist/cli/workers/run-integration-worker.js +1 -4
- package/dist/index.d.ts +1 -2
- package/dist/index.js +7 -10
- package/dist/runtime/download/download.js +5 -1
- package/dist/runtime/extract/extract.js +11 -2
- package/dist/runtime/network/network.js +8 -1
- package/dist/runtime/recovery/agent.js +6 -2
- package/dist/runtime/recovery/errors.js +3 -1
- package/dist/runtime/recovery/recovery.js +3 -1
- package/dist/shared/condense-dom/condense-dom.js +6 -13
- package/dist/shared/config/config.d.ts +1 -9
- package/dist/shared/config/config.js +0 -18
- package/dist/shared/config/index.d.ts +2 -1
- package/dist/shared/config/index.js +0 -10
- package/dist/shared/debug/pause.js +9 -3
- package/dist/shared/instrumentation/instrument.js +101 -5
- package/dist/shared/llm/ai-sdk-adapter.js +3 -1
- package/dist/shared/llm/client.js +3 -1
- package/dist/shared/logger/index.js +4 -1
- package/dist/shared/run/api.js +3 -1
- package/dist/shared/run/browser.js +7 -2
- package/dist/shared/state/session-state.d.ts +2 -1
- package/dist/shared/state/session-state.js +5 -2
- package/dist/shared/visualization/ghost-cursor.js +19 -10
- package/dist/shared/visualization/highlight.js +9 -6
- package/dist/shared/workflow/workflow.d.ts +4 -5
- package/dist/shared/workflow/workflow.js +3 -5
- package/package.json +6 -2
- package/scripts/check-skills-sync.mjs +25 -0
- package/scripts/compare-eval-summary.mjs +47 -0
- package/scripts/postinstall.mjs +15 -15
- package/scripts/prepare-release.sh +97 -0
- package/scripts/skills-libretto.mjs +103 -0
- package/scripts/summarize-evals.mjs +135 -0
- package/scripts/sync-skills.mjs +12 -0
- package/skills/libretto/SKILL.md +113 -49
- package/skills/libretto/references/code-generation-rules.md +208 -0
- package/skills/libretto/references/configuration-file-reference.md +53 -0
- package/skills/libretto/references/site-security-review.md +143 -0
- package/src/cli/cli.ts +23 -110
- package/src/cli/commands/browser.ts +94 -70
- package/src/cli/commands/execution.ts +233 -102
- package/src/cli/commands/init.ts +32 -9
- package/src/cli/commands/logs.ts +7 -7
- package/src/cli/commands/shared.ts +36 -37
- package/src/cli/commands/snapshot.ts +44 -59
- package/src/cli/core/ai-config.ts +12 -3
- package/src/cli/core/api-snapshot-analyzer.ts +17 -6
- package/src/cli/core/browser.ts +178 -41
- package/src/cli/core/context.ts +7 -2
- package/src/cli/core/session-telemetry.ts +19 -8
- package/src/cli/core/session.ts +21 -7
- package/src/cli/core/snapshot-analyzer.ts +26 -46
- package/src/cli/core/snapshot-api-config.ts +170 -175
- package/src/cli/core/telemetry.ts +16 -3
- package/src/cli/framework/simple-cli.ts +144 -77
- package/src/cli/router.ts +13 -21
- package/src/cli/workers/run-integration-runtime.ts +36 -9
- package/src/cli/workers/run-integration-worker-protocol.ts +2 -0
- package/src/cli/workers/run-integration-worker.ts +1 -4
- package/src/index.ts +73 -66
- package/src/runtime/download/download.ts +62 -58
- package/src/runtime/download/index.ts +5 -5
- package/src/runtime/extract/extract.ts +71 -61
- package/src/runtime/network/index.ts +3 -3
- package/src/runtime/network/network.ts +99 -93
- package/src/runtime/recovery/agent.ts +217 -212
- package/src/runtime/recovery/errors.ts +107 -104
- package/src/runtime/recovery/index.ts +3 -3
- package/src/runtime/recovery/recovery.ts +38 -35
- package/src/shared/condense-dom/condense-dom.ts +15 -18
- package/src/shared/config/config.ts +0 -19
- package/src/shared/config/index.ts +0 -5
- package/src/shared/debug/pause.ts +57 -51
- package/src/shared/instrumentation/errors.ts +64 -62
- package/src/shared/instrumentation/index.ts +5 -5
- package/src/shared/instrumentation/instrument.ts +339 -209
- package/src/shared/llm/ai-sdk-adapter.ts +58 -55
- package/src/shared/llm/client.ts +181 -174
- package/src/shared/llm/types.ts +39 -39
- package/src/shared/logger/index.ts +11 -4
- package/src/shared/logger/logger.ts +312 -306
- package/src/shared/logger/sinks.ts +118 -114
- package/src/shared/paths/paths.ts +50 -49
- package/src/shared/paths/repo-root.ts +17 -17
- package/src/shared/run/api.ts +5 -1
- package/src/shared/run/browser.ts +12 -3
- package/src/shared/state/index.ts +9 -9
- package/src/shared/state/session-state.ts +46 -43
- package/src/shared/visualization/ghost-cursor.ts +161 -148
- package/src/shared/visualization/highlight.ts +89 -86
- package/src/shared/visualization/index.ts +13 -13
- package/src/shared/workflow/workflow.ts +19 -25
- package/skills/libretto/references/reverse-engineering-network-requests.md +0 -39
- package/skills/libretto/references/user-action-log.md +0 -31
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import type { LoggerApi } from "../../shared/logger/index.js";
|
|
3
2
|
import {
|
|
4
3
|
runClose as runCloseWithLogger,
|
|
5
4
|
runCloseAll as runCloseAllWithLogger,
|
|
5
|
+
runConnect as runConnectWithLogger,
|
|
6
6
|
runOpen,
|
|
7
7
|
runPages,
|
|
8
8
|
runSave,
|
|
9
9
|
} from "../core/browser.js";
|
|
10
|
-
import { withSessionLogger } from "../core/context.js";
|
|
11
|
-
import {
|
|
10
|
+
import { createLoggerForSession, withSessionLogger } from "../core/context.js";
|
|
11
|
+
import {
|
|
12
|
+
assertSessionAvailableForStart,
|
|
13
|
+
validateSessionName,
|
|
14
|
+
} from "../core/session.js";
|
|
12
15
|
import { SimpleCLI } from "../framework/simple-cli.js";
|
|
13
16
|
import {
|
|
14
|
-
loadSessionStateMiddleware,
|
|
15
|
-
resolveSessionMiddleware,
|
|
16
17
|
sessionOption,
|
|
18
|
+
withAutoSession,
|
|
19
|
+
withRequiredSession,
|
|
17
20
|
} from "./shared.js";
|
|
18
21
|
|
|
19
|
-
function parseViewportArg(
|
|
22
|
+
export function parseViewportArg(
|
|
20
23
|
viewportArg: string | undefined,
|
|
21
24
|
): { width: number; height: number } | undefined {
|
|
22
25
|
if (!viewportArg) return undefined;
|
|
@@ -63,19 +66,40 @@ export const openInput = SimpleCLI.input({
|
|
|
63
66
|
"Cannot pass both --headed and --headless.",
|
|
64
67
|
);
|
|
65
68
|
|
|
66
|
-
export
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
69
|
+
export const openCommand = SimpleCLI.command({
|
|
70
|
+
description: "Launch browser and open URL (headed by default)",
|
|
71
|
+
})
|
|
72
|
+
.input(openInput)
|
|
73
|
+
.use(withAutoSession())
|
|
74
|
+
.handle(async ({ input, ctx }) => {
|
|
75
|
+
assertSessionAvailableForStart(ctx.session, ctx.logger);
|
|
76
|
+
const headed = input.headed || !input.headless;
|
|
77
|
+
const viewport = parseViewportArg(input.viewport);
|
|
78
|
+
await runOpen(input.url!, headed, ctx.session, ctx.logger, { viewport });
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
export const connectInput = SimpleCLI.input({
|
|
82
|
+
positionals: [
|
|
83
|
+
SimpleCLI.positional("cdpUrl", z.string().optional(), {
|
|
84
|
+
help: "CDP endpoint URL (e.g. http://127.0.0.1:9222)",
|
|
85
|
+
}),
|
|
86
|
+
],
|
|
87
|
+
named: {
|
|
88
|
+
session: sessionOption(),
|
|
89
|
+
},
|
|
90
|
+
}).refine(
|
|
91
|
+
(input) => Boolean(input.cdpUrl),
|
|
92
|
+
`Usage: libretto connect <cdp-url> --session <name>`,
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
export const connectCommand = SimpleCLI.command({
|
|
96
|
+
description: "Connect to an existing Chrome DevTools Protocol (CDP) endpoint",
|
|
97
|
+
})
|
|
98
|
+
.input(connectInput)
|
|
99
|
+
.use(withAutoSession())
|
|
100
|
+
.handle(async ({ input, ctx }) => {
|
|
101
|
+
await runConnectWithLogger(input.cdpUrl!, ctx.session, ctx.logger);
|
|
102
|
+
});
|
|
79
103
|
|
|
80
104
|
export const saveInput = SimpleCLI.input({
|
|
81
105
|
positionals: [
|
|
@@ -88,20 +112,17 @@ export const saveInput = SimpleCLI.input({
|
|
|
88
112
|
},
|
|
89
113
|
}).refine(
|
|
90
114
|
(input) => Boolean(input.urlOrDomain),
|
|
91
|
-
`Usage: libretto save <url|domain>
|
|
115
|
+
`Usage: libretto save <url|domain> --session <name>`,
|
|
92
116
|
);
|
|
93
117
|
|
|
94
|
-
export
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
.
|
|
101
|
-
|
|
102
|
-
await runSave(input.urlOrDomain!, ctx.session, logger);
|
|
103
|
-
});
|
|
104
|
-
}
|
|
118
|
+
export const saveCommand = SimpleCLI.command({
|
|
119
|
+
description: "Save current browser session",
|
|
120
|
+
})
|
|
121
|
+
.input(saveInput)
|
|
122
|
+
.use(withRequiredSession())
|
|
123
|
+
.handle(async ({ input, ctx }) => {
|
|
124
|
+
await runSave(input.urlOrDomain!, ctx.session, ctx.logger);
|
|
125
|
+
});
|
|
105
126
|
|
|
106
127
|
export const pagesInput = SimpleCLI.input({
|
|
107
128
|
positionals: [],
|
|
@@ -110,53 +131,56 @@ export const pagesInput = SimpleCLI.input({
|
|
|
110
131
|
},
|
|
111
132
|
});
|
|
112
133
|
|
|
113
|
-
export
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
.
|
|
120
|
-
|
|
121
|
-
await runPages(ctx.session, logger);
|
|
122
|
-
});
|
|
123
|
-
}
|
|
134
|
+
export const pagesCommand = SimpleCLI.command({
|
|
135
|
+
description: "List open pages in the session",
|
|
136
|
+
})
|
|
137
|
+
.input(pagesInput)
|
|
138
|
+
.use(withRequiredSession())
|
|
139
|
+
.handle(async ({ ctx }) => {
|
|
140
|
+
await runPages(ctx.session, ctx.logger);
|
|
141
|
+
});
|
|
124
142
|
|
|
125
143
|
export const closeInput = SimpleCLI.input({
|
|
126
144
|
positionals: [],
|
|
127
145
|
named: {
|
|
128
146
|
session: sessionOption(),
|
|
129
|
-
all: SimpleCLI.flag({
|
|
130
|
-
|
|
147
|
+
all: SimpleCLI.flag({
|
|
148
|
+
help: "Close all tracked sessions in this workspace",
|
|
149
|
+
}),
|
|
150
|
+
force: SimpleCLI.flag({
|
|
151
|
+
help: "Force kill sessions that ignore SIGTERM (requires --all)",
|
|
152
|
+
}),
|
|
131
153
|
},
|
|
132
|
-
})
|
|
154
|
+
}).refine(
|
|
155
|
+
(input) => input.all || input.session,
|
|
156
|
+
`Usage: libretto close --session <name>\nUsage: libretto close --all [--force]`,
|
|
157
|
+
);
|
|
133
158
|
|
|
134
|
-
export
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
.
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
159
|
+
export const closeCommand = SimpleCLI.command({
|
|
160
|
+
description: "Close the browser",
|
|
161
|
+
})
|
|
162
|
+
.input(closeInput)
|
|
163
|
+
.handle(async ({ input }) => {
|
|
164
|
+
if (input.force && !input.all) {
|
|
165
|
+
throw new Error(`Usage: libretto close --all [--force]`);
|
|
166
|
+
}
|
|
167
|
+
if (input.all) {
|
|
168
|
+
const logger = createLoggerForSession("cli");
|
|
169
|
+
await runCloseAllWithLogger(logger, { force: input.force });
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
validateSessionName(input.session!);
|
|
173
|
+
const logger = createLoggerForSession(input.session!);
|
|
174
|
+
await runCloseWithLogger(input.session!, logger);
|
|
175
|
+
});
|
|
151
176
|
|
|
152
|
-
export
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}
|
|
177
|
+
export const browserCommands = {
|
|
178
|
+
open: openCommand,
|
|
179
|
+
connect: connectCommand,
|
|
180
|
+
save: saveCommand,
|
|
181
|
+
pages: pagesCommand,
|
|
182
|
+
close: closeCommand,
|
|
183
|
+
};
|
|
160
184
|
|
|
161
185
|
export async function runClose(session: string): Promise<void> {
|
|
162
186
|
await withSessionLogger(session, async (logger) => {
|