pi-agent-browser-native 0.2.48 → 0.2.50

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 (189) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/README.md +21 -11
  3. package/dist/extensions/agent-browser/index.js +808 -0
  4. package/dist/extensions/agent-browser/lib/argv-descriptor.js +71 -0
  5. package/dist/extensions/agent-browser/lib/argv-grammar.js +121 -0
  6. package/dist/extensions/agent-browser/lib/bash-guard.js +190 -0
  7. package/dist/extensions/agent-browser/lib/command-policy.js +85 -0
  8. package/dist/extensions/agent-browser/lib/command-taxonomy.js +302 -0
  9. package/dist/extensions/agent-browser/lib/config-policy.js +669 -0
  10. package/dist/extensions/agent-browser/lib/config.js +122 -0
  11. package/dist/extensions/agent-browser/lib/electron/cdp.js +51 -0
  12. package/dist/extensions/agent-browser/lib/electron/cleanup.js +212 -0
  13. package/dist/extensions/agent-browser/lib/electron/discovery.js +633 -0
  14. package/dist/extensions/agent-browser/lib/electron/launch.js +351 -0
  15. package/{extensions/agent-browser/lib/electron/text.ts → dist/extensions/agent-browser/lib/electron/text.js} +5 -5
  16. package/dist/extensions/agent-browser/lib/executable-path.js +20 -0
  17. package/dist/extensions/agent-browser/lib/fs-utils.js +18 -0
  18. package/dist/extensions/agent-browser/lib/input-modes/electron.js +165 -0
  19. package/dist/extensions/agent-browser/lib/input-modes/job.js +519 -0
  20. package/dist/extensions/agent-browser/lib/input-modes/lookups.js +440 -0
  21. package/dist/extensions/agent-browser/lib/input-modes/params.js +164 -0
  22. package/dist/extensions/agent-browser/lib/input-modes/semantic-action.js +119 -0
  23. package/dist/extensions/agent-browser/lib/input-modes/shared.js +42 -0
  24. package/dist/extensions/agent-browser/lib/input-modes/types.js +21 -0
  25. package/dist/extensions/agent-browser/lib/input-modes.js +10 -0
  26. package/dist/extensions/agent-browser/lib/json-schema.js +58 -0
  27. package/dist/extensions/agent-browser/lib/launch-scoped-flags.js +59 -0
  28. package/dist/extensions/agent-browser/lib/navigation-policy.js +83 -0
  29. package/dist/extensions/agent-browser/lib/orchestration/batch-stdin.js +62 -0
  30. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-paths.js +39 -0
  31. package/dist/extensions/agent-browser/lib/orchestration/browser-run/click-dispatch.js +276 -0
  32. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostics.js +909 -0
  33. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result.js +443 -0
  34. package/dist/extensions/agent-browser/lib/orchestration/browser-run/index.js +47 -0
  35. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/direct-anchor-download.js +141 -0
  36. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/network-page-filter.js +108 -0
  37. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/scroll-shims.js +112 -0
  38. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter.js +158 -0
  39. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/wait-timeouts.js +54 -0
  40. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare.js +762 -0
  41. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output.js +491 -0
  42. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prompt-guards.js +40 -0
  43. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-artifacts.js +5 -0
  44. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state.js +731 -0
  45. package/dist/extensions/agent-browser/lib/orchestration/browser-run/types.js +1 -0
  46. package/dist/extensions/agent-browser/lib/orchestration/electron-host/index.js +718 -0
  47. package/dist/extensions/agent-browser/lib/orchestration/input-plan.js +247 -0
  48. package/dist/extensions/agent-browser/lib/orchestration/output-file.js +68 -0
  49. package/{extensions/agent-browser/lib/parsing.ts → dist/extensions/agent-browser/lib/parsing.js} +12 -11
  50. package/dist/extensions/agent-browser/lib/pi-tool-rendering.js +241 -0
  51. package/dist/extensions/agent-browser/lib/playbook.js +121 -0
  52. package/dist/extensions/agent-browser/lib/process.js +363 -0
  53. package/dist/extensions/agent-browser/lib/prompt-policy.js +91 -0
  54. package/dist/extensions/agent-browser/lib/results/action-recommendations.js +220 -0
  55. package/dist/extensions/agent-browser/lib/results/artifact-manifest.js +111 -0
  56. package/{extensions/agent-browser/lib/results/artifact-state.ts → dist/extensions/agent-browser/lib/results/artifact-state.js} +4 -8
  57. package/dist/extensions/agent-browser/lib/results/categories.js +76 -0
  58. package/dist/extensions/agent-browser/lib/results/confirmation.js +63 -0
  59. package/dist/extensions/agent-browser/lib/results/contracts.js +8 -0
  60. package/dist/extensions/agent-browser/lib/results/editable-ref-evidence.js +74 -0
  61. package/dist/extensions/agent-browser/lib/results/envelope.js +166 -0
  62. package/dist/extensions/agent-browser/lib/results/network-routes.js +92 -0
  63. package/dist/extensions/agent-browser/lib/results/network.js +73 -0
  64. package/dist/extensions/agent-browser/lib/results/next-actions.js +72 -0
  65. package/dist/extensions/agent-browser/lib/results/presentation/artifacts.js +515 -0
  66. package/dist/extensions/agent-browser/lib/results/presentation/batch.js +397 -0
  67. package/dist/extensions/agent-browser/lib/results/presentation/browser-profile-recovery.js +55 -0
  68. package/dist/extensions/agent-browser/lib/results/presentation/common.js +46 -0
  69. package/dist/extensions/agent-browser/lib/results/presentation/content.js +24 -0
  70. package/dist/extensions/agent-browser/lib/results/presentation/diagnostics.js +956 -0
  71. package/dist/extensions/agent-browser/lib/results/presentation/errors.js +205 -0
  72. package/dist/extensions/agent-browser/lib/results/presentation/large-output.js +134 -0
  73. package/dist/extensions/agent-browser/lib/results/presentation/navigation.js +159 -0
  74. package/dist/extensions/agent-browser/lib/results/presentation/registry.js +216 -0
  75. package/dist/extensions/agent-browser/lib/results/presentation/semantic-action.js +104 -0
  76. package/dist/extensions/agent-browser/lib/results/presentation/skills.js +152 -0
  77. package/dist/extensions/agent-browser/lib/results/presentation.js +177 -0
  78. package/dist/extensions/agent-browser/lib/results/recovery-actions.js +107 -0
  79. package/dist/extensions/agent-browser/lib/results/recovery-next-actions.js +50 -0
  80. package/dist/extensions/agent-browser/lib/results/selector-recovery.js +225 -0
  81. package/{extensions/agent-browser/lib/results/shared.ts → dist/extensions/agent-browser/lib/results/shared.js} +0 -1
  82. package/dist/extensions/agent-browser/lib/results/snapshot-high-value-controls.js +208 -0
  83. package/dist/extensions/agent-browser/lib/results/snapshot-refs.js +78 -0
  84. package/dist/extensions/agent-browser/lib/results/snapshot-segments.js +331 -0
  85. package/dist/extensions/agent-browser/lib/results/snapshot-spill.js +40 -0
  86. package/dist/extensions/agent-browser/lib/results/snapshot.js +264 -0
  87. package/dist/extensions/agent-browser/lib/results/text.js +40 -0
  88. package/{extensions/agent-browser/lib/results.ts → dist/extensions/agent-browser/lib/results.js} +2 -32
  89. package/dist/extensions/agent-browser/lib/runtime.js +855 -0
  90. package/dist/extensions/agent-browser/lib/session-page-state.js +411 -0
  91. package/dist/extensions/agent-browser/lib/string-enum-schema.js +13 -0
  92. package/dist/extensions/agent-browser/lib/temp.js +498 -0
  93. package/dist/extensions/agent-browser/lib/web-search.js +562 -0
  94. package/docs/ARCHITECTURE.md +5 -5
  95. package/docs/COMMAND_REFERENCE.md +4 -4
  96. package/docs/RELEASE.md +22 -11
  97. package/docs/REQUIREMENTS.md +1 -1
  98. package/docs/SUPPORT_MATRIX.md +5 -4
  99. package/docs/TOOL_CONTRACT.md +1 -1
  100. package/package.json +9 -5
  101. package/scripts/config.mjs +14 -20
  102. package/scripts/doctor.mjs +8 -7
  103. package/extensions/agent-browser/index.ts +0 -961
  104. package/extensions/agent-browser/lib/argv-descriptor.ts +0 -90
  105. package/extensions/agent-browser/lib/argv-grammar.ts +0 -128
  106. package/extensions/agent-browser/lib/bash-guard.ts +0 -205
  107. package/extensions/agent-browser/lib/command-policy.ts +0 -71
  108. package/extensions/agent-browser/lib/command-taxonomy.ts +0 -336
  109. package/extensions/agent-browser/lib/config-policy.js +0 -690
  110. package/extensions/agent-browser/lib/config.ts +0 -211
  111. package/extensions/agent-browser/lib/electron/cdp.ts +0 -69
  112. package/extensions/agent-browser/lib/electron/cleanup.ts +0 -235
  113. package/extensions/agent-browser/lib/electron/discovery.ts +0 -710
  114. package/extensions/agent-browser/lib/electron/launch.ts +0 -499
  115. package/extensions/agent-browser/lib/executable-path.ts +0 -19
  116. package/extensions/agent-browser/lib/fs-utils.ts +0 -18
  117. package/extensions/agent-browser/lib/input-modes/electron.ts +0 -170
  118. package/extensions/agent-browser/lib/input-modes/job.ts +0 -527
  119. package/extensions/agent-browser/lib/input-modes/lookups.ts +0 -447
  120. package/extensions/agent-browser/lib/input-modes/params.ts +0 -205
  121. package/extensions/agent-browser/lib/input-modes/semantic-action.ts +0 -127
  122. package/extensions/agent-browser/lib/input-modes/shared.ts +0 -46
  123. package/extensions/agent-browser/lib/input-modes/types.ts +0 -225
  124. package/extensions/agent-browser/lib/input-modes.ts +0 -45
  125. package/extensions/agent-browser/lib/json-schema.ts +0 -73
  126. package/extensions/agent-browser/lib/launch-scoped-flags.ts +0 -67
  127. package/extensions/agent-browser/lib/navigation-policy.ts +0 -95
  128. package/extensions/agent-browser/lib/orchestration/batch-stdin.ts +0 -65
  129. package/extensions/agent-browser/lib/orchestration/browser-run/artifact-paths.ts +0 -44
  130. package/extensions/agent-browser/lib/orchestration/browser-run/click-dispatch.ts +0 -280
  131. package/extensions/agent-browser/lib/orchestration/browser-run/diagnostics.ts +0 -914
  132. package/extensions/agent-browser/lib/orchestration/browser-run/final-result.ts +0 -521
  133. package/extensions/agent-browser/lib/orchestration/browser-run/index.ts +0 -53
  134. package/extensions/agent-browser/lib/orchestration/browser-run/prepare/direct-anchor-download.ts +0 -158
  135. package/extensions/agent-browser/lib/orchestration/browser-run/prepare/network-page-filter.ts +0 -116
  136. package/extensions/agent-browser/lib/orchestration/browser-run/prepare/scroll-shims.ts +0 -147
  137. package/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter.ts +0 -183
  138. package/extensions/agent-browser/lib/orchestration/browser-run/prepare/wait-timeouts.ts +0 -58
  139. package/extensions/agent-browser/lib/orchestration/browser-run/prepare.ts +0 -847
  140. package/extensions/agent-browser/lib/orchestration/browser-run/process-output.ts +0 -559
  141. package/extensions/agent-browser/lib/orchestration/browser-run/prompt-guards.ts +0 -47
  142. package/extensions/agent-browser/lib/orchestration/browser-run/session-artifacts.ts +0 -8
  143. package/extensions/agent-browser/lib/orchestration/browser-run/session-state.ts +0 -868
  144. package/extensions/agent-browser/lib/orchestration/browser-run/types.ts +0 -565
  145. package/extensions/agent-browser/lib/orchestration/electron-host/index.ts +0 -855
  146. package/extensions/agent-browser/lib/orchestration/input-plan.ts +0 -375
  147. package/extensions/agent-browser/lib/orchestration/output-file.ts +0 -86
  148. package/extensions/agent-browser/lib/pi-tool-rendering.ts +0 -267
  149. package/extensions/agent-browser/lib/playbook.ts +0 -142
  150. package/extensions/agent-browser/lib/process.ts +0 -516
  151. package/extensions/agent-browser/lib/prompt-policy.ts +0 -105
  152. package/extensions/agent-browser/lib/results/action-recommendations.ts +0 -264
  153. package/extensions/agent-browser/lib/results/artifact-manifest.ts +0 -111
  154. package/extensions/agent-browser/lib/results/categories.ts +0 -106
  155. package/extensions/agent-browser/lib/results/confirmation.ts +0 -76
  156. package/extensions/agent-browser/lib/results/contracts.ts +0 -241
  157. package/extensions/agent-browser/lib/results/editable-ref-evidence.ts +0 -72
  158. package/extensions/agent-browser/lib/results/envelope.ts +0 -195
  159. package/extensions/agent-browser/lib/results/network-routes.ts +0 -83
  160. package/extensions/agent-browser/lib/results/network.ts +0 -78
  161. package/extensions/agent-browser/lib/results/next-actions.ts +0 -117
  162. package/extensions/agent-browser/lib/results/presentation/artifacts.ts +0 -588
  163. package/extensions/agent-browser/lib/results/presentation/batch.ts +0 -450
  164. package/extensions/agent-browser/lib/results/presentation/browser-profile-recovery.ts +0 -67
  165. package/extensions/agent-browser/lib/results/presentation/common.ts +0 -53
  166. package/extensions/agent-browser/lib/results/presentation/content.ts +0 -36
  167. package/extensions/agent-browser/lib/results/presentation/diagnostics.ts +0 -923
  168. package/extensions/agent-browser/lib/results/presentation/errors.ts +0 -227
  169. package/extensions/agent-browser/lib/results/presentation/large-output.ts +0 -182
  170. package/extensions/agent-browser/lib/results/presentation/navigation.ts +0 -184
  171. package/extensions/agent-browser/lib/results/presentation/registry.ts +0 -242
  172. package/extensions/agent-browser/lib/results/presentation/semantic-action.ts +0 -131
  173. package/extensions/agent-browser/lib/results/presentation/skills.ts +0 -143
  174. package/extensions/agent-browser/lib/results/presentation.ts +0 -257
  175. package/extensions/agent-browser/lib/results/recovery-actions.ts +0 -139
  176. package/extensions/agent-browser/lib/results/recovery-next-actions.ts +0 -71
  177. package/extensions/agent-browser/lib/results/selector-recovery.ts +0 -320
  178. package/extensions/agent-browser/lib/results/snapshot-high-value-controls.ts +0 -273
  179. package/extensions/agent-browser/lib/results/snapshot-refs.ts +0 -100
  180. package/extensions/agent-browser/lib/results/snapshot-segments.ts +0 -366
  181. package/extensions/agent-browser/lib/results/snapshot-spill.ts +0 -63
  182. package/extensions/agent-browser/lib/results/snapshot.ts +0 -329
  183. package/extensions/agent-browser/lib/results/text.ts +0 -40
  184. package/extensions/agent-browser/lib/runtime.ts +0 -988
  185. package/extensions/agent-browser/lib/session-page-state.ts +0 -512
  186. package/extensions/agent-browser/lib/string-enum-schema.ts +0 -20
  187. package/extensions/agent-browser/lib/temp.ts +0 -577
  188. package/extensions/agent-browser/lib/web-search.ts +0 -728
  189. /package/{extensions/agent-browser/lib/orchestration/browser-run.ts → dist/extensions/agent-browser/lib/orchestration/browser-run.js} +0 -0
@@ -1,375 +0,0 @@
1
- import { parseArgvDescriptor } from "../argv-descriptor.js";
2
- import { validateToolArgs, redactInvocationArgs, redactSensitiveText } from "../runtime.js";
3
- import { buildAgentBrowserResultCategoryDetails } from "../results/categories.js";
4
- import {
5
- compileAgentBrowserElectron,
6
- compileAgentBrowserJob,
7
- compileAgentBrowserNetworkSourceLookup,
8
- compileAgentBrowserQaPreset,
9
- compileAgentBrowserSemanticAction,
10
- compileAgentBrowserSourceLookup,
11
- redactNetworkSourceLookupArgs,
12
- redactNetworkSourceLookupUrl,
13
- type CompiledAgentBrowserElectron,
14
- type CompiledAgentBrowserJob,
15
- type CompiledAgentBrowserNetworkSourceLookup,
16
- type CompiledAgentBrowserQaPreset,
17
- type CompiledAgentBrowserSemanticAction,
18
- type CompiledAgentBrowserSourceLookup,
19
- } from "../input-modes.js";
20
-
21
- export interface AgentBrowserExecuteParams {
22
- args?: string[];
23
- electron?: unknown;
24
- job?: unknown;
25
- networkSourceLookup?: unknown;
26
- outputPath?: string;
27
- qa?: unknown;
28
- semanticAction?: unknown;
29
- sessionMode?: "auto" | "fresh";
30
- sourceLookup?: unknown;
31
- stdin?: string;
32
- timeoutMs?: number;
33
- }
34
-
35
- export type ResolvedAgentBrowserInputKind = "args" | "electron" | "job" | "networkSourceLookup" | "qa" | "semanticAction" | "sourceLookup";
36
-
37
- type ResolvedAgentBrowserInputModeFields = {
38
- compiledElectron?: CompiledAgentBrowserElectron;
39
- compiledGeneratedBatch?: CompiledAgentBrowserJob | CompiledAgentBrowserNetworkSourceLookup | CompiledAgentBrowserSourceLookup;
40
- compiledJob?: CompiledAgentBrowserJob;
41
- compiledNetworkSourceLookup?: CompiledAgentBrowserNetworkSourceLookup;
42
- compiledQaPreset?: CompiledAgentBrowserQaPreset;
43
- compiledSemanticAction?: CompiledAgentBrowserSemanticAction;
44
- compiledSourceLookup?: CompiledAgentBrowserSourceLookup;
45
- redactedCompiledElectron?: CompiledAgentBrowserElectron;
46
- redactedCompiledJob?: CompiledAgentBrowserJob;
47
- redactedCompiledNetworkSourceLookup?: CompiledAgentBrowserNetworkSourceLookup;
48
- redactedCompiledQaPreset?: CompiledAgentBrowserQaPreset;
49
- redactedCompiledSemanticAction?: CompiledAgentBrowserSemanticAction;
50
- redactedCompiledSourceLookup?: CompiledAgentBrowserSourceLookup;
51
- };
52
-
53
- interface ResolvedAgentBrowserInputBase {
54
- redactedArgs: string[];
55
- toolArgs: string[];
56
- toolStdin?: string;
57
- }
58
-
59
- interface ResolvedAgentBrowserValidInputBase extends ResolvedAgentBrowserInputBase {
60
- status: "valid";
61
- validationError?: undefined;
62
- }
63
-
64
- export interface ResolvedAgentBrowserInvalidInput extends ResolvedAgentBrowserInputBase, ResolvedAgentBrowserInputModeFields {
65
- attemptedKind?: ResolvedAgentBrowserInputKind;
66
- kind: "invalid";
67
- status: "invalid";
68
- validationError: string;
69
- }
70
-
71
- export type ResolvedAgentBrowserValidInput =
72
- | (ResolvedAgentBrowserValidInputBase & {
73
- kind: "args";
74
- })
75
- | (ResolvedAgentBrowserValidInputBase & {
76
- compiledElectron: CompiledAgentBrowserElectron;
77
- kind: "electron";
78
- redactedCompiledElectron: CompiledAgentBrowserElectron;
79
- })
80
- | (ResolvedAgentBrowserValidInputBase & {
81
- compiledGeneratedBatch: CompiledAgentBrowserJob;
82
- compiledJob: CompiledAgentBrowserJob;
83
- kind: "job";
84
- redactedCompiledJob: CompiledAgentBrowserJob;
85
- })
86
- | (ResolvedAgentBrowserValidInputBase & {
87
- compiledGeneratedBatch: CompiledAgentBrowserNetworkSourceLookup;
88
- compiledNetworkSourceLookup: CompiledAgentBrowserNetworkSourceLookup;
89
- kind: "networkSourceLookup";
90
- redactedCompiledNetworkSourceLookup: CompiledAgentBrowserNetworkSourceLookup;
91
- })
92
- | (ResolvedAgentBrowserValidInputBase & {
93
- compiledGeneratedBatch: CompiledAgentBrowserQaPreset;
94
- compiledJob: CompiledAgentBrowserQaPreset;
95
- compiledQaPreset: CompiledAgentBrowserQaPreset;
96
- kind: "qa";
97
- redactedCompiledJob: CompiledAgentBrowserJob;
98
- redactedCompiledQaPreset: CompiledAgentBrowserQaPreset;
99
- })
100
- | (ResolvedAgentBrowserValidInputBase & {
101
- compiledSemanticAction: CompiledAgentBrowserSemanticAction;
102
- kind: "semanticAction";
103
- redactedCompiledSemanticAction: CompiledAgentBrowserSemanticAction;
104
- })
105
- | (ResolvedAgentBrowserValidInputBase & {
106
- compiledGeneratedBatch: CompiledAgentBrowserSourceLookup;
107
- compiledSourceLookup: CompiledAgentBrowserSourceLookup;
108
- kind: "sourceLookup";
109
- redactedCompiledSourceLookup: CompiledAgentBrowserSourceLookup;
110
- });
111
-
112
- export type ResolvedAgentBrowserInput = ResolvedAgentBrowserInvalidInput | ResolvedAgentBrowserValidInput;
113
-
114
- function redactCompiledElectron(compiled: CompiledAgentBrowserElectron | undefined): CompiledAgentBrowserElectron | undefined {
115
- if (!compiled) return undefined;
116
- if (compiled.action === "list") {
117
- return { ...compiled, query: compiled.query ? redactSensitiveText(compiled.query) : undefined };
118
- }
119
- if (compiled.action === "launch") {
120
- return { ...compiled, appArgs: compiled.appArgs ? redactInvocationArgs(compiled.appArgs) : undefined };
121
- }
122
- return { ...compiled };
123
- }
124
-
125
- function redactCompiledJob(compiled: CompiledAgentBrowserJob | undefined): CompiledAgentBrowserJob | undefined {
126
- const redactedSteps = compiled?.steps.map((step) => ({ ...step, args: redactInvocationArgs(step.args) }));
127
- return compiled && redactedSteps
128
- ? { ...compiled, stdin: JSON.stringify(redactedSteps.map((step) => step.args)), steps: redactedSteps }
129
- : undefined;
130
- }
131
-
132
- function redactCompiledSourceLookup(compiled: CompiledAgentBrowserSourceLookup | undefined): CompiledAgentBrowserSourceLookup | undefined {
133
- const redactedSteps = compiled?.steps.map((step) => ({ ...step, args: redactInvocationArgs(step.args) }));
134
- return compiled && redactedSteps
135
- ? { ...compiled, stdin: JSON.stringify(redactedSteps.map((step) => step.args)), steps: redactedSteps }
136
- : undefined;
137
- }
138
-
139
- function redactCompiledNetworkSourceLookup(compiled: CompiledAgentBrowserNetworkSourceLookup | undefined): CompiledAgentBrowserNetworkSourceLookup | undefined {
140
- const redactedSteps = compiled?.steps.map((step) => ({ ...step, args: redactNetworkSourceLookupArgs(step.args) }));
141
- return compiled && redactedSteps
142
- ? {
143
- ...compiled,
144
- args: redactNetworkSourceLookupArgs(compiled.args),
145
- query: {
146
- ...compiled.query,
147
- filter: redactNetworkSourceLookupUrl(compiled.query.filter),
148
- url: redactNetworkSourceLookupUrl(compiled.query.url),
149
- },
150
- stdin: JSON.stringify(redactedSteps.map((step) => step.args)),
151
- steps: redactedSteps,
152
- }
153
- : undefined;
154
- }
155
-
156
- function normalizeExplicitEvalStdinArgs(args: string[], stdin: string | undefined): { args: string[]; stdin?: string } {
157
- if (stdin !== undefined) {
158
- return { args, stdin };
159
- }
160
-
161
- const descriptor = parseArgvDescriptor(args);
162
- if (descriptor.commandInfo.command !== "eval") {
163
- return { args, stdin };
164
- }
165
-
166
- const stdinIndex = descriptor.commandTokens.indexOf("--stdin");
167
- if (stdinIndex < 0 || stdinIndex >= descriptor.commandTokens.length - 1) {
168
- return { args, stdin };
169
- }
170
-
171
- const commandStartIndex = args.length - descriptor.commandTokens.length;
172
- const stdinValue = descriptor.commandTokens.slice(stdinIndex + 1).join(" ");
173
- return {
174
- args: [...args.slice(0, commandStartIndex), ...descriptor.commandTokens.slice(0, stdinIndex + 1)],
175
- stdin: stdinValue,
176
- };
177
- }
178
-
179
- export function resolveAgentBrowserInput(options: {
180
- getBatchPreflightValidationError: (args: string[], stdin: string | undefined) => string | undefined;
181
- managedSessionActive: boolean;
182
- params: AgentBrowserExecuteParams;
183
- }): ResolvedAgentBrowserInput {
184
- const { getBatchPreflightValidationError, managedSessionActive, params } = options;
185
- const semanticActionResult = params.semanticAction === undefined ? {} : compileAgentBrowserSemanticAction(params.semanticAction);
186
- const jobResult = params.job === undefined ? {} : compileAgentBrowserJob(params.job);
187
- const qaResult = params.qa === undefined ? {} : compileAgentBrowserQaPreset(params.qa);
188
- const sourceLookupResult = params.sourceLookup === undefined ? {} : compileAgentBrowserSourceLookup(params.sourceLookup);
189
- const networkSourceLookupResult = params.networkSourceLookup === undefined ? {} : compileAgentBrowserNetworkSourceLookup(params.networkSourceLookup);
190
- const electronResult = params.electron === undefined ? {} : compileAgentBrowserElectron(params.electron);
191
-
192
- const hasExplicitArgs = Array.isArray(params.args);
193
- const explicitInputModes = [
194
- hasExplicitArgs,
195
- Boolean(semanticActionResult.compiled),
196
- Boolean(jobResult.compiled),
197
- Boolean(qaResult.compiled),
198
- Boolean(sourceLookupResult.compiled),
199
- Boolean(networkSourceLookupResult.compiled),
200
- Boolean(electronResult.compiled),
201
- ].filter(Boolean).length;
202
- const inputModeError = explicitInputModes !== 1
203
- ? "Provide exactly one of args, semanticAction, job, qa, sourceLookup, networkSourceLookup, or electron."
204
- : undefined;
205
-
206
- const compiledSemanticAction = semanticActionResult.compiled;
207
- const compiledQaPreset = qaResult.compiled;
208
- const compiledSourceLookup = sourceLookupResult.compiled;
209
- const compiledNetworkSourceLookup = networkSourceLookupResult.compiled;
210
- const compiledElectron = electronResult.compiled;
211
- const compiledJob = jobResult.compiled ?? compiledQaPreset;
212
- const compiledGeneratedBatch = compiledNetworkSourceLookup ?? compiledSourceLookup ?? compiledJob;
213
- const normalizedExplicitArgs = normalizeExplicitEvalStdinArgs(params.args ?? [], params.stdin);
214
- const toolArgs = compiledElectron ? [] : compiledSemanticAction?.args ?? compiledGeneratedBatch?.args ?? normalizedExplicitArgs.args;
215
- const toolStdin = compiledGeneratedBatch?.stdin ?? normalizedExplicitArgs.stdin;
216
- const redactedArgs = redactInvocationArgs(toolArgs);
217
- const generatedStdinError = params.stdin !== undefined
218
- ? compiledGeneratedBatch
219
- ? "Do not provide stdin with job, qa, sourceLookup, or networkSourceLookup; those modes generate their own batch stdin."
220
- : compiledElectron
221
- ? "Do not provide stdin with electron; electron mode is host-only or manages its own input."
222
- : undefined
223
- : undefined;
224
- const outputPathError = params.outputPath !== undefined && (typeof params.outputPath !== "string" || params.outputPath.trim().length === 0)
225
- ? "outputPath must be a non-empty string when provided."
226
- : undefined;
227
- const timeoutMsError = params.timeoutMs !== undefined && (typeof params.timeoutMs !== "number" || !Number.isSafeInteger(params.timeoutMs) || params.timeoutMs <= 0)
228
- ? "timeoutMs must be a positive integer when provided."
229
- : compiledElectron && params.timeoutMs !== undefined
230
- ? "Use electron.timeoutMs for electron actions; top-level timeoutMs applies only to browser CLI subprocess calls."
231
- : undefined;
232
- const attachedQaSessionError = compiledQaPreset?.checks.attached
233
- ? params.sessionMode === "fresh"
234
- ? "qa.attached cannot be used with sessionMode=fresh; attach or launch a session first, then run qa.attached with the current session."
235
- : !managedSessionActive
236
- ? "qa.attached requires an active attached session. Run electron.launch or connect to an Electron debug port first."
237
- : undefined
238
- : undefined;
239
- const validationError = semanticActionResult.error
240
- ?? jobResult.error
241
- ?? qaResult.error
242
- ?? sourceLookupResult.error
243
- ?? networkSourceLookupResult.error
244
- ?? electronResult.error
245
- ?? inputModeError
246
- ?? generatedStdinError
247
- ?? outputPathError
248
- ?? timeoutMsError
249
- ?? attachedQaSessionError
250
- ?? (compiledElectron ? undefined : validateToolArgs(toolArgs) ?? getBatchPreflightValidationError(toolArgs, toolStdin));
251
- const redactedCompiledJob = redactCompiledJob(compiledJob);
252
- const redactedCompiledSemanticAction = compiledSemanticAction
253
- ? { ...compiledSemanticAction, args: redactInvocationArgs(compiledSemanticAction.args) }
254
- : undefined;
255
- const attemptedKind: ResolvedAgentBrowserInputKind | undefined = compiledElectron
256
- ? "electron"
257
- : compiledNetworkSourceLookup
258
- ? "networkSourceLookup"
259
- : compiledSourceLookup
260
- ? "sourceLookup"
261
- : compiledQaPreset
262
- ? "qa"
263
- : jobResult.compiled
264
- ? "job"
265
- : compiledSemanticAction
266
- ? "semanticAction"
267
- : hasExplicitArgs
268
- ? "args"
269
- : undefined;
270
-
271
- const redactedCompiledElectron = redactCompiledElectron(compiledElectron);
272
- const redactedCompiledNetworkSourceLookup = redactCompiledNetworkSourceLookup(compiledNetworkSourceLookup);
273
- const redactedCompiledQaPreset = compiledQaPreset && redactedCompiledJob ? { ...redactedCompiledJob, checks: compiledQaPreset.checks } : undefined;
274
- const redactedCompiledSourceLookup = redactCompiledSourceLookup(compiledSourceLookup);
275
- const resolvedBase: ResolvedAgentBrowserInputBase = { redactedArgs, toolArgs, toolStdin };
276
- if (validationError) {
277
- return {
278
- ...resolvedBase,
279
- attemptedKind,
280
- compiledElectron,
281
- compiledGeneratedBatch,
282
- compiledJob,
283
- compiledNetworkSourceLookup,
284
- compiledQaPreset,
285
- compiledSemanticAction,
286
- compiledSourceLookup,
287
- kind: "invalid",
288
- redactedCompiledElectron,
289
- redactedCompiledJob,
290
- redactedCompiledNetworkSourceLookup,
291
- redactedCompiledQaPreset,
292
- redactedCompiledSemanticAction,
293
- redactedCompiledSourceLookup,
294
- status: "invalid",
295
- validationError,
296
- };
297
- }
298
- if (compiledElectron && redactedCompiledElectron) {
299
- return { ...resolvedBase, compiledElectron, kind: "electron", redactedCompiledElectron, status: "valid" };
300
- }
301
- if (compiledNetworkSourceLookup && redactedCompiledNetworkSourceLookup) {
302
- return {
303
- ...resolvedBase,
304
- compiledGeneratedBatch: compiledNetworkSourceLookup,
305
- compiledNetworkSourceLookup,
306
- kind: "networkSourceLookup",
307
- redactedCompiledNetworkSourceLookup,
308
- status: "valid",
309
- };
310
- }
311
- if (compiledSourceLookup && redactedCompiledSourceLookup) {
312
- return {
313
- ...resolvedBase,
314
- compiledGeneratedBatch: compiledSourceLookup,
315
- compiledSourceLookup,
316
- kind: "sourceLookup",
317
- redactedCompiledSourceLookup,
318
- status: "valid",
319
- };
320
- }
321
- if (compiledQaPreset && redactedCompiledJob && redactedCompiledQaPreset) {
322
- return {
323
- ...resolvedBase,
324
- compiledGeneratedBatch: compiledQaPreset,
325
- compiledJob: compiledQaPreset,
326
- compiledQaPreset,
327
- kind: "qa",
328
- redactedCompiledJob,
329
- redactedCompiledQaPreset,
330
- status: "valid",
331
- };
332
- }
333
- if (jobResult.compiled && redactedCompiledJob) {
334
- return {
335
- ...resolvedBase,
336
- compiledGeneratedBatch: jobResult.compiled,
337
- compiledJob: jobResult.compiled,
338
- kind: "job",
339
- redactedCompiledJob,
340
- status: "valid",
341
- };
342
- }
343
- if (compiledSemanticAction && redactedCompiledSemanticAction) {
344
- return { ...resolvedBase, compiledSemanticAction, kind: "semanticAction", redactedCompiledSemanticAction, status: "valid" };
345
- }
346
- return { ...resolvedBase, kind: "args", status: "valid" };
347
- }
348
-
349
- export function buildValidationFailureResult(input: ResolvedAgentBrowserInvalidInput): {
350
- content: Array<{ text: string; type: "text" }>;
351
- details: Record<string, unknown>;
352
- isError: true;
353
- } {
354
- const validationError = input.validationError ?? "Invalid agent_browser input.";
355
- return {
356
- content: [{ type: "text", text: validationError }],
357
- details: {
358
- args: input.redactedArgs,
359
- compiledElectron: input.redactedCompiledElectron,
360
- compiledJob: input.redactedCompiledJob,
361
- compiledQaPreset: input.redactedCompiledQaPreset,
362
- compiledSourceLookup: input.redactedCompiledSourceLookup,
363
- compiledNetworkSourceLookup: input.redactedCompiledNetworkSourceLookup,
364
- compiledSemanticAction: input.redactedCompiledSemanticAction,
365
- ...buildAgentBrowserResultCategoryDetails({
366
- args: input.redactedArgs,
367
- errorText: validationError,
368
- succeeded: false,
369
- validationError,
370
- }),
371
- validationError,
372
- },
373
- isError: true,
374
- };
375
- }
@@ -1,86 +0,0 @@
1
- import { mkdir, writeFile } from "node:fs/promises";
2
- import { dirname, isAbsolute, resolve } from "node:path";
3
-
4
- import { isRecord } from "../parsing.js";
5
- import type { AgentBrowserToolResult } from "./browser-run/types.js";
6
-
7
- export interface AgentBrowserOutputFileDetails {
8
- absolutePath: string;
9
- bytes?: number;
10
- error?: string;
11
- path: string;
12
- source: "content.text" | "details.data";
13
- status: "failed" | "saved";
14
- }
15
-
16
- function normalizeRequestedOutputPath(path: string): string {
17
- return path.startsWith("@") ? path.slice(1) : path;
18
- }
19
-
20
- function getTextContent(result: AgentBrowserToolResult): string {
21
- return result.content
22
- ?.filter((item): item is { text: string; type: "text" } => item.type === "text")
23
- .map((item) => item.text)
24
- .join("\n\n") ?? "";
25
- }
26
-
27
- function getOutputPayload(result: AgentBrowserToolResult): { source: AgentBrowserOutputFileDetails["source"]; value: unknown } {
28
- const details = isRecord(result.details) ? result.details : undefined;
29
- if (details && details.data !== undefined) return { source: "details.data", value: details.data };
30
- return { source: "content.text", value: getTextContent(result) };
31
- }
32
-
33
- function serializeOutputPayload(value: unknown): string {
34
- return typeof value === "string" ? value : `${JSON.stringify(value, null, 2)}\n`;
35
- }
36
-
37
- function appendOutputFileNotice(result: AgentBrowserToolResult, message: string): AgentBrowserToolResult["content"] {
38
- const content = [...(result.content ?? [])] as AgentBrowserToolResult["content"];
39
- if (content[0]?.type === "text") {
40
- content[0] = { ...content[0], text: `${content[0].text}\n\n${message}` };
41
- return content;
42
- }
43
- return [{ type: "text", text: message }, ...content];
44
- }
45
-
46
- export async function applyAgentBrowserOutputPath(options: {
47
- cwd: string;
48
- outputPath?: string;
49
- preserveTextContent?: boolean;
50
- result: AgentBrowserToolResult;
51
- }): Promise<AgentBrowserToolResult> {
52
- if (!options.outputPath) return options.result;
53
- if (options.result.isError || (isRecord(options.result.details) && options.result.details.resultCategory === "failure")) return options.result;
54
- const requestedPath = normalizeRequestedOutputPath(options.outputPath);
55
- const absolutePath = isAbsolute(requestedPath) ? requestedPath : resolve(options.cwd, requestedPath);
56
- const payload = getOutputPayload(options.result);
57
- try {
58
- const serialized = serializeOutputPayload(payload.value);
59
- await mkdir(dirname(absolutePath), { recursive: true });
60
- await writeFile(absolutePath, serialized, "utf8");
61
- const bytes = Buffer.byteLength(serialized, "utf8");
62
- const outputFile: AgentBrowserOutputFileDetails = { absolutePath, bytes, path: requestedPath, source: payload.source, status: "saved" };
63
- const details = isRecord(options.result.details) ? { ...options.result.details, outputFile } : { outputFile };
64
- return {
65
- ...options.result,
66
- content: options.preserveTextContent ? options.result.content : appendOutputFileNotice(options.result, `Output file: ${requestedPath} (${bytes} bytes from ${payload.source}).`),
67
- details,
68
- };
69
- } catch (error) {
70
- const message = error instanceof Error ? error.message : String(error);
71
- const outputFile: AgentBrowserOutputFileDetails = { absolutePath, error: message, path: requestedPath, source: payload.source, status: "failed" };
72
- const details = isRecord(options.result.details)
73
- ? (() => {
74
- const rest = { ...options.result.details };
75
- delete rest.successCategory;
76
- return { ...rest, failureCategory: rest.failureCategory ?? "upstream-error", outputFile, resultCategory: "failure" };
77
- })()
78
- : { failureCategory: "upstream-error", outputFile, resultCategory: "failure" };
79
- return {
80
- ...options.result,
81
- content: options.preserveTextContent ? options.result.content : appendOutputFileNotice(options.result, `Output file failed: ${requestedPath} (${message}).`),
82
- details,
83
- isError: true,
84
- };
85
- }
86
- }