browser-opt 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/browser-opt/index.d.ts +9 -0
  2. package/dist/browser-opt/index.d.ts.map +1 -0
  3. package/dist/browser-opt/index.js +7 -0
  4. package/dist/browser-opt/index.js.map +1 -0
  5. package/dist/browser-opt/runner/actions/index.d.ts +13 -0
  6. package/dist/browser-opt/runner/actions/index.d.ts.map +1 -0
  7. package/dist/browser-opt/runner/actions/index.js +44 -0
  8. package/dist/browser-opt/runner/actions/index.js.map +1 -0
  9. package/dist/browser-opt/runner/actions/utils/click-action.d.ts +10 -0
  10. package/dist/browser-opt/runner/actions/utils/click-action.d.ts.map +1 -0
  11. package/dist/browser-opt/runner/actions/utils/click-action.js +17 -0
  12. package/dist/browser-opt/runner/actions/utils/click-action.js.map +1 -0
  13. package/dist/browser-opt/runner/actions/utils/date-action.d.ts +21 -0
  14. package/dist/browser-opt/runner/actions/utils/date-action.d.ts.map +1 -0
  15. package/dist/browser-opt/runner/actions/utils/date-action.js +464 -0
  16. package/dist/browser-opt/runner/actions/utils/date-action.js.map +1 -0
  17. package/dist/browser-opt/runner/actions/utils/dom-action.d.ts +8 -0
  18. package/dist/browser-opt/runner/actions/utils/dom-action.d.ts.map +1 -0
  19. package/dist/browser-opt/runner/actions/utils/dom-action.js +167 -0
  20. package/dist/browser-opt/runner/actions/utils/dom-action.js.map +1 -0
  21. package/dist/browser-opt/runner/actions/utils/fill-action.d.ts +10 -0
  22. package/dist/browser-opt/runner/actions/utils/fill-action.d.ts.map +1 -0
  23. package/dist/browser-opt/runner/actions/utils/fill-action.js +20 -0
  24. package/dist/browser-opt/runner/actions/utils/fill-action.js.map +1 -0
  25. package/dist/browser-opt/runner/actions/utils/handoff-action.d.ts +10 -0
  26. package/dist/browser-opt/runner/actions/utils/handoff-action.d.ts.map +1 -0
  27. package/dist/browser-opt/runner/actions/utils/handoff-action.js +6 -0
  28. package/dist/browser-opt/runner/actions/utils/handoff-action.js.map +1 -0
  29. package/dist/browser-opt/runner/actions/utils/open-action.d.ts +10 -0
  30. package/dist/browser-opt/runner/actions/utils/open-action.d.ts.map +1 -0
  31. package/dist/browser-opt/runner/actions/utils/open-action.js +9 -0
  32. package/dist/browser-opt/runner/actions/utils/open-action.js.map +1 -0
  33. package/dist/browser-opt/runner/actions/utils/select-option-action.d.ts +17 -0
  34. package/dist/browser-opt/runner/actions/utils/select-option-action.d.ts.map +1 -0
  35. package/dist/browser-opt/runner/actions/utils/select-option-action.js +532 -0
  36. package/dist/browser-opt/runner/actions/utils/select-option-action.js.map +1 -0
  37. package/dist/browser-opt/runner/actions/utils/upload-action.d.ts +7 -0
  38. package/dist/browser-opt/runner/actions/utils/upload-action.d.ts.map +1 -0
  39. package/dist/browser-opt/runner/actions/utils/upload-action.js +173 -0
  40. package/dist/browser-opt/runner/actions/utils/upload-action.js.map +1 -0
  41. package/dist/browser-opt/runner/evidence.d.ts +18 -0
  42. package/dist/browser-opt/runner/evidence.d.ts.map +1 -0
  43. package/dist/browser-opt/runner/evidence.js +116 -0
  44. package/dist/browser-opt/runner/evidence.js.map +1 -0
  45. package/dist/browser-opt/runner/handoff.d.ts +28 -0
  46. package/dist/browser-opt/runner/handoff.d.ts.map +1 -0
  47. package/dist/browser-opt/runner/handoff.js +132 -0
  48. package/dist/browser-opt/runner/handoff.js.map +1 -0
  49. package/dist/browser-opt/runner/index.d.ts +11 -0
  50. package/dist/browser-opt/runner/index.d.ts.map +1 -0
  51. package/dist/browser-opt/runner/index.js +244 -0
  52. package/dist/browser-opt/runner/index.js.map +1 -0
  53. package/dist/browser-opt/runner/step-executor.d.ts +5 -0
  54. package/dist/browser-opt/runner/step-executor.d.ts.map +1 -0
  55. package/dist/browser-opt/runner/step-executor.js +302 -0
  56. package/dist/browser-opt/runner/step-executor.js.map +1 -0
  57. package/dist/browser-opt/type.d.ts +120 -0
  58. package/dist/browser-opt/type.d.ts.map +1 -0
  59. package/dist/browser-opt/type.js +2 -0
  60. package/dist/browser-opt/type.js.map +1 -0
  61. package/dist/browser-opt/utils.d.ts +48 -0
  62. package/dist/browser-opt/utils.d.ts.map +1 -0
  63. package/dist/browser-opt/utils.js +885 -0
  64. package/dist/browser-opt/utils.js.map +1 -0
  65. package/dist/browser-opt/workflow/index.d.ts +7 -0
  66. package/dist/browser-opt/workflow/index.d.ts.map +1 -0
  67. package/dist/browser-opt/workflow/index.js +6 -0
  68. package/dist/browser-opt/workflow/index.js.map +1 -0
  69. package/dist/browser-opt/workflow/matcher.d.ts +12 -0
  70. package/dist/browser-opt/workflow/matcher.d.ts.map +1 -0
  71. package/dist/browser-opt/workflow/matcher.js +102 -0
  72. package/dist/browser-opt/workflow/matcher.js.map +1 -0
  73. package/dist/browser-opt/workflow/store.d.ts +15 -0
  74. package/dist/browser-opt/workflow/store.d.ts.map +1 -0
  75. package/dist/browser-opt/workflow/store.js +175 -0
  76. package/dist/browser-opt/workflow/store.js.map +1 -0
  77. package/dist/browser-opt/workflow/type.d.ts +43 -0
  78. package/dist/browser-opt/workflow/type.d.ts.map +1 -0
  79. package/dist/browser-opt/workflow/type.js +6 -0
  80. package/dist/browser-opt/workflow/type.js.map +1 -0
  81. package/dist/cli/browser-opt.d.ts +3 -0
  82. package/dist/cli/browser-opt.d.ts.map +1 -0
  83. package/dist/cli/browser-opt.js +11 -0
  84. package/dist/cli/browser-opt.js.map +1 -0
  85. package/dist/cli/commands/browser-opt.d.ts +2 -0
  86. package/dist/cli/commands/browser-opt.d.ts.map +1 -0
  87. package/dist/cli/commands/browser-opt.js +514 -0
  88. package/dist/cli/commands/browser-opt.js.map +1 -0
  89. package/dist/cli/commands/setup.d.ts +10 -0
  90. package/dist/cli/commands/setup.d.ts.map +1 -0
  91. package/dist/cli/commands/setup.js +35 -0
  92. package/dist/cli/commands/setup.js.map +1 -0
  93. package/dist/cli/utils/args.d.ts +17 -0
  94. package/dist/cli/utils/args.d.ts.map +1 -0
  95. package/dist/cli/utils/args.js +74 -0
  96. package/dist/cli/utils/args.js.map +1 -0
  97. package/dist/cli/utils/constants.d.ts +8 -0
  98. package/dist/cli/utils/constants.d.ts.map +1 -0
  99. package/dist/cli/utils/constants.js +18 -0
  100. package/dist/cli/utils/constants.js.map +1 -0
  101. package/dist/cli/utils/output.d.ts +7 -0
  102. package/dist/cli/utils/output.d.ts.map +1 -0
  103. package/dist/cli/utils/output.js +45 -0
  104. package/dist/cli/utils/output.js.map +1 -0
  105. package/package.json +35 -0
  106. package/skills/browser-opt/SKILL.md +249 -0
  107. package/skills/browser-opt/manifest.json +75 -0
@@ -0,0 +1,120 @@
1
+ /**
2
+ * browser-opt 类型定义文件,集中承载对外报告结构以及 runner 内部共用的
3
+ * 快照、动作和执行选项类型,避免执行逻辑与类型声明交错在同一个文件里。
4
+ */
5
+ import type { AgentBrowserJsonResult } from '@browser-automated/browser-core/agent';
6
+ import type { BrowserAgent } from '@browser-automated/browser-core/agent';
7
+ export type BrowserOptStatus = 'PASS' | 'FAIL' | 'HANDOFF';
8
+ export interface BrowserOptStepResult {
9
+ index: number;
10
+ instruction: string;
11
+ passed: boolean;
12
+ handoffTriggered?: boolean;
13
+ attempts: number;
14
+ beforeSnapshotPath: string;
15
+ afterSnapshotPath: string;
16
+ beforeScreenshotPath: string;
17
+ afterScreenshotPath: string;
18
+ actionOutput?: string;
19
+ verification?: string;
20
+ error?: string;
21
+ logs: string[];
22
+ }
23
+ export interface BrowserOptReport {
24
+ status: BrowserOptStatus;
25
+ handoffTriggered?: boolean;
26
+ url: string;
27
+ flow: string;
28
+ startedAt: string;
29
+ endedAt: string;
30
+ durationMs: number;
31
+ outputDir: string;
32
+ reportJsonPath: string;
33
+ reportMarkdownPath: string;
34
+ logPath: string;
35
+ screenshots: string[];
36
+ logs: string[];
37
+ steps: BrowserOptStepResult[];
38
+ }
39
+ export interface BrowserOptRunResult {
40
+ passed: boolean;
41
+ report: BrowserOptReport;
42
+ }
43
+ export interface BrowserOptRunnerOptions {
44
+ sessionId?: string;
45
+ profile?: string;
46
+ sessionName?: string;
47
+ statePath?: string;
48
+ reuseRunningBrowser?: boolean;
49
+ liveViewport?: boolean;
50
+ closeOnComplete?: boolean;
51
+ outputDir?: string;
52
+ timeout?: number;
53
+ useAgentChat?: boolean;
54
+ authStateSavePath?: string;
55
+ authStateFallbackProfile?: string;
56
+ handoff?: BrowserOptHandoffOptions;
57
+ }
58
+ export interface BrowserOptStepExecutionOptions {
59
+ useAgentChat: boolean;
60
+ alreadyOpenedUrl?: string;
61
+ authStateSavePath?: string;
62
+ retryAuthStateFallback?: () => BrowserAgent | null;
63
+ handoff?: BrowserOptHandoffOptions;
64
+ }
65
+ export interface BrowserOptHandoffContext {
66
+ message: string;
67
+ output: string;
68
+ sessionId?: string;
69
+ }
70
+ export interface BrowserOptHandoffOptions {
71
+ onHandoffRequired?: (context: BrowserOptHandoffContext) => Promise<void> | void;
72
+ waitForUserResume?: (context: BrowserOptHandoffContext) => Promise<void> | void;
73
+ onHandoffCompleted?: (context: BrowserOptHandoffContext) => Promise<void> | void;
74
+ }
75
+ export interface SnapshotEvidence {
76
+ output: AgentBrowserJsonResult;
77
+ text: string;
78
+ nodeCount: number;
79
+ }
80
+ export interface SnapshotNode {
81
+ ref: string;
82
+ role: string;
83
+ label: string;
84
+ clickable?: boolean;
85
+ checked?: boolean;
86
+ disabled?: boolean;
87
+ }
88
+ export type DeterministicAction = {
89
+ type: 'open';
90
+ url: string;
91
+ } | {
92
+ type: 'inspect';
93
+ } | {
94
+ type: 'fill';
95
+ field: string;
96
+ value: string;
97
+ } | {
98
+ type: 'click';
99
+ target: string;
100
+ field?: string | null;
101
+ } | {
102
+ type: 'select-option';
103
+ field: string | null;
104
+ option: string;
105
+ } | {
106
+ type: 'upload';
107
+ field: string;
108
+ source: string;
109
+ } | {
110
+ type: 'handoff';
111
+ message: string;
112
+ } | {
113
+ type: 'assert-text';
114
+ text: string;
115
+ };
116
+ export type DeterministicExecutionOptions = {
117
+ alreadyOpenedUrl?: string;
118
+ allowViewportSearch?: boolean;
119
+ };
120
+ //# sourceMappingURL=type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/browser-opt/type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/browser-opt/type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import type { AgentBrowserJsonResult } from '@browser-automated/browser-core/agent';
2
+ import type { BrowserOptReport, BrowserOptStepResult, DeterministicAction, SnapshotEvidence } from './type.js';
3
+ /** 从自然语言描述中提取第一个 URL,作为 browser-opt 的起始页面。 */
4
+ export declare function extractBrowserOptUrl(text: string): string | null;
5
+ /** 把自然语言流程拆成顺序步骤,优先识别编号目标,无法识别时回退为单步骤。 */
6
+ export declare function splitBrowserOptSteps(text: string): string[];
7
+ /** 从自然语言步骤中提炼结构化动作,供确定性执行层消费。 */
8
+ export declare function parseDeterministicAction(instruction: string): DeterministicAction | null;
9
+ /** 在当前快照中优先查找文本框,再按字段名做最佳匹配。 */
10
+ export declare function findTextboxRef(snapshot: SnapshotEvidence, field: string): string | null;
11
+ /** 在当前快照中查找可点击元素,并按目标文案做最佳匹配。 */
12
+ export declare function findClickableRef(snapshot: SnapshotEvidence, target: string, field?: string | null): string | null;
13
+ /** 查找单选或多选选项,优先点击 label,并在已选中时短路为完成。 */
14
+ export declare function findSelectableOption(snapshot: SnapshotEvidence, field: string | null, option: string): {
15
+ ref: string | null;
16
+ alreadySelected: boolean;
17
+ role: string | null;
18
+ };
19
+ /** 查找可展开选择项的字段控件,供下拉选项尚未渲染时先打开选项面板。 */
20
+ export declare function findSelectableFieldRef(snapshot: SnapshotEvidence, field: string | null): string | null;
21
+ /** 查找上传控件,只返回快照中可确认的真实文件输入,避免把上传按钮误当成 input。 */
22
+ export declare function findUploadRef(snapshot: SnapshotEvidence, field: string): string | null;
23
+ /** 判断一条自然语言步骤是否主要承担验证职责。 */
24
+ export declare function isVerificationStep(instruction: string): boolean;
25
+ /** 对步骤执行后的页面状态做验证,生成可直接写入报告的结果说明。 */
26
+ export declare function verifyStep(instruction: string, snapshot: SnapshotEvidence): {
27
+ passed: boolean;
28
+ message: string;
29
+ };
30
+ /** 优先从 JSON 结构提取 snapshot 文本,提取不到时回退到原始输出。 */
31
+ export declare function snapshotText(output: AgentBrowserJsonResult): string;
32
+ /** 统计快照中的可引用节点数量,兼容 refs 和文本两种来源。 */
33
+ export declare function countSnapshotNodes(value: unknown): number;
34
+ /** 把 chat 的 JSON 结果整理成适合写进日志和报告的单段文本。 */
35
+ export declare function summarizeJsonResult(result: AgentBrowserJsonResult): string;
36
+ /** 为日志生成一段简短的页面状态摘要,避免整份 snapshot 直接灌入日志。 */
37
+ export declare function summarizeSnapshot(snapshot: SnapshotEvidence): string;
38
+ /** 生成本次运行的输出目录,确保时间戳与流程名可以共同区分不同执行。 */
39
+ export declare function resolveOutputDir(flow: string, outputRoot: string | undefined, startedAt: Date): string;
40
+ /** 统一步骤级展示状态,避免人工接管在报告明细里继续显示成普通失败。 */
41
+ export declare function formatBrowserOptStepStatus(step: BrowserOptStepResult): 'PASS' | 'FAIL' | 'HANDOFF';
42
+ /** 汇总普通失败步骤,供报告和 CLI 在流程结束后集中展示失败原因。 */
43
+ export declare function collectFailedBrowserOptSteps(report: BrowserOptReport): BrowserOptStepResult[];
44
+ /** 把执行报告渲染成 Markdown,方便直接在本地阅读和附带截图证据。 */
45
+ export declare function renderMarkdownReport(report: BrowserOptReport): string;
46
+ /** 返回 browser-opt 的通用输入模板,供 CLI 报错和首轮使用提示复用。 */
47
+ export declare function browserOptTemplate(): string;
48
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/browser-opt/utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,WAAW,CAAC;AAsBnB,8CAA8C;AAC9C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE;AAED,0CAA0C;AAC1C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgC3D;AAuBD,iCAAiC;AACjC,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAgExF;AAsMD,gCAAgC;AAChC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQvF;AAED,iCAAiC;AACjC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAOjH;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,MAAM,EAAE,MAAM,GACb;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA2BvE;AAED,uCAAuC;AACvC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAYtG;AAED,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAItF;AAsZD,4BAA4B;AAC5B,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAoChH;AAgCD,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CASnE;AAuBD,qCAAqC;AACrC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBzD;AAuBD,yCAAyC;AACzC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAM1E;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAIpE;AAED,uCAAuC;AACvC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,CAItG;AAaD,uCAAuC;AACvC,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAMlG;AAED,wCAAwC;AACxC,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,gBAAgB,GAAG,oBAAoB,EAAE,CAE7F;AAED,0CAA0C;AAC1C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAwCrE;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,IAAI,MAAM,CAqB3C"}