@roll-agent/browser-use-agent 0.19.0 → 0.21.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.
@@ -87,6 +87,12 @@ export type NativeCandidateChatDetails = {
87
87
  readonly candidateInfo: NativeCandidateInfo;
88
88
  readonly messages: readonly NativeChatMessage[];
89
89
  };
90
+ export type NativeCandidateProfileSummary = {
91
+ readonly age: string;
92
+ readonly experience: string;
93
+ readonly education: string;
94
+ };
95
+ export declare function parseZhipinCandidateProfileTokens(rawTexts: readonly string[]): NativeCandidateProfileSummary;
90
96
  export type NativeRecommendCardInspection = {
91
97
  readonly found: boolean;
92
98
  readonly cardSelector: string;
@@ -246,6 +252,12 @@ export declare class ZhipinNativePagePort {
246
252
  private openRecommendFilterPanel;
247
253
  private dismissPreviousFilterPrompt;
248
254
  private clickRecommendFilterOption;
255
+ private clickRecommendFilterValues;
256
+ private isRecommendLocationPanelVisible;
257
+ private openRecommendLocationPanel;
258
+ private clickRecommendLocationValue;
259
+ private clickRecommendLocationSubmit;
260
+ private applyRecommendLocationFilter;
249
261
  private detectVipModal;
250
262
  private readNativeAgeState;
251
263
  private resolveNativeAgeSlider;
@@ -256,8 +268,9 @@ export declare class ZhipinNativePagePort {
256
268
  private setAgeHandleToNumber;
257
269
  private isDesiredAgeState;
258
270
  private setRecommendAgeRange;
259
- private readSelectedRecommendOptionText;
271
+ private readSelectedRecommendOptionTexts;
260
272
  private readNativeAppliedFilterState;
273
+ private clickRecommendFilterClear;
261
274
  private clickRecommendFilterSubmit;
262
275
  private readRecommendFilterButtonText;
263
276
  private readVisibleChatCandidates;
@@ -3,21 +3,116 @@ export declare const ZHIPIN_RECOMMEND_GENDER_VALUES: readonly ["不限", "男",
3
3
  export type ZhipinRecommendGender = (typeof ZHIPIN_RECOMMEND_GENDER_VALUES)[number];
4
4
  export declare const ZHIPIN_RECOMMEND_ACTIVITY_VALUES: readonly ["不限", "刚刚活跃", "今日活跃", "3日内活跃", "本周活跃", "本月活跃"];
5
5
  export type ZhipinRecommendActivity = (typeof ZHIPIN_RECOMMEND_ACTIVITY_VALUES)[number];
6
- export declare const ZHIPIN_RECOMMEND_FILTER_STATUS_VALUES: readonly ["applied", "recommend_not_ready", "filter_not_found", "requires_vip", "age_not_applied", "submit_failed", "error"];
6
+ export declare const ZHIPIN_RECOMMEND_FILTER_APPLY_MODE_VALUES: readonly ["patch", "replace"];
7
+ export type ZhipinRecommendFilterApplyMode = (typeof ZHIPIN_RECOMMEND_FILTER_APPLY_MODE_VALUES)[number];
8
+ export declare const ZHIPIN_RECOMMEND_FILTER_OPTION_FIELDS: readonly [{
9
+ readonly key: "gender";
10
+ readonly label: "性别";
11
+ readonly selection: "single";
12
+ readonly clearValue: "不限";
13
+ readonly values: readonly ["不限", "男", "女"];
14
+ }, {
15
+ readonly key: "activity";
16
+ readonly label: "活跃度";
17
+ readonly selection: "single";
18
+ readonly clearValue: "不限";
19
+ readonly values: readonly ["不限", "刚刚活跃", "今日活跃", "3日内活跃", "本周活跃", "本月活跃"];
20
+ }, {
21
+ readonly key: "major";
22
+ readonly label: "专业";
23
+ readonly selection: "multi";
24
+ readonly clearValue: "不限";
25
+ }, {
26
+ readonly key: "recentNotView";
27
+ readonly label: "近期没有看过";
28
+ readonly selection: "single";
29
+ readonly clearValue: "不限";
30
+ }, {
31
+ readonly key: "exchangeResumeWithColleague";
32
+ readonly label: "是否与同事交换简历";
33
+ readonly selection: "single";
34
+ readonly clearValue: "不限";
35
+ }, {
36
+ readonly key: "candidateKeywords";
37
+ readonly label: "牛人关键词";
38
+ readonly selection: "multi";
39
+ readonly clearValue: "不限";
40
+ }, {
41
+ readonly key: "school";
42
+ readonly label: "院校";
43
+ readonly selection: "multi";
44
+ readonly clearValue: "不限";
45
+ }, {
46
+ readonly key: "switchJobFrequency";
47
+ readonly label: "跳槽频率";
48
+ readonly selection: "single";
49
+ readonly clearValue: "不限";
50
+ }, {
51
+ readonly key: "intention";
52
+ readonly label: "求职意向";
53
+ readonly selection: "multi";
54
+ readonly clearValue: "不限";
55
+ }, {
56
+ readonly key: "salary";
57
+ readonly label: "薪资待遇";
58
+ readonly selection: "single";
59
+ readonly clearValue: "不限";
60
+ }, {
61
+ readonly key: "degree";
62
+ readonly label: "学历要求";
63
+ readonly selection: "multi";
64
+ readonly clearValue: "不限";
65
+ }, {
66
+ readonly key: "experience";
67
+ readonly label: "经验要求";
68
+ readonly selection: "multi";
69
+ readonly clearValue: "不限";
70
+ }, {
71
+ readonly key: "callPhone";
72
+ readonly label: "是否可拨打电话";
73
+ readonly selection: "single";
74
+ readonly clearValue: "不限";
75
+ }];
76
+ export type ZhipinRecommendFilterOptionField = (typeof ZHIPIN_RECOMMEND_FILTER_OPTION_FIELDS)[number];
77
+ export type ZhipinRecommendFilterOptionFieldKey = ZhipinRecommendFilterOptionField["key"];
78
+ export type ZhipinRecommendFilterOptionSelectionMode = ZhipinRecommendFilterOptionField["selection"];
79
+ export declare const ZHIPIN_RECOMMEND_FILTER_STATUS_VALUES: readonly ["applied", "recommend_not_ready", "filter_not_found", "requires_vip", "age_not_applied", "clear_failed", "submit_failed", "error"];
7
80
  export type ZhipinRecommendFilterStatus = (typeof ZHIPIN_RECOMMEND_FILTER_STATUS_VALUES)[number];
8
81
  export type RecommendTarget = Page | NonNullable<ReturnType<Page["frame"]>>;
9
82
  type PageLocator = ReturnType<Page["locator"]>;
83
+ export type ZhipinRecommendFilterOptionSelection = {
84
+ readonly fieldKey: ZhipinRecommendFilterOptionFieldKey;
85
+ readonly label: string;
86
+ readonly values: readonly string[];
87
+ readonly selection: ZhipinRecommendFilterOptionSelectionMode;
88
+ readonly clearValue: string;
89
+ };
90
+ export type ZhipinRecommendFilterAgeRange = {
91
+ readonly min?: number;
92
+ readonly max?: number;
93
+ };
94
+ export type ZhipinRecommendFilterLocationSelection = {
95
+ readonly city: string;
96
+ readonly district?: string;
97
+ };
10
98
  export type ZhipinRecommendFilterRequest = {
99
+ readonly applyMode: ZhipinRecommendFilterApplyMode;
11
100
  readonly ageMin?: number;
12
101
  readonly ageMax?: number;
13
- readonly gender: ZhipinRecommendGender;
14
- readonly activity: ZhipinRecommendActivity;
102
+ readonly location?: ZhipinRecommendFilterLocationSelection;
103
+ readonly optionSelections: readonly ZhipinRecommendFilterOptionSelection[];
15
104
  };
16
105
  export type ZhipinRecommendFilterApplied = {
17
106
  readonly ageMin?: number;
18
107
  readonly ageMax?: number;
19
- readonly gender: string;
20
- readonly activity: string;
108
+ readonly location?: ZhipinRecommendFilterLocationSelection;
109
+ readonly optionSelections: readonly {
110
+ readonly fieldKey: ZhipinRecommendFilterOptionFieldKey;
111
+ readonly label: string;
112
+ readonly values: readonly string[];
113
+ }[];
114
+ readonly gender?: string;
115
+ readonly activity?: string;
21
116
  };
22
117
  export type ZhipinRecommendFilterApplyResult = {
23
118
  readonly status: ZhipinRecommendFilterStatus;
@@ -26,6 +121,8 @@ export type ZhipinRecommendFilterApplyResult = {
26
121
  readonly filterButtonText?: string;
27
122
  readonly error?: string;
28
123
  };
124
+ export declare function getZhipinRecommendFilterOptionField(fieldKey: ZhipinRecommendFilterOptionFieldKey): ZhipinRecommendFilterOptionField;
125
+ export declare function shouldApplyRecommendAgeRange(requested: ZhipinRecommendFilterRequest): boolean;
29
126
  export type RecommendFilterVisualFeedback = {
30
127
  readonly moveToLocator: (page: Page, locator: PageLocator, options?: {
31
128
  readonly durationMs?: number;
@@ -1,3 +1,30 @@
1
+ import type { ReplyGateAdvisoryCode, ReplyVariantKind } from "@roll-agent/reply-authority-client";
2
+ export declare const PreparedReplyOptionValues: readonly ["option_1", "option_2"];
3
+ export type PreparedReplyOption = (typeof PreparedReplyOptionValues)[number];
4
+ export type PreparedReplyVariantOption = {
5
+ readonly option: PreparedReplyOption;
6
+ readonly variant: ReplyVariantKind;
7
+ readonly suggestedReply: string;
8
+ readonly signedEnvelope: string;
9
+ readonly envelopeExp: number;
10
+ };
11
+ export type PreparedReplyVariantFinding = {
12
+ readonly code: ReplyGateAdvisoryCode;
13
+ readonly description: string;
14
+ };
15
+ export type PreparedReplyVariantGroup = {
16
+ readonly groupId: string;
17
+ readonly options: readonly PreparedReplyVariantOption[];
18
+ readonly findings: readonly PreparedReplyVariantFinding[];
19
+ readonly rubricVersion: string;
20
+ readonly rubricHash: string;
21
+ readonly target: {
22
+ readonly platform: "zhipin";
23
+ readonly tenantId: string;
24
+ readonly conversationId: string;
25
+ };
26
+ readonly recommendedOption: PreparedReplyOption;
27
+ };
1
28
  export type PreparedReplyRecord = {
2
29
  readonly preparedReplyId: string;
3
30
  readonly signedEnvelope: string;
@@ -7,6 +34,7 @@ export type PreparedReplyRecord = {
7
34
  readonly expiresAt: number;
8
35
  readonly requestId?: string;
9
36
  readonly unreadCountBeforeReply?: number;
37
+ readonly variantGroup?: PreparedReplyVariantGroup;
10
38
  };
11
39
  export type PreparedReplyConsumeResult = {
12
40
  readonly ok: true;
@@ -1,13 +1,25 @@
1
1
  type NativePreviewTarget = {
2
2
  evaluateJson<T = unknown>(expression: string): Promise<T>;
3
3
  };
4
+ export interface NativeReplyPreviewVariantOption {
5
+ readonly option: string;
6
+ readonly suggestedReply: string;
7
+ }
8
+ export interface NativeReplyPreviewFinding {
9
+ readonly code: string;
10
+ readonly description: string;
11
+ }
12
+ export interface NativeReplyPreviewVariantSelection {
13
+ readonly options: readonly NativeReplyPreviewVariantOption[];
14
+ readonly findings: readonly NativeReplyPreviewFinding[];
15
+ }
4
16
  export declare class NativeReplyPreviewVisualSession {
5
17
  private readonly target;
6
18
  constructor(target: NativePreviewTarget);
7
19
  begin(label: string, locationSummary?: string): Promise<boolean>;
8
20
  updateStatus(label: string): Promise<boolean>;
9
21
  updateDraft(draftText: string, provisional: boolean): Promise<boolean>;
10
- complete(label: string, finalReply: string): Promise<boolean>;
22
+ complete(label: string, finalReply: string, variantSelection?: NativeReplyPreviewVariantSelection): Promise<boolean>;
11
23
  fail(label: string): Promise<boolean>;
12
24
  clear(): Promise<boolean>;
13
25
  private render;
@@ -9,24 +9,57 @@ type ZhipinFilterRecommendCandidatesDeps = {
9
9
  export declare function setZhipinFilterRecommendCandidatesDepsForTests(override: Partial<ZhipinFilterRecommendCandidatesDeps> | undefined): void;
10
10
  export declare const zhipinFilterRecommendCandidates: import("@roll-agent/sdk").ToolDefinition<{
11
11
  activity?: "不限" | "刚刚活跃" | "今日活跃" | "3日内活跃" | "本周活跃" | "本月活跃" | undefined;
12
+ gender?: "不限" | "男" | "女" | undefined;
13
+ major?: string[] | undefined;
14
+ recentNotView?: string | undefined;
15
+ exchangeResumeWithColleague?: string | undefined;
16
+ candidateKeywords?: string[] | undefined;
17
+ school?: string[] | undefined;
18
+ switchJobFrequency?: string | undefined;
19
+ intention?: string[] | undefined;
20
+ salary?: string | undefined;
21
+ degree?: string[] | undefined;
22
+ experience?: string[] | undefined;
23
+ callPhone?: string | undefined;
12
24
  ageMin?: number | undefined;
13
25
  ageMax?: number | undefined;
14
- gender?: "不限" | "男" | "女" | undefined;
26
+ applyMode?: "replace" | "patch" | undefined;
27
+ locationCity?: string | undefined;
28
+ locationDistrict?: string | undefined;
15
29
  }, {
16
- status: "error" | "applied" | "recommend_not_ready" | "filter_not_found" | "requires_vip" | "age_not_applied" | "submit_failed";
30
+ status: "error" | "applied" | "recommend_not_ready" | "filter_not_found" | "requires_vip" | "age_not_applied" | "clear_failed" | "submit_failed";
17
31
  success: boolean;
18
32
  requested: {
19
- activity: "不限" | "刚刚活跃" | "今日活跃" | "3日内活跃" | "本周活跃" | "本月活跃";
20
- gender: "不限" | "男" | "女";
33
+ optionSelections: {
34
+ values: string[];
35
+ label: string;
36
+ selection: "single" | "multi";
37
+ fieldKey: string;
38
+ clearValue: string;
39
+ }[];
40
+ applyMode: "replace" | "patch";
21
41
  ageMin?: number | undefined;
22
42
  ageMax?: number | undefined;
43
+ location?: {
44
+ city: string;
45
+ district?: string | undefined;
46
+ } | undefined;
23
47
  };
24
48
  error?: string | undefined;
25
49
  applied?: {
26
- activity: string;
27
- gender: string;
50
+ optionSelections: {
51
+ values: string[];
52
+ label: string;
53
+ fieldKey: string;
54
+ }[];
55
+ activity?: string | undefined;
56
+ gender?: string | undefined;
28
57
  ageMin?: number | undefined;
29
58
  ageMax?: number | undefined;
59
+ location?: {
60
+ city: string;
61
+ district?: string | undefined;
62
+ } | undefined;
30
63
  } | undefined;
31
64
  filterButtonText?: string | undefined;
32
65
  }>;
@@ -1,4 +1,4 @@
1
- import { streamGenerateSignedReply } from "@roll-agent/reply-authority-client";
1
+ import { fetchReplyFeedbackRubric, streamGenerateSignedReply } from "@roll-agent/reply-authority-client";
2
2
  import { NativeVisualActivitySession } from "../native-visual-activity-session.ts";
3
3
  import { openZhipinNativePagePort } from "../pages/zhipin/native-page.ts";
4
4
  import type { ZhipinNativePagePort } from "../pages/zhipin/native-page.ts";
@@ -11,7 +11,9 @@ type ZhipinGenerateReplyPreviewDeps = {
11
11
  readonly createNativeVisualActivitySession: (page: ZhipinNativePagePort) => NativeVisualActivitySessionLike;
12
12
  readonly createReplyPreviewVisualSession: (page: ZhipinNativePagePort) => ReplyPreviewVisualSessionLike;
13
13
  readonly streamGenerateSignedReply: typeof streamGenerateSignedReply;
14
+ readonly fetchReplyFeedbackRubric: typeof fetchReplyFeedbackRubric;
14
15
  readonly savePreparedReply: typeof savePreparedReply;
16
+ readonly random: () => number;
15
17
  };
16
18
  export declare function setZhipinGenerateReplyPreviewDepsForTests(override: Partial<ZhipinGenerateReplyPreviewDeps> | undefined): void;
17
19
  export declare const zhipinGenerateReplyPreview: import("@roll-agent/sdk").ToolDefinition<{
@@ -41,5 +43,20 @@ export declare const zhipinGenerateReplyPreview: import("@roll-agent/sdk").ToolD
41
43
  contextBuildingLatencyMs?: number | undefined;
42
44
  } | undefined;
43
45
  gateRewritten?: boolean | undefined;
46
+ replyVariantSelection?: {
47
+ options: {
48
+ option: "option_1" | "option_2";
49
+ expiresAt: number;
50
+ suggestedReply: string;
51
+ }[];
52
+ groupId: string;
53
+ findings: {
54
+ code: string;
55
+ description: string;
56
+ }[];
57
+ rubricVersion: string;
58
+ rubricHash: string;
59
+ } | undefined;
60
+ errorKind?: "timeout" | "rejected" | "server_error" | undefined;
44
61
  }>;
45
62
  export {};
@@ -21,8 +21,8 @@ export declare const zhipinGetCandidateInfo: import("@roll-agent/sdk").ToolDefin
21
21
  candidateId: string;
22
22
  candidateInfo: {
23
23
  name: string;
24
- age: string;
25
24
  experience: string;
25
+ age: string;
26
26
  education: string;
27
27
  expectedLocation: string;
28
28
  expectedPosition: string;
@@ -17,8 +17,8 @@ export declare const zhipinGetCandidateList: import("@roll-agent/sdk").ToolDefin
17
17
  name: string;
18
18
  index: number;
19
19
  candidateId: string;
20
- age: string;
21
20
  experience: string;
21
+ age: string;
22
22
  education: string;
23
23
  workStatus: string;
24
24
  company: string;
@@ -0,0 +1,21 @@
1
+ import { fetchReplyFeedbackRubric } from "@roll-agent/reply-authority-client";
2
+ type ZhipinJudgePreparedReplyDeps = {
3
+ readonly fetchReplyFeedbackRubric: typeof fetchReplyFeedbackRubric;
4
+ };
5
+ export declare function setZhipinJudgePreparedReplyDepsForTests(override: Partial<ZhipinJudgePreparedReplyDeps> | undefined): void;
6
+ export declare const zhipinJudgePreparedReply: import("@roll-agent/sdk").ToolDefinition<{
7
+ preparedReplyId: string;
8
+ judgeModel?: string | undefined;
9
+ }, {
10
+ success: boolean;
11
+ error?: string | undefined;
12
+ fallback?: boolean | undefined;
13
+ recommendedOption?: "option_1" | "option_2" | undefined;
14
+ variantDecision?: {
15
+ reason: string;
16
+ chosenOption: "option_1" | "option_2";
17
+ confirmedFindingCodes?: ("too_many_questions" | "audit_tone" | "reply_overpacked" | "off_axis_fact_disclosure")[] | undefined;
18
+ judgeModel?: string | undefined;
19
+ } | undefined;
20
+ }>;
21
+ export {};
@@ -1,6 +1,8 @@
1
+ import { postReplyFeedback } from "@roll-agent/reply-authority-client";
1
2
  import { sendSignedZhipinReply } from "./zhipin-send-reply.ts";
2
3
  type ZhipinSendPreparedReplyDeps = {
3
4
  readonly sendSignedZhipinReply: typeof sendSignedZhipinReply;
5
+ readonly postReplyFeedback: typeof postReplyFeedback;
4
6
  };
5
7
  export declare function setZhipinSendPreparedReplyDepsForTests(override: Partial<ZhipinSendPreparedReplyDeps> | undefined): void;
6
8
  export declare const zhipinSendPreparedReply: import("@roll-agent/sdk").ToolDefinition<{
@@ -8,6 +10,12 @@ export declare const zhipinSendPreparedReply: import("@roll-agent/sdk").ToolDefi
8
10
  browserActionApproval?: {
9
11
  id: string;
10
12
  } | undefined;
13
+ variantDecision?: {
14
+ reason: string;
15
+ chosenOption: "option_1" | "option_2";
16
+ confirmedFindingCodes?: ("too_many_questions" | "audit_tone" | "reply_overpacked" | "off_axis_fact_disclosure")[] | undefined;
17
+ judgeModel?: string | undefined;
18
+ } | undefined;
11
19
  toolActionApproval?: {
12
20
  id: string;
13
21
  } | undefined;
@@ -15,5 +23,7 @@ export declare const zhipinSendPreparedReply: import("@roll-agent/sdk").ToolDefi
15
23
  success: boolean;
16
24
  sentMessage: string;
17
25
  error?: string | undefined;
26
+ feedbackStatus?: "failed" | "accepted" | "duplicate" | "skipped" | undefined;
27
+ feedbackError?: string | undefined;
18
28
  }>;
19
29
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roll-agent/browser-use-agent",
3
- "version": "0.19.0",
3
+ "version": "0.21.0",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,8 +45,8 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "zod": "^3.25.76",
48
+ "@roll-agent/reply-authority-client": "0.5.0",
48
49
  "@roll-agent/sdk": "0.2.0",
49
- "@roll-agent/reply-authority-client": "0.4.0",
50
50
  "@roll-agent/browser": "0.9.0"
51
51
  },
52
52
  "devDependencies": {