@kkeve/suite 0.0.15 → 0.0.18
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/bin/keve.js +2 -1
- package/dist/commands/clean.js +2 -2
- package/dist/commands/config.js +7 -7
- package/dist/commands/init.js +2 -2
- package/dist/commands/report.js +7 -7
- package/dist/commands/run.js +12 -11
- package/dist/commands/test.js +7 -7
- package/dist/config.js +7 -7
- package/dist/core/action-log-writer.js +4 -1
- package/dist/core/decorator/keve-decorators.d.ts +128 -0
- package/dist/core/decorator/keve-decorators.js +254 -0
- package/dist/core/decorator/keve-host.d.ts +40 -0
- package/dist/core/decorator/keve-host.js +33 -0
- package/dist/core/{keve-registry.d.ts → decorator/keve-registry.d.ts} +19 -0
- package/dist/core/{keve-registry.js → decorator/keve-registry.js} +13 -1
- package/dist/core/generateReport/report.d.ts +1 -1
- package/dist/core/generateReport/report.js +2 -2
- package/dist/core/generateReport/reportData.d.ts +3 -0
- package/dist/core/generateReport/reportData.js +49 -15
- package/dist/core/judge/confidence.d.ts +119 -0
- package/dist/core/judge/confidence.js +295 -0
- package/dist/core/judge/goal-heuristics.d.ts +32 -0
- package/dist/core/judge/goal-heuristics.js +128 -0
- package/dist/core/judge/pngCodec.d.ts +23 -0
- package/dist/core/judge/pngCodec.js +215 -0
- package/dist/core/judge/screenshotDiff.d.ts +112 -0
- package/dist/core/judge/screenshotDiff.js +420 -0
- package/dist/core/page-object/definePage.d.ts +95 -0
- package/dist/core/page-object/definePage.js +62 -0
- package/dist/core/page-object/elementResolver.d.ts +32 -0
- package/dist/core/page-object/elementResolver.js +236 -0
- package/dist/core/page-object/engine-types.d.ts +140 -0
- package/dist/core/page-object/engine-types.js +34 -0
- package/dist/core/sso-cookie.d.ts +18 -0
- package/dist/core/sso-cookie.js +10 -0
- package/dist/dsl/index.d.ts +15 -0
- package/dist/dsl/index.js +29 -0
- package/dist/dsl/locatorSource.d.ts +25 -0
- package/dist/dsl/locatorSource.js +323 -0
- package/dist/dsl/ops.d.ts +46 -0
- package/dist/dsl/ops.js +95 -0
- package/dist/dsl/toDecorator.d.ts +98 -0
- package/dist/dsl/toDecorator.js +747 -0
- package/dist/engine-cypress/adapter.d.ts +108 -0
- package/dist/engine-cypress/adapter.js +514 -0
- package/dist/engine-cypress/agent-page.d.ts +159 -0
- package/dist/engine-cypress/agent-page.js +566 -0
- package/dist/engine-cypress/agentDom.d.ts +22 -0
- package/dist/engine-cypress/agentDom.js +590 -0
- package/dist/engine-cypress/bridge.d.ts +39 -0
- package/dist/engine-cypress/bridge.js +598 -0
- package/dist/engine-cypress/cdp.d.ts +78 -0
- package/dist/engine-cypress/cdp.js +339 -0
- package/dist/engine-cypress/host.d.ts +22 -0
- package/dist/engine-cypress/host.js +480 -0
- package/dist/engine-cypress/index.d.ts +26 -0
- package/dist/engine-cypress/index.js +58 -0
- package/dist/engine-cypress/keveGoal.d.ts +43 -0
- package/dist/engine-cypress/keveGoal.js +265 -0
- package/dist/engine-cypress/pageOps.d.ts +41 -0
- package/dist/engine-cypress/pageOps.js +439 -0
- package/dist/engine-cypress/reporter.d.ts +20 -0
- package/dist/engine-cypress/reporter.js +128 -0
- package/dist/engine-cypress/setup.d.ts +21 -0
- package/dist/engine-cypress/setup.js +27 -0
- package/dist/engine-cypress/shotBuffer.d.ts +40 -0
- package/dist/engine-cypress/shotBuffer.js +41 -0
- package/dist/engine-cypress/state.d.ts +56 -0
- package/dist/engine-cypress/state.js +81 -0
- package/dist/engine-playwright/engineAdapter.d.ts +78 -0
- package/dist/engine-playwright/engineAdapter.js +371 -0
- package/dist/engine-playwright/global-setup.d.ts +28 -0
- package/dist/engine-playwright/global-setup.js +142 -0
- package/dist/{core → engine-playwright}/keve-report.d.ts +0 -1
- package/dist/engine-playwright/keve-report.js +137 -0
- package/dist/{core → engine-playwright}/keve-test.d.ts +10 -8
- package/dist/{core → engine-playwright}/keve-test.js +204 -200
- package/dist/{core → engine-playwright}/pw-config.js +8 -7
- package/dist/index.d.ts +13 -8
- package/dist/index.js +43 -28
- package/dist/page-agent/agent.d.ts +82 -7
- package/dist/page-agent/agent.js +252 -88
- package/dist/page-agent/diagnostics.d.ts +184 -0
- package/dist/page-agent/diagnostics.js +377 -0
- package/dist/page-agent/hooks.d.ts +3 -2
- package/dist/page-agent/hooks.js +4 -3
- package/dist/page-agent/page-like.d.ts +116 -0
- package/dist/page-agent/page-like.js +14 -0
- package/dist/page-agent/playwright-page.d.ts +20 -0
- package/dist/page-agent/playwright-page.js +98 -0
- package/dist/page-agent/system-prompt.d.ts +7 -0
- package/dist/page-agent/system-prompt.js +10 -0
- package/dist/page-agent/tools.d.ts +1 -1
- package/dist/page-agent/tools.js +144 -8
- package/package.json +24 -11
- package/scripts/gen-system-prompt.mjs +36 -0
- package/scripts/run-dsl-task.mjs +652 -0
- package/scripts/runtime/cypress-preprocessor.mjs +44 -0
- package/scripts/runtime/cypress.config.mjs +35 -0
- package/scripts/runtime/playwright.config.mjs +41 -0
- package/scripts/verify-shot-diff.mjs +243 -0
- package/dist/commands/auth-update.d.ts +0 -16
- package/dist/commands/auth-update.js +0 -88
- package/dist/core/auth.d.ts +0 -17
- package/dist/core/auth.js +0 -224
- package/dist/core/cdp-resolver.d.ts +0 -5
- package/dist/core/cdp-resolver.js +0 -93
- package/dist/core/global-setup.d.ts +0 -6
- package/dist/core/global-setup.js +0 -123
- package/dist/core/keve-decorators.d.ts +0 -51
- package/dist/core/keve-decorators.js +0 -95
- package/dist/core/keve-report.js +0 -376
- /package/dist/core/{keve-aspect.d.ts → decorator/keve-aspect.d.ts} +0 -0
- /package/dist/core/{keve-aspect.js → decorator/keve-aspect.js} +0 -0
- /package/dist/{core → engine-playwright}/pw-config.d.ts +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
export { generateReportData, type ReportDataOptions, parseCaseIdFromTitle, extractAllSpecs, buildCaseResultMap, parseYamlSimple } from './core/generateReport/reportData';
|
|
2
|
-
export { KevePageAgent, reactLoop, type AgentResult, type AgentStepEvent, type AgentEvent, type AgentOptions, type AgentHooks } from './page-agent/agent';
|
|
3
|
-
export { tools, packMacroToolSchema, type PageAgentTool, type MacroToolInput, type ToolContext } from './page-agent/tools';
|
|
4
|
-
export { keveAspect, KeveAspectRegistry, type AspectPhase, type AspectDefinition, type GoalContext, type GoalResult } from './core/keve-aspect';
|
|
5
|
-
export { ActionLogWriter, type ActionLogRecord } from './core/action-log-writer';
|
|
6
|
-
export { learnedActions, LearnedActions } from './core/learned-actions';
|
|
7
|
-
export { generatePwConfig, resolveConfigOutputPath, findExistingConfig, type PwConfigOptions } from './
|
|
8
|
-
export { run, KeveRunError, type RunOptions, type RunResult } from './commands/run';
|
|
1
|
+
export { generateReportData, type ReportDataOptions, parseCaseIdFromTitle, extractAllSpecs, buildCaseResultMap, parseYamlSimple } from './core/generateReport/reportData.js';
|
|
2
|
+
export { KevePageAgent, reactLoop, type AgentResult, type AgentStepEvent, type AgentEvent, type AgentOptions, type AgentHooks } from './page-agent/agent.js';
|
|
3
|
+
export { tools, packMacroToolSchema, type PageAgentTool, type MacroToolInput, type ToolContext } from './page-agent/tools.js';
|
|
4
|
+
export { keveAspect, KeveAspectRegistry, type AspectPhase, type AspectDefinition, type GoalContext, type GoalResult } from './core/decorator/keve-aspect.js';
|
|
5
|
+
export { ActionLogWriter, type ActionLogRecord } from './core/action-log-writer.js';
|
|
6
|
+
export { learnedActions, LearnedActions } from './core/learned-actions.js';
|
|
7
|
+
export { generatePwConfig, resolveConfigOutputPath, findExistingConfig, type PwConfigOptions } from './engine-playwright/pw-config.js';
|
|
8
|
+
export { run, KeveRunError, type RunOptions, type RunResult } from './commands/run.js';
|
|
9
|
+
export { definePage, type ElementRef, type ElementFactory, type ElementEntry, type ElementRegistry, type PageDefinition, type DefinedPage, type WaitForReady, isElementFactory, getElement } from './core/page-object/definePage.js';
|
|
10
|
+
export { resolveElement, resolveChain, resolveFromPage } from './core/page-object/elementResolver.js';
|
|
11
|
+
export { PlaywrightEngine, createEngine, type EngineAdapter } from './engine-playwright/engineAdapter.js';
|
|
12
|
+
export { toDecorator, generateDecoratorSpec, type ToDecoratorOptions, type DslStep, type DslExpectation } from './dsl/index.js';
|
|
13
|
+
export type { SsoCookie } from './core/sso-cookie.js';
|
package/dist/index.js
CHANGED
|
@@ -1,38 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.KeveRunError = exports.run = exports.findExistingConfig = exports.resolveConfigOutputPath = exports.generatePwConfig = exports.LearnedActions = exports.learnedActions = exports.ActionLogWriter = exports.KeveAspectRegistry = exports.keveAspect = exports.packMacroToolSchema = exports.tools = exports.reactLoop = exports.KevePageAgent = exports.parseYamlSimple = exports.buildCaseResultMap = exports.extractAllSpecs = exports.parseCaseIdFromTitle = exports.generateReportData = void 0;
|
|
4
|
-
var
|
|
5
|
-
Object.defineProperty(exports, "generateReportData", { enumerable: true, get: function () { return
|
|
6
|
-
Object.defineProperty(exports, "parseCaseIdFromTitle", { enumerable: true, get: function () { return
|
|
7
|
-
Object.defineProperty(exports, "extractAllSpecs", { enumerable: true, get: function () { return
|
|
8
|
-
Object.defineProperty(exports, "buildCaseResultMap", { enumerable: true, get: function () { return
|
|
9
|
-
Object.defineProperty(exports, "parseYamlSimple", { enumerable: true, get: function () { return
|
|
3
|
+
exports.generateDecoratorSpec = exports.toDecorator = exports.createEngine = exports.PlaywrightEngine = exports.resolveFromPage = exports.resolveChain = exports.resolveElement = exports.getElement = exports.isElementFactory = exports.definePage = exports.KeveRunError = exports.run = exports.findExistingConfig = exports.resolveConfigOutputPath = exports.generatePwConfig = exports.LearnedActions = exports.learnedActions = exports.ActionLogWriter = exports.KeveAspectRegistry = exports.keveAspect = exports.packMacroToolSchema = exports.tools = exports.reactLoop = exports.KevePageAgent = exports.parseYamlSimple = exports.buildCaseResultMap = exports.extractAllSpecs = exports.parseCaseIdFromTitle = exports.generateReportData = void 0;
|
|
4
|
+
var reportData_js_1 = require("./core/generateReport/reportData.js");
|
|
5
|
+
Object.defineProperty(exports, "generateReportData", { enumerable: true, get: function () { return reportData_js_1.generateReportData; } });
|
|
6
|
+
Object.defineProperty(exports, "parseCaseIdFromTitle", { enumerable: true, get: function () { return reportData_js_1.parseCaseIdFromTitle; } });
|
|
7
|
+
Object.defineProperty(exports, "extractAllSpecs", { enumerable: true, get: function () { return reportData_js_1.extractAllSpecs; } });
|
|
8
|
+
Object.defineProperty(exports, "buildCaseResultMap", { enumerable: true, get: function () { return reportData_js_1.buildCaseResultMap; } });
|
|
9
|
+
Object.defineProperty(exports, "parseYamlSimple", { enumerable: true, get: function () { return reportData_js_1.parseYamlSimple; } });
|
|
10
10
|
// Re-Act loop (refactored to page-agent)
|
|
11
|
-
var
|
|
12
|
-
Object.defineProperty(exports, "KevePageAgent", { enumerable: true, get: function () { return
|
|
13
|
-
Object.defineProperty(exports, "reactLoop", { enumerable: true, get: function () { return
|
|
14
|
-
var
|
|
15
|
-
Object.defineProperty(exports, "tools", { enumerable: true, get: function () { return
|
|
16
|
-
Object.defineProperty(exports, "packMacroToolSchema", { enumerable: true, get: function () { return
|
|
11
|
+
var agent_js_1 = require("./page-agent/agent.js");
|
|
12
|
+
Object.defineProperty(exports, "KevePageAgent", { enumerable: true, get: function () { return agent_js_1.KevePageAgent; } });
|
|
13
|
+
Object.defineProperty(exports, "reactLoop", { enumerable: true, get: function () { return agent_js_1.reactLoop; } });
|
|
14
|
+
var tools_js_1 = require("./page-agent/tools.js");
|
|
15
|
+
Object.defineProperty(exports, "tools", { enumerable: true, get: function () { return tools_js_1.tools; } });
|
|
16
|
+
Object.defineProperty(exports, "packMacroToolSchema", { enumerable: true, get: function () { return tools_js_1.packMacroToolSchema; } });
|
|
17
17
|
// Aspect registry (new)
|
|
18
|
-
var
|
|
19
|
-
Object.defineProperty(exports, "keveAspect", { enumerable: true, get: function () { return
|
|
20
|
-
Object.defineProperty(exports, "KeveAspectRegistry", { enumerable: true, get: function () { return
|
|
18
|
+
var keve_aspect_js_1 = require("./core/decorator/keve-aspect.js");
|
|
19
|
+
Object.defineProperty(exports, "keveAspect", { enumerable: true, get: function () { return keve_aspect_js_1.keveAspect; } });
|
|
20
|
+
Object.defineProperty(exports, "KeveAspectRegistry", { enumerable: true, get: function () { return keve_aspect_js_1.KeveAspectRegistry; } });
|
|
21
21
|
// Action log (new)
|
|
22
|
-
var
|
|
23
|
-
Object.defineProperty(exports, "ActionLogWriter", { enumerable: true, get: function () { return
|
|
22
|
+
var action_log_writer_js_1 = require("./core/action-log-writer.js");
|
|
23
|
+
Object.defineProperty(exports, "ActionLogWriter", { enumerable: true, get: function () { return action_log_writer_js_1.ActionLogWriter; } });
|
|
24
24
|
// Learned actions (new)
|
|
25
|
-
var
|
|
26
|
-
Object.defineProperty(exports, "learnedActions", { enumerable: true, get: function () { return
|
|
27
|
-
Object.defineProperty(exports, "LearnedActions", { enumerable: true, get: function () { return
|
|
25
|
+
var learned_actions_js_1 = require("./core/learned-actions.js");
|
|
26
|
+
Object.defineProperty(exports, "learnedActions", { enumerable: true, get: function () { return learned_actions_js_1.learnedActions; } });
|
|
27
|
+
Object.defineProperty(exports, "LearnedActions", { enumerable: true, get: function () { return learned_actions_js_1.LearnedActions; } });
|
|
28
28
|
// Playwright config generator
|
|
29
|
-
var
|
|
30
|
-
Object.defineProperty(exports, "generatePwConfig", { enumerable: true, get: function () { return
|
|
31
|
-
Object.defineProperty(exports, "resolveConfigOutputPath", { enumerable: true, get: function () { return
|
|
32
|
-
Object.defineProperty(exports, "findExistingConfig", { enumerable: true, get: function () { return
|
|
29
|
+
var pw_config_js_1 = require("./engine-playwright/pw-config.js");
|
|
30
|
+
Object.defineProperty(exports, "generatePwConfig", { enumerable: true, get: function () { return pw_config_js_1.generatePwConfig; } });
|
|
31
|
+
Object.defineProperty(exports, "resolveConfigOutputPath", { enumerable: true, get: function () { return pw_config_js_1.resolveConfigOutputPath; } });
|
|
32
|
+
Object.defineProperty(exports, "findExistingConfig", { enumerable: true, get: function () { return pw_config_js_1.findExistingConfig; } });
|
|
33
33
|
// Run API
|
|
34
|
-
var
|
|
35
|
-
Object.defineProperty(exports, "run", { enumerable: true, get: function () { return
|
|
36
|
-
Object.defineProperty(exports, "KeveRunError", { enumerable: true, get: function () { return
|
|
34
|
+
var run_js_1 = require("./commands/run.js");
|
|
35
|
+
Object.defineProperty(exports, "run", { enumerable: true, get: function () { return run_js_1.run; } });
|
|
36
|
+
Object.defineProperty(exports, "KeveRunError", { enumerable: true, get: function () { return run_js_1.KeveRunError; } });
|
|
37
37
|
// Script refine (new)
|
|
38
38
|
// script-refine is now part of page-agent/tools
|
|
39
|
+
// ─── Code-based Element Management (P0) ──────────────────────────────
|
|
40
|
+
var definePage_js_1 = require("./core/page-object/definePage.js");
|
|
41
|
+
Object.defineProperty(exports, "definePage", { enumerable: true, get: function () { return definePage_js_1.definePage; } });
|
|
42
|
+
Object.defineProperty(exports, "isElementFactory", { enumerable: true, get: function () { return definePage_js_1.isElementFactory; } });
|
|
43
|
+
Object.defineProperty(exports, "getElement", { enumerable: true, get: function () { return definePage_js_1.getElement; } });
|
|
44
|
+
var elementResolver_js_1 = require("./core/page-object/elementResolver.js");
|
|
45
|
+
Object.defineProperty(exports, "resolveElement", { enumerable: true, get: function () { return elementResolver_js_1.resolveElement; } });
|
|
46
|
+
Object.defineProperty(exports, "resolveChain", { enumerable: true, get: function () { return elementResolver_js_1.resolveChain; } });
|
|
47
|
+
Object.defineProperty(exports, "resolveFromPage", { enumerable: true, get: function () { return elementResolver_js_1.resolveFromPage; } });
|
|
48
|
+
var engineAdapter_js_1 = require("./engine-playwright/engineAdapter.js");
|
|
49
|
+
Object.defineProperty(exports, "PlaywrightEngine", { enumerable: true, get: function () { return engineAdapter_js_1.PlaywrightEngine; } });
|
|
50
|
+
Object.defineProperty(exports, "createEngine", { enumerable: true, get: function () { return engineAdapter_js_1.createEngine; } });
|
|
51
|
+
var index_js_1 = require("./dsl/index.js");
|
|
52
|
+
Object.defineProperty(exports, "toDecorator", { enumerable: true, get: function () { return index_js_1.toDecorator; } });
|
|
53
|
+
Object.defineProperty(exports, "generateDecoratorSpec", { enumerable: true, get: function () { return index_js_1.generateDecoratorSpec; } });
|
|
@@ -15,8 +15,10 @@
|
|
|
15
15
|
* const agent = new KevePageAgent(page, { maxSteps: 5 });
|
|
16
16
|
* const result = await agent.execute(step, expected, { learnedActionsHint, fnResult });
|
|
17
17
|
*/
|
|
18
|
-
import type { Page } from '@playwright/test';
|
|
19
18
|
import { LLM } from '@kkeve/core/llm';
|
|
19
|
+
import type { AgentInitialImageLoader, AgentPage, AgentScreenshotSaver } from './page-like.js';
|
|
20
|
+
import { toAgentPage } from './playwright-page.js';
|
|
21
|
+
import { type RawAiUsageRecord, type RawConsoleRecord, type RawNetworkRecord, type RuntimeDiagnostics } from './diagnostics.js';
|
|
20
22
|
export interface AgentStepEvent {
|
|
21
23
|
type: 'step';
|
|
22
24
|
stepIndex: number;
|
|
@@ -29,6 +31,8 @@ export interface AgentStepEvent {
|
|
|
29
31
|
toolError?: string;
|
|
30
32
|
snapshot: string;
|
|
31
33
|
screenshotPath?: string;
|
|
34
|
+
/** 工具执行耗时(ms);LLM 调度异常时缺省 */
|
|
35
|
+
duration?: number;
|
|
32
36
|
}
|
|
33
37
|
export interface AgentObservationEvent {
|
|
34
38
|
type: 'observation';
|
|
@@ -44,6 +48,8 @@ export interface AgentResult {
|
|
|
44
48
|
data: string;
|
|
45
49
|
events: AgentEvent[];
|
|
46
50
|
finalSnapshot: string;
|
|
51
|
+
/** 运行诊断:性能、网络、浏览器错误与质量信号 */
|
|
52
|
+
diagnostics?: RuntimeDiagnostics;
|
|
47
53
|
agentScreenshots?: string[];
|
|
48
54
|
diagnosticHints?: string[];
|
|
49
55
|
}
|
|
@@ -75,13 +81,48 @@ export interface AgentOptions {
|
|
|
75
81
|
/** fn-after 截图路径(相对 taskDir)— fn 执行后的页面状态 */
|
|
76
82
|
fnAfterScreenshot?: string;
|
|
77
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Agent 的宿主能力注入点。
|
|
86
|
+
*
|
|
87
|
+
* `page-agent` 现在同时服务 Playwright 与 Cypress(浏览器 bundle),因此不能再
|
|
88
|
+
* 直接持有 Node API。所有原本写死的 Node 能力(读 prompt / 落盘截图 / 读本地
|
|
89
|
+
* 图片 / 读环境变量 / LLM 传输)都改为构造时注入;Playwright 侧给 Node 实现,
|
|
90
|
+
* Cypress 侧给 HTTP 桥实现。
|
|
91
|
+
*/
|
|
92
|
+
export interface AgentHostOptions {
|
|
93
|
+
/** system prompt 文本(缺省用编译期内联的 SYSTEM_PROMPT) */
|
|
94
|
+
systemPrompt?: string;
|
|
95
|
+
/** 目标应用 URL(原 process.env.KEVE_TARGET_URL) */
|
|
96
|
+
targetUrl?: string;
|
|
97
|
+
/** 环境变量读取(原 process.env.X),缺省返回空串 */
|
|
98
|
+
getEnv?: (name: string) => string;
|
|
99
|
+
/** 截图落盘,返回相对 taskDir 的路径(原 saveScreenshotBuffer 的 fs 部分) */
|
|
100
|
+
saveScreenshot?: AgentScreenshotSaver;
|
|
101
|
+
/** 读取初始多模态截图(原 loadInitialScreenshots 的 fs 部分) */
|
|
102
|
+
loadInitialImages?: AgentInitialImageLoader;
|
|
103
|
+
/** LLM 配置;缺省从注入的环境变量拼装 */
|
|
104
|
+
llm?: {
|
|
105
|
+
baseURL: string;
|
|
106
|
+
model: string;
|
|
107
|
+
apiKey?: string;
|
|
108
|
+
temperature?: number;
|
|
109
|
+
maxRetries?: number;
|
|
110
|
+
/** 浏览器侧经桥转发;Node 侧缺省走原生 fetch */
|
|
111
|
+
customFetch?: typeof globalThis.fetch;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
78
114
|
export declare class KevePageAgent {
|
|
79
|
-
readonly page:
|
|
115
|
+
readonly page: AgentPage;
|
|
80
116
|
readonly maxSteps: number;
|
|
81
117
|
readonly llm: LLM;
|
|
82
118
|
events: AgentEvent[];
|
|
83
119
|
private abortController;
|
|
84
120
|
private systemPrompt;
|
|
121
|
+
/** 目标应用 URL(原 process.env.KEVE_TARGET_URL) */
|
|
122
|
+
readonly targetUrl: string;
|
|
123
|
+
private getEnvFn;
|
|
124
|
+
private saveScreenshotFn?;
|
|
125
|
+
private loadInitialImagesFn?;
|
|
85
126
|
/** Current execute options (set at start of execute(), accessible from hooks) */
|
|
86
127
|
options?: AgentOptions;
|
|
87
128
|
private hooks?;
|
|
@@ -97,12 +138,26 @@ export declare class KevePageAgent {
|
|
|
97
138
|
_pendingFileChooser: any;
|
|
98
139
|
_consoleMessages: any[];
|
|
99
140
|
_networkRequests: any[];
|
|
141
|
+
_browserDiagnostics: RawConsoleRecord[];
|
|
142
|
+
_networkDiagnostics: RawNetworkRecord[];
|
|
143
|
+
/** 本次 execute 内 LLM 推理累计耗时(ms) */
|
|
144
|
+
_aiReasoningMs: number;
|
|
145
|
+
/** 本次 execute 内 LLM token 累计用量 */
|
|
146
|
+
_aiUsage: RawAiUsageRecord;
|
|
147
|
+
/** 本次 execute 内工具操作累计耗时(ms) */
|
|
148
|
+
_actionMs: number;
|
|
149
|
+
/** 本次 execute 起始时间,用于总耗时诊断 */
|
|
150
|
+
_executeStartedAt: number;
|
|
100
151
|
_pageListenersSetup: boolean;
|
|
101
|
-
|
|
152
|
+
/** 页面级性能指标(execute 结束时一次性读取;读取失败则留空) */
|
|
153
|
+
private _lastPageMetrics?;
|
|
154
|
+
constructor(page: AgentPage, options?: {
|
|
102
155
|
maxSteps?: number;
|
|
103
156
|
customSystemPrompt?: string;
|
|
104
157
|
hooks?: AgentHooks;
|
|
105
|
-
});
|
|
158
|
+
} & AgentHostOptions);
|
|
159
|
+
/** 读取宿主注入的环境变量(Cypress 侧由 cy.env 转发,Playwright 侧即 process.env) */
|
|
160
|
+
getEnv(name: string): string;
|
|
106
161
|
/** Stop the current execution */
|
|
107
162
|
stop(): void;
|
|
108
163
|
/** Set up page event listeners for dialog, console, network, and file chooser capture.
|
|
@@ -111,9 +166,28 @@ export declare class KevePageAgent {
|
|
|
111
166
|
/** Main Re-Act execute loop */
|
|
112
167
|
execute(step: string, expected: string, options?: AgentOptions): Promise<AgentResult>;
|
|
113
168
|
private pushObservation;
|
|
169
|
+
/**
|
|
170
|
+
* 读取页面级性能指标。
|
|
171
|
+
*
|
|
172
|
+
* Playwright 与 Cypress 都走同一段探针源码:Playwright 在真实页面上下文,
|
|
173
|
+
* Cypress 在 AUT 的 isolated world(navigation timing / performance entries
|
|
174
|
+
* 与主世界共享同一份 Performance 数据)。
|
|
175
|
+
*/
|
|
176
|
+
private capturePageMetrics;
|
|
177
|
+
/**
|
|
178
|
+
* 汇总当前执行期的运行诊断(含页面性能与质量信号)。
|
|
179
|
+
* 公开给 reactLoop 的异常兜底分支复用,避免中断时丢失已采集数据。
|
|
180
|
+
*/
|
|
181
|
+
buildDiagnostics(): RuntimeDiagnostics;
|
|
182
|
+
/** 累加单次 LLM 调用的 token 用量(重试中的失败请求不在返回结果里,无法计量) */
|
|
183
|
+
private recordAiUsage;
|
|
114
184
|
private assembleUserPrompt;
|
|
115
185
|
private buildMacroTool;
|
|
116
|
-
/**
|
|
186
|
+
/**
|
|
187
|
+
* Save screenshot base64 to test artifacts.
|
|
188
|
+
*
|
|
189
|
+
* 落盘能力由宿主注入:Playwright 侧写本地文件系统,Cypress 侧经 HTTP 桥落盘。
|
|
190
|
+
*/
|
|
117
191
|
private saveScreenshotBuffer;
|
|
118
192
|
/** Load initial screenshots (goal-before + fn-after) as ContentItem[] for step 0 multimodal input */
|
|
119
193
|
private loadInitialScreenshots;
|
|
@@ -139,7 +213,7 @@ export declare class KevePageAgent {
|
|
|
139
213
|
* Drop-in replacement for the old reactLoop function.
|
|
140
214
|
* Creates a KevePageAgent, runs it, and maps the result.
|
|
141
215
|
*/
|
|
142
|
-
export declare function reactLoop(page:
|
|
216
|
+
export declare function reactLoop(page: Parameters<typeof toAgentPage>[0], step: string, expected: string, options?: {
|
|
143
217
|
maxSteps?: number;
|
|
144
218
|
learnedActionsHint?: string;
|
|
145
219
|
specFilePath?: string;
|
|
@@ -151,10 +225,11 @@ export declare function reactLoop(page: Page, step: string, expected: string, op
|
|
|
151
225
|
signal?: AbortSignal;
|
|
152
226
|
goalScreenshotBefore?: string;
|
|
153
227
|
fnAfterScreenshot?: string;
|
|
154
|
-
}): Promise<{
|
|
228
|
+
} & AgentHostOptions): Promise<{
|
|
155
229
|
actions: any[];
|
|
156
230
|
expectedMet: boolean;
|
|
157
231
|
conclusion?: 'pass' | 'fail' | 'blocked';
|
|
158
232
|
finalSnapshot: string;
|
|
233
|
+
diagnostics?: RuntimeDiagnostics;
|
|
159
234
|
agentScreenshots?: string[];
|
|
160
235
|
}>;
|