@roll-agent/browser-use-agent 0.2.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 (114) hide show
  1. package/SKILL.md +53 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +111 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/pages/yupao/chat.d.ts +7 -0
  7. package/dist/pages/yupao/chat.d.ts.map +1 -0
  8. package/dist/pages/yupao/chat.js +18 -0
  9. package/dist/pages/yupao/chat.js.map +1 -0
  10. package/dist/pages/yupao/message-list.d.ts +11 -0
  11. package/dist/pages/yupao/message-list.d.ts.map +1 -0
  12. package/dist/pages/yupao/message-list.js +36 -0
  13. package/dist/pages/yupao/message-list.js.map +1 -0
  14. package/dist/pages/yupao/navigation.d.ts +10 -0
  15. package/dist/pages/yupao/navigation.d.ts.map +1 -0
  16. package/dist/pages/yupao/navigation.js +34 -0
  17. package/dist/pages/yupao/navigation.js.map +1 -0
  18. package/dist/pages/yupao/selectors.d.ts +26 -0
  19. package/dist/pages/yupao/selectors.d.ts.map +1 -0
  20. package/dist/pages/yupao/selectors.js +26 -0
  21. package/dist/pages/yupao/selectors.js.map +1 -0
  22. package/dist/pages/zhipin/anti-detection.d.ts +18 -0
  23. package/dist/pages/zhipin/anti-detection.d.ts.map +1 -0
  24. package/dist/pages/zhipin/anti-detection.js +65 -0
  25. package/dist/pages/zhipin/anti-detection.js.map +1 -0
  26. package/dist/pages/zhipin/chat-navigation.d.ts +28 -0
  27. package/dist/pages/zhipin/chat-navigation.d.ts.map +1 -0
  28. package/dist/pages/zhipin/chat-navigation.js +158 -0
  29. package/dist/pages/zhipin/chat-navigation.js.map +1 -0
  30. package/dist/pages/zhipin/selectors.d.ts +128 -0
  31. package/dist/pages/zhipin/selectors.d.ts.map +1 -0
  32. package/dist/pages/zhipin/selectors.js +136 -0
  33. package/dist/pages/zhipin/selectors.js.map +1 -0
  34. package/dist/platforms.d.ts +8 -0
  35. package/dist/platforms.d.ts.map +1 -0
  36. package/dist/platforms.js +20 -0
  37. package/dist/platforms.js.map +1 -0
  38. package/dist/runtime-holder.d.ts +8 -0
  39. package/dist/runtime-holder.d.ts.map +1 -0
  40. package/dist/runtime-holder.js +50 -0
  41. package/dist/runtime-holder.js.map +1 -0
  42. package/dist/tools/browser-status.d.ts +13 -0
  43. package/dist/tools/browser-status.d.ts.map +1 -0
  44. package/dist/tools/browser-status.js +49 -0
  45. package/dist/tools/browser-status.js.map +1 -0
  46. package/dist/tools/list-pages.d.ts +13 -0
  47. package/dist/tools/list-pages.d.ts.map +1 -0
  48. package/dist/tools/list-pages.js +40 -0
  49. package/dist/tools/list-pages.js.map +1 -0
  50. package/dist/tools/navigate-active-tab.d.ts +14 -0
  51. package/dist/tools/navigate-active-tab.d.ts.map +1 -0
  52. package/dist/tools/navigate-active-tab.js +49 -0
  53. package/dist/tools/navigate-active-tab.js.map +1 -0
  54. package/dist/tools/open-platform.d.ts +9 -0
  55. package/dist/tools/open-platform.d.ts.map +1 -0
  56. package/dist/tools/open-platform.js +40 -0
  57. package/dist/tools/open-platform.js.map +1 -0
  58. package/dist/tools/select-page.d.ts +15 -0
  59. package/dist/tools/select-page.d.ts.map +1 -0
  60. package/dist/tools/select-page.js +38 -0
  61. package/dist/tools/select-page.js.map +1 -0
  62. package/dist/tools/yupao-read-messages.d.ts +13 -0
  63. package/dist/tools/yupao-read-messages.d.ts.map +1 -0
  64. package/dist/tools/yupao-read-messages.js +36 -0
  65. package/dist/tools/yupao-read-messages.js.map +1 -0
  66. package/dist/tools/yupao-send-reply.d.ts +10 -0
  67. package/dist/tools/yupao-send-reply.d.ts.map +1 -0
  68. package/dist/tools/yupao-send-reply.js +40 -0
  69. package/dist/tools/yupao-send-reply.js.map +1 -0
  70. package/dist/tools/zhipin-close-resume.d.ts +6 -0
  71. package/dist/tools/zhipin-close-resume.d.ts.map +1 -0
  72. package/dist/tools/zhipin-close-resume.js +73 -0
  73. package/dist/tools/zhipin-close-resume.js.map +1 -0
  74. package/dist/tools/zhipin-exchange-wechat.d.ts +14 -0
  75. package/dist/tools/zhipin-exchange-wechat.d.ts.map +1 -0
  76. package/dist/tools/zhipin-exchange-wechat.js +218 -0
  77. package/dist/tools/zhipin-exchange-wechat.js.map +1 -0
  78. package/dist/tools/zhipin-get-candidate-info.d.ts +34 -0
  79. package/dist/tools/zhipin-get-candidate-info.d.ts.map +1 -0
  80. package/dist/tools/zhipin-get-candidate-info.js +247 -0
  81. package/dist/tools/zhipin-get-candidate-info.js.map +1 -0
  82. package/dist/tools/zhipin-get-candidate-list.d.ts +24 -0
  83. package/dist/tools/zhipin-get-candidate-list.d.ts.map +1 -0
  84. package/dist/tools/zhipin-get-candidate-list.js +175 -0
  85. package/dist/tools/zhipin-get-candidate-list.js.map +1 -0
  86. package/dist/tools/zhipin-get-username.d.ts +6 -0
  87. package/dist/tools/zhipin-get-username.d.ts.map +1 -0
  88. package/dist/tools/zhipin-get-username.js +47 -0
  89. package/dist/tools/zhipin-get-username.js.map +1 -0
  90. package/dist/tools/zhipin-locate-resume-canvas.d.ts +15 -0
  91. package/dist/tools/zhipin-locate-resume-canvas.d.ts.map +1 -0
  92. package/dist/tools/zhipin-locate-resume-canvas.js +90 -0
  93. package/dist/tools/zhipin-locate-resume-canvas.js.map +1 -0
  94. package/dist/tools/zhipin-open-chat.d.ts +15 -0
  95. package/dist/tools/zhipin-open-chat.d.ts.map +1 -0
  96. package/dist/tools/zhipin-open-chat.js +82 -0
  97. package/dist/tools/zhipin-open-chat.js.map +1 -0
  98. package/dist/tools/zhipin-open-resume.d.ts +9 -0
  99. package/dist/tools/zhipin-open-resume.d.ts.map +1 -0
  100. package/dist/tools/zhipin-open-resume.js +51 -0
  101. package/dist/tools/zhipin-open-resume.js.map +1 -0
  102. package/dist/tools/zhipin-read-messages.d.ts +22 -0
  103. package/dist/tools/zhipin-read-messages.d.ts.map +1 -0
  104. package/dist/tools/zhipin-read-messages.js +90 -0
  105. package/dist/tools/zhipin-read-messages.js.map +1 -0
  106. package/dist/tools/zhipin-say-hello.d.ts +18 -0
  107. package/dist/tools/zhipin-say-hello.d.ts.map +1 -0
  108. package/dist/tools/zhipin-say-hello.js +118 -0
  109. package/dist/tools/zhipin-say-hello.js.map +1 -0
  110. package/dist/tools/zhipin-send-reply.d.ts +14 -0
  111. package/dist/tools/zhipin-send-reply.d.ts.map +1 -0
  112. package/dist/tools/zhipin-send-reply.js +99 -0
  113. package/dist/tools/zhipin-send-reply.js.map +1 -0
  114. package/package.json +63 -0
@@ -0,0 +1,90 @@
1
+ import { defineTool } from "@roll-agent/sdk";
2
+ import { z } from "zod";
3
+ import { getContextManager } from "../runtime-holder.js";
4
+ import { performInitialScrollPattern, performRandomScroll, } from "../pages/zhipin/anti-detection.js";
5
+ const CandidateItemSchema = z.object({
6
+ name: z.string(),
7
+ position: z.string(),
8
+ time: z.string(),
9
+ preview: z.string(),
10
+ unreadCount: z.number(),
11
+ hasUnread: z.boolean(),
12
+ index: z.number(),
13
+ });
14
+ const OutputSchema = z.object({
15
+ success: z.boolean(),
16
+ candidates: z.array(CandidateItemSchema),
17
+ total: z.number(),
18
+ stats: z.object({ withName: z.number(), withUnread: z.number() }),
19
+ });
20
+ export const zhipinReadMessages = defineTool({
21
+ name: "zhipin_read_messages",
22
+ description: "读取 BOSS直聘未读候选人列表,支持过滤和排序",
23
+ input: z.object({
24
+ limit: z.number().optional().describe("最多返回条数"),
25
+ onlyUnread: z.boolean().default(true).describe("是否只返回有未读消息的候选人"),
26
+ sortBy: z.enum(["time", "unreadCount", "name"]).default("time"),
27
+ }),
28
+ output: OutputSchema,
29
+ execute: async (input, ctx) => {
30
+ const onlyUnread = input.onlyUnread ?? true;
31
+ ctx.logger.info(`Reading zhipin messages (limit: ${input.limit ?? "all"}, onlyUnread: ${onlyUnread})`);
32
+ const ctxManager = getContextManager();
33
+ const page = await ctxManager.getPage("zhipin");
34
+ if (!page.url().includes("/web/geek/chat") && !page.url().includes("/web/chat")) {
35
+ await page.goto("https://www.zhipin.com/web/geek/chat", { waitUntil: "domcontentloaded" });
36
+ }
37
+ try {
38
+ await page.waitForSelector(".chat-list-wrap, .geek-item", { timeout: 10_000 });
39
+ }
40
+ catch {
41
+ return { success: false, candidates: [], total: 0, stats: { withName: 0, withUnread: 0 } };
42
+ }
43
+ await performInitialScrollPattern(page);
44
+ const candidates = await page.evaluate(() => {
45
+ const items = document.querySelectorAll(".geek-item");
46
+ const result = [];
47
+ items.forEach((item, index) => {
48
+ const nameEl = item.querySelector('[class*="name"], .nickname, .geek-name, .candidate-name');
49
+ let name = nameEl?.textContent?.trim() ?? "";
50
+ if (name.length > 10) {
51
+ const match = name.match(/[\u4e00-\u9fa5]{2,4}/);
52
+ if (match)
53
+ name = match[0];
54
+ }
55
+ const position = item.querySelector(".source-job")?.textContent?.trim() ?? "";
56
+ const time = item.querySelector(".time, .time-shadow")?.textContent?.trim() ?? "";
57
+ const preview = (item.querySelector(".push-text, .chat-last-msg")?.textContent?.trim() ?? "").slice(0, 100);
58
+ let unreadCount = 0;
59
+ const badgeEl = item.querySelector(".badge-count");
60
+ if (badgeEl)
61
+ unreadCount = parseInt(badgeEl.textContent?.trim() ?? "0", 10) || 0;
62
+ const hasUnread = unreadCount > 0 || item.querySelector(".red-dot") !== null;
63
+ result.push({ name, position, time, preview, unreadCount, hasUnread, index });
64
+ });
65
+ return result;
66
+ });
67
+ let filtered = onlyUnread ? candidates.filter((c) => c.hasUnread) : candidates;
68
+ const sortBy = input.sortBy ?? "time";
69
+ if (sortBy === "time") {
70
+ // DOM 顺序即为时间倒序(最新在上),但做一次稳定排序以防万一
71
+ filtered.sort((a, b) => b.time.localeCompare(a.time));
72
+ }
73
+ else if (sortBy === "unreadCount") {
74
+ filtered.sort((a, b) => b.unreadCount - a.unreadCount);
75
+ }
76
+ else if (sortBy === "name") {
77
+ filtered.sort((a, b) => a.name.localeCompare(b.name));
78
+ }
79
+ if (input.limit !== undefined)
80
+ filtered = filtered.slice(0, input.limit);
81
+ const stats = {
82
+ withName: candidates.filter((c) => c.name.length > 0).length,
83
+ withUnread: candidates.filter((c) => c.hasUnread).length,
84
+ };
85
+ await performRandomScroll(page);
86
+ ctx.logger.info(`Found ${filtered.length} candidates (${stats.withUnread} with unread)`);
87
+ return { success: true, candidates: filtered, total: candidates.length, stats };
88
+ },
89
+ });
90
+ //# sourceMappingURL=zhipin-read-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zhipin-read-messages.js","sourceRoot":"","sources":["../../src/tools/zhipin-read-messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare const zhipinSayHello: import("@roll-agent/sdk").ToolDefinition<{
2
+ indices: number[];
3
+ }, {
4
+ summary: {
5
+ failed: number;
6
+ total: number;
7
+ succeeded: number;
8
+ };
9
+ success: boolean;
10
+ results: {
11
+ success: boolean;
12
+ index: number;
13
+ candidateName: string;
14
+ candidateId: string;
15
+ error?: string | undefined;
16
+ }[];
17
+ }>;
18
+ //# sourceMappingURL=zhipin-say-hello.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zhipin-say-hello.d.ts","sourceRoot":"","sources":["../../src/tools/zhipin-say-hello.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;EAkHzB,CAAC"}
@@ -0,0 +1,118 @@
1
+ import { defineTool } from "@roll-agent/sdk";
2
+ import { z } from "zod";
3
+ import { getContextManager } from "../runtime-holder.js";
4
+ import { humanDelay, shouldAddRandomBehavior, performRandomScroll, } from "../pages/zhipin/anti-detection.js";
5
+ const ResultItemSchema = z.object({
6
+ index: z.number(),
7
+ candidateName: z.string(),
8
+ candidateId: z.string(),
9
+ success: z.boolean(),
10
+ error: z.string().optional(),
11
+ });
12
+ const OutputSchema = z.object({
13
+ success: z.boolean(),
14
+ results: z.array(ResultItemSchema),
15
+ summary: z.object({ total: z.number(), succeeded: z.number(), failed: z.number() }),
16
+ });
17
+ export const zhipinSayHello = defineTool({
18
+ name: "zhipin_say_hello",
19
+ description: "在推荐列表页对候选人点击「打招呼」按钮(支持批量)",
20
+ input: z.object({ indices: z.array(z.number()).describe("要打招呼的候选人索引列表") }),
21
+ output: OutputSchema,
22
+ execute: async (input, ctx) => {
23
+ ctx.logger.info(`Saying hello to ${input.indices.length} candidates`);
24
+ const ctxManager = getContextManager();
25
+ const page = await ctxManager.getPage("zhipin");
26
+ const frame = page.frame("recommendFrame") ?? page.frames().find((f) => f.url().includes("recommend"));
27
+ const target = frame ?? page;
28
+ const results = [];
29
+ for (const idx of input.indices) {
30
+ try {
31
+ const r = await target.evaluate((targetIdx) => {
32
+ // 优先用 .candidate-card-wrap 定位(按钮在这一层),fallback 到 [data-geek]
33
+ let items = Array.from(document.querySelectorAll(".candidate-card-wrap"));
34
+ if (items.length === 0) {
35
+ items = Array.from(document.querySelectorAll("[data-geek], .geek-item"));
36
+ }
37
+ const item = items[targetIdx];
38
+ if (!item)
39
+ return { found: false, error: "索引超出范围" };
40
+ // candidateId 可能在自身或子元素 .card-inner 上
41
+ const candidateId = item.getAttribute("data-geek") ??
42
+ item.querySelector("[data-geek]")?.getAttribute("data-geek") ??
43
+ "";
44
+ const name = item.querySelector(".name")?.textContent?.trim() ?? "";
45
+ // 按钮在 .candidate-card-wrap 层,不在 .card-inner 内
46
+ const btn = item.querySelector("button.btn.btn-greet");
47
+ if (!btn || btn.offsetWidth === 0) {
48
+ return {
49
+ found: true,
50
+ candidateId,
51
+ name,
52
+ clicked: false,
53
+ error: "未找到打招呼按钮",
54
+ };
55
+ }
56
+ // 模拟完整点击事件序列
57
+ btn.scrollIntoView({ behavior: "instant", block: "center" });
58
+ const rect = btn.getBoundingClientRect();
59
+ const x = rect.left + rect.width / 2;
60
+ const y = rect.top + rect.height / 2;
61
+ const evtOpts = { bubbles: true, cancelable: true, view: window, clientX: x, clientY: y, button: 0 };
62
+ btn.dispatchEvent(new MouseEvent("mousedown", evtOpts));
63
+ btn.dispatchEvent(new MouseEvent("mouseup", evtOpts));
64
+ btn.dispatchEvent(new MouseEvent("click", evtOpts));
65
+ btn.click();
66
+ return { found: true, candidateId, name, clicked: true };
67
+ }, idx);
68
+ if (!r.found) {
69
+ results.push({
70
+ index: idx,
71
+ candidateName: "",
72
+ candidateId: "",
73
+ success: false,
74
+ ...(r.error !== undefined ? { error: r.error } : {}),
75
+ });
76
+ }
77
+ else if (!r.clicked) {
78
+ results.push({
79
+ index: idx,
80
+ candidateName: r.name,
81
+ candidateId: r.candidateId,
82
+ success: false,
83
+ ...(r.error !== undefined ? { error: r.error } : {}),
84
+ });
85
+ }
86
+ else {
87
+ results.push({
88
+ index: idx,
89
+ candidateName: r.name,
90
+ candidateId: r.candidateId,
91
+ success: true,
92
+ });
93
+ }
94
+ await humanDelay(page);
95
+ if (shouldAddRandomBehavior(0.3)) {
96
+ await performRandomScroll(page);
97
+ }
98
+ }
99
+ catch (err) {
100
+ results.push({
101
+ index: idx,
102
+ candidateName: "",
103
+ candidateId: "",
104
+ success: false,
105
+ error: err instanceof Error ? err.message : String(err),
106
+ });
107
+ }
108
+ }
109
+ const summary = {
110
+ total: results.length,
111
+ succeeded: results.filter((r) => r.success).length,
112
+ failed: results.filter((r) => !r.success).length,
113
+ };
114
+ ctx.logger.info(`Say hello: ${summary.succeeded}/${summary.total} succeeded`);
115
+ return { success: summary.failed === 0, results, summary };
116
+ },
117
+ });
118
+ //# sourceMappingURL=zhipin-say-hello.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zhipin-say-hello.js","sourceRoot":"","sources":["../../src/tools/zhipin-say-hello.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare const zhipinSendReply: import("@roll-agent/sdk").ToolDefinition<{
2
+ message: string;
3
+ index?: number | undefined;
4
+ candidateName?: string | undefined;
5
+ }, {
6
+ success: boolean;
7
+ sentMessage: string;
8
+ error: string | undefined;
9
+ } | {
10
+ success: boolean;
11
+ sentMessage: string;
12
+ error?: never;
13
+ }>;
14
+ //# sourceMappingURL=zhipin-send-reply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zhipin-send-reply.d.ts","sourceRoot":"","sources":["../../src/tools/zhipin-send-reply.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,eAAe;;;;;;;;;;;;EAkG1B,CAAC"}
@@ -0,0 +1,99 @@
1
+ import { defineTool } from "@roll-agent/sdk";
2
+ import { z } from "zod";
3
+ import { getContextManager } from "../runtime-holder.js";
4
+ import { randomDelay } from "../pages/zhipin/anti-detection.js";
5
+ import { ensureChatOpen } from "../pages/zhipin/chat-navigation.js";
6
+ const OutputSchema = z.object({
7
+ success: z.boolean(),
8
+ sentMessage: z.string(),
9
+ error: z.string().optional(),
10
+ });
11
+ export const zhipinSendReply = defineTool({
12
+ name: "zhipin_send_reply",
13
+ description: "发送消息。可指定 candidateName 自动打开对应聊天后发送,或不传则发送到当前窗口;例如“回复鲁倩:你好”应提取 candidateName=鲁倩。",
14
+ input: z.object({
15
+ message: z.string().describe("要发送的消息内容"),
16
+ candidateName: z
17
+ .string()
18
+ .optional()
19
+ .describe("候选人姓名。若用户说“回复鲁倩”,这里应提取为“鲁倩”"),
20
+ index: z.number().optional().describe("候选人在列表中的索引(可选)"),
21
+ }),
22
+ output: OutputSchema,
23
+ execute: async (input, ctx) => {
24
+ const { message } = input;
25
+ const ctxManager = getContextManager();
26
+ const page = await ctxManager.getPage("zhipin");
27
+ // 如果指定了候选人,先导航到对应聊天
28
+ const nav = await ensureChatOpen(page, {
29
+ candidateName: input.candidateName,
30
+ index: input.index,
31
+ });
32
+ if (nav && !nav.found) {
33
+ return { success: false, sentMessage: message, error: nav.error };
34
+ }
35
+ ctx.logger.info(`Sending message (${message.length} chars)${nav ? ` to ${nav.name}` : ""}`);
36
+ try {
37
+ const inputSelector = "#boss-chat-editor-input, textarea.chat-input, .chat-input";
38
+ await page.waitForSelector(inputSelector, { timeout: 5_000 });
39
+ const isContentEditable = await page.evaluate((sel) => {
40
+ const el = document.querySelector(sel);
41
+ return el?.getAttribute("contenteditable") === "true";
42
+ }, inputSelector);
43
+ if (isContentEditable) {
44
+ await page.evaluate((args) => {
45
+ const el = document.querySelector(args.sel);
46
+ if (!el)
47
+ return;
48
+ el.focus();
49
+ el.innerHTML = args.msg
50
+ .split("\n")
51
+ .map((line) => `<p>${line}</p>`)
52
+ .join("");
53
+ el.dispatchEvent(new Event("input", { bubbles: true }));
54
+ }, { sel: inputSelector, msg: message });
55
+ }
56
+ else {
57
+ await page.fill(inputSelector, message);
58
+ }
59
+ await randomDelay(page, 200, 500);
60
+ const sendClicked = await page.evaluate(() => {
61
+ const selectors = [
62
+ ".submit-content .submit.active",
63
+ ".submit-content .submit",
64
+ ".submit-content",
65
+ ".btn-send",
66
+ ];
67
+ for (const sel of selectors) {
68
+ const btn = document.querySelector(sel);
69
+ if (btn && btn.offsetWidth > 0) {
70
+ btn.click();
71
+ return true;
72
+ }
73
+ }
74
+ const spans = Array.from(document.querySelectorAll("span"));
75
+ for (const span of spans) {
76
+ if (span.textContent?.trim() === "发送") {
77
+ span.click();
78
+ return true;
79
+ }
80
+ }
81
+ return false;
82
+ });
83
+ if (!sendClicked) {
84
+ return { success: false, sentMessage: message, error: "未找到发送按钮" };
85
+ }
86
+ await randomDelay(page, 500, 1200);
87
+ ctx.logger.info("Message sent successfully");
88
+ return { success: true, sentMessage: message };
89
+ }
90
+ catch (err) {
91
+ return {
92
+ success: false,
93
+ sentMessage: message,
94
+ error: err instanceof Error ? err.message : String(err),
95
+ };
96
+ }
97
+ },
98
+ });
99
+ //# sourceMappingURL=zhipin-send-reply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zhipin-send-reply.js","sourceRoot":"","sources":["../../src/tools/zhipin-send-reply.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@roll-agent/browser-use-agent",
3
+ "version": "0.2.0",
4
+ "type": "module",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/steveoon/roll-agent"
8
+ },
9
+ "homepage": "https://github.com/steveoon/roll-agent",
10
+ "bugs": {
11
+ "url": "https://github.com/steveoon/roll-agent/issues"
12
+ },
13
+ "files": [
14
+ "dist",
15
+ "SKILL.md"
16
+ ],
17
+ "engines": {
18
+ "node": ">=22.6.0"
19
+ },
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "default": "./dist/index.js"
24
+ }
25
+ },
26
+ "scripts": {
27
+ "dev": "node --experimental-strip-types src/index.ts",
28
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
29
+ "typecheck": "tsc --noEmit",
30
+ "clean": "rm -rf dist"
31
+ },
32
+ "rollAgent": {
33
+ "runtime": {
34
+ "ownership": "core-managed",
35
+ "transport": "streamable-http"
36
+ },
37
+ "start": {
38
+ "command": "node",
39
+ "args": [
40
+ "dist/index.js"
41
+ ]
42
+ },
43
+ "endpoint": {
44
+ "path": "/mcp",
45
+ "port": 3100
46
+ },
47
+ "setup": {
48
+ "playwright": {
49
+ "browsers": [
50
+ "chromium"
51
+ ]
52
+ }
53
+ }
54
+ },
55
+ "dependencies": {
56
+ "@roll-agent/sdk": "workspace:*",
57
+ "@roll-agent/browser": "workspace:*",
58
+ "zod": "^3.25.0"
59
+ },
60
+ "devDependencies": {
61
+ "@types/node": "^22.0.0"
62
+ }
63
+ }