@beeos-ai/device-agent 0.12.7 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dist/agent-runtime/adapters/base.d.ts +2 -0
  2. package/dist/agent-runtime/adapters/base.js +1 -0
  3. package/dist/agent-runtime/adapters/base.js.map +1 -1
  4. package/dist/agent-runtime/adapters/openai.js +32 -16
  5. package/dist/agent-runtime/adapters/openai.js.map +1 -1
  6. package/dist/agent-runtime/advanced/app-card.d.ts +23 -0
  7. package/dist/agent-runtime/advanced/app-card.js +99 -0
  8. package/dist/agent-runtime/advanced/app-card.js.map +1 -0
  9. package/dist/agent-runtime/advanced/knowledge.d.ts +15 -0
  10. package/dist/agent-runtime/advanced/knowledge.js +85 -0
  11. package/dist/agent-runtime/advanced/knowledge.js.map +1 -0
  12. package/dist/agent-runtime/advanced/subgoal-verifier.d.ts +37 -0
  13. package/dist/agent-runtime/advanced/subgoal-verifier.js +190 -0
  14. package/dist/agent-runtime/advanced/subgoal-verifier.js.map +1 -0
  15. package/dist/agent-runtime/advanced/task-state.d.ts +20 -0
  16. package/dist/agent-runtime/advanced/task-state.js +60 -0
  17. package/dist/agent-runtime/advanced/task-state.js.map +1 -0
  18. package/dist/agent-runtime/agent-runner.d.ts +16 -27
  19. package/dist/agent-runtime/agent-runner.js +19 -132
  20. package/dist/agent-runtime/agent-runner.js.map +1 -1
  21. package/dist/agent-runtime/core.d.ts +8 -0
  22. package/dist/agent-runtime/core.js +1 -0
  23. package/dist/agent-runtime/core.js.map +1 -1
  24. package/dist/agent-runtime/execution-mode.d.ts +28 -0
  25. package/dist/agent-runtime/execution-mode.js +51 -0
  26. package/dist/agent-runtime/execution-mode.js.map +1 -0
  27. package/dist/agent-runtime/factory.d.ts +6 -4
  28. package/dist/agent-runtime/factory.js +4 -4
  29. package/dist/agent-runtime/factory.js.map +1 -1
  30. package/dist/agent-runtime/index.d.ts +9 -2
  31. package/dist/agent-runtime/index.js +7 -0
  32. package/dist/agent-runtime/index.js.map +1 -1
  33. package/dist/agent-runtime/models/base.d.ts +2 -0
  34. package/dist/agent-runtime/models/client.d.ts +1 -0
  35. package/dist/agent-runtime/models/client.js +83 -1
  36. package/dist/agent-runtime/models/client.js.map +1 -1
  37. package/dist/agent-runtime/models/runtime-registry.d.ts +28 -0
  38. package/dist/agent-runtime/models/runtime-registry.js +59 -0
  39. package/dist/agent-runtime/models/runtime-registry.js.map +1 -0
  40. package/dist/agent-runtime/models/vlm/autoglm.js +14 -9
  41. package/dist/agent-runtime/models/vlm/autoglm.js.map +1 -1
  42. package/dist/agent-runtime/models/vlm/base.d.ts +8 -1
  43. package/dist/agent-runtime/models/vlm/base.js +30 -10
  44. package/dist/agent-runtime/models/vlm/base.js.map +1 -1
  45. package/dist/agent-runtime/models/vlm/general.d.ts +7 -1
  46. package/dist/agent-runtime/models/vlm/general.js +43 -9
  47. package/dist/agent-runtime/models/vlm/general.js.map +1 -1
  48. package/dist/agent-runtime/models/vlm/guiowl.js +4 -13
  49. package/dist/agent-runtime/models/vlm/guiowl.js.map +1 -1
  50. package/dist/agent-runtime/models/vlm/maiui.js +4 -6
  51. package/dist/agent-runtime/models/vlm/maiui.js.map +1 -1
  52. package/dist/agent-runtime/models/vlm/qwenvl.js +4 -6
  53. package/dist/agent-runtime/models/vlm/qwenvl.js.map +1 -1
  54. package/dist/agent-runtime/models/vlm/shared/tool-call.d.ts +1 -1
  55. package/dist/agent-runtime/models/vlm/shared/tool-call.js +66 -15
  56. package/dist/agent-runtime/models/vlm/shared/tool-call.js.map +1 -1
  57. package/dist/agent-runtime/modes/hybrid/index.d.ts +25 -13
  58. package/dist/agent-runtime/modes/hybrid/index.js +74 -28
  59. package/dist/agent-runtime/modes/hybrid/index.js.map +1 -1
  60. package/dist/agent-runtime/modes/hybrid/planner/base.d.ts +4 -0
  61. package/dist/agent-runtime/modes/hybrid/planner/base.js.map +1 -1
  62. package/dist/agent-runtime/modes/hybrid/planner/llm-planner.js +2 -0
  63. package/dist/agent-runtime/modes/hybrid/planner/llm-planner.js.map +1 -1
  64. package/dist/agent-runtime/modes/hybrid/planner/noop-planner.d.ts +1 -1
  65. package/dist/agent-runtime/modes/hybrid/planner/noop-planner.js +1 -1
  66. package/dist/agent-runtime/modes/hybrid/planner/prompts.d.ts +2 -0
  67. package/dist/agent-runtime/modes/hybrid/planner/prompts.js +8 -0
  68. package/dist/agent-runtime/modes/hybrid/planner/prompts.js.map +1 -1
  69. package/dist/agent-runtime/modes/orchestrator/index.d.ts +6 -0
  70. package/dist/agent-runtime/modes/orchestrator/index.js +4 -0
  71. package/dist/agent-runtime/modes/orchestrator/index.js.map +1 -1
  72. package/dist/agent-runtime/plan-executor.d.ts +8 -2
  73. package/dist/agent-runtime/plan-executor.js +109 -14
  74. package/dist/agent-runtime/plan-executor.js.map +1 -1
  75. package/dist/agent-runtime/reflectors/policy.d.ts +2 -5
  76. package/dist/agent-runtime/reflectors/policy.js +6 -14
  77. package/dist/agent-runtime/reflectors/policy.js.map +1 -1
  78. package/dist/agent-runtime/reflectors/trajectory-reflector.d.ts +3 -4
  79. package/dist/agent-runtime/reflectors/trajectory-reflector.js +4 -4
  80. package/dist/agent-runtime/reflectors/trajectory-reflector.js.map +1 -1
  81. package/dist/agent-runtime/skills/replay.js +1 -0
  82. package/dist/agent-runtime/skills/replay.js.map +1 -1
  83. package/dist/agent-runtime/vlm.d.ts +2 -3
  84. package/dist/agent-runtime/vlm.js +2 -3
  85. package/dist/agent-runtime/vlm.js.map +1 -1
  86. package/dist/api.js +1 -0
  87. package/dist/api.js.map +1 -1
  88. package/dist/app/agent-host.js +3 -3
  89. package/dist/app/agent-host.js.map +1 -1
  90. package/dist/app/multi-device-host.d.ts +2 -2
  91. package/dist/app/multi-device-host.js +1 -1
  92. package/dist/app/session-manager.d.ts +20 -3
  93. package/dist/app/session-manager.js +33 -4
  94. package/dist/app/session-manager.js.map +1 -1
  95. package/dist/bootstrap.d.ts +2 -8
  96. package/dist/bootstrap.js +61 -103
  97. package/dist/bootstrap.js.map +1 -1
  98. package/dist/config/loader.d.ts +2 -9
  99. package/dist/config/loader.js +30 -31
  100. package/dist/config/loader.js.map +1 -1
  101. package/dist/config/schema.d.ts +3 -27
  102. package/dist/config/schema.js +6 -41
  103. package/dist/config/schema.js.map +1 -1
  104. package/dist/device/apps.js +51 -1
  105. package/dist/device/apps.js.map +1 -1
  106. package/dist/fleet/adapters/process/in-process-manager.d.ts +1 -1
  107. package/dist/fleet/adapters/process/node-process-manager.d.ts +7 -0
  108. package/dist/fleet/adapters/process/node-process-manager.js +29 -8
  109. package/dist/fleet/adapters/process/node-process-manager.js.map +1 -1
  110. package/dist/inbound/acp/handlers/session.d.ts +4 -1
  111. package/dist/inbound/acp/handlers/session.js +20 -5
  112. package/dist/inbound/acp/handlers/session.js.map +1 -1
  113. package/dist/inbound/cli/benchmark-command.d.ts +17 -0
  114. package/dist/inbound/cli/benchmark-command.js +158 -0
  115. package/dist/inbound/cli/benchmark-command.js.map +1 -0
  116. package/dist/inbound/cli/fleet-command.d.ts +12 -1
  117. package/dist/inbound/cli/fleet-command.js +12 -8
  118. package/dist/inbound/cli/fleet-command.js.map +1 -1
  119. package/dist/inbound/cli/main.d.ts +2 -6
  120. package/dist/inbound/cli/main.js +24 -28
  121. package/dist/inbound/cli/main.js.map +1 -1
  122. package/dist/inbound/cli/run-artifacts.d.ts +61 -0
  123. package/dist/inbound/cli/run-artifacts.js +247 -0
  124. package/dist/inbound/cli/run-artifacts.js.map +1 -0
  125. package/dist/inbound/cli/run-command.d.ts +20 -19
  126. package/dist/inbound/cli/run-command.js +150 -155
  127. package/dist/inbound/cli/run-command.js.map +1 -1
  128. package/dist/index.d.ts +9 -3
  129. package/dist/index.js +5 -2
  130. package/dist/index.js.map +1 -1
  131. package/dist/plugins/http-debug/early-health.d.ts +11 -0
  132. package/dist/plugins/http-debug/early-health.js +51 -0
  133. package/dist/plugins/http-debug/early-health.js.map +1 -0
  134. package/dist/plugins/http-debug/index.js +2 -0
  135. package/dist/plugins/http-debug/index.js.map +1 -1
  136. package/dist/plugins/message-bus/inbound.js +3 -1
  137. package/dist/plugins/message-bus/inbound.js.map +1 -1
  138. package/dist/ports/agent-core.d.ts +13 -13
  139. package/dist/ports/agent-host.d.ts +4 -1
  140. package/package.json +4 -4
@@ -0,0 +1,61 @@
1
+ export interface ArtifactMcp {
2
+ screenshot?(): Promise<{
3
+ b64: string;
4
+ format?: string;
5
+ width?: number;
6
+ height?: number;
7
+ deviceWidth?: number;
8
+ deviceHeight?: number;
9
+ currentApp?: string;
10
+ }>;
11
+ uiDump?(opts?: {
12
+ format?: "raw";
13
+ }): Promise<{
14
+ supported?: boolean;
15
+ content?: string;
16
+ }>;
17
+ }
18
+ export interface RunArtifactSummary {
19
+ exitCode: number;
20
+ configuration: Record<string, unknown>;
21
+ result?: Record<string, unknown>;
22
+ }
23
+ export declare class RunArtifactRecorder {
24
+ readonly runDir: string;
25
+ readonly startedAt: Date;
26
+ private finished;
27
+ private stepSequence;
28
+ private readonly openSteps;
29
+ private readonly artifacts;
30
+ constructor(outputRoot: string, task: string);
31
+ record(event: Record<string, unknown>): void;
32
+ /** Persist the exact frame that will be sent to the model for this round. */
33
+ captureObservation(event: {
34
+ index: number;
35
+ observation: {
36
+ screenW: number;
37
+ screenH: number;
38
+ screenshotB64: string;
39
+ uiDump?: string;
40
+ extra?: Record<string, unknown>;
41
+ screenStateHash?: string;
42
+ };
43
+ }): void;
44
+ /** Complete the most recent observation record with the model decision. */
45
+ completeStep(step: {
46
+ index: number;
47
+ rationale: string;
48
+ action: unknown;
49
+ prediction?: {
50
+ modelInput?: unknown;
51
+ rawResponse?: string;
52
+ confidence?: number;
53
+ usage?: unknown;
54
+ };
55
+ finished: boolean;
56
+ }): void;
57
+ capture(mcp: ArtifactMcp, phase: "before" | "after"): Promise<void>;
58
+ finish(summary: RunArtifactSummary): void;
59
+ }
60
+ export declare function expandPath(path: string): string;
61
+ export declare function formatTimestamp(date: Date): string;
@@ -0,0 +1,247 @@
1
+ import { appendFileSync, mkdirSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { isAbsolute, join, resolve } from "node:path";
4
+ export class RunArtifactRecorder {
5
+ runDir;
6
+ startedAt = new Date();
7
+ finished = false;
8
+ stepSequence = 0;
9
+ openSteps = [];
10
+ artifacts = new Set();
11
+ constructor(outputRoot, task) {
12
+ const root = expandPath(outputRoot);
13
+ this.runDir = join(root, `${formatTimestamp(this.startedAt)}-${slugify(task)}-${process.pid}`);
14
+ mkdirSync(this.runDir, { recursive: true });
15
+ writeFileSync(join(this.runDir, "events.jsonl"), "", "utf8");
16
+ this.artifacts.add("events.jsonl");
17
+ }
18
+ record(event) {
19
+ appendFileSync(join(this.runDir, "events.jsonl"), `${JSON.stringify({ recordedAt: new Date().toISOString(), ...event })}\n`, "utf8");
20
+ }
21
+ /** Persist the exact frame that will be sent to the model for this round. */
22
+ captureObservation(event) {
23
+ const sequence = ++this.stepSequence;
24
+ const stepsDir = join(this.runDir, "steps");
25
+ const prefix = `step-${String(sequence).padStart(3, "0")}`;
26
+ let screenshotFile = null;
27
+ let uiDumpFile = null;
28
+ mkdirSync(stepsDir, { recursive: true });
29
+ if (event.observation.screenshotB64) {
30
+ const image = Buffer.from(event.observation.screenshotB64, "base64");
31
+ const extension = detectImageExtension(image);
32
+ screenshotFile = `${prefix}-observation.${extension}`;
33
+ writeFileSync(join(stepsDir, screenshotFile), image);
34
+ this.artifacts.add(`steps/${screenshotFile}`);
35
+ }
36
+ if (event.observation.uiDump) {
37
+ uiDumpFile = `${prefix}-observation.xml`;
38
+ writeFileSync(join(stepsDir, uiDumpFile), event.observation.uiDump, "utf8");
39
+ this.artifacts.add(`steps/${uiDumpFile}`);
40
+ }
41
+ const metadataFile = `${prefix}.json`;
42
+ const metadataPath = join(stepsDir, metadataFile);
43
+ const document = {
44
+ sequence,
45
+ agentStepIndex: event.index,
46
+ observedAt: new Date().toISOString(),
47
+ phase: "before_action",
48
+ observation: {
49
+ screenW: event.observation.screenW,
50
+ screenH: event.observation.screenH,
51
+ currentApp: event.observation.extra?.currentApp ?? null,
52
+ screenStateHash: event.observation.screenStateHash ?? null,
53
+ },
54
+ screenshotFile,
55
+ uiDumpFile,
56
+ rationale: null,
57
+ action: null,
58
+ modelInput: null,
59
+ modelRawOutput: null,
60
+ confidence: null,
61
+ usage: null,
62
+ finished: null,
63
+ completedAt: null,
64
+ };
65
+ writeJson(metadataPath, document);
66
+ this.openSteps.push({ agentStepIndex: event.index, metadataPath, document });
67
+ this.artifacts.add(`steps/${metadataFile}`);
68
+ }
69
+ /** Complete the most recent observation record with the model decision. */
70
+ completeStep(step) {
71
+ const record = [...this.openSteps]
72
+ .reverse()
73
+ .find((candidate) => candidate.agentStepIndex === step.index && candidate.document.action === null);
74
+ if (!record)
75
+ return;
76
+ record.document.rationale = step.rationale;
77
+ record.document.action = step.action;
78
+ record.document.modelInput = externalizeImages(step.prediction?.modelInput ?? null, record.document.screenshotFile);
79
+ record.document.modelRawOutput = step.prediction?.rawResponse ?? null;
80
+ record.document.confidence = step.prediction?.confidence ?? null;
81
+ record.document.usage = step.prediction?.usage ?? null;
82
+ record.document.finished = step.finished;
83
+ record.document.completedAt = new Date().toISOString();
84
+ writeJson(record.metadataPath, record.document);
85
+ }
86
+ async capture(mcp, phase) {
87
+ const errors = [];
88
+ if (typeof mcp.screenshot === "function") {
89
+ try {
90
+ const screenshot = await withTimeout(mcp.screenshot(), 10_000, `${phase} screenshot`);
91
+ const format = screenshot.format === "jpeg" ? "jpg" : "png";
92
+ const imageName = `${phase}.${format}`;
93
+ const metadataName = `${phase}.screenshot.json`;
94
+ const { b64, ...metadata } = screenshot;
95
+ writeFileSync(join(this.runDir, imageName), Buffer.from(b64, "base64"));
96
+ writeFileSync(join(this.runDir, metadataName), `${JSON.stringify(metadata, null, 2)}\n`, "utf8");
97
+ this.artifacts.add(imageName);
98
+ this.artifacts.add(metadataName);
99
+ }
100
+ catch (error) {
101
+ errors.push(`screenshot: ${error.message}`);
102
+ }
103
+ }
104
+ if (typeof mcp.uiDump === "function") {
105
+ try {
106
+ const dump = await withTimeout(mcp.uiDump({ format: "raw" }), 10_000, `${phase} UI dump`);
107
+ if (dump.supported !== false && typeof dump.content === "string") {
108
+ const xmlName = `${phase}.xml`;
109
+ writeFileSync(join(this.runDir, xmlName), dump.content, "utf8");
110
+ this.artifacts.add(xmlName);
111
+ }
112
+ }
113
+ catch (error) {
114
+ errors.push(`uiDump: ${error.message}`);
115
+ }
116
+ }
117
+ if (errors.length > 0) {
118
+ const errorName = `${phase}.capture-errors.txt`;
119
+ writeFileSync(join(this.runDir, errorName), `${errors.join("\n")}\n`, "utf8");
120
+ this.artifacts.add(errorName);
121
+ }
122
+ }
123
+ finish(summary) {
124
+ if (this.finished)
125
+ return;
126
+ this.finished = true;
127
+ this.artifacts.add("episode.json");
128
+ this.artifacts.add("summary.json");
129
+ const completedAt = new Date();
130
+ const coordinateSystems = [...new Set(this.openSteps
131
+ .map((step) => coordinateSystemOf(step.document.action))
132
+ .filter((value) => Boolean(value)))];
133
+ const firstObservation = this.openSteps[0]?.document.observation ?? {};
134
+ const episode = {
135
+ version: 1,
136
+ taskName: summary.configuration.task ?? null,
137
+ startedAt: this.startedAt.toISOString(),
138
+ completedAt: completedAt.toISOString(),
139
+ model: {
140
+ name: summary.configuration.modelName ?? null,
141
+ adapter: summary.configuration.adapter ?? null,
142
+ baseUrl: summary.configuration.baseUrl ?? null,
143
+ },
144
+ execution: {
145
+ mode: summary.configuration.executionMode ?? null,
146
+ plannerPolicy: summary.configuration.plannerPolicy ?? null,
147
+ observationMode: summary.configuration.observationMode ?? null,
148
+ },
149
+ deviceInfo: {
150
+ target: summary.configuration.device ?? null,
151
+ screenWidth: firstObservation.screenW ?? null,
152
+ screenHeight: firstObservation.screenH ?? null,
153
+ initialApp: firstObservation.currentApp ?? null,
154
+ },
155
+ coordinateSystems,
156
+ totalSteps: this.openSteps.length,
157
+ result: summary.result ?? null,
158
+ episode: this.openSteps.map((step) => step.document),
159
+ };
160
+ writeJson(join(this.runDir, "episode.json"), episode);
161
+ const document = {
162
+ version: 1,
163
+ runDir: this.runDir,
164
+ startedAt: this.startedAt.toISOString(),
165
+ completedAt: completedAt.toISOString(),
166
+ durationMs: completedAt.getTime() - this.startedAt.getTime(),
167
+ ...summary,
168
+ artifacts: [...this.artifacts].sort(),
169
+ };
170
+ writeFileSync(join(this.runDir, "summary.json"), `${JSON.stringify(document, null, 2)}\n`, "utf8");
171
+ }
172
+ }
173
+ function writeJson(path, value) {
174
+ writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`, "utf8");
175
+ }
176
+ function detectImageExtension(image) {
177
+ const isPng = image.length >= 8 &&
178
+ image[0] === 0x89 &&
179
+ image[1] === 0x50 &&
180
+ image[2] === 0x4e &&
181
+ image[3] === 0x47;
182
+ return isPng ? "png" : "jpg";
183
+ }
184
+ function externalizeImages(value, screenshotFile) {
185
+ if (Array.isArray(value)) {
186
+ return value.map((item) => externalizeImages(item, screenshotFile));
187
+ }
188
+ if (!value || typeof value !== "object")
189
+ return value;
190
+ const output = {};
191
+ for (const [key, item] of Object.entries(value)) {
192
+ if (screenshotFile &&
193
+ key === "url" &&
194
+ typeof item === "string" &&
195
+ item.startsWith("data:image/")) {
196
+ output[key] = `steps/${screenshotFile}`;
197
+ }
198
+ else {
199
+ output[key] = externalizeImages(item, screenshotFile);
200
+ }
201
+ }
202
+ return output;
203
+ }
204
+ function coordinateSystemOf(action) {
205
+ if (!action || typeof action !== "object")
206
+ return undefined;
207
+ const payload = action.payload;
208
+ if (!payload || typeof payload !== "object")
209
+ return undefined;
210
+ const value = payload._coordSystem;
211
+ return typeof value === "string" ? value : undefined;
212
+ }
213
+ export function expandPath(path) {
214
+ if (path === "~")
215
+ return homedir();
216
+ if (path.startsWith("~/"))
217
+ return resolve(homedir(), path.slice(2));
218
+ return isAbsolute(path) ? path : resolve(path);
219
+ }
220
+ export function formatTimestamp(date) {
221
+ return date.toISOString().replace(/[-:]/g, "").replace("T", "-").replace(".", "-").replace("Z", "");
222
+ }
223
+ function slugify(task) {
224
+ const slug = task
225
+ .normalize("NFKD")
226
+ .replace(/[^a-zA-Z0-9]+/g, "-")
227
+ .replace(/^-+|-+$/g, "")
228
+ .slice(0, 48)
229
+ .toLowerCase();
230
+ return slug || "task";
231
+ }
232
+ async function withTimeout(promise, timeoutMs, label) {
233
+ let timer;
234
+ try {
235
+ return await Promise.race([
236
+ promise,
237
+ new Promise((_, reject) => {
238
+ timer = setTimeout(() => reject(new Error(`${label} timed out after ${timeoutMs}ms`)), timeoutMs);
239
+ }),
240
+ ]);
241
+ }
242
+ finally {
243
+ if (timer)
244
+ clearTimeout(timer);
245
+ }
246
+ }
247
+ //# sourceMappingURL=run-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-artifacts.js","sourceRoot":"","sources":["../../../src/inbound/cli/run-artifacts.ts"],"names":[],"mappings":"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"}
@@ -9,18 +9,13 @@
9
9
  * This bypasses the ACP/Bridge bootstrap entirely — for that, use plain
10
10
  * `device-agent` without the `run` sub-command.
11
11
  *
12
- * Design contract:
13
- * - `--plan auto` (default): Hybrid strategy in `AgentRunner`. Long
14
- * tasks (≥30 chars) start with `LLMPlanner` + `PlanExecutor`; short
15
- * tasks start with pure `AgentLoop` and escalate to Plan-Act when
16
- * they burn through `1/3 * maxSteps`.
17
- * - `--plan always`: skip the heuristic, always plan.
18
- * - `--plan never`: skip the planner entirely (pure ReAct).
19
- * - `--planner-model` defaults to `glm-4-flash` (cheap chat-only model
20
- * on ARouter).
12
+ * Execution is selected exclusively through `--execution-mode`:
13
+ * Fast uses ReAct, Reasoning uses Plan-Act, and Advanced adds extended
14
+ * budgets, reflection, knowledge, skills, and verification.
21
15
  */
22
- import { AgentRunner, type AgentPlanMode, type AgentRunnerResult } from "../../agent-runtime/index.js";
16
+ import { AgentRunner, type AgentRunnerResult, type ExecutionMode } from "../../agent-runtime/index.js";
23
17
  import type { ObservationMode } from "../../agent-runtime/observation-mode.js";
18
+ import { type ArtifactMcp } from "./run-artifacts.js";
24
19
  export interface RunCommandFlags {
25
20
  task?: string;
26
21
  mcp?: string;
@@ -37,7 +32,8 @@ export interface RunCommandFlags {
37
32
  model?: string;
38
33
  baseUrl?: string;
39
34
  apiKey?: string;
40
- plan?: AgentPlanMode;
35
+ /** Product execution profile. Defaults to Fast. */
36
+ executionMode?: ExecutionMode;
41
37
  plannerModel?: string;
42
38
  plannerBaseUrl?: string;
43
39
  plannerApiKey?: string;
@@ -46,17 +42,15 @@ export interface RunCommandFlags {
46
42
  env?: "mobile" | "computer" | "browser";
47
43
  lang?: "cn" | "en";
48
44
  json?: boolean;
45
+ /** Save a timestamped trace bundle below this directory. Disabled by default. */
46
+ outputDir?: string;
49
47
  help?: boolean;
50
- outerModel?: string;
51
- outerBaseUrl?: string;
52
- outerApiKey?: string;
53
- outerProvider?: string;
54
- /** Legacy adapter name for the inner VLM (autoglm | general | qwenvl | …). */
55
- provider?: string;
48
+ /** Prompt/action protocol adapter for the inner VLM. */
49
+ adapter?: string;
50
+ /** Internal marker used to warn callers of the deprecated CLI alias. */
51
+ deprecatedProviderUsed?: boolean;
56
52
  /** Inputs collected per step; `auto` follows the selected model adapter. */
57
53
  observationMode?: ObservationMode;
58
- /** Enable OrchestratorAgent (OpenAI tool-calling outer + inner VLM). */
59
- orchestrator?: boolean;
60
54
  }
61
55
  export declare function parseRunArgs(argv: string[]): RunCommandFlags;
62
56
  /** Accepts: `30000`, `30s`, `5m`, `2h`, plain numbers (ms). */
@@ -80,6 +74,7 @@ export interface RunCommandDeps {
80
74
  baseUrl: string;
81
75
  apiKey: string;
82
76
  modelName: string;
77
+ adapter?: string;
83
78
  }) => MinimalModelClient;
84
79
  /** Override planner construction (returns `undefined` to disable). */
85
80
  plannerFactory?: (cfg: {
@@ -89,12 +84,18 @@ export interface RunCommandDeps {
89
84
  }) => MinimalPlanner | undefined;
90
85
  /** Override AgentRunner construction. */
91
86
  runnerFactory?: (opts: ConstructorParameters<typeof AgentRunner>[0]) => RunnerLike;
87
+ /** Receives the created trace directory (used by the benchmark command). */
88
+ onRecordingCreated?: (runDir: string) => void;
89
+ /** Override Fleet MCP resolution (tests use this to avoid loopback I/O). */
90
+ deviceMcpResolver?: (target: string) => Promise<string>;
92
91
  }
93
92
  export interface MinimalMcp {
94
93
  waitUntilReady?(opts?: {
95
94
  attempts?: number;
96
95
  attemptDelayMs?: number;
97
96
  }): Promise<unknown>;
97
+ screenshot?: ArtifactMcp["screenshot"];
98
+ uiDump?: ArtifactMcp["uiDump"];
98
99
  }
99
100
  interface MinimalModelClient {
100
101
  modelName: string;