@f2a/openclaw-adapter 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.
- package/README.md +510 -0
- package/dist/announcement-queue.d.ts +71 -0
- package/dist/announcement-queue.d.ts.map +1 -0
- package/dist/announcement-queue.js +181 -0
- package/dist/announcement-queue.js.map +1 -0
- package/dist/capability-detector.d.ts +21 -0
- package/dist/capability-detector.d.ts.map +1 -0
- package/dist/capability-detector.js +177 -0
- package/dist/capability-detector.js.map +1 -0
- package/dist/connector.d.ts +62 -0
- package/dist/connector.d.ts.map +1 -0
- package/dist/connector.js +1063 -0
- package/dist/connector.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/network-client.d.ts +48 -0
- package/dist/network-client.d.ts.map +1 -0
- package/dist/network-client.js +104 -0
- package/dist/network-client.js.map +1 -0
- package/dist/node-manager.d.ts +50 -0
- package/dist/node-manager.d.ts.map +1 -0
- package/dist/node-manager.js +187 -0
- package/dist/node-manager.js.map +1 -0
- package/dist/plugin.d.ts +16 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +116 -0
- package/dist/plugin.js.map +1 -0
- package/dist/reputation.d.ts +72 -0
- package/dist/reputation.d.ts.map +1 -0
- package/dist/reputation.js +215 -0
- package/dist/reputation.js.map +1 -0
- package/dist/task-guard.d.ts +77 -0
- package/dist/task-guard.d.ts.map +1 -0
- package/dist/task-guard.js +330 -0
- package/dist/task-guard.js.map +1 -0
- package/dist/task-queue.d.ts +71 -0
- package/dist/task-queue.d.ts.map +1 -0
- package/dist/task-queue.js +126 -0
- package/dist/task-queue.js.map +1 -0
- package/dist/types.d.ts +248 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/webhook-server.d.ts +44 -0
- package/dist/webhook-server.d.ts.map +1 -0
- package/dist/webhook-server.js +119 -0
- package/dist/webhook-server.js.map +1 -0
- package/openclaw.plugin.json +106 -0
- package/package.json +40 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* F2A Announcement Queue
|
|
4
|
+
* 管理任务广播和认领(Claim Pattern)
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.announcementQueue = exports.AnnouncementQueue = void 0;
|
|
8
|
+
class AnnouncementQueue {
|
|
9
|
+
announcements = new Map();
|
|
10
|
+
maxSize;
|
|
11
|
+
maxAgeMs;
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.maxSize = options?.maxSize || 100;
|
|
14
|
+
this.maxAgeMs = options?.maxAgeMs || 30 * 60 * 1000; // 30分钟
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 创建任务广播
|
|
18
|
+
*/
|
|
19
|
+
create(announcement) {
|
|
20
|
+
// 清理过期
|
|
21
|
+
this.cleanup();
|
|
22
|
+
// 检查容量
|
|
23
|
+
if (this.announcements.size >= this.maxSize) {
|
|
24
|
+
throw new Error('Announcement queue is full');
|
|
25
|
+
}
|
|
26
|
+
const id = `ann-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
27
|
+
const created = {
|
|
28
|
+
...announcement,
|
|
29
|
+
announcementId: id,
|
|
30
|
+
timestamp: Date.now(),
|
|
31
|
+
status: 'open',
|
|
32
|
+
claims: []
|
|
33
|
+
};
|
|
34
|
+
this.announcements.set(id, created);
|
|
35
|
+
return created;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 获取所有开放的广播
|
|
39
|
+
*/
|
|
40
|
+
getOpen() {
|
|
41
|
+
return Array.from(this.announcements.values())
|
|
42
|
+
.filter(a => a.status === 'open')
|
|
43
|
+
.sort((a, b) => a.timestamp - b.timestamp);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 获取特定广播
|
|
47
|
+
*/
|
|
48
|
+
get(announcementId) {
|
|
49
|
+
return this.announcements.get(announcementId);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 提交认领
|
|
53
|
+
*/
|
|
54
|
+
submitClaim(announcementId, claim) {
|
|
55
|
+
const announcement = this.announcements.get(announcementId);
|
|
56
|
+
if (!announcement)
|
|
57
|
+
return null;
|
|
58
|
+
if (announcement.status !== 'open')
|
|
59
|
+
return null;
|
|
60
|
+
const claimId = `claim-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
61
|
+
const created = {
|
|
62
|
+
...claim,
|
|
63
|
+
claimId,
|
|
64
|
+
announcementId,
|
|
65
|
+
timestamp: Date.now(),
|
|
66
|
+
status: 'pending'
|
|
67
|
+
};
|
|
68
|
+
if (!announcement.claims) {
|
|
69
|
+
announcement.claims = [];
|
|
70
|
+
}
|
|
71
|
+
announcement.claims.push(created);
|
|
72
|
+
return created;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 接受认领
|
|
76
|
+
*/
|
|
77
|
+
acceptClaim(announcementId, claimId) {
|
|
78
|
+
const announcement = this.announcements.get(announcementId);
|
|
79
|
+
if (!announcement)
|
|
80
|
+
return null;
|
|
81
|
+
const claim = announcement.claims?.find(c => c.claimId === claimId);
|
|
82
|
+
if (!claim)
|
|
83
|
+
return null;
|
|
84
|
+
// 标记该认领为接受
|
|
85
|
+
claim.status = 'accepted';
|
|
86
|
+
// 拒绝其他认领
|
|
87
|
+
announcement.claims?.forEach(c => {
|
|
88
|
+
if (c.claimId !== claimId) {
|
|
89
|
+
c.status = 'rejected';
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
// 标记广播为已认领
|
|
93
|
+
announcement.status = 'claimed';
|
|
94
|
+
return claim;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 拒绝认领
|
|
98
|
+
*/
|
|
99
|
+
rejectClaim(announcementId, claimId) {
|
|
100
|
+
const announcement = this.announcements.get(announcementId);
|
|
101
|
+
if (!announcement)
|
|
102
|
+
return null;
|
|
103
|
+
const claim = announcement.claims?.find(c => c.claimId === claimId);
|
|
104
|
+
if (!claim)
|
|
105
|
+
return null;
|
|
106
|
+
claim.status = 'rejected';
|
|
107
|
+
return claim;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 标记为已委托
|
|
111
|
+
*/
|
|
112
|
+
markDelegated(announcementId) {
|
|
113
|
+
const announcement = this.announcements.get(announcementId);
|
|
114
|
+
if (!announcement)
|
|
115
|
+
return false;
|
|
116
|
+
announcement.status = 'delegated';
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 获取我的认领(作为认领方)
|
|
121
|
+
*/
|
|
122
|
+
getMyClaims(claimantId) {
|
|
123
|
+
const claims = [];
|
|
124
|
+
for (const announcement of this.announcements.values()) {
|
|
125
|
+
const myClaims = announcement.claims?.filter(c => c.claimant === claimantId);
|
|
126
|
+
if (myClaims) {
|
|
127
|
+
claims.push(...myClaims);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return claims.sort((a, b) => b.timestamp - a.timestamp);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 获取我的广播(作为发布方)
|
|
134
|
+
*/
|
|
135
|
+
getMyAnnouncements(fromId) {
|
|
136
|
+
return Array.from(this.announcements.values())
|
|
137
|
+
.filter(a => a.from === fromId)
|
|
138
|
+
.sort((a, b) => b.timestamp - a.timestamp);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 获取统计
|
|
142
|
+
*/
|
|
143
|
+
getStats() {
|
|
144
|
+
const all = Array.from(this.announcements.values());
|
|
145
|
+
return {
|
|
146
|
+
open: all.filter(a => a.status === 'open').length,
|
|
147
|
+
claimed: all.filter(a => a.status === 'claimed').length,
|
|
148
|
+
delegated: all.filter(a => a.status === 'delegated').length,
|
|
149
|
+
expired: all.filter(a => a.status === 'expired').length,
|
|
150
|
+
total: all.length
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 清理过期
|
|
155
|
+
*/
|
|
156
|
+
cleanup() {
|
|
157
|
+
const now = Date.now();
|
|
158
|
+
for (const [id, announcement] of this.announcements) {
|
|
159
|
+
const age = now - announcement.timestamp;
|
|
160
|
+
if (age > this.maxAgeMs) {
|
|
161
|
+
if (announcement.status === 'open') {
|
|
162
|
+
announcement.status = 'expired';
|
|
163
|
+
}
|
|
164
|
+
// 删除已过期一段时间的
|
|
165
|
+
if (age > this.maxAgeMs * 2) {
|
|
166
|
+
this.announcements.delete(id);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* 清空
|
|
173
|
+
*/
|
|
174
|
+
clear() {
|
|
175
|
+
this.announcements.clear();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.AnnouncementQueue = AnnouncementQueue;
|
|
179
|
+
// 导出单例
|
|
180
|
+
exports.announcementQueue = new AnnouncementQueue();
|
|
181
|
+
//# sourceMappingURL=announcement-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"announcement-queue.js","sourceRoot":"","sources":["../src/announcement-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw 能力检测器
|
|
3
|
+
* 提供默认能力列表(外部插件无法动态检测 OpenClaw 内部能力)
|
|
4
|
+
*/
|
|
5
|
+
import type { AgentCapability } from './types.js';
|
|
6
|
+
export interface OpenClawCapabilities {
|
|
7
|
+
tools: string[];
|
|
8
|
+
skills: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare class CapabilityDetector {
|
|
11
|
+
/**
|
|
12
|
+
* 获取默认能力列表
|
|
13
|
+
* 外部插件无法直接访问 OpenClaw 内部,使用预定义的能力列表
|
|
14
|
+
*/
|
|
15
|
+
getDefaultCapabilities(): AgentCapability[];
|
|
16
|
+
/**
|
|
17
|
+
* 合并自定义能力
|
|
18
|
+
*/
|
|
19
|
+
mergeCustomCapabilities(defaults: AgentCapability[], custom: string[]): AgentCapability[];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=capability-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-detector.d.ts","sourceRoot":"","sources":["../src/capability-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,YAAY,CAAC;AAEnE,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,kBAAkB;IAC7B;;;OAGG;IACH,sBAAsB,IAAI,eAAe,EAAE;IA6I3C;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE;CAqB1F"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenClaw 能力检测器
|
|
4
|
+
* 提供默认能力列表(外部插件无法动态检测 OpenClaw 内部能力)
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.CapabilityDetector = void 0;
|
|
8
|
+
class CapabilityDetector {
|
|
9
|
+
/**
|
|
10
|
+
* 获取默认能力列表
|
|
11
|
+
* 外部插件无法直接访问 OpenClaw 内部,使用预定义的能力列表
|
|
12
|
+
*/
|
|
13
|
+
getDefaultCapabilities() {
|
|
14
|
+
return [
|
|
15
|
+
{
|
|
16
|
+
name: 'file-operation',
|
|
17
|
+
description: 'Read and write files on the local system',
|
|
18
|
+
tools: ['read', 'write', 'edit', 'list'],
|
|
19
|
+
parameters: {
|
|
20
|
+
action: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'Action to perform: read, write, edit, list',
|
|
23
|
+
required: true
|
|
24
|
+
},
|
|
25
|
+
path: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
description: 'File or directory path',
|
|
28
|
+
required: true
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'command-execution',
|
|
34
|
+
description: 'Execute shell commands',
|
|
35
|
+
tools: ['exec', 'bash'],
|
|
36
|
+
parameters: {
|
|
37
|
+
command: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
description: 'Shell command to execute',
|
|
40
|
+
required: true
|
|
41
|
+
},
|
|
42
|
+
cwd: {
|
|
43
|
+
type: 'string',
|
|
44
|
+
description: 'Working directory',
|
|
45
|
+
required: false
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'web-browsing',
|
|
51
|
+
description: 'Browse web pages and fetch content',
|
|
52
|
+
tools: ['browser', 'fetch'],
|
|
53
|
+
parameters: {
|
|
54
|
+
url: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
description: 'URL to browse or fetch',
|
|
57
|
+
required: true
|
|
58
|
+
},
|
|
59
|
+
action: {
|
|
60
|
+
type: 'string',
|
|
61
|
+
description: 'Action: fetch, screenshot, click, type',
|
|
62
|
+
required: false
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'image-analysis',
|
|
68
|
+
description: 'Analyze images using vision models',
|
|
69
|
+
tools: ['image', 'analyze'],
|
|
70
|
+
parameters: {
|
|
71
|
+
image: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'Image path or URL',
|
|
74
|
+
required: true
|
|
75
|
+
},
|
|
76
|
+
prompt: {
|
|
77
|
+
type: 'string',
|
|
78
|
+
description: 'Analysis prompt',
|
|
79
|
+
required: false
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'subagent-creation',
|
|
85
|
+
description: 'Create sub-agents for parallel task execution',
|
|
86
|
+
tools: ['sessions_spawn', 'subagents'],
|
|
87
|
+
parameters: {
|
|
88
|
+
task: {
|
|
89
|
+
type: 'string',
|
|
90
|
+
description: 'Task description for sub-agent',
|
|
91
|
+
required: true
|
|
92
|
+
},
|
|
93
|
+
agentId: {
|
|
94
|
+
type: 'string',
|
|
95
|
+
description: 'Agent type to spawn',
|
|
96
|
+
required: false
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'messaging',
|
|
102
|
+
description: 'Send messages to users or channels',
|
|
103
|
+
tools: ['message', 'notify'],
|
|
104
|
+
parameters: {
|
|
105
|
+
target: {
|
|
106
|
+
type: 'string',
|
|
107
|
+
description: 'Message target',
|
|
108
|
+
required: true
|
|
109
|
+
},
|
|
110
|
+
content: {
|
|
111
|
+
type: 'string',
|
|
112
|
+
description: 'Message content',
|
|
113
|
+
required: true
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'code-generation',
|
|
119
|
+
description: 'Generate code in various programming languages',
|
|
120
|
+
tools: ['generate', 'refactor', 'explain'],
|
|
121
|
+
parameters: {
|
|
122
|
+
language: {
|
|
123
|
+
type: 'string',
|
|
124
|
+
description: 'Programming language',
|
|
125
|
+
required: true
|
|
126
|
+
},
|
|
127
|
+
description: {
|
|
128
|
+
type: 'string',
|
|
129
|
+
description: 'What the code should do',
|
|
130
|
+
required: true
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'task-delegation',
|
|
136
|
+
description: 'Delegate tasks to other agents in the network',
|
|
137
|
+
tools: ['delegate', 'discover'],
|
|
138
|
+
parameters: {
|
|
139
|
+
capability: {
|
|
140
|
+
type: 'string',
|
|
141
|
+
description: 'Required capability',
|
|
142
|
+
required: true
|
|
143
|
+
},
|
|
144
|
+
description: {
|
|
145
|
+
type: 'string',
|
|
146
|
+
description: 'Task description',
|
|
147
|
+
required: true
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 合并自定义能力
|
|
155
|
+
*/
|
|
156
|
+
mergeCustomCapabilities(defaults, custom) {
|
|
157
|
+
const merged = [...defaults];
|
|
158
|
+
for (const capName of custom) {
|
|
159
|
+
if (!merged.find(c => c.name === capName)) {
|
|
160
|
+
merged.push({
|
|
161
|
+
name: capName,
|
|
162
|
+
description: `Custom capability: ${capName}`,
|
|
163
|
+
parameters: {
|
|
164
|
+
query: {
|
|
165
|
+
type: 'string',
|
|
166
|
+
description: 'Input for this capability',
|
|
167
|
+
required: true
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return merged;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.CapabilityDetector = CapabilityDetector;
|
|
177
|
+
//# sourceMappingURL=capability-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-detector.js","sourceRoot":"","sources":["../src/capability-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* F2A OpenClaw Connector Plugin
|
|
3
|
+
* 主插件类 - 任务队列架构
|
|
4
|
+
*/
|
|
5
|
+
import type { OpenClawPlugin, OpenClawPluginApi, Tool } from './types.js';
|
|
6
|
+
export declare class F2AOpenClawAdapter implements OpenClawPlugin {
|
|
7
|
+
name: string;
|
|
8
|
+
version: string;
|
|
9
|
+
private nodeManager;
|
|
10
|
+
private networkClient;
|
|
11
|
+
private webhookServer;
|
|
12
|
+
private reputationSystem;
|
|
13
|
+
private capabilityDetector;
|
|
14
|
+
private taskQueue;
|
|
15
|
+
private announcementQueue;
|
|
16
|
+
private config;
|
|
17
|
+
private nodeConfig;
|
|
18
|
+
private capabilities;
|
|
19
|
+
private api?;
|
|
20
|
+
/**
|
|
21
|
+
* 初始化插件
|
|
22
|
+
*/
|
|
23
|
+
initialize(config: Record<string, unknown> & {
|
|
24
|
+
_api?: OpenClawPluginApi;
|
|
25
|
+
}): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* 获取插件提供的 Tools
|
|
28
|
+
*/
|
|
29
|
+
getTools(): Tool[];
|
|
30
|
+
/**
|
|
31
|
+
* 创建 Webhook 处理器
|
|
32
|
+
*/
|
|
33
|
+
private createWebhookHandler;
|
|
34
|
+
/**
|
|
35
|
+
* 注册到 F2A Node
|
|
36
|
+
*/
|
|
37
|
+
private registerToNode;
|
|
38
|
+
private handleDiscover;
|
|
39
|
+
private handleDelegate;
|
|
40
|
+
private handleBroadcast;
|
|
41
|
+
private handleStatus;
|
|
42
|
+
private handleReputation;
|
|
43
|
+
private handlePollTasks;
|
|
44
|
+
private handleSubmitResult;
|
|
45
|
+
private handleTaskStats;
|
|
46
|
+
private handleAnnounce;
|
|
47
|
+
private handleListAnnouncements;
|
|
48
|
+
private handleClaim;
|
|
49
|
+
private handleManageClaims;
|
|
50
|
+
private handleMyClaims;
|
|
51
|
+
private handleAnnouncementStats;
|
|
52
|
+
private resolveAgent;
|
|
53
|
+
private formatBroadcastResults;
|
|
54
|
+
private mergeConfig;
|
|
55
|
+
private generateToken;
|
|
56
|
+
/**
|
|
57
|
+
* 关闭插件,清理资源
|
|
58
|
+
*/
|
|
59
|
+
shutdown(): Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
export default F2AOpenClawAdapter;
|
|
62
|
+
//# sourceMappingURL=connector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,IAAI,EAaL,MAAM,YAAY,CAAC;AASpB,qBAAa,kBAAmB,YAAW,cAAc;IACvD,IAAI,SAA0B;IAC9B,OAAO,SAAW;IAElB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,GAAG,CAAC,CAAoB;IAEhC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,iBAAiB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA4E/F;;OAEG;IACH,QAAQ,IAAI,IAAI,EAAE;IAsQlB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiG5B;;OAEG;YACW,cAAc;YAWd,cAAc;YA6Cd,cAAc;YA2Cd,eAAe;YA2Df,YAAY;YAgCZ,gBAAgB;YA4DhB,eAAe;YAwDf,kBAAkB;YA4ClB,eAAe;YAuBf,cAAc;YAsDd,uBAAuB;YAsDvB,WAAW;YAyDX,kBAAkB;YAyFlB,cAAc;YA6Cd,uBAAuB;YAuBvB,YAAY;IA4B1B,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,aAAa;IASrB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAoBhC;AAGD,eAAe,kBAAkB,CAAC"}
|