@troykelly/openclaw-projects 0.0.11 → 0.0.13
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/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -0
- package/dist/config.js.map +1 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +22 -3
- package/dist/hooks.js.map +1 -1
- package/dist/register-openclaw.d.ts +3 -1
- package/dist/register-openclaw.d.ts.map +1 -1
- package/dist/register-openclaw.js +640 -55
- package/dist/register-openclaw.js.map +1 -1
- package/dist/tools/context-search.d.ts +79 -0
- package/dist/tools/context-search.d.ts.map +1 -0
- package/dist/tools/context-search.js +267 -0
- package/dist/tools/context-search.js.map +1 -0
- package/dist/tools/email-send.d.ts.map +1 -1
- package/dist/tools/email-send.js +1 -14
- package/dist/tools/email-send.js.map +1 -1
- package/dist/tools/entity-links.d.ts +117 -0
- package/dist/tools/entity-links.d.ts.map +1 -0
- package/dist/tools/entity-links.js +446 -0
- package/dist/tools/entity-links.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory-recall.d.ts +28 -0
- package/dist/tools/memory-recall.d.ts.map +1 -1
- package/dist/tools/memory-recall.js +42 -3
- package/dist/tools/memory-recall.js.map +1 -1
- package/dist/tools/memory-store.d.ts +57 -0
- package/dist/tools/memory-store.d.ts.map +1 -1
- package/dist/tools/memory-store.js +29 -2
- package/dist/tools/memory-store.js.map +1 -1
- package/dist/tools/message-search.d.ts +2 -2
- package/dist/tools/message-search.d.ts.map +1 -1
- package/dist/tools/message-search.js +36 -3
- package/dist/tools/message-search.js.map +1 -1
- package/dist/tools/notes.d.ts +2 -2
- package/dist/tools/project-search.d.ts +92 -0
- package/dist/tools/project-search.d.ts.map +1 -0
- package/dist/tools/project-search.js +160 -0
- package/dist/tools/project-search.js.map +1 -0
- package/dist/tools/skill-store.d.ts +6 -6
- package/dist/tools/threads.d.ts +3 -3
- package/dist/tools/threads.d.ts.map +1 -1
- package/dist/tools/threads.js +45 -7
- package/dist/tools/threads.js.map +1 -1
- package/dist/tools/todo-search.d.ts +95 -0
- package/dist/tools/todo-search.d.ts.map +1 -0
- package/dist/tools/todo-search.js +164 -0
- package/dist/tools/todo-search.js.map +1 -0
- package/dist/types/openclaw-api.d.ts +15 -0
- package/dist/types/openclaw-api.d.ts.map +1 -1
- package/dist/utils/auto-linker.d.ts +66 -0
- package/dist/utils/auto-linker.d.ts.map +1 -0
- package/dist/utils/auto-linker.js +354 -0
- package/dist/utils/auto-linker.js.map +1 -0
- package/dist/utils/geo.d.ts +24 -0
- package/dist/utils/geo.d.ts.map +1 -0
- package/dist/utils/geo.js +38 -0
- package/dist/utils/geo.js.map +1 -0
- package/dist/utils/inbound-gate.d.ts +85 -0
- package/dist/utils/inbound-gate.d.ts.map +1 -0
- package/dist/utils/inbound-gate.js +133 -0
- package/dist/utils/inbound-gate.js.map +1 -0
- package/dist/utils/injection-log-rate-limiter.d.ts +62 -0
- package/dist/utils/injection-log-rate-limiter.d.ts.map +1 -0
- package/dist/utils/injection-log-rate-limiter.js +106 -0
- package/dist/utils/injection-log-rate-limiter.js.map +1 -0
- package/dist/utils/injection-protection.d.ts +133 -0
- package/dist/utils/injection-protection.d.ts.map +1 -0
- package/dist/utils/injection-protection.js +252 -0
- package/dist/utils/injection-protection.js.map +1 -0
- package/dist/utils/nominatim.d.ts +18 -0
- package/dist/utils/nominatim.d.ts.map +1 -0
- package/dist/utils/nominatim.js +56 -0
- package/dist/utils/nominatim.js.map +1 -0
- package/dist/utils/prompt-guard-client.d.ts +59 -0
- package/dist/utils/prompt-guard-client.d.ts.map +1 -0
- package/dist/utils/prompt-guard-client.js +99 -0
- package/dist/utils/prompt-guard-client.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +81 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +188 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/spam-filter.d.ts +79 -0
- package/dist/utils/spam-filter.d.ts.map +1 -0
- package/dist/utils/spam-filter.js +237 -0
- package/dist/utils/spam-filter.js.map +1 -0
- package/dist/utils/token-budget.d.ts +68 -0
- package/dist/utils/token-budget.d.ts.map +1 -0
- package/dist/utils/token-budget.js +142 -0
- package/dist/utils/token-budget.js.map +1 -0
- package/openclaw.plugin.json +25 -3
- package/package.json +12 -11
- package/LICENSE +0 -21
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* context_search tool implementation.
|
|
3
|
+
* Provides unified cross-entity recall across memories, todos, projects, and messages.
|
|
4
|
+
* Fans out to memory, work-item, and message search APIs in parallel, normalizes scores,
|
|
5
|
+
* and returns a blended ranked list.
|
|
6
|
+
*
|
|
7
|
+
* Part of Issue #1219, #1222.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { createBoundaryMarkers, sanitizeMetadataField, wrapExternalMessage } from '../utils/injection-protection.js';
|
|
11
|
+
import { sanitizeErrorMessage } from '../utils/sanitize.js';
|
|
12
|
+
/** Supported entity types for cross-entity search */
|
|
13
|
+
export const EntityType = z.enum(['memory', 'todo', 'project', 'message']);
|
|
14
|
+
/** Parameters for context_search tool */
|
|
15
|
+
export const ContextSearchParamsSchema = z.object({
|
|
16
|
+
query: z.string().min(1, 'Query cannot be empty').max(1000, 'Query must be 1000 characters or less'),
|
|
17
|
+
entity_types: z.array(EntityType).optional(),
|
|
18
|
+
limit: z.number().int().min(1).max(50).optional(),
|
|
19
|
+
// TODO: location and location_weight params will be added when #1204 (geo-aware memory) ships
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* Sanitize query input to prevent injection and remove control characters.
|
|
23
|
+
*/
|
|
24
|
+
function sanitizeQuery(query) {
|
|
25
|
+
return query.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, '').trim();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Normalize an array of scores to 0-1 by dividing each by the max score in the set.
|
|
29
|
+
* If maxScore <= 0, all scores are set to 0. All results are clamped to [0, 1].
|
|
30
|
+
*/
|
|
31
|
+
function normalizeScores(items) {
|
|
32
|
+
if (items.length === 0)
|
|
33
|
+
return;
|
|
34
|
+
const maxScore = Math.max(...items.map((i) => i.score));
|
|
35
|
+
if (maxScore <= 0) {
|
|
36
|
+
for (const item of items) {
|
|
37
|
+
item.score = 0;
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
for (const item of items) {
|
|
42
|
+
item.score = Math.max(0, Math.min(1, item.score / maxScore));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Determine entity_type for a work item based on its metadata.kind.
|
|
47
|
+
*/
|
|
48
|
+
function classifyWorkItem(kind) {
|
|
49
|
+
return kind === 'project' ? 'project' : 'todo';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Format context search results as a text list with entity type annotations.
|
|
53
|
+
*/
|
|
54
|
+
function formatResultsAsText(results) {
|
|
55
|
+
if (results.length === 0) {
|
|
56
|
+
return 'No matching results found across memories, todos, projects, or messages.';
|
|
57
|
+
}
|
|
58
|
+
return results
|
|
59
|
+
.map((r) => {
|
|
60
|
+
const scoreStr = r.score.toFixed(2);
|
|
61
|
+
const snippetStr = r.snippet ? ` - ${r.snippet}` : '';
|
|
62
|
+
// Include metadata annotations for messages (channel, timestamp)
|
|
63
|
+
let metaStr = '';
|
|
64
|
+
if (r.entity_type === 'message' && r.metadata) {
|
|
65
|
+
const parts = [];
|
|
66
|
+
if (r.metadata.channel)
|
|
67
|
+
parts.push(r.metadata.channel);
|
|
68
|
+
if (r.metadata.received_at)
|
|
69
|
+
parts.push(r.metadata.received_at);
|
|
70
|
+
if (parts.length > 0)
|
|
71
|
+
metaStr = ` [${parts.join(', ')}]`;
|
|
72
|
+
}
|
|
73
|
+
return `- [${r.entity_type}] ${r.title}${snippetStr}${metaStr} (score: ${scoreStr})`;
|
|
74
|
+
})
|
|
75
|
+
.join('\n');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Creates the context_search tool.
|
|
79
|
+
*/
|
|
80
|
+
export function createContextSearchTool(options) {
|
|
81
|
+
const { client, logger, userId } = options;
|
|
82
|
+
return {
|
|
83
|
+
name: 'context_search',
|
|
84
|
+
description: 'Search across memories, todos, projects, and messages simultaneously. Use when you need broad context about a topic, ' +
|
|
85
|
+
'person, or project. Returns a blended ranked list from all entity types. Optionally filter by entity_types to narrow the search.',
|
|
86
|
+
parameters: ContextSearchParamsSchema,
|
|
87
|
+
async execute(params) {
|
|
88
|
+
// Validate parameters
|
|
89
|
+
const parseResult = ContextSearchParamsSchema.safeParse(params);
|
|
90
|
+
if (!parseResult.success) {
|
|
91
|
+
const errorMessage = parseResult.error.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ');
|
|
92
|
+
return { success: false, error: errorMessage };
|
|
93
|
+
}
|
|
94
|
+
const { query, entity_types, limit = 10 } = parseResult.data;
|
|
95
|
+
// Sanitize query
|
|
96
|
+
const sanitizedQuery = sanitizeQuery(query);
|
|
97
|
+
if (sanitizedQuery.length === 0) {
|
|
98
|
+
return { success: false, error: 'Query cannot be empty after sanitization' };
|
|
99
|
+
}
|
|
100
|
+
// Determine which searches to run
|
|
101
|
+
const searchMemories = !entity_types || entity_types.includes('memory');
|
|
102
|
+
const searchWorkItems = !entity_types || entity_types.includes('todo') || entity_types.includes('project');
|
|
103
|
+
const searchMessages = !entity_types || entity_types.includes('message');
|
|
104
|
+
logger.info('context_search invoked', {
|
|
105
|
+
userId,
|
|
106
|
+
queryLength: sanitizedQuery.length,
|
|
107
|
+
limit,
|
|
108
|
+
entity_types: entity_types ?? 'all',
|
|
109
|
+
});
|
|
110
|
+
const taggedPromises = [];
|
|
111
|
+
if (searchMemories) {
|
|
112
|
+
const memoryParams = new URLSearchParams({
|
|
113
|
+
q: sanitizedQuery,
|
|
114
|
+
limit: String(limit),
|
|
115
|
+
user_email: userId,
|
|
116
|
+
});
|
|
117
|
+
taggedPromises.push({
|
|
118
|
+
tag: 'memory',
|
|
119
|
+
promise: client.get(`/api/memories/search?${memoryParams.toString()}`, { userId }),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (searchWorkItems) {
|
|
123
|
+
const searchParams = new URLSearchParams({
|
|
124
|
+
q: sanitizedQuery,
|
|
125
|
+
types: 'work_item',
|
|
126
|
+
limit: String(Math.min(limit * 3, 50)), // Over-fetch for client-side filtering
|
|
127
|
+
semantic: 'true',
|
|
128
|
+
user_email: userId,
|
|
129
|
+
});
|
|
130
|
+
taggedPromises.push({
|
|
131
|
+
tag: 'work_item',
|
|
132
|
+
promise: client.get(`/api/search?${searchParams.toString()}`, { userId }),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
if (searchMessages) {
|
|
136
|
+
const messageParams = new URLSearchParams({
|
|
137
|
+
q: sanitizedQuery,
|
|
138
|
+
types: 'message',
|
|
139
|
+
limit: String(Math.min(limit * 2, 50)),
|
|
140
|
+
semantic: 'true',
|
|
141
|
+
user_email: userId,
|
|
142
|
+
});
|
|
143
|
+
taggedPromises.push({
|
|
144
|
+
tag: 'message',
|
|
145
|
+
promise: client.get(`/api/search?${messageParams.toString()}`, { userId }),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
const settled = await Promise.allSettled(taggedPromises.map((tp) => tp.promise));
|
|
149
|
+
// Process results
|
|
150
|
+
const warnings = [];
|
|
151
|
+
const memoryItems = [];
|
|
152
|
+
const workItemResults = [];
|
|
153
|
+
const messageItems = [];
|
|
154
|
+
for (let i = 0; i < settled.length; i++) {
|
|
155
|
+
const entry = settled[i];
|
|
156
|
+
const tag = taggedPromises[i].tag;
|
|
157
|
+
if (entry.status === 'rejected') {
|
|
158
|
+
const safeMsg = sanitizeErrorMessage(entry.reason);
|
|
159
|
+
warnings.push(`${tag} search failed: ${safeMsg}`);
|
|
160
|
+
logger.error(`context_search ${tag} search failed`, { userId, error: safeMsg });
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
const response = entry.value;
|
|
164
|
+
if (!response.success) {
|
|
165
|
+
const safeMsg = sanitizeErrorMessage(response.error?.message ?? 'Unknown error');
|
|
166
|
+
warnings.push(`${tag} search failed: ${safeMsg}`);
|
|
167
|
+
logger.error(`context_search ${tag} API error`, { userId, error: safeMsg });
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (tag === 'memory') {
|
|
171
|
+
const data = response.data;
|
|
172
|
+
const rawResults = data.results ?? [];
|
|
173
|
+
for (const m of rawResults) {
|
|
174
|
+
memoryItems.push({
|
|
175
|
+
id: m.id,
|
|
176
|
+
entity_type: 'memory',
|
|
177
|
+
title: m.content,
|
|
178
|
+
snippet: '',
|
|
179
|
+
score: m.similarity ?? 0,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else if (tag === 'message') {
|
|
184
|
+
const data = response.data;
|
|
185
|
+
const rawResults = data.results ?? [];
|
|
186
|
+
// Generate a per-invocation nonce for boundary markers (#1255)
|
|
187
|
+
const { nonce: msgNonce } = createBoundaryMarkers();
|
|
188
|
+
for (const msg of rawResults) {
|
|
189
|
+
// Sanitize external message content to prevent prompt injection.
|
|
190
|
+
// Both title and snippet are wrapped since messages are external/untrusted content
|
|
191
|
+
// mixed alongside trusted entity results from memories/todos/projects.
|
|
192
|
+
const safeTitle = wrapExternalMessage(sanitizeMetadataField(msg.title ?? '', msgNonce), { nonce: msgNonce });
|
|
193
|
+
const safeSnippet = msg.snippet ? wrapExternalMessage(sanitizeMetadataField(msg.snippet.substring(0, 100), msgNonce), { nonce: msgNonce }) : '';
|
|
194
|
+
const meta = {};
|
|
195
|
+
if (msg.metadata?.channel)
|
|
196
|
+
meta.channel = sanitizeMetadataField(msg.metadata.channel, msgNonce);
|
|
197
|
+
if (msg.metadata?.received_at)
|
|
198
|
+
meta.received_at = sanitizeMetadataField(msg.metadata.received_at, msgNonce);
|
|
199
|
+
messageItems.push({
|
|
200
|
+
id: msg.id,
|
|
201
|
+
entity_type: 'message',
|
|
202
|
+
title: safeTitle,
|
|
203
|
+
snippet: safeSnippet,
|
|
204
|
+
score: msg.score ?? 0,
|
|
205
|
+
metadata: Object.keys(meta).length > 0 ? meta : undefined,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
const data = response.data;
|
|
211
|
+
const rawResults = data.results ?? [];
|
|
212
|
+
for (const w of rawResults) {
|
|
213
|
+
const entityType = classifyWorkItem(w.metadata?.kind);
|
|
214
|
+
workItemResults.push({
|
|
215
|
+
id: w.id,
|
|
216
|
+
entity_type: entityType,
|
|
217
|
+
title: w.title,
|
|
218
|
+
snippet: w.snippet,
|
|
219
|
+
score: w.score ?? 0,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// If all searches failed, return error
|
|
225
|
+
if (memoryItems.length === 0 && workItemResults.length === 0 && messageItems.length === 0 && warnings.length === settled.length && settled.length > 0) {
|
|
226
|
+
return {
|
|
227
|
+
success: false,
|
|
228
|
+
error: `All searches failed: ${warnings.join('; ')}`,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
// Normalize scores within each category
|
|
232
|
+
normalizeScores(memoryItems);
|
|
233
|
+
normalizeScores(workItemResults);
|
|
234
|
+
normalizeScores(messageItems);
|
|
235
|
+
// Merge all results
|
|
236
|
+
let allResults = [...memoryItems, ...workItemResults, ...messageItems];
|
|
237
|
+
// Filter by entity_types if specified
|
|
238
|
+
if (entity_types) {
|
|
239
|
+
allResults = allResults.filter((r) => entity_types.includes(r.entity_type));
|
|
240
|
+
}
|
|
241
|
+
// Sort by normalized score descending
|
|
242
|
+
allResults.sort((a, b) => b.score - a.score);
|
|
243
|
+
// Apply limit
|
|
244
|
+
allResults = allResults.slice(0, limit);
|
|
245
|
+
// Format output
|
|
246
|
+
const content = formatResultsAsText(allResults);
|
|
247
|
+
logger.debug('context_search completed', {
|
|
248
|
+
userId,
|
|
249
|
+
resultCount: allResults.length,
|
|
250
|
+
warningCount: warnings.length,
|
|
251
|
+
});
|
|
252
|
+
return {
|
|
253
|
+
success: true,
|
|
254
|
+
data: {
|
|
255
|
+
content,
|
|
256
|
+
details: {
|
|
257
|
+
count: allResults.length,
|
|
258
|
+
results: allResults,
|
|
259
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
260
|
+
userId,
|
|
261
|
+
},
|
|
262
|
+
},
|
|
263
|
+
};
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=context-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-search.js","sourceRoot":"","sources":["../../src/tools/context-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-send.d.ts","sourceRoot":"","sources":["../../src/tools/email-send.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAQjD,qCAAqC;AACrC,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;EAOhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AASpE,6BAA6B;AAC7B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE;YACP,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;CACH;AAED,yBAAyB;AACzB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uBAAuB;AACvB,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAElE,yBAAyB;AACzB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sBAAsB;AACtB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,qBAAqB,CAAC;IACzC,OAAO,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAChE;
|
|
1
|
+
{"version":3,"file":"email-send.d.ts","sourceRoot":"","sources":["../../src/tools/email-send.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAQjD,qCAAqC;AACrC,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;EAOhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AASpE,6BAA6B;AAC7B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE;YACP,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;CACH;AAED,yBAAyB;AACzB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uBAAuB;AACvB,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAElE,yBAAyB;AACzB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sBAAsB;AACtB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,qBAAqB,CAAC;IACzC,OAAO,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAChE;AAcD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAwFhF"}
|
package/dist/tools/email-send.js
CHANGED
|
@@ -27,17 +27,11 @@ function sanitizeErrorMessage(error) {
|
|
|
27
27
|
}
|
|
28
28
|
return 'An unexpected error occurred while sending email.';
|
|
29
29
|
}
|
|
30
|
-
/**
|
|
31
|
-
* Check if Postmark is configured.
|
|
32
|
-
*/
|
|
33
|
-
function isPostmarkConfigured(config) {
|
|
34
|
-
return !!(config.postmarkToken && config.postmarkFromEmail);
|
|
35
|
-
}
|
|
36
30
|
/**
|
|
37
31
|
* Creates the email_send tool.
|
|
38
32
|
*/
|
|
39
33
|
export function createEmailSendTool(options) {
|
|
40
|
-
const { client, logger,
|
|
34
|
+
const { client, logger, userId } = options;
|
|
41
35
|
return {
|
|
42
36
|
name: 'email_send',
|
|
43
37
|
description: 'Send an email message. Use when you need to communicate via email. ' + 'Requires the recipient email address, subject, and body.',
|
|
@@ -50,13 +44,6 @@ export function createEmailSendTool(options) {
|
|
|
50
44
|
return { success: false, error: errorMessage };
|
|
51
45
|
}
|
|
52
46
|
const { to, subject, body, htmlBody, threadId, idempotencyKey } = parseResult.data;
|
|
53
|
-
// Check Postmark configuration
|
|
54
|
-
if (!isPostmarkConfigured(config)) {
|
|
55
|
-
return {
|
|
56
|
-
success: false,
|
|
57
|
-
error: 'Postmark is not configured. Please configure Postmark credentials.',
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
47
|
// Log invocation (without email address for privacy)
|
|
61
48
|
logger.info('email_send invoked', {
|
|
62
49
|
userId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-send.js","sourceRoot":"","sources":["../../src/tools/email-send.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,sEAAsE;AACtE,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAEjD,mFAAmF;AACnF,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,qCAAqC;AACrC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,8BAA8B,CAAC;IACjE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,mBAAmB,kBAAkB,qBAAqB,CAAC;IACzI,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAiDH;;GAEG;AACH,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,6CAA6C;QAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC;QAChF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,mDAAmD,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"email-send.js","sourceRoot":"","sources":["../../src/tools/email-send.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity linking tools for OpenClaw plugin (Issue #1220).
|
|
3
|
+
*
|
|
4
|
+
* Provides bidirectional linking between entities (memories, todos, projects,
|
|
5
|
+
* contacts) and external references (GitHub issues, URLs). Links are stored
|
|
6
|
+
* as skill_store items in the `entity_links` collection.
|
|
7
|
+
*
|
|
8
|
+
* Tools:
|
|
9
|
+
* - links_set: Create a bidirectional link between two entities
|
|
10
|
+
* - links_query: Query all links for a given entity
|
|
11
|
+
* - links_remove: Remove a bidirectional link
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import type { ApiClient } from '../api-client.js';
|
|
15
|
+
import type { Logger } from '../logger.js';
|
|
16
|
+
import type { PluginConfig } from '../config.js';
|
|
17
|
+
/** Parameters for links_set tool */
|
|
18
|
+
export declare const LinksSetParamsSchema: z.ZodObject<{
|
|
19
|
+
source_type: z.ZodEnum<["memory", "todo", "project", "contact"]>;
|
|
20
|
+
source_id: z.ZodString;
|
|
21
|
+
target_type: z.ZodEnum<["memory", "todo", "project", "contact", "github_issue", "url"]>;
|
|
22
|
+
target_ref: z.ZodString;
|
|
23
|
+
label: z.ZodOptional<z.ZodString>;
|
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
source_type: "project" | "memory" | "todo" | "contact";
|
|
26
|
+
source_id: string;
|
|
27
|
+
target_type: "project" | "memory" | "todo" | "url" | "contact" | "github_issue";
|
|
28
|
+
target_ref: string;
|
|
29
|
+
label?: string | undefined;
|
|
30
|
+
}, {
|
|
31
|
+
source_type: "project" | "memory" | "todo" | "contact";
|
|
32
|
+
source_id: string;
|
|
33
|
+
target_type: "project" | "memory" | "todo" | "url" | "contact" | "github_issue";
|
|
34
|
+
target_ref: string;
|
|
35
|
+
label?: string | undefined;
|
|
36
|
+
}>;
|
|
37
|
+
export type LinksSetParams = z.infer<typeof LinksSetParamsSchema>;
|
|
38
|
+
/** Parameters for links_query tool */
|
|
39
|
+
export declare const LinksQueryParamsSchema: z.ZodObject<{
|
|
40
|
+
entity_type: z.ZodEnum<["memory", "todo", "project", "contact"]>;
|
|
41
|
+
entity_id: z.ZodString;
|
|
42
|
+
link_types: z.ZodOptional<z.ZodArray<z.ZodEnum<["memory", "todo", "project", "contact", "github_issue", "url"]>, "many">>;
|
|
43
|
+
}, "strip", z.ZodTypeAny, {
|
|
44
|
+
entity_type: "project" | "memory" | "todo" | "contact";
|
|
45
|
+
entity_id: string;
|
|
46
|
+
link_types?: ("project" | "memory" | "todo" | "url" | "contact" | "github_issue")[] | undefined;
|
|
47
|
+
}, {
|
|
48
|
+
entity_type: "project" | "memory" | "todo" | "contact";
|
|
49
|
+
entity_id: string;
|
|
50
|
+
link_types?: ("project" | "memory" | "todo" | "url" | "contact" | "github_issue")[] | undefined;
|
|
51
|
+
}>;
|
|
52
|
+
export type LinksQueryParams = z.infer<typeof LinksQueryParamsSchema>;
|
|
53
|
+
/** Parameters for links_remove tool */
|
|
54
|
+
export declare const LinksRemoveParamsSchema: z.ZodObject<{
|
|
55
|
+
source_type: z.ZodEnum<["memory", "todo", "project", "contact"]>;
|
|
56
|
+
source_id: z.ZodString;
|
|
57
|
+
target_type: z.ZodEnum<["memory", "todo", "project", "contact", "github_issue", "url"]>;
|
|
58
|
+
target_ref: z.ZodString;
|
|
59
|
+
}, "strip", z.ZodTypeAny, {
|
|
60
|
+
source_type: "project" | "memory" | "todo" | "contact";
|
|
61
|
+
source_id: string;
|
|
62
|
+
target_type: "project" | "memory" | "todo" | "url" | "contact" | "github_issue";
|
|
63
|
+
target_ref: string;
|
|
64
|
+
}, {
|
|
65
|
+
source_type: "project" | "memory" | "todo" | "contact";
|
|
66
|
+
source_id: string;
|
|
67
|
+
target_type: "project" | "memory" | "todo" | "url" | "contact" | "github_issue";
|
|
68
|
+
target_ref: string;
|
|
69
|
+
}>;
|
|
70
|
+
export type LinksRemoveParams = z.infer<typeof LinksRemoveParamsSchema>;
|
|
71
|
+
/** Successful tool result */
|
|
72
|
+
export interface EntityLinkToolSuccess {
|
|
73
|
+
success: true;
|
|
74
|
+
data: {
|
|
75
|
+
content: string;
|
|
76
|
+
details: Record<string, unknown>;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** Failed tool result */
|
|
80
|
+
export interface EntityLinkToolFailure {
|
|
81
|
+
success: false;
|
|
82
|
+
error: string;
|
|
83
|
+
}
|
|
84
|
+
export type EntityLinkToolResult = EntityLinkToolSuccess | EntityLinkToolFailure;
|
|
85
|
+
/** Tool configuration */
|
|
86
|
+
export interface EntityLinkToolOptions {
|
|
87
|
+
client: ApiClient;
|
|
88
|
+
logger: Logger;
|
|
89
|
+
config?: PluginConfig;
|
|
90
|
+
userId: string;
|
|
91
|
+
}
|
|
92
|
+
/** Tool definition interface */
|
|
93
|
+
export interface EntityLinkTool {
|
|
94
|
+
name: string;
|
|
95
|
+
description: string;
|
|
96
|
+
parameters: z.ZodType;
|
|
97
|
+
execute: (params: Record<string, unknown>) => Promise<EntityLinkToolResult>;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create the links_set tool.
|
|
101
|
+
* Creates a bidirectional link between two entities by storing two skill_store
|
|
102
|
+
* items: one for the forward direction (A->B) and one for the reverse (B->A).
|
|
103
|
+
*/
|
|
104
|
+
export declare function createLinksSetTool(options: EntityLinkToolOptions): EntityLinkTool;
|
|
105
|
+
/**
|
|
106
|
+
* Create the links_query tool.
|
|
107
|
+
* Queries all links for a given entity by listing skill_store items
|
|
108
|
+
* in the `entity_links` collection filtered by a source tag.
|
|
109
|
+
*/
|
|
110
|
+
export declare function createLinksQueryTool(options: EntityLinkToolOptions): EntityLinkTool;
|
|
111
|
+
/**
|
|
112
|
+
* Create the links_remove tool.
|
|
113
|
+
* Removes a bidirectional link by deleting both the forward (A->B) and
|
|
114
|
+
* reverse (B->A) skill_store items.
|
|
115
|
+
*/
|
|
116
|
+
export declare function createLinksRemoveTool(options: EntityLinkToolOptions): EntityLinkTool;
|
|
117
|
+
//# sourceMappingURL=entity-links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-links.d.ts","sourceRoot":"","sources":["../../src/tools/entity-links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA2CjD,oCAAoC;AACpC,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,sCAAsC;AACtC,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAIjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,uCAAuC;AACvC,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAIxE,6BAA6B;AAC7B,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC;CACH;AAED,yBAAyB;AACzB,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;AAIjF,yBAAyB;AACzB,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC;IACtB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC7E;AAkBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAiKjF;AAYD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAmHnF;AAID;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAgKpF"}
|