@troykelly/openclaw-projects 0.0.1

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 (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +389 -0
  3. package/dist/api-client.d.ts +81 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +216 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/cli.d.ts +112 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +233 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/config.d.ts +324 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +287 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/context.d.ts +87 -0
  16. package/dist/context.d.ts.map +1 -0
  17. package/dist/context.js +144 -0
  18. package/dist/context.js.map +1 -0
  19. package/dist/gateway/rpc-methods.d.ts +93 -0
  20. package/dist/gateway/rpc-methods.d.ts.map +1 -0
  21. package/dist/gateway/rpc-methods.js +145 -0
  22. package/dist/gateway/rpc-methods.js.map +1 -0
  23. package/dist/hooks.d.ts +86 -0
  24. package/dist/hooks.d.ts.map +1 -0
  25. package/dist/hooks.js +314 -0
  26. package/dist/hooks.js.map +1 -0
  27. package/dist/index.d.ts +106 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +221 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/logger.d.ts +22 -0
  32. package/dist/logger.d.ts.map +1 -0
  33. package/dist/logger.js +78 -0
  34. package/dist/logger.js.map +1 -0
  35. package/dist/register-openclaw.d.ts +43 -0
  36. package/dist/register-openclaw.d.ts.map +1 -0
  37. package/dist/register-openclaw.js +1838 -0
  38. package/dist/register-openclaw.js.map +1 -0
  39. package/dist/secrets.d.ts +56 -0
  40. package/dist/secrets.d.ts.map +1 -0
  41. package/dist/secrets.js +161 -0
  42. package/dist/secrets.js.map +1 -0
  43. package/dist/services/notification-service.d.ts +60 -0
  44. package/dist/services/notification-service.d.ts.map +1 -0
  45. package/dist/services/notification-service.js +145 -0
  46. package/dist/services/notification-service.js.map +1 -0
  47. package/dist/tools/contacts.d.ts +139 -0
  48. package/dist/tools/contacts.d.ts.map +1 -0
  49. package/dist/tools/contacts.js +333 -0
  50. package/dist/tools/contacts.js.map +1 -0
  51. package/dist/tools/email-send.d.ts +71 -0
  52. package/dist/tools/email-send.d.ts.map +1 -0
  53. package/dist/tools/email-send.js +132 -0
  54. package/dist/tools/email-send.js.map +1 -0
  55. package/dist/tools/file-share.d.ts +64 -0
  56. package/dist/tools/file-share.d.ts.map +1 -0
  57. package/dist/tools/file-share.js +133 -0
  58. package/dist/tools/file-share.js.map +1 -0
  59. package/dist/tools/index.d.ts +22 -0
  60. package/dist/tools/index.d.ts.map +1 -0
  61. package/dist/tools/index.js +33 -0
  62. package/dist/tools/index.js.map +1 -0
  63. package/dist/tools/memory-forget.d.ts +69 -0
  64. package/dist/tools/memory-forget.d.ts.map +1 -0
  65. package/dist/tools/memory-forget.js +224 -0
  66. package/dist/tools/memory-forget.js.map +1 -0
  67. package/dist/tools/memory-recall.d.ts +82 -0
  68. package/dist/tools/memory-recall.d.ts.map +1 -0
  69. package/dist/tools/memory-recall.js +161 -0
  70. package/dist/tools/memory-recall.js.map +1 -0
  71. package/dist/tools/memory-store.d.ts +80 -0
  72. package/dist/tools/memory-store.d.ts.map +1 -0
  73. package/dist/tools/memory-store.js +172 -0
  74. package/dist/tools/memory-store.js.map +1 -0
  75. package/dist/tools/message-search.d.ts +85 -0
  76. package/dist/tools/message-search.d.ts.map +1 -0
  77. package/dist/tools/message-search.js +137 -0
  78. package/dist/tools/message-search.js.map +1 -0
  79. package/dist/tools/notebooks.d.ts +155 -0
  80. package/dist/tools/notebooks.d.ts.map +1 -0
  81. package/dist/tools/notebooks.js +287 -0
  82. package/dist/tools/notebooks.js.map +1 -0
  83. package/dist/tools/notes.d.ts +272 -0
  84. package/dist/tools/notes.d.ts.map +1 -0
  85. package/dist/tools/notes.js +530 -0
  86. package/dist/tools/notes.js.map +1 -0
  87. package/dist/tools/projects.d.ts +139 -0
  88. package/dist/tools/projects.d.ts.map +1 -0
  89. package/dist/tools/projects.js +280 -0
  90. package/dist/tools/projects.js.map +1 -0
  91. package/dist/tools/relationships.d.ts +133 -0
  92. package/dist/tools/relationships.d.ts.map +1 -0
  93. package/dist/tools/relationships.js +281 -0
  94. package/dist/tools/relationships.js.map +1 -0
  95. package/dist/tools/sms-send.d.ts +62 -0
  96. package/dist/tools/sms-send.d.ts.map +1 -0
  97. package/dist/tools/sms-send.js +121 -0
  98. package/dist/tools/sms-send.js.map +1 -0
  99. package/dist/tools/threads.d.ts +127 -0
  100. package/dist/tools/threads.d.ts.map +1 -0
  101. package/dist/tools/threads.js +202 -0
  102. package/dist/tools/threads.js.map +1 -0
  103. package/dist/tools/todos.d.ts +142 -0
  104. package/dist/tools/todos.d.ts.map +1 -0
  105. package/dist/tools/todos.js +308 -0
  106. package/dist/tools/todos.js.map +1 -0
  107. package/dist/types/openclaw-api.d.ts +215 -0
  108. package/dist/types/openclaw-api.d.ts.map +1 -0
  109. package/dist/types/openclaw-api.js +10 -0
  110. package/dist/types/openclaw-api.js.map +1 -0
  111. package/dist/utils/zod-to-json-schema.d.ts +19 -0
  112. package/dist/utils/zod-to-json-schema.d.ts.map +1 -0
  113. package/dist/utils/zod-to-json-schema.js +132 -0
  114. package/dist/utils/zod-to-json-schema.js.map +1 -0
  115. package/openclaw.plugin.json +229 -0
  116. package/package.json +69 -0
  117. package/skills/contact-lookup/SKILL.md +30 -0
  118. package/skills/daily-summary/SKILL.md +23 -0
  119. package/skills/project-status/SKILL.md +33 -0
  120. package/skills/send-reminder/SKILL.md +42 -0
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Notebook tools for OpenClaw agents.
3
+ * Part of Epic #339, Issue #363
4
+ *
5
+ * Provides tools for:
6
+ * - notebook_list: List user's notebooks
7
+ * - notebook_create: Create a new notebook
8
+ * - notebook_get: Get a notebook by ID
9
+ */
10
+ import { z } from 'zod';
11
+ /**
12
+ * Sanitize text input to remove control characters.
13
+ */
14
+ function sanitizeText(text) {
15
+ const sanitized = text.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, '');
16
+ return sanitized.trim();
17
+ }
18
+ /**
19
+ * Create a sanitized error message that doesn't expose internal details.
20
+ */
21
+ function sanitizeErrorMessage(error) {
22
+ if (error instanceof Error) {
23
+ const message = error.message
24
+ .replace(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g, '[host]')
25
+ .replace(/:\d{2,5}\b/g, '')
26
+ .replace(/\b(?:localhost|internal[-\w]*)\b/gi, '[internal]');
27
+ if (message.includes('[internal]') || message.includes('[host]')) {
28
+ return 'Failed to complete operation. Please try again.';
29
+ }
30
+ return message;
31
+ }
32
+ return 'An unexpected error occurred.';
33
+ }
34
+ // ─────────────────────────────────────────────────────────────────────────────
35
+ // notebook_list Tool
36
+ // ─────────────────────────────────────────────────────────────────────────────
37
+ export const NotebookListParamsSchema = z.object({
38
+ includeArchived: z.boolean().optional().default(false),
39
+ limit: z.number().min(1).max(100).optional().default(50),
40
+ offset: z.number().min(0).optional().default(0),
41
+ });
42
+ export function createNotebookListTool(options) {
43
+ const { client, logger, config, userId } = options;
44
+ return {
45
+ name: 'notebook_list',
46
+ description: 'List available notebooks for the user. Notebooks are used to organize notes ' +
47
+ 'into collections. Returns notebook IDs that can be used with note_create.',
48
+ parameters: NotebookListParamsSchema,
49
+ async execute(params) {
50
+ const parseResult = NotebookListParamsSchema.safeParse(params);
51
+ if (!parseResult.success) {
52
+ const errorMessage = parseResult.error.errors
53
+ .map((e) => `${e.path.join('.')}: ${e.message}`)
54
+ .join(', ');
55
+ return { success: false, error: errorMessage };
56
+ }
57
+ const { includeArchived, limit, offset } = parseResult.data;
58
+ logger.info('notebook_list invoked', {
59
+ userId,
60
+ includeArchived,
61
+ limit,
62
+ });
63
+ try {
64
+ const queryParams = new URLSearchParams({
65
+ user_email: userId,
66
+ limit: String(limit),
67
+ offset: String(offset),
68
+ });
69
+ if (includeArchived) {
70
+ queryParams.set('includeArchived', 'true');
71
+ }
72
+ const response = await client.get(`/api/notebooks?${queryParams}`, { userId });
73
+ if (!response.success) {
74
+ logger.error('notebook_list API error', {
75
+ userId,
76
+ status: response.error.status,
77
+ });
78
+ return {
79
+ success: false,
80
+ error: response.error.message || 'Failed to list notebooks',
81
+ };
82
+ }
83
+ const result = response.data;
84
+ logger.debug('notebook_list completed', {
85
+ userId,
86
+ count: result.notebooks.length,
87
+ });
88
+ return {
89
+ success: true,
90
+ data: {
91
+ notebooks: result.notebooks.map((nb) => ({
92
+ id: nb.id,
93
+ name: nb.name,
94
+ description: nb.description,
95
+ isArchived: nb.isArchived,
96
+ noteCount: nb.noteCount ?? 0,
97
+ url: `${config.baseUrl}/notebooks/${nb.id}`,
98
+ })),
99
+ total: result.total,
100
+ limit: result.limit,
101
+ offset: result.offset,
102
+ },
103
+ };
104
+ }
105
+ catch (error) {
106
+ logger.error('notebook_list failed', {
107
+ userId,
108
+ error: error instanceof Error ? error.message : String(error),
109
+ });
110
+ return {
111
+ success: false,
112
+ error: sanitizeErrorMessage(error),
113
+ };
114
+ }
115
+ },
116
+ };
117
+ }
118
+ // ─────────────────────────────────────────────────────────────────────────────
119
+ // notebook_create Tool
120
+ // ─────────────────────────────────────────────────────────────────────────────
121
+ export const NotebookCreateParamsSchema = z.object({
122
+ name: z
123
+ .string()
124
+ .min(1, 'Name cannot be empty')
125
+ .max(200, 'Name must be 200 characters or less'),
126
+ description: z.string().max(1000).optional(),
127
+ });
128
+ export function createNotebookCreateTool(options) {
129
+ const { client, logger, config, userId } = options;
130
+ return {
131
+ name: 'notebook_create',
132
+ description: 'Create a new notebook to organize notes. Use notebooks to group related notes ' +
133
+ 'together (e.g., "Meeting Notes", "Project Documentation", "Research").',
134
+ parameters: NotebookCreateParamsSchema,
135
+ async execute(params) {
136
+ const parseResult = NotebookCreateParamsSchema.safeParse(params);
137
+ if (!parseResult.success) {
138
+ const errorMessage = parseResult.error.errors
139
+ .map((e) => `${e.path.join('.')}: ${e.message}`)
140
+ .join(', ');
141
+ return { success: false, error: errorMessage };
142
+ }
143
+ const { name, description } = parseResult.data;
144
+ const sanitizedName = sanitizeText(name);
145
+ if (sanitizedName.length === 0) {
146
+ return { success: false, error: 'Name cannot be empty after sanitization' };
147
+ }
148
+ logger.info('notebook_create invoked', {
149
+ userId,
150
+ nameLength: sanitizedName.length,
151
+ });
152
+ try {
153
+ const response = await client.post('/api/notebooks', {
154
+ user_email: userId,
155
+ name: sanitizedName,
156
+ description: description ? sanitizeText(description) : undefined,
157
+ }, { userId });
158
+ if (!response.success) {
159
+ logger.error('notebook_create API error', {
160
+ userId,
161
+ status: response.error.status,
162
+ });
163
+ return {
164
+ success: false,
165
+ error: response.error.message || 'Failed to create notebook',
166
+ };
167
+ }
168
+ const notebook = response.data;
169
+ logger.debug('notebook_create completed', {
170
+ userId,
171
+ notebookId: notebook.id,
172
+ });
173
+ return {
174
+ success: true,
175
+ data: {
176
+ id: notebook.id,
177
+ name: notebook.name,
178
+ description: notebook.description,
179
+ createdAt: notebook.createdAt,
180
+ url: `${config.baseUrl}/notebooks/${notebook.id}`,
181
+ },
182
+ };
183
+ }
184
+ catch (error) {
185
+ logger.error('notebook_create failed', {
186
+ userId,
187
+ error: error instanceof Error ? error.message : String(error),
188
+ });
189
+ return {
190
+ success: false,
191
+ error: sanitizeErrorMessage(error),
192
+ };
193
+ }
194
+ },
195
+ };
196
+ }
197
+ // ─────────────────────────────────────────────────────────────────────────────
198
+ // notebook_get Tool
199
+ // ─────────────────────────────────────────────────────────────────────────────
200
+ export const NotebookGetParamsSchema = z.object({
201
+ notebookId: z.string().uuid('Notebook ID must be a valid UUID'),
202
+ includeNotes: z.boolean().optional().default(false),
203
+ });
204
+ export function createNotebookGetTool(options) {
205
+ const { client, logger, config, userId } = options;
206
+ return {
207
+ name: 'notebook_get',
208
+ description: 'Get a notebook by its ID. Optionally include a list of notes in the notebook. ' +
209
+ 'Only accessible if you own the notebook or have shared access.',
210
+ parameters: NotebookGetParamsSchema,
211
+ async execute(params) {
212
+ const parseResult = NotebookGetParamsSchema.safeParse(params);
213
+ if (!parseResult.success) {
214
+ const errorMessage = parseResult.error.errors
215
+ .map((e) => `${e.path.join('.')}: ${e.message}`)
216
+ .join(', ');
217
+ return { success: false, error: errorMessage };
218
+ }
219
+ const { notebookId, includeNotes } = parseResult.data;
220
+ logger.info('notebook_get invoked', {
221
+ userId,
222
+ notebookId,
223
+ includeNotes,
224
+ });
225
+ try {
226
+ const queryParams = new URLSearchParams({ user_email: userId });
227
+ if (includeNotes) {
228
+ queryParams.set('expand', 'notes');
229
+ }
230
+ const response = await client.get(`/api/notebooks/${notebookId}?${queryParams}`, { userId });
231
+ if (!response.success) {
232
+ if (response.error.status === 404) {
233
+ return { success: false, error: 'Notebook not found or access denied' };
234
+ }
235
+ logger.error('notebook_get API error', {
236
+ userId,
237
+ notebookId,
238
+ status: response.error.status,
239
+ });
240
+ return {
241
+ success: false,
242
+ error: response.error.message || 'Failed to get notebook',
243
+ };
244
+ }
245
+ const notebook = response.data;
246
+ logger.debug('notebook_get completed', {
247
+ userId,
248
+ notebookId,
249
+ });
250
+ const result = {
251
+ success: true,
252
+ data: {
253
+ id: notebook.id,
254
+ name: notebook.name,
255
+ description: notebook.description,
256
+ isArchived: notebook.isArchived,
257
+ noteCount: notebook.noteCount ?? 0,
258
+ createdAt: notebook.createdAt,
259
+ updatedAt: notebook.updatedAt,
260
+ url: `${config.baseUrl}/notebooks/${notebook.id}`,
261
+ },
262
+ };
263
+ if (includeNotes && notebook.notes) {
264
+ result.data.notes = notebook.notes.map((n) => ({
265
+ id: n.id,
266
+ title: n.title,
267
+ visibility: n.visibility,
268
+ url: `${config.baseUrl}/notes/${n.id}`,
269
+ }));
270
+ }
271
+ return result;
272
+ }
273
+ catch (error) {
274
+ logger.error('notebook_get failed', {
275
+ userId,
276
+ notebookId,
277
+ error: error instanceof Error ? error.message : String(error),
278
+ });
279
+ return {
280
+ success: false,
281
+ error: sanitizeErrorMessage(error),
282
+ };
283
+ }
284
+ },
285
+ };
286
+ }
287
+ //# sourceMappingURL=notebooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebooks.js","sourceRoot":"","sources":["../../src/tools/notebooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA6BvB;;GAEG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAA;IACvE,OAAO,SAAS,CAAC,IAAI,EAAE,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;aAC1B,OAAO,CAAC,yCAAyC,EAAE,QAAQ,CAAC;aAC5D,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;aAC1B,OAAO,CAAC,oCAAoC,EAAE,YAAY,CAAC,CAAA;QAE9D,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,OAAO,iDAAiD,CAAA;QAC1D,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,OAAO,+BAA+B,CAAA;AACxC,CAAC;AAED,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAChD,CAAC,CAAA;AAkCF,MAAM,UAAU,sBAAsB,CAAC,OAA4B;IACjE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAElD,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,8EAA8E;YAC9E,2EAA2E;QAC7E,UAAU,EAAE,wBAAwB;QAEpC,KAAK,CAAC,OAAO,CAAC,MAA0B;YACtC,MAAM,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YAC9D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM;qBAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;qBAC/C,IAAI,CAAC,IAAI,CAAC,CAAA;gBACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;YAChD,CAAC;YAED,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAA;YAE3D,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBACnC,MAAM;gBACN,eAAe;gBACf,KAAK;aACN,CAAC,CAAA;YAEF,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;oBACtC,UAAU,EAAE,MAAM;oBAClB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;oBACpB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;iBACvB,CAAC,CAAA;gBAEF,IAAI,eAAe,EAAE,CAAC;oBACpB,WAAW,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;gBAC5C,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAK9B,kBAAkB,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;gBAE/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACtB,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;wBACtC,MAAM;wBACN,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;qBAC9B,CAAC,CAAA;oBACF,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,0BAA0B;qBAC5D,CAAA;gBACH,CAAC;gBAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAA;gBAE5B,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;oBACtC,MAAM;oBACN,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;iBAC/B,CAAC,CAAA;gBAEF,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE;wBACJ,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;4BACvC,EAAE,EAAE,EAAE,CAAC,EAAE;4BACT,IAAI,EAAE,EAAE,CAAC,IAAI;4BACb,WAAW,EAAE,EAAE,CAAC,WAAW;4BAC3B,UAAU,EAAE,EAAE,CAAC,UAAU;4BACzB,SAAS,EAAE,EAAE,CAAC,SAAS,IAAI,CAAC;4BAC5B,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,cAAc,EAAE,CAAC,EAAE,EAAE;yBAC5C,CAAC,CAAC;wBACH,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;qBACtB;iBACF,CAAA;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;oBACnC,MAAM;oBACN,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAA;gBACF,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC;iBACnC,CAAA;YACH,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;SAC9B,GAAG,CAAC,GAAG,EAAE,qCAAqC,CAAC;IAClD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAA;AA4BF,MAAM,UAAU,wBAAwB,CAAC,OAA4B;IACnE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAElD,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,gFAAgF;YAChF,wEAAwE;QAC1E,UAAU,EAAE,0BAA0B;QAEtC,KAAK,CAAC,OAAO,CAAC,MAA4B;YACxC,MAAM,WAAW,GAAG,0BAA0B,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YAChE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM;qBAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;qBAC/C,IAAI,CAAC,IAAI,CAAC,CAAA;gBACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;YAChD,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC,IAAI,CAAA;YAE9C,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YACxC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAA;YAC7E,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBACrC,MAAM;gBACN,UAAU,EAAE,aAAa,CAAC,MAAM;aACjC,CAAC,CAAA;YAEF,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,gBAAgB,EAChB;oBACE,UAAU,EAAE,MAAM;oBAClB,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;iBACjE,EACD,EAAE,MAAM,EAAE,CACX,CAAA;gBAED,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACtB,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;wBACxC,MAAM;wBACN,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;qBAC9B,CAAC,CAAA;oBACF,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,2BAA2B;qBAC7D,CAAA;gBACH,CAAC;gBAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAA;gBAE9B,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;oBACxC,MAAM;oBACN,UAAU,EAAE,QAAQ,CAAC,EAAE;iBACxB,CAAC,CAAA;gBAEF,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE;wBACJ,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;wBACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,cAAc,QAAQ,CAAC,EAAE,EAAE;qBAClD;iBACF,CAAA;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;oBACrC,MAAM;oBACN,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAA;gBACF,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC;iBACnC,CAAA;YACH,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,kCAAkC,CAAC;IAC/D,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACpD,CAAC,CAAA;AA4CF,MAAM,UAAU,qBAAqB,CAAC,OAA4B;IAChE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAElD,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,gFAAgF;YAChF,gEAAgE;QAClE,UAAU,EAAE,uBAAuB;QAEnC,KAAK,CAAC,OAAO,CAAC,MAAyB;YACrC,MAAM,WAAW,GAAG,uBAAuB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YAC7D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM;qBAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;qBAC/C,IAAI,CAAC,IAAI,CAAC,CAAA;gBACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;YAChD,CAAC;YAED,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,IAAI,CAAA;YAErD,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAClC,MAAM;gBACN,UAAU;gBACV,YAAY;aACb,CAAC,CAAA;YAEF,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC/D,IAAI,YAAY,EAAE,CAAC;oBACjB,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBACpC,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAE/B,kBAAkB,UAAU,IAAI,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;gBAE5D,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACtB,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;wBAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAA;oBACzE,CAAC;oBACD,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;wBACrC,MAAM;wBACN,UAAU;wBACV,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;qBAC9B,CAAC,CAAA;oBACF,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,wBAAwB;qBAC1D,CAAA;gBACH,CAAC;gBAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAA;gBAE9B,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;oBACrC,MAAM;oBACN,UAAU;iBACX,CAAC,CAAA;gBAEF,MAAM,MAAM,GAAuB;oBACjC,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE;wBACJ,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;wBACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,CAAC;wBAClC,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,cAAc,QAAQ,CAAC,EAAE,EAAE;qBAClD;iBACF,CAAA;gBAED,IAAI,YAAY,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC7C,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,EAAE,EAAE;qBACvC,CAAC,CAAC,CAAA;gBACL,CAAC;gBAED,OAAO,MAAM,CAAA;YACf,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;oBAClC,MAAM;oBACN,UAAU;oBACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAA;gBACF,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC;iBACnC,CAAA;YACH,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Note tools for OpenClaw agents.
3
+ * Part of Epic #339, Issues #359, #360, #361, #362
4
+ *
5
+ * Provides tools for:
6
+ * - note_create: Create a new note
7
+ * - note_get: Get a note by ID
8
+ * - note_update: Update a note
9
+ * - note_delete: Delete a note
10
+ * - note_search: Search notes
11
+ */
12
+ import { z } from 'zod';
13
+ import type { ApiClient } from '../api-client.js';
14
+ import type { Logger } from '../logger.js';
15
+ import type { PluginConfig } from '../config.js';
16
+ /** Note visibility levels */
17
+ export declare const NoteVisibility: z.ZodEnum<["private", "shared", "public"]>;
18
+ export type NoteVisibility = z.infer<typeof NoteVisibility>;
19
+ /** Note from API */
20
+ export interface Note {
21
+ id: string;
22
+ title: string;
23
+ content: string;
24
+ notebookId: string | null;
25
+ userEmail: string;
26
+ tags: string[];
27
+ visibility: NoteVisibility;
28
+ hideFromAgents: boolean;
29
+ summary: string | null;
30
+ isPinned: boolean;
31
+ createdAt: string;
32
+ updatedAt: string;
33
+ }
34
+ /** Tool options shared by all note tools */
35
+ export interface NoteToolOptions {
36
+ client: ApiClient;
37
+ logger: Logger;
38
+ config: PluginConfig;
39
+ userId: string;
40
+ }
41
+ export declare const NoteCreateParamsSchema: z.ZodObject<{
42
+ title: z.ZodString;
43
+ content: z.ZodString;
44
+ notebookId: z.ZodOptional<z.ZodString>;
45
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
46
+ visibility: z.ZodDefault<z.ZodOptional<z.ZodEnum<["private", "shared", "public"]>>>;
47
+ summary: z.ZodOptional<z.ZodString>;
48
+ }, "strip", z.ZodTypeAny, {
49
+ content: string;
50
+ title: string;
51
+ visibility: "private" | "shared" | "public";
52
+ tags?: string[] | undefined;
53
+ notebookId?: string | undefined;
54
+ summary?: string | undefined;
55
+ }, {
56
+ content: string;
57
+ title: string;
58
+ tags?: string[] | undefined;
59
+ notebookId?: string | undefined;
60
+ visibility?: "private" | "shared" | "public" | undefined;
61
+ summary?: string | undefined;
62
+ }>;
63
+ export type NoteCreateParams = z.infer<typeof NoteCreateParamsSchema>;
64
+ export interface NoteCreateSuccess {
65
+ success: true;
66
+ data: {
67
+ id: string;
68
+ title: string;
69
+ notebookId: string | null;
70
+ visibility: string;
71
+ createdAt: string;
72
+ url: string;
73
+ };
74
+ }
75
+ export interface NoteCreateFailure {
76
+ success: false;
77
+ error: string;
78
+ }
79
+ export type NoteCreateResult = NoteCreateSuccess | NoteCreateFailure;
80
+ export interface NoteCreateTool {
81
+ name: string;
82
+ description: string;
83
+ parameters: typeof NoteCreateParamsSchema;
84
+ execute: (params: NoteCreateParams) => Promise<NoteCreateResult>;
85
+ }
86
+ export declare function createNoteCreateTool(options: NoteToolOptions): NoteCreateTool;
87
+ export declare const NoteGetParamsSchema: z.ZodObject<{
88
+ noteId: z.ZodString;
89
+ includeVersions: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
90
+ }, "strip", z.ZodTypeAny, {
91
+ noteId: string;
92
+ includeVersions: boolean;
93
+ }, {
94
+ noteId: string;
95
+ includeVersions?: boolean | undefined;
96
+ }>;
97
+ export type NoteGetParams = z.infer<typeof NoteGetParamsSchema>;
98
+ export interface NoteGetSuccess {
99
+ success: true;
100
+ data: {
101
+ id: string;
102
+ title: string;
103
+ content: string;
104
+ notebookId: string | null;
105
+ tags: string[];
106
+ visibility: string;
107
+ summary: string | null;
108
+ isPinned: boolean;
109
+ createdAt: string;
110
+ updatedAt: string;
111
+ url: string;
112
+ versionCount?: number;
113
+ };
114
+ }
115
+ export interface NoteGetFailure {
116
+ success: false;
117
+ error: string;
118
+ }
119
+ export type NoteGetResult = NoteGetSuccess | NoteGetFailure;
120
+ export interface NoteGetTool {
121
+ name: string;
122
+ description: string;
123
+ parameters: typeof NoteGetParamsSchema;
124
+ execute: (params: NoteGetParams) => Promise<NoteGetResult>;
125
+ }
126
+ export declare function createNoteGetTool(options: NoteToolOptions): NoteGetTool;
127
+ export declare const NoteUpdateParamsSchema: z.ZodObject<{
128
+ noteId: z.ZodString;
129
+ title: z.ZodOptional<z.ZodString>;
130
+ content: z.ZodOptional<z.ZodString>;
131
+ notebookId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
132
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
133
+ visibility: z.ZodOptional<z.ZodEnum<["private", "shared", "public"]>>;
134
+ summary: z.ZodOptional<z.ZodNullable<z.ZodString>>;
135
+ isPinned: z.ZodOptional<z.ZodBoolean>;
136
+ }, "strip", z.ZodTypeAny, {
137
+ noteId: string;
138
+ tags?: string[] | undefined;
139
+ content?: string | undefined;
140
+ title?: string | undefined;
141
+ notebookId?: string | null | undefined;
142
+ visibility?: "private" | "shared" | "public" | undefined;
143
+ summary?: string | null | undefined;
144
+ isPinned?: boolean | undefined;
145
+ }, {
146
+ noteId: string;
147
+ tags?: string[] | undefined;
148
+ content?: string | undefined;
149
+ title?: string | undefined;
150
+ notebookId?: string | null | undefined;
151
+ visibility?: "private" | "shared" | "public" | undefined;
152
+ summary?: string | null | undefined;
153
+ isPinned?: boolean | undefined;
154
+ }>;
155
+ export type NoteUpdateParams = z.infer<typeof NoteUpdateParamsSchema>;
156
+ export interface NoteUpdateSuccess {
157
+ success: true;
158
+ data: {
159
+ id: string;
160
+ title: string;
161
+ visibility: string;
162
+ updatedAt: string;
163
+ url: string;
164
+ changes: string[];
165
+ };
166
+ }
167
+ export interface NoteUpdateFailure {
168
+ success: false;
169
+ error: string;
170
+ }
171
+ export type NoteUpdateResult = NoteUpdateSuccess | NoteUpdateFailure;
172
+ export interface NoteUpdateTool {
173
+ name: string;
174
+ description: string;
175
+ parameters: typeof NoteUpdateParamsSchema;
176
+ execute: (params: NoteUpdateParams) => Promise<NoteUpdateResult>;
177
+ }
178
+ export declare function createNoteUpdateTool(options: NoteToolOptions): NoteUpdateTool;
179
+ export declare const NoteDeleteParamsSchema: z.ZodObject<{
180
+ noteId: z.ZodString;
181
+ }, "strip", z.ZodTypeAny, {
182
+ noteId: string;
183
+ }, {
184
+ noteId: string;
185
+ }>;
186
+ export type NoteDeleteParams = z.infer<typeof NoteDeleteParamsSchema>;
187
+ export interface NoteDeleteSuccess {
188
+ success: true;
189
+ data: {
190
+ id: string;
191
+ message: string;
192
+ };
193
+ }
194
+ export interface NoteDeleteFailure {
195
+ success: false;
196
+ error: string;
197
+ }
198
+ export type NoteDeleteResult = NoteDeleteSuccess | NoteDeleteFailure;
199
+ export interface NoteDeleteTool {
200
+ name: string;
201
+ description: string;
202
+ parameters: typeof NoteDeleteParamsSchema;
203
+ execute: (params: NoteDeleteParams) => Promise<NoteDeleteResult>;
204
+ }
205
+ export declare function createNoteDeleteTool(options: NoteToolOptions): NoteDeleteTool;
206
+ export declare const NoteSearchParamsSchema: z.ZodObject<{
207
+ query: z.ZodString;
208
+ searchType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["hybrid", "text", "semantic"]>>>;
209
+ notebookId: z.ZodOptional<z.ZodString>;
210
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
211
+ visibility: z.ZodOptional<z.ZodEnum<["private", "shared", "public"]>>;
212
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
213
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
214
+ }, "strip", z.ZodTypeAny, {
215
+ query: string;
216
+ limit: number;
217
+ searchType: "text" | "hybrid" | "semantic";
218
+ offset: number;
219
+ tags?: string[] | undefined;
220
+ notebookId?: string | undefined;
221
+ visibility?: "private" | "shared" | "public" | undefined;
222
+ }, {
223
+ query: string;
224
+ limit?: number | undefined;
225
+ searchType?: "text" | "hybrid" | "semantic" | undefined;
226
+ tags?: string[] | undefined;
227
+ offset?: number | undefined;
228
+ notebookId?: string | undefined;
229
+ visibility?: "private" | "shared" | "public" | undefined;
230
+ }>;
231
+ export type NoteSearchParams = z.infer<typeof NoteSearchParamsSchema>;
232
+ export interface NoteSearchResult {
233
+ id: string;
234
+ title: string;
235
+ snippet: string;
236
+ score: number;
237
+ tags: string[];
238
+ visibility: string;
239
+ updatedAt: string;
240
+ }
241
+ export interface NoteSearchSuccess {
242
+ success: true;
243
+ data: {
244
+ query: string;
245
+ searchType: string;
246
+ results: Array<{
247
+ id: string;
248
+ title: string;
249
+ snippet: string;
250
+ score: number;
251
+ tags: string[];
252
+ visibility: string;
253
+ url: string;
254
+ }>;
255
+ total: number;
256
+ limit: number;
257
+ offset: number;
258
+ };
259
+ }
260
+ export interface NoteSearchFailure {
261
+ success: false;
262
+ error: string;
263
+ }
264
+ export type NoteSearchToolResult = NoteSearchSuccess | NoteSearchFailure;
265
+ export interface NoteSearchTool {
266
+ name: string;
267
+ description: string;
268
+ parameters: typeof NoteSearchParamsSchema;
269
+ execute: (params: NoteSearchParams) => Promise<NoteSearchToolResult>;
270
+ }
271
+ export declare function createNoteSearchTool(options: NoteToolOptions): NoteSearchTool;
272
+ //# sourceMappingURL=notes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.d.ts","sourceRoot":"","sources":["../../src/tools/notes.ts"],"names":[],"mappings":"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"}