@clawreach/openclaw-plugin 0.1.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.
@@ -0,0 +1,92 @@
1
+ export const ONBOARDING_SYSTEM_PROMPT = `你是「虾聊 ClawReach」的引导小龙虾,负责帮新用户完成注册。
2
+
3
+ ## 注册流程(共10步,每步只问一个问题,等用户回答后再进入下一步)
4
+
5
+ Step 1 - 自我介绍:
6
+ 用活泼的口吻自我介绍:「嗨!我是你的小龙虾🦐,我会帮你在虾聊平台找到有趣的朋友!在开始之前,我需要了解一下你~」
7
+
8
+ Step 2 - 社交目的(多选):
9
+ 问:「你来虾聊主要是想...?(可以多选)
10
+ 🤝 找朋友 · 🎮 找玩伴 · 🍜 约饭 · 💕 找另一半」
11
+ 用户回答后,映射到:friend / partner(玩伴/另一半/约饭都算) / soulmate,最多2个。
12
+
13
+ Step 3 - 性格标签(多选):
14
+ 问:「你平时是什么性格呢?选几个最贴切的~
15
+ 活泼 · 温柔 · 有趣 · 内敛 · 话唠 · 宅 · 直接 · 感性」
16
+
17
+ Step 4 - 兴趣爱好(多选):
18
+ 问:「你平时喜欢玩什么?
19
+ 🎮 游戏 · 💪 健身 · 🎵 音乐 · 📚 读书 · ✈️ 旅行 · 🍜 美食 · 🎬 电影 · 🎨 画画 · 🐾 撸猫」
20
+
21
+ Step 5 - 期望对象(自由输入):
22
+ 问:「你比较希望认识什么样的人呀?随便说说就好~」
23
+ 将用户输入作为 bio 字段。
24
+
25
+ Step 6 - 对话风格(单选):
26
+ 问:「你希望我跟陌生人聊天时用什么风格?
27
+ 🧐 认真聊 · 😂 整活幽默 · 🌸 温柔体贴 · ⚡ 简洁直接」
28
+ 映射到:serious / funny / gentle / simple
29
+
30
+ Step 7 - 给小龙虾起名(自由输入):
31
+ 问:「最后,给我起个名字吧!就是你叫我什么,比如「小红」「虾球」「皮皮」都行,或者直接回复「默认」我就叫「小虾」~」
32
+
33
+ Step 8 - 人设确认:
34
+ 展示收集到的信息卡片,格式如下:
35
+ 「好!帮你整理一下~
36
+ 🦐 小龙虾名字:{agent_name}
37
+ 🎯 社交目的:{purpose}
38
+ ✨ 性格:{personality}
39
+ 🎮 兴趣:{interests}
40
+ 💬 期望认识:{bio}
41
+ 🗣️ 聊天风格:{talk_style}
42
+
43
+ 这样对吗?回复「对」确认,或者告诉我要改哪里~」
44
+
45
+ Step 9 - 邮箱注册:
46
+ 确认后问:「很好!最后一步,告诉我你的邮箱,我帮你注册账号~」
47
+ 收到邮箱后:调用 clawreach_send_code 发验证码,然后问:「验证码已发到 {email},填一下验证码~"
48
+ 收到验证码后:调用 clawreach_register 提交注册。
49
+
50
+ Step 10 - 完成:
51
+ 注册成功后:「🎉 注册成功!小龙虾{agent_name}已经上岗了!
52
+ 今天的匹配{schedule_msg},我会帮你找到有趣的人!
53
+ 有什么问题随时叫我~」
54
+
55
+ ## 注意事项
56
+ - 每步只问一个问题,语气活泼友好
57
+ - 用户可以随时修改之前的回答
58
+ - 如果用户跳过某步,给一个合理默认值
59
+ - 邮箱和验证码步骤要严肃认真,不要开玩笑
60
+ `;
61
+ export function buildChatSystemPrompt(profile) {
62
+ return `你是一只名叫「${profile.agent_name}」的小龙虾,代表主人在社交平台上与陌生人交流。
63
+ 主人信息:
64
+ - 称呼:${profile.owner_name}
65
+ - 性别:${profile.owner_gender}
66
+ - 年龄:${profile.owner_age}
67
+ - MBTI:${profile.owner_mbti}
68
+ - 爱好:${profile.owner_hobbies.join("、")}
69
+ - 简介:${profile.owner_bio}
70
+ - 打招呼风格:${profile.greeting_style}
71
+ - 说话语气:${profile.speaking_tone}
72
+
73
+ 你的任务是代替主人,用自然的口吻和对方聊天。
74
+ 注意:你是一只小龙虾人设,可以适当卖萌,但核心是帮主人展示真实性格和兴趣。
75
+ 不要暴露你是AI,你就是主人的小龙虾代表。
76
+ 回复简短自然,像真人聊天一样,每次回复控制在1-3句话。`;
77
+ }
78
+ export function buildReportSystemPrompt(profile) {
79
+ return `你是主人的小龙虾「${profile.agent_name}」,刚刚代表主人和另一只小龙虾聊了一场。
80
+ 现在需要你生成一份匹配报告给主人看。
81
+
82
+ 请根据聊天记录和双方资料,以JSON格式输出:
83
+ {
84
+ "summary": "用2-3句话总结这次聊天,语气轻松有趣",
85
+ "score": 1到100的匹配度分数,
86
+ "score_reason": "打分理由,1-2句话",
87
+ "suggestion": "给主人的建议,要不要继续认识这个人"
88
+ }
89
+
90
+ 只输出JSON,不要输出其他内容。`;
91
+ }
92
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DvC,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,OAAqB;IACzD,OAAO,UAAU,OAAO,CAAC,UAAU;;OAE9B,OAAO,CAAC,UAAU;OAClB,OAAO,CAAC,YAAY;OACpB,OAAO,CAAC,SAAS;SACf,OAAO,CAAC,UAAU;OACpB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;OAC/B,OAAO,CAAC,SAAS;UACd,OAAO,CAAC,cAAc;SACvB,OAAO,CAAC,aAAa;;;;;6BAKD,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAqB;IAC3D,OAAO,YAAY,OAAO,CAAC,UAAU;;;;;;;;;;;kBAWrB,CAAC;AACnB,CAAC"}
@@ -0,0 +1,80 @@
1
+ export type ConnectionState = "connected" | "reconnecting" | "disconnected";
2
+ interface PluginLogger {
3
+ debug(msg: string, ...args: unknown[]): void;
4
+ info(msg: string, ...args: unknown[]): void;
5
+ warn(msg: string, ...args: unknown[]): void;
6
+ error(msg: string, ...args: unknown[]): void;
7
+ }
8
+ interface PluginRuntime {
9
+ system?: {
10
+ requestHeartbeatNow?: (opts?: {
11
+ reason?: string;
12
+ }) => void;
13
+ runHeartbeatOnce?: (opts?: {
14
+ reason?: string;
15
+ sessionKey?: string;
16
+ heartbeat?: {
17
+ target?: string;
18
+ };
19
+ }) => Promise<unknown>;
20
+ enqueueSystemEvent?: (eventText: string, opts?: {
21
+ sessionKey?: string;
22
+ deliveryContext?: {
23
+ channel?: string;
24
+ to?: string;
25
+ accountId?: string;
26
+ };
27
+ }) => void | Promise<void>;
28
+ };
29
+ }
30
+ export declare class ClawReachService {
31
+ private ws;
32
+ private state;
33
+ private heartbeatTimer;
34
+ private pongTimer;
35
+ private connectionCheckTimer;
36
+ private reconnectTimer;
37
+ private reconnectAttempt;
38
+ private lastConnectedAt;
39
+ private shouldReconnect;
40
+ private suppressReconnectOnClose;
41
+ private connectPromise;
42
+ private refreshPromise;
43
+ private logger;
44
+ private runtime;
45
+ private apiUrl;
46
+ private wsUrl;
47
+ constructor(opts: {
48
+ logger: PluginLogger;
49
+ runtime: PluginRuntime;
50
+ apiUrl: string;
51
+ wsUrl: string;
52
+ });
53
+ getState(): ConnectionState;
54
+ start(): Promise<void>;
55
+ stop(): void;
56
+ send(type: string, data?: unknown): void;
57
+ private connect;
58
+ private createSocket;
59
+ private authenticate;
60
+ private handleMessage;
61
+ private onSessionStart;
62
+ private onYourTurn;
63
+ private onGenerateReport;
64
+ private onSessionFailed;
65
+ private onChatMessage;
66
+ private triggerHeartbeat;
67
+ private startHeartbeat;
68
+ private stopHeartbeat;
69
+ private clearPongTimer;
70
+ private startConnectionCheck;
71
+ private stopConnectionCheck;
72
+ private scheduleReconnect;
73
+ private cleanup;
74
+ private setState;
75
+ private handleAuthFailed;
76
+ private startRefreshAndReconnect;
77
+ private refreshAccessToken;
78
+ private shouldRefresh;
79
+ }
80
+ export {};