@hover-dev/core 0.17.0 → 0.18.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/engine.d.ts +14 -39
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +16 -67
- package/dist/specs/pageObjectManifest.d.ts.map +1 -1
- package/dist/specs/pageObjectManifest.js +11 -10
- package/dist/specs/replayGrounded.d.ts.map +1 -1
- package/package.json +5 -22
- package/dist/agents/argv.d.ts +0 -11
- package/dist/agents/argv.d.ts.map +0 -1
- package/dist/agents/argv.js +0 -23
- package/dist/agents/claude.d.ts +0 -3
- package/dist/agents/claude.d.ts.map +0 -1
- package/dist/agents/claude.js +0 -220
- package/dist/agents/codex.d.ts +0 -19
- package/dist/agents/codex.d.ts.map +0 -1
- package/dist/agents/codex.js +0 -231
- package/dist/agents/detect.d.ts +0 -46
- package/dist/agents/detect.d.ts.map +0 -1
- package/dist/agents/detect.js +0 -80
- package/dist/agents/gemini.d.ts +0 -17
- package/dist/agents/gemini.d.ts.map +0 -1
- package/dist/agents/gemini.js +0 -186
- package/dist/agents/index.d.ts +0 -6
- package/dist/agents/index.d.ts.map +0 -1
- package/dist/agents/index.js +0 -5
- package/dist/agents/invoke.d.ts +0 -12
- package/dist/agents/invoke.d.ts.map +0 -1
- package/dist/agents/invoke.js +0 -93
- package/dist/agents/qwen.d.ts +0 -17
- package/dist/agents/qwen.d.ts.map +0 -1
- package/dist/agents/qwen.js +0 -172
- package/dist/agents/registry.d.ts +0 -19
- package/dist/agents/registry.d.ts.map +0 -1
- package/dist/agents/registry.js +0 -30
- package/dist/agents/shared.d.ts +0 -28
- package/dist/agents/shared.d.ts.map +0 -1
- package/dist/agents/shared.js +0 -35
- package/dist/agents/types.d.ts +0 -194
- package/dist/agents/types.d.ts.map +0 -1
- package/dist/agents/types.js +0 -23
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/mcp/actuateServer.d.ts +0 -3
- package/dist/mcp/actuateServer.d.ts.map +0 -1
- package/dist/mcp/actuateServer.js +0 -594
- package/dist/mcp/sourceFence.d.ts +0 -23
- package/dist/mcp/sourceFence.d.ts.map +0 -1
- package/dist/mcp/sourceFence.js +0 -79
- package/dist/mcp/sourceServer.d.ts +0 -3
- package/dist/mcp/sourceServer.d.ts.map +0 -1
- package/dist/mcp/sourceServer.js +0 -191
- package/dist/modes.d.ts +0 -39
- package/dist/modes.d.ts.map +0 -1
- package/dist/modes.js +0 -34
- package/dist/playwright/cdpStatus.d.ts +0 -14
- package/dist/playwright/cdpStatus.d.ts.map +0 -1
- package/dist/playwright/cdpStatus.js +0 -52
- package/dist/playwright/preflight.d.ts +0 -31
- package/dist/playwright/preflight.d.ts.map +0 -1
- package/dist/playwright/preflight.js +0 -82
- package/dist/playwright/preflightCache.d.ts +0 -27
- package/dist/playwright/preflightCache.d.ts.map +0 -1
- package/dist/playwright/preflightCache.js +0 -21
- package/dist/playwright/resolveMcpConfig.d.ts +0 -61
- package/dist/playwright/resolveMcpConfig.d.ts.map +0 -1
- package/dist/playwright/resolveMcpConfig.js +0 -84
- package/dist/plugin-api.d.ts +0 -237
- package/dist/plugin-api.d.ts.map +0 -1
- package/dist/plugin-api.js +0 -52
- package/dist/qa/classify.d.ts +0 -38
- package/dist/qa/classify.d.ts.map +0 -1
- package/dist/qa/classify.js +0 -138
- package/dist/runSession.d.ts +0 -53
- package/dist/runSession.d.ts.map +0 -1
- package/dist/runSession.js +0 -96
- package/dist/service/cdpHandlers.d.ts +0 -24
- package/dist/service/cdpHandlers.d.ts.map +0 -1
- package/dist/service/cdpHandlers.js +0 -50
- package/dist/service/cdpHint.d.ts +0 -41
- package/dist/service/cdpHint.d.ts.map +0 -1
- package/dist/service/cdpHint.js +0 -158
- package/dist/service/conventions.d.ts +0 -8
- package/dist/service/conventions.d.ts.map +0 -1
- package/dist/service/conventions.js +0 -42
- package/dist/service/relayHandlers.d.ts +0 -28
- package/dist/service/relayHandlers.d.ts.map +0 -1
- package/dist/service/relayHandlers.js +0 -105
- package/dist/service/saveHandlers.d.ts +0 -50
- package/dist/service/saveHandlers.d.ts.map +0 -1
- package/dist/service/saveHandlers.js +0 -77
- package/dist/service/types.d.ts +0 -158
- package/dist/service/types.d.ts.map +0 -1
- package/dist/service/types.js +0 -26
- package/dist/service.d.ts +0 -54
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -1772
- package/dist/specs/businessMap.d.ts +0 -29
- package/dist/specs/businessMap.d.ts.map +0 -1
- package/dist/specs/businessMap.js +0 -95
- package/dist/specs/extractPageObjects.d.ts +0 -18
- package/dist/specs/extractPageObjects.d.ts.map +0 -1
- package/dist/specs/extractPageObjects.js +0 -98
- package/dist/specs/optimizeSpecWithAgent.d.ts +0 -9
- package/dist/specs/optimizeSpecWithAgent.d.ts.map +0 -1
- package/dist/specs/optimizeSpecWithAgent.js +0 -39
package/dist/engine.d.ts
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* In-process engine surface for the `@hover-dev/mcp` server (and any other
|
|
3
|
+
* standalone consumer). The MCP server drives the debug Chrome directly via
|
|
4
|
+
* `playwright-core` and buffers grounded steps, then crystallizes them with
|
|
5
|
+
* `writeSpec` — no WebSocket service, no agent spawning. This barrel re-exports
|
|
6
|
+
* exactly those building blocks.
|
|
7
|
+
*
|
|
8
|
+
* (The old staged-engine surface — `runSession`, the WS `service`, the
|
|
9
|
+
* Playwright-MCP config in `resolveMcpConfig` / `buildGroundedMcpConfig`, and
|
|
10
|
+
* the `mcp/actuateServer` + `mcp/sourceServer` relays — has been removed. The
|
|
11
|
+
* MCP-first path doesn't spawn Playwright's MCP; it actuates through
|
|
12
|
+
* `playwright-core` and `groundedLocate` below, which is what keeps
|
|
13
|
+
* record == replay.)
|
|
14
|
+
*/
|
|
3
15
|
export { writeSpec } from './specs/writeSpec.js';
|
|
4
16
|
export type { WriteSpecOptions, WriteSpecResult, Redaction } from './specs/writeSpec.js';
|
|
5
17
|
export type { SkillStep } from './specs/specStep.js';
|
|
6
18
|
export { replayGroundedSteps, replayOnPage, applyGroundedStep, groundedLocate } from './specs/replayGrounded.js';
|
|
7
19
|
export type { ReplayResult, ReplayFailure, ReplayStep, GroundedTarget } from './specs/replayGrounded.js';
|
|
8
|
-
export { resolveMcpConfig, mcpToolPrefix } from './playwright/resolveMcpConfig.js';
|
|
9
20
|
export { launchDebugChrome, closeDebugChrome, findChromeBinary } from './playwright/launchChrome.js';
|
|
10
21
|
export type { LaunchOptions, LaunchResult } from './playwright/launchChrome.js';
|
|
11
22
|
export { GROUNDED_ACTUATION_DENY, GROUNDED_ACTUATION_DIRECTIVE } from './agentDirectives.js';
|
|
@@ -14,40 +25,4 @@ export type { BusinessFact } from './memory/businessMemory.js';
|
|
|
14
25
|
export { RECON_DIRECTIVE, QA_EXPLORATION_DIRECTIVE } from './agentDirectives.js';
|
|
15
26
|
export { QA_INTENSITY, DEFAULT_QA_INTENSITY, asQaIntensity, qaBudgetDirective } from './qa/intensity.js';
|
|
16
27
|
export type { QaIntensity, QaIntensitySpec } from './qa/intensity.js';
|
|
17
|
-
/**
|
|
18
|
-
* The always-on control-actuation MCP server id. Alphanumeric on purpose — a
|
|
19
|
-
* hyphen would make the hard-sandbox allow prefix (`mcp__hovercontrol`) fail to
|
|
20
|
-
* match the tool names (`mcp__hovercontrol__click_control`), so every grounded
|
|
21
|
-
* actuation would be denied. (Same constant + reasoning as service.ts.)
|
|
22
|
-
*/
|
|
23
|
-
export declare const CONTROL_MCP_ID = "hovercontrol";
|
|
24
|
-
/** The hard-sandbox allow prefix for the control server — pass in
|
|
25
|
-
* `runSession({ allowedToolsExtra: [CONTROL_MCP_TOOL_PREFIX] })`. */
|
|
26
|
-
export declare const CONTROL_MCP_TOOL_PREFIX: string;
|
|
27
|
-
export interface GroundedMcpOptions {
|
|
28
|
-
/** CDP endpoint of the debug Chrome the agent drives. */
|
|
29
|
-
cdpUrl: string;
|
|
30
|
-
/** Port used only to namespace the generated config filename. */
|
|
31
|
-
port: number;
|
|
32
|
-
/** Project root — where the control server resolves relative paths / writes
|
|
33
|
-
* its placeholder upload fixture, and where `@playwright/mcp` resolves from. */
|
|
34
|
-
devRoot: string;
|
|
35
|
-
/** The dev-server origin the run targets (defaults to `cdpUrl`). */
|
|
36
|
-
devUrl?: string;
|
|
37
|
-
/** WS port the control server's back-channel (`ask_user` / `record_*`)
|
|
38
|
-
* connects to. Omit when there's no listener — actuation still works; the
|
|
39
|
-
* back-channel features silently no-op (actuateServer fails soft). */
|
|
40
|
-
approvalPort?: number;
|
|
41
|
-
/** Directory the Playwright MCP + control screenshots write into. */
|
|
42
|
-
outputDir?: string;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Build an MCP config mirroring the service's grounded/normal mode: the
|
|
46
|
-
* Playwright MCP over CDP PLUS the hover-control actuation server. Pair it in
|
|
47
|
-
* `runSession` with `allowedToolsExtra: [CONTROL_MCP_TOOL_PREFIX]`,
|
|
48
|
-
* `disallowedToolsExtra: GROUNDED_ACTUATION_DENY`, and append
|
|
49
|
-
* `GROUNDED_ACTUATION_DIRECTIVE` to the system prompt — then the selectors the
|
|
50
|
-
* agent actuates with are the ones crystallized (record==replay).
|
|
51
|
-
*/
|
|
52
|
-
export declare function buildGroundedMcpConfig(opts: GroundedMcpOptions): string;
|
|
53
28
|
//# sourceMappingURL=engine.d.ts.map
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACzF,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACjH,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGzG,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrG,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGhF,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAG7F,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACrG,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzG,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/engine.js
CHANGED
|
@@ -1,78 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* In-process engine surface for
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* record==replay fidelity the extension does), and spec crystallization —
|
|
8
|
-
* without the WebSocket layer.
|
|
2
|
+
* In-process engine surface for the `@hover-dev/mcp` server (and any other
|
|
3
|
+
* standalone consumer). The MCP server drives the debug Chrome directly via
|
|
4
|
+
* `playwright-core` and buffers grounded steps, then crystallizes them with
|
|
5
|
+
* `writeSpec` — no WebSocket service, no agent spawning. This barrel re-exports
|
|
6
|
+
* exactly those building blocks.
|
|
9
7
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
8
|
+
* (The old staged-engine surface — `runSession`, the WS `service`, the
|
|
9
|
+
* Playwright-MCP config in `resolveMcpConfig` / `buildGroundedMcpConfig`, and
|
|
10
|
+
* the `mcp/actuateServer` + `mcp/sourceServer` relays — has been removed. The
|
|
11
|
+
* MCP-first path doesn't spawn Playwright's MCP; it actuates through
|
|
12
|
+
* `playwright-core` and `groundedLocate` below, which is what keeps
|
|
13
|
+
* record == replay.)
|
|
14
14
|
*/
|
|
15
|
-
|
|
16
|
-
import { fileURLToPath } from 'node:url';
|
|
17
|
-
import { resolveMcpConfig, mcpToolPrefix } from './playwright/resolveMcpConfig.js';
|
|
18
|
-
// ── in-process session + crystallization ─────────────────────────────────────
|
|
19
|
-
export { runSession } from './runSession.js';
|
|
15
|
+
// ── crystallization + grounded replay ────────────────────────────────────────
|
|
20
16
|
export { writeSpec } from './specs/writeSpec.js';
|
|
21
17
|
// Creation-verification: replay a flow's grounded steps over CDP (no playwright test).
|
|
22
18
|
export { replayGroundedSteps, replayOnPage, applyGroundedStep, groundedLocate } from './specs/replayGrounded.js';
|
|
23
|
-
// ──
|
|
24
|
-
export { resolveMcpConfig, mcpToolPrefix } from './playwright/resolveMcpConfig.js';
|
|
19
|
+
// ── debug-Chrome lifecycle ───────────────────────────────────────────────────
|
|
25
20
|
export { launchDebugChrome, closeDebugChrome, findChromeBinary } from './playwright/launchChrome.js';
|
|
26
|
-
// ── grounded-actuation knobs (
|
|
21
|
+
// ── grounded-actuation knobs (the deny-list + directive the agent runs under) ─
|
|
27
22
|
export { GROUNDED_ACTUATION_DENY, GROUNDED_ACTUATION_DIRECTIVE } from './agentDirectives.js';
|
|
28
|
-
// ── business memory (ask → remember loop
|
|
23
|
+
// ── business memory (ask → remember loop) ────────────────────────────────────
|
|
29
24
|
export { loadMemory, formatMemoryForPrompt, writeFact, memoryDir } from './memory/businessMemory.js';
|
|
30
|
-
// ── autonomous-exploration directives (
|
|
31
|
-
// The CLI's "explore → discover business flows → record_candidate" loop is the
|
|
32
|
-
// same mechanism QA mode drives the agent with; reuse the directives verbatim
|
|
33
|
-
// so behaviour stays in lock-step.
|
|
25
|
+
// ── autonomous-exploration directives + intensity (the test_app workflow) ─────
|
|
34
26
|
export { RECON_DIRECTIVE, QA_EXPLORATION_DIRECTIVE } from './agentDirectives.js';
|
|
35
27
|
export { QA_INTENSITY, DEFAULT_QA_INTENSITY, asQaIntensity, qaBudgetDirective } from './qa/intensity.js';
|
|
36
|
-
/**
|
|
37
|
-
* The always-on control-actuation MCP server id. Alphanumeric on purpose — a
|
|
38
|
-
* hyphen would make the hard-sandbox allow prefix (`mcp__hovercontrol`) fail to
|
|
39
|
-
* match the tool names (`mcp__hovercontrol__click_control`), so every grounded
|
|
40
|
-
* actuation would be denied. (Same constant + reasoning as service.ts.)
|
|
41
|
-
*/
|
|
42
|
-
export const CONTROL_MCP_ID = 'hovercontrol';
|
|
43
|
-
/** The hard-sandbox allow prefix for the control server — pass in
|
|
44
|
-
* `runSession({ allowedToolsExtra: [CONTROL_MCP_TOOL_PREFIX] })`. */
|
|
45
|
-
export const CONTROL_MCP_TOOL_PREFIX = mcpToolPrefix(CONTROL_MCP_ID);
|
|
46
|
-
// dist/engine.js sits beside dist/service.js, so mcp/actuateServer.js resolves
|
|
47
|
-
// the same way it does from service.ts.
|
|
48
|
-
const CONTROL_MCP_SCRIPT = resolve(dirname(fileURLToPath(import.meta.url)), 'mcp', 'actuateServer.js');
|
|
49
|
-
/**
|
|
50
|
-
* Build an MCP config mirroring the service's grounded/normal mode: the
|
|
51
|
-
* Playwright MCP over CDP PLUS the hover-control actuation server. Pair it in
|
|
52
|
-
* `runSession` with `allowedToolsExtra: [CONTROL_MCP_TOOL_PREFIX]`,
|
|
53
|
-
* `disallowedToolsExtra: GROUNDED_ACTUATION_DENY`, and append
|
|
54
|
-
* `GROUNDED_ACTUATION_DIRECTIVE` to the system prompt — then the selectors the
|
|
55
|
-
* agent actuates with are the ones crystallized (record==replay).
|
|
56
|
-
*/
|
|
57
|
-
export function buildGroundedMcpConfig(opts) {
|
|
58
|
-
return resolveMcpConfig({
|
|
59
|
-
cdpUrl: opts.cdpUrl,
|
|
60
|
-
port: opts.port,
|
|
61
|
-
cwd: opts.devRoot,
|
|
62
|
-
outputDir: opts.outputDir,
|
|
63
|
-
extra: [
|
|
64
|
-
{
|
|
65
|
-
id: CONTROL_MCP_ID,
|
|
66
|
-
command: process.execPath,
|
|
67
|
-
args: [CONTROL_MCP_SCRIPT],
|
|
68
|
-
env: {
|
|
69
|
-
HOVER_CDP_URL: opts.cdpUrl,
|
|
70
|
-
HOVER_DEV_URL: opts.devUrl ?? opts.cdpUrl,
|
|
71
|
-
HOVER_PROJECT_ROOT: opts.devRoot,
|
|
72
|
-
...(opts.approvalPort ? { HOVER_APPROVAL_PORT: String(opts.approvalPort) } : {}),
|
|
73
|
-
...(opts.outputDir ? { HOVER_SHOT_DIR: opts.outputDir } : {}),
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
],
|
|
77
|
-
});
|
|
78
|
-
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageObjectManifest.d.ts","sourceRoot":"","sources":["../../src/specs/pageObjectManifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pageObjectManifest.d.ts","sourceRoot":"","sources":["../../src/specs/pageObjectManifest.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAMD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;wDAEwD;AACxD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAUhG"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Page Object manifest —
|
|
3
|
-
*
|
|
2
|
+
* Page Object manifest — `.hover/page-objects.json` describing each emitted
|
|
3
|
+
* Page Object (class/method/fixture names + the signature prefix it replays).
|
|
4
|
+
* writeSpec reads it (`readPageObjectManifest`) to decide whether a freshly-saved
|
|
5
|
+
* spec's prefix matches an existing Page Object — if so it consumes
|
|
6
|
+
* `await loginPage.login(…)` and imports from `./fixtures` instead of re-emitting
|
|
7
|
+
* the steps inline.
|
|
4
8
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* Kept separate from extractPageObjects so writeSpec can read the manifest
|
|
12
|
-
* without importing the detection/generation chain.
|
|
9
|
+
* NOTE: cross-spec reuse is currently DORMANT — the manifest writer
|
|
10
|
+
* (`writePageObjectManifest`) has no caller since the standalone extraction stage
|
|
11
|
+
* was removed, so the read path returns null and writeSpec emits Page Objects
|
|
12
|
+
* inline. Kept as the seam for when cross-spec Page Object reuse is wired into
|
|
13
|
+
* the MCP-first flow.
|
|
13
14
|
*/
|
|
14
15
|
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
15
16
|
import { join } from 'node:path';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayGrounded.d.ts","sourceRoot":"","sources":["../../src/specs/replayGrounded.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"replayGrounded.d.ts","sourceRoot":"","sources":["../../src/specs/replayGrounded.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAiBlF,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAGD,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AACD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AA+BD,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,cAAc,GAAG,OAAO,GAAG,IAAI,CAS5E;AAED;yEACyE;AACzE,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CA4B/F;AAED;;qEAEqE;AACrE,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAqBzG;AAuBD,+EAA+E;AAC/E,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAoB9H"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hover-dev/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Hover's local Node service: agent invocation, Playwright CDP preflight, WebSocket bridge.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Hyperyond",
|
|
@@ -20,32 +20,16 @@
|
|
|
20
20
|
"claude"
|
|
21
21
|
],
|
|
22
22
|
"type": "module",
|
|
23
|
-
"main": "dist/
|
|
24
|
-
"types": "dist/
|
|
23
|
+
"main": "dist/engine.js",
|
|
24
|
+
"types": "dist/engine.d.ts",
|
|
25
25
|
"exports": {
|
|
26
26
|
".": {
|
|
27
|
-
"types": "./dist/
|
|
28
|
-
"import": "./dist/
|
|
29
|
-
},
|
|
30
|
-
"./agents": {
|
|
31
|
-
"types": "./dist/agents/index.d.ts",
|
|
32
|
-
"import": "./dist/agents/index.js"
|
|
33
|
-
},
|
|
34
|
-
"./service": {
|
|
35
|
-
"types": "./dist/service.d.ts",
|
|
36
|
-
"import": "./dist/service.js"
|
|
27
|
+
"types": "./dist/engine.d.ts",
|
|
28
|
+
"import": "./dist/engine.js"
|
|
37
29
|
},
|
|
38
30
|
"./engine": {
|
|
39
31
|
"types": "./dist/engine.d.ts",
|
|
40
32
|
"import": "./dist/engine.js"
|
|
41
|
-
},
|
|
42
|
-
"./launch-chrome": {
|
|
43
|
-
"types": "./dist/playwright/launchChrome.d.ts",
|
|
44
|
-
"import": "./dist/playwright/launchChrome.js"
|
|
45
|
-
},
|
|
46
|
-
"./plugin-api": {
|
|
47
|
-
"types": "./dist/plugin-api.d.ts",
|
|
48
|
-
"import": "./dist/plugin-api.js"
|
|
49
33
|
}
|
|
50
34
|
},
|
|
51
35
|
"files": [
|
|
@@ -55,7 +39,6 @@
|
|
|
55
39
|
],
|
|
56
40
|
"dependencies": {
|
|
57
41
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
58
|
-
"@playwright/mcp": "0.0.75",
|
|
59
42
|
"cross-spawn": "^7.0.6",
|
|
60
43
|
"playwright-core": "^1.50.0",
|
|
61
44
|
"ts-morph": "^28.0.0",
|
package/dist/agents/argv.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { AgentDescriptor, InvokeOptions } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Build argv for spawning an agent.
|
|
4
|
-
*
|
|
5
|
-
* Per-agent argument logic lives on the descriptor (e.g. claude.ts owns its
|
|
6
|
-
* own `--mcp-config`, `--permission-mode` etc.). This dispatcher only
|
|
7
|
-
* gates by protocol — `acp` and `pi-rpc` are not yet implemented because
|
|
8
|
-
* they require a long-lived bidirectional channel rather than argv.
|
|
9
|
-
*/
|
|
10
|
-
export declare function buildArgv(descriptor: AgentDescriptor, opts: InvokeOptions): string[];
|
|
11
|
-
//# sourceMappingURL=argv.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"argv.d.ts","sourceRoot":"","sources":["../../src/agents/argv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGjE;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CAepF"}
|
package/dist/agents/argv.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { UnsupportedAgentProtocolError } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Build argv for spawning an agent.
|
|
4
|
-
*
|
|
5
|
-
* Per-agent argument logic lives on the descriptor (e.g. claude.ts owns its
|
|
6
|
-
* own `--mcp-config`, `--permission-mode` etc.). This dispatcher only
|
|
7
|
-
* gates by protocol — `acp` and `pi-rpc` are not yet implemented because
|
|
8
|
-
* they require a long-lived bidirectional channel rather than argv.
|
|
9
|
-
*/
|
|
10
|
-
export function buildArgv(descriptor, opts) {
|
|
11
|
-
switch (descriptor.protocol) {
|
|
12
|
-
case 'argv':
|
|
13
|
-
case 'stdin':
|
|
14
|
-
return descriptor.buildArgs(opts);
|
|
15
|
-
case 'acp':
|
|
16
|
-
case 'pi-rpc':
|
|
17
|
-
throw new UnsupportedAgentProtocolError(`Agent protocol "${descriptor.protocol}" is not yet implemented (agent: ${descriptor.id})`);
|
|
18
|
-
default: {
|
|
19
|
-
const exhaustive = descriptor.protocol;
|
|
20
|
-
throw new UnsupportedAgentProtocolError(`Unknown protocol: ${String(exhaustive)}`);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
package/dist/agents/claude.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAA2C,MAAM,YAAY,CAAC;AAiI3F,eAAO,MAAM,WAAW,EAAE,eA8IzB,CAAC"}
|
package/dist/agents/claude.js
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Running-cost accumulator across one parser lifecycle. Claude Code's
|
|
3
|
-
* stream-json sometimes carries `total_cost_usd` on intermediate events; when
|
|
4
|
-
* it does we just forward it. When it doesn't, we estimate from token usage
|
|
5
|
-
* using public per-million pricing. Hardcoded rates because they change
|
|
6
|
-
* rarely and we'd rather not network-fetch a price table from a sandbox.
|
|
7
|
-
*
|
|
8
|
-
* The estimate is empirically about 1.5–2× the authoritative
|
|
9
|
-
* `total_cost_usd` that arrives on the final `result` event (overhead from
|
|
10
|
-
* tool-definition tokens we don't see + Claude's actual cache hit ratios
|
|
11
|
-
* vs. our pessimistic accounting). That's fine for the widget's purpose:
|
|
12
|
-
* give the user a signal of cost direction and order-of-magnitude so they
|
|
13
|
-
* know when to hit Stop. The done card displays the final authoritative
|
|
14
|
-
* number from `total_cost_usd`, so the user always sees the ground truth.
|
|
15
|
-
*/
|
|
16
|
-
const PRICE_PER_M_USD = {
|
|
17
|
-
// claude-sonnet-4 / 4.5 / 4.6 / 4.7 — all priced the same as of 2026
|
|
18
|
-
sonnet: { in: 3, out: 15, cacheCreate: 3.75, cacheRead: 0.3 },
|
|
19
|
-
opus: { in: 15, out: 75, cacheCreate: 18.75, cacheRead: 1.5 },
|
|
20
|
-
haiku: { in: 1, out: 5, cacheCreate: 1.25, cacheRead: 0.1 },
|
|
21
|
-
};
|
|
22
|
-
function estimateCostUsd(modelHint, usage) {
|
|
23
|
-
// Match the most specific tier by substring. e.g. 'claude-sonnet-4-6' → sonnet.
|
|
24
|
-
const m = (modelHint ?? 'sonnet').toLowerCase();
|
|
25
|
-
const tier = m.includes('opus') ? PRICE_PER_M_USD.opus :
|
|
26
|
-
m.includes('haiku') ? PRICE_PER_M_USD.haiku :
|
|
27
|
-
PRICE_PER_M_USD.sonnet;
|
|
28
|
-
return ((usage.input_tokens ?? 0) * tier.in +
|
|
29
|
-
(usage.output_tokens ?? 0) * tier.out +
|
|
30
|
-
(usage.cache_creation_input_tokens ?? 0) * tier.cacheCreate +
|
|
31
|
-
(usage.cache_read_input_tokens ?? 0) * tier.cacheRead) / 1_000_000;
|
|
32
|
-
}
|
|
33
|
-
function claudeState(state) {
|
|
34
|
-
// First touch on this state object — seed the keys we read below.
|
|
35
|
-
if (typeof state.runningCost !== 'number') {
|
|
36
|
-
state.runningCost = 0;
|
|
37
|
-
state.runningTurns = 0;
|
|
38
|
-
state.runningTokens = 0;
|
|
39
|
-
state.runningModel = undefined;
|
|
40
|
-
}
|
|
41
|
-
return state;
|
|
42
|
-
}
|
|
43
|
-
/** Every built-in claude-code tool that has nothing to do with driving a
|
|
44
|
-
* browser. Combined with `--strict-mcp-config` + an allow-list of mcp__*
|
|
45
|
-
* ids, this leaves Claude with only the Playwright MCP (plus any
|
|
46
|
-
* plugin-contributed MCPs) as a usable tool surface. */
|
|
47
|
-
const CLAUDE_DEFAULT_DISALLOWED_TOOLS = [
|
|
48
|
-
// file / shell / data access — never appropriate for browser driving
|
|
49
|
-
'Bash', 'BashOutput', 'KillBash',
|
|
50
|
-
'Edit', 'MultiEdit', 'Write', 'Read', 'NotebookEdit',
|
|
51
|
-
// `Task` was renamed `Agent` in newer Claude Code — it spawns a subagent with
|
|
52
|
-
// the full tool surface (Bash/Write/…), a real sandbox escape, so deny BOTH
|
|
53
|
-
// the current and legacy name. (Only this one targeted name was added; do NOT
|
|
54
|
-
// add MCP-machinery tools like WaitForMcpServers here — denying those breaks
|
|
55
|
-
// the MCP tool path and the agent loses its real browser tools.)
|
|
56
|
-
'Grep', 'Glob', 'Task', 'Agent', 'TodoWrite',
|
|
57
|
-
'WebFetch', 'WebSearch',
|
|
58
|
-
// plan / worktree / cron / notification — irrelevant in -p mode
|
|
59
|
-
'EnterPlanMode', 'ExitPlanMode',
|
|
60
|
-
'EnterWorktree', 'ExitWorktree',
|
|
61
|
-
'CronCreate', 'CronDelete', 'CronList',
|
|
62
|
-
'PushNotification', 'RemoteTrigger',
|
|
63
|
-
// task & tool introspection added in claude 2.1.x — let through and
|
|
64
|
-
// the agent will burn turns exploring instead of executing
|
|
65
|
-
'ToolSearch',
|
|
66
|
-
'Monitor', 'TaskOutput', 'TaskStop',
|
|
67
|
-
'AskUserQuestion',
|
|
68
|
-
'ShareOnboardingGuide',
|
|
69
|
-
// Skills are loaded independently of the --allowedTools allow-list, so an
|
|
70
|
-
// allow-list of `mcp__playwright` does NOT block the `Skill` tool. Left
|
|
71
|
-
// through, the agent burns a turn "checking for a project skill first" and
|
|
72
|
-
// pollutes the crystallized spec with a junk `When · Skill` step. Deny it.
|
|
73
|
-
'Skill',
|
|
74
|
-
// Playwright MCP's arbitrary-JS tools. browser_run_code_unsafe /
|
|
75
|
-
// browser_evaluate run any JS in the page — a real prompt-injection exfil
|
|
76
|
-
// path (fetch a token out, read localStorage) that punches through the
|
|
77
|
-
// "Playwright MCP only" sandbox, and their output can't be translated into
|
|
78
|
-
// a deterministic Playwright spec anyway (it lands as a `// TODO`). Agents
|
|
79
|
-
// drive via click/fill/select and read state via snapshot instead.
|
|
80
|
-
'mcp__playwright__browser_run_code_unsafe',
|
|
81
|
-
'mcp__playwright__browser_evaluate',
|
|
82
|
-
];
|
|
83
|
-
export const claudeAgent = {
|
|
84
|
-
id: 'claude',
|
|
85
|
-
binName: 'claude',
|
|
86
|
-
protocol: 'argv',
|
|
87
|
-
streamFormat: 'stream-json',
|
|
88
|
-
sandboxStrength: 'hard',
|
|
89
|
-
defaultDisallowedTools: CLAUDE_DEFAULT_DISALLOWED_TOOLS,
|
|
90
|
-
// F7 optimize is text-in/text-out refinement — haiku is plenty and ~cheap.
|
|
91
|
-
cheapModel: 'haiku',
|
|
92
|
-
display: {
|
|
93
|
-
label: 'Claude Code',
|
|
94
|
-
tagline: 'Anthropic — best-in-class browser driving, hard tool sandbox',
|
|
95
|
-
homepage: 'https://docs.claude.com/claude-code',
|
|
96
|
-
installHint: 'npm install -g @anthropic-ai/claude-code',
|
|
97
|
-
},
|
|
98
|
-
buildArgs(opts) {
|
|
99
|
-
const args = ['-p', opts.prompt];
|
|
100
|
-
args.push('--output-format', 'stream-json', '--verbose');
|
|
101
|
-
args.push('--permission-mode', 'dontAsk');
|
|
102
|
-
if (opts.mcpConfig) {
|
|
103
|
-
args.push('--mcp-config', opts.mcpConfig, '--strict-mcp-config');
|
|
104
|
-
}
|
|
105
|
-
if (opts.allowedTools?.length) {
|
|
106
|
-
args.push('--allowedTools', ...opts.allowedTools);
|
|
107
|
-
}
|
|
108
|
-
if (opts.disallowedTools?.length) {
|
|
109
|
-
args.push('--disallowedTools', ...opts.disallowedTools);
|
|
110
|
-
}
|
|
111
|
-
if (opts.maxBudgetUsd != null) {
|
|
112
|
-
args.push('--max-budget-usd', String(opts.maxBudgetUsd));
|
|
113
|
-
}
|
|
114
|
-
if (opts.maxTurns != null) {
|
|
115
|
-
args.push('--max-turns', String(opts.maxTurns));
|
|
116
|
-
}
|
|
117
|
-
if (opts.model) {
|
|
118
|
-
args.push('--model', opts.model);
|
|
119
|
-
}
|
|
120
|
-
if (opts.effort) {
|
|
121
|
-
args.push('--effort', opts.effort);
|
|
122
|
-
}
|
|
123
|
-
if (opts.sessionId) {
|
|
124
|
-
args.push('--resume', opts.sessionId);
|
|
125
|
-
}
|
|
126
|
-
if (opts.appendSystemPrompt && opts.appendSystemPrompt.trim().length > 0) {
|
|
127
|
-
args.push('--append-system-prompt', opts.appendSystemPrompt);
|
|
128
|
-
}
|
|
129
|
-
return args;
|
|
130
|
-
},
|
|
131
|
-
parseEvent(line, state = {}) {
|
|
132
|
-
if (!line.trim())
|
|
133
|
-
return [];
|
|
134
|
-
let ev;
|
|
135
|
-
try {
|
|
136
|
-
ev = JSON.parse(line);
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
return [{ kind: 'raw', line }];
|
|
140
|
-
}
|
|
141
|
-
const s = claudeState(state);
|
|
142
|
-
const out = [];
|
|
143
|
-
if (ev.type === 'system' && ev.subtype === 'init') {
|
|
144
|
-
// Fresh session — reset the cost/turn accumulator.
|
|
145
|
-
s.runningCost = 0;
|
|
146
|
-
s.runningTurns = 0;
|
|
147
|
-
s.runningTokens = 0;
|
|
148
|
-
s.runningModel = ev.model;
|
|
149
|
-
if (ev.session_id) {
|
|
150
|
-
out.push({ kind: 'session_start', sessionId: ev.session_id, model: ev.model });
|
|
151
|
-
}
|
|
152
|
-
for (const server of ev.mcp_servers ?? []) {
|
|
153
|
-
out.push({ kind: 'mcp_status', server: server.name, status: server.status });
|
|
154
|
-
}
|
|
155
|
-
return out;
|
|
156
|
-
}
|
|
157
|
-
if (ev.type === 'assistant') {
|
|
158
|
-
s.runningTurns += 1;
|
|
159
|
-
// Claude Code sometimes carries `total_cost_usd` on intermediate events;
|
|
160
|
-
// when present it's authoritative (server-computed, includes anything
|
|
161
|
-
// we'd miss). When absent, estimate from this turn's usage so the widget
|
|
162
|
-
// still shows a growing $ counter on long runs.
|
|
163
|
-
if (typeof ev.total_cost_usd === 'number') {
|
|
164
|
-
s.runningCost = ev.total_cost_usd;
|
|
165
|
-
}
|
|
166
|
-
else if (ev.message?.usage) {
|
|
167
|
-
s.runningCost += estimateCostUsd(s.runningModel ?? ev.message.model, ev.message.usage);
|
|
168
|
-
}
|
|
169
|
-
// Token consumption = fresh input + output only. We deliberately EXCLUDE
|
|
170
|
-
// cache_read (and cache_creation): Claude re-reads ~the whole context from
|
|
171
|
-
// cache every turn, so summing cache_read across turns inflates the total
|
|
172
|
-
// ~5-10× and diverges from what Claude Code reports. input+output tracks
|
|
173
|
-
// the new tokens processed, matching the user's mental model + CC's number.
|
|
174
|
-
if (ev.message?.usage) {
|
|
175
|
-
const u = ev.message.usage;
|
|
176
|
-
s.runningTokens += (u.input_tokens ?? 0) + (u.output_tokens ?? 0);
|
|
177
|
-
}
|
|
178
|
-
out.push({ kind: 'usage', costUsd: s.runningCost, turns: s.runningTurns, tokens: s.runningTokens });
|
|
179
|
-
for (const block of ev.message?.content ?? []) {
|
|
180
|
-
if (block.type === 'tool_use') {
|
|
181
|
-
const name = block.name ?? '';
|
|
182
|
-
const tool = name.replace(/^mcp__playwright__/, '');
|
|
183
|
-
out.push({
|
|
184
|
-
kind: 'tool_use',
|
|
185
|
-
tool,
|
|
186
|
-
input: block.input,
|
|
187
|
-
costUsdSnapshot: s.runningCost,
|
|
188
|
-
tokensSnapshot: s.runningTokens,
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
else if (block.type === 'text') {
|
|
192
|
-
const text = block.text?.trim();
|
|
193
|
-
if (text)
|
|
194
|
-
out.push({ kind: 'text', text });
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
return out;
|
|
198
|
-
}
|
|
199
|
-
if (ev.type === 'user') {
|
|
200
|
-
for (const block of ev.message?.content ?? []) {
|
|
201
|
-
if (block.type === 'tool_result') {
|
|
202
|
-
out.push({ kind: 'tool_result', isError: block.is_error });
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
return out;
|
|
206
|
-
}
|
|
207
|
-
if (ev.type === 'result') {
|
|
208
|
-
out.push({
|
|
209
|
-
kind: 'session_end',
|
|
210
|
-
turns: ev.num_turns,
|
|
211
|
-
costUsd: ev.total_cost_usd,
|
|
212
|
-
tokens: s.runningTokens,
|
|
213
|
-
isError: ev.is_error,
|
|
214
|
-
summary: ev.result,
|
|
215
|
-
});
|
|
216
|
-
return out;
|
|
217
|
-
}
|
|
218
|
-
return [];
|
|
219
|
-
},
|
|
220
|
-
};
|
package/dist/agents/codex.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { AgentDescriptor, ParserState } from './types.js';
|
|
2
|
-
export declare const codexAgent: AgentDescriptor;
|
|
3
|
-
/**
|
|
4
|
-
* Test-only escape hatches. Tests pass a state object in and get the
|
|
5
|
-
* accumulated counters back — same shape as the parser sees during a real
|
|
6
|
-
* invocation, just driven by the test instead of by invokeAgent.
|
|
7
|
-
*/
|
|
8
|
-
export declare const __testing: {
|
|
9
|
-
freshState: () => ParserState;
|
|
10
|
-
resetCounters: (state: ParserState) => void;
|
|
11
|
-
getState: (state: ParserState) => {
|
|
12
|
-
runningCost: number;
|
|
13
|
-
runningTurns: number;
|
|
14
|
-
runningSessionId: string | undefined;
|
|
15
|
-
lastAgentMessage: string | undefined;
|
|
16
|
-
sawErrorEvent: boolean;
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAA8B,WAAW,EAAE,MAAM,YAAY,CAAC;AA6K3F,eAAO,MAAM,UAAU,EAAE,eAoKxB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS;sBACJ,WAAW;2BACJ,WAAW;sBAChB,WAAW;;;;;;;CAU9B,CAAC"}
|