neuron-inspector 0.3.2 → 0.4.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/dist/compound-tools.js +307 -0
- package/dist/compound-tools.js.map +1 -1
- package/dist/monitor.d.ts +9 -0
- package/dist/monitor.js +449 -0
- package/dist/monitor.js.map +1 -0
- package/dist/scheduler.d.ts +9 -0
- package/dist/scheduler.js +361 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/server.js +110 -41
- package/dist/server.js.map +1 -1
- package/dist/session-state.d.ts +3 -0
- package/dist/session-state.js +271 -0
- package/dist/session-state.js.map +1 -0
- package/package.json +1 -1
- package/recipes/content-repurposing/agent.md +821 -0
- package/recipes/content-repurposing/learnings.md +552 -0
- package/recipes/content-repurposing/recipe.yaml +166 -0
- package/recipes/email-outreach/agent.md +335 -0
- package/recipes/email-outreach/learnings.md +94 -0
- package/recipes/email-outreach/recipe.yaml +109 -0
package/dist/monitor.js
ADDED
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import * as os from "node:os";
|
|
4
|
+
import YAML from "yaml";
|
|
5
|
+
const NEURON_DIR = path.join(os.homedir(), ".neuron");
|
|
6
|
+
const MONITORS_FILE = path.join(NEURON_DIR, "monitors.yaml");
|
|
7
|
+
const ALERTS_FILE = path.join(NEURON_DIR, "monitor-alerts.yaml");
|
|
8
|
+
const MAX_ALERTS = 100;
|
|
9
|
+
const activeIntervals = new Map();
|
|
10
|
+
function ensureNeuronDir() {
|
|
11
|
+
if (!fs.existsSync(NEURON_DIR)) {
|
|
12
|
+
fs.mkdirSync(NEURON_DIR, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function monitorsPath() {
|
|
16
|
+
return MONITORS_FILE;
|
|
17
|
+
}
|
|
18
|
+
function alertsPath() {
|
|
19
|
+
return ALERTS_FILE;
|
|
20
|
+
}
|
|
21
|
+
function loadMonitors() {
|
|
22
|
+
ensureNeuronDir();
|
|
23
|
+
if (!fs.existsSync(MONITORS_FILE)) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const content = fs.readFileSync(MONITORS_FILE, "utf-8");
|
|
27
|
+
const store = YAML.parse(content);
|
|
28
|
+
return store?.monitors || [];
|
|
29
|
+
}
|
|
30
|
+
function saveMonitors(monitors) {
|
|
31
|
+
ensureNeuronDir();
|
|
32
|
+
const store = { monitors };
|
|
33
|
+
fs.writeFileSync(MONITORS_FILE, YAML.stringify(store), "utf-8");
|
|
34
|
+
}
|
|
35
|
+
function loadAlerts() {
|
|
36
|
+
ensureNeuronDir();
|
|
37
|
+
if (!fs.existsSync(ALERTS_FILE)) {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
const content = fs.readFileSync(ALERTS_FILE, "utf-8");
|
|
41
|
+
const store = YAML.parse(content);
|
|
42
|
+
return store?.alerts || [];
|
|
43
|
+
}
|
|
44
|
+
function saveAlerts(alerts) {
|
|
45
|
+
ensureNeuronDir();
|
|
46
|
+
const trimmed = alerts.slice(-MAX_ALERTS);
|
|
47
|
+
const store = { alerts: trimmed };
|
|
48
|
+
fs.writeFileSync(ALERTS_FILE, YAML.stringify(store), "utf-8");
|
|
49
|
+
}
|
|
50
|
+
function addAlert(alert) {
|
|
51
|
+
const alerts = loadAlerts();
|
|
52
|
+
alerts.push(alert);
|
|
53
|
+
saveAlerts(alerts);
|
|
54
|
+
}
|
|
55
|
+
function generateId() {
|
|
56
|
+
return `mon_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
|
|
57
|
+
}
|
|
58
|
+
async function checkMonitor(monitor, checkFn) {
|
|
59
|
+
try {
|
|
60
|
+
const result = await checkFn(monitor.url, monitor.condition.selector);
|
|
61
|
+
const { condition } = monitor;
|
|
62
|
+
switch (condition.type) {
|
|
63
|
+
case "content_change": {
|
|
64
|
+
if (!condition.baseline) {
|
|
65
|
+
return { triggered: false, currentValue: result.text };
|
|
66
|
+
}
|
|
67
|
+
if (result.text !== condition.baseline) {
|
|
68
|
+
return {
|
|
69
|
+
triggered: true,
|
|
70
|
+
details: "Content changed",
|
|
71
|
+
currentValue: result.text,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return { triggered: false };
|
|
75
|
+
}
|
|
76
|
+
case "text_appears": {
|
|
77
|
+
if (!condition.text) {
|
|
78
|
+
throw new Error("text_appears condition requires 'text' parameter");
|
|
79
|
+
}
|
|
80
|
+
if (result.text.includes(condition.text)) {
|
|
81
|
+
return {
|
|
82
|
+
triggered: true,
|
|
83
|
+
details: `Text "${condition.text}" appeared on page`,
|
|
84
|
+
currentValue: result.text,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return { triggered: false };
|
|
88
|
+
}
|
|
89
|
+
case "text_disappears": {
|
|
90
|
+
if (!condition.text) {
|
|
91
|
+
throw new Error("text_disappears condition requires 'text' parameter");
|
|
92
|
+
}
|
|
93
|
+
if (!condition.baseline) {
|
|
94
|
+
return { triggered: false, currentValue: result.text };
|
|
95
|
+
}
|
|
96
|
+
if (condition.baseline.includes(condition.text) && !result.text.includes(condition.text)) {
|
|
97
|
+
return {
|
|
98
|
+
triggered: true,
|
|
99
|
+
details: `Text "${condition.text}" disappeared from page`,
|
|
100
|
+
currentValue: result.text,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return { triggered: false };
|
|
104
|
+
}
|
|
105
|
+
case "price_below": {
|
|
106
|
+
if (condition.threshold === undefined) {
|
|
107
|
+
throw new Error("price_below condition requires 'threshold' parameter");
|
|
108
|
+
}
|
|
109
|
+
const priceMatch = result.text.match(/[\$\u20A6\u20AC\u00A3]?\s*([0-9,]+\.?[0-9]*)/);
|
|
110
|
+
if (priceMatch) {
|
|
111
|
+
const price = parseFloat(priceMatch[1].replace(/,/g, ""));
|
|
112
|
+
if (price < condition.threshold) {
|
|
113
|
+
return {
|
|
114
|
+
triggered: true,
|
|
115
|
+
details: `Price ${price} is below threshold ${condition.threshold}`,
|
|
116
|
+
currentValue: price.toString(),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return { triggered: false };
|
|
121
|
+
}
|
|
122
|
+
case "new_items": {
|
|
123
|
+
if (!condition.baseline) {
|
|
124
|
+
return { triggered: false, currentValue: JSON.stringify(result.items || []) };
|
|
125
|
+
}
|
|
126
|
+
const baselineItems = JSON.parse(condition.baseline);
|
|
127
|
+
const currentItems = result.items || [];
|
|
128
|
+
if (currentItems.length > baselineItems.length) {
|
|
129
|
+
return {
|
|
130
|
+
triggered: true,
|
|
131
|
+
details: `New items detected: ${currentItems.length - baselineItems.length} added`,
|
|
132
|
+
currentValue: JSON.stringify(currentItems),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return { triggered: false };
|
|
136
|
+
}
|
|
137
|
+
case "selector_change": {
|
|
138
|
+
if (!condition.selector) {
|
|
139
|
+
throw new Error("selector_change condition requires 'selector' parameter");
|
|
140
|
+
}
|
|
141
|
+
if (!condition.baseline) {
|
|
142
|
+
return { triggered: false, currentValue: result.text };
|
|
143
|
+
}
|
|
144
|
+
if (result.text !== condition.baseline) {
|
|
145
|
+
return {
|
|
146
|
+
triggered: true,
|
|
147
|
+
details: "Selector content changed",
|
|
148
|
+
currentValue: result.text,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return { triggered: false };
|
|
152
|
+
}
|
|
153
|
+
default:
|
|
154
|
+
throw new Error(`Unknown condition type: ${condition.type}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.error(`Monitor check failed for ${monitor.id}:`, error);
|
|
159
|
+
return { triggered: false };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async function runMonitorCheck(monitor, checkFn) {
|
|
163
|
+
const checkResult = await checkMonitor(monitor, checkFn);
|
|
164
|
+
const monitors = loadMonitors();
|
|
165
|
+
const monitorIndex = monitors.findIndex((m) => m.id === monitor.id);
|
|
166
|
+
if (monitorIndex === -1)
|
|
167
|
+
return;
|
|
168
|
+
monitors[monitorIndex].last_check_at = new Date().toISOString();
|
|
169
|
+
if (!monitors[monitorIndex].condition.baseline && checkResult.currentValue) {
|
|
170
|
+
monitors[monitorIndex].condition.baseline = checkResult.currentValue;
|
|
171
|
+
}
|
|
172
|
+
if (checkResult.triggered) {
|
|
173
|
+
monitors[monitorIndex].alert_count += 1;
|
|
174
|
+
monitors[monitorIndex].last_result = "triggered";
|
|
175
|
+
const alert = {
|
|
176
|
+
monitor_id: monitor.id,
|
|
177
|
+
monitor_name: monitor.name,
|
|
178
|
+
url: monitor.url,
|
|
179
|
+
condition_type: monitor.condition.type,
|
|
180
|
+
triggered_at: new Date().toISOString(),
|
|
181
|
+
details: checkResult.details || "Condition met",
|
|
182
|
+
previous_value: monitor.condition.baseline,
|
|
183
|
+
current_value: checkResult.currentValue,
|
|
184
|
+
};
|
|
185
|
+
addAlert(alert);
|
|
186
|
+
console.error(`[MONITOR ALERT] ${monitor.name}: ${alert.details}`);
|
|
187
|
+
if (checkResult.currentValue) {
|
|
188
|
+
monitors[monitorIndex].condition.baseline = checkResult.currentValue;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
monitors[monitorIndex].last_result = "no_change";
|
|
193
|
+
}
|
|
194
|
+
saveMonitors(monitors);
|
|
195
|
+
}
|
|
196
|
+
export function startMonitor(checkFn) {
|
|
197
|
+
for (const interval of activeIntervals.values()) {
|
|
198
|
+
clearInterval(interval);
|
|
199
|
+
}
|
|
200
|
+
activeIntervals.clear();
|
|
201
|
+
const monitors = loadMonitors();
|
|
202
|
+
for (const monitor of monitors) {
|
|
203
|
+
if (!monitor.enabled)
|
|
204
|
+
continue;
|
|
205
|
+
const intervalMs = monitor.check_interval_minutes * 60 * 1000;
|
|
206
|
+
const interval = setInterval(() => {
|
|
207
|
+
runMonitorCheck(monitor, checkFn).catch((err) => {
|
|
208
|
+
console.error(`Error running monitor ${monitor.id}:`, err);
|
|
209
|
+
});
|
|
210
|
+
}, intervalMs);
|
|
211
|
+
activeIntervals.set(monitor.id, interval);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
export async function handleMonitorTool(name, args, checkFn) {
|
|
215
|
+
switch (name) {
|
|
216
|
+
case "neuron_monitor_create": {
|
|
217
|
+
const url = args.url;
|
|
218
|
+
const monitorName = args.name;
|
|
219
|
+
const checkIntervalMinutes = args.check_interval_minutes || 60;
|
|
220
|
+
const condition = args.condition;
|
|
221
|
+
const enabled = args.enabled !== undefined ? args.enabled : true;
|
|
222
|
+
if (!url || !monitorName || !condition) {
|
|
223
|
+
throw new Error("Missing required parameters: url, name, condition");
|
|
224
|
+
}
|
|
225
|
+
const monitor = {
|
|
226
|
+
id: generateId(),
|
|
227
|
+
url,
|
|
228
|
+
name: monitorName,
|
|
229
|
+
check_interval_minutes: checkIntervalMinutes,
|
|
230
|
+
condition,
|
|
231
|
+
enabled,
|
|
232
|
+
created_at: new Date().toISOString(),
|
|
233
|
+
alert_count: 0,
|
|
234
|
+
};
|
|
235
|
+
const monitors = loadMonitors();
|
|
236
|
+
monitors.push(monitor);
|
|
237
|
+
saveMonitors(monitors);
|
|
238
|
+
if (enabled && checkFn) {
|
|
239
|
+
const intervalMs = checkIntervalMinutes * 60 * 1000;
|
|
240
|
+
const interval = setInterval(() => {
|
|
241
|
+
runMonitorCheck(monitor, checkFn).catch((err) => {
|
|
242
|
+
console.error(`Error running monitor ${monitor.id}:`, err);
|
|
243
|
+
});
|
|
244
|
+
}, intervalMs);
|
|
245
|
+
activeIntervals.set(monitor.id, interval);
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
success: true,
|
|
249
|
+
monitor_id: monitor.id,
|
|
250
|
+
message: `Monitor "${monitorName}" created successfully`,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
case "neuron_monitor_list": {
|
|
254
|
+
const monitors = loadMonitors();
|
|
255
|
+
return {
|
|
256
|
+
monitors: monitors.map((m) => ({
|
|
257
|
+
id: m.id,
|
|
258
|
+
name: m.name,
|
|
259
|
+
url: m.url,
|
|
260
|
+
enabled: m.enabled,
|
|
261
|
+
check_interval_minutes: m.check_interval_minutes,
|
|
262
|
+
condition_type: m.condition.type,
|
|
263
|
+
created_at: m.created_at,
|
|
264
|
+
last_check_at: m.last_check_at,
|
|
265
|
+
last_result: m.last_result,
|
|
266
|
+
alert_count: m.alert_count,
|
|
267
|
+
})),
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
case "neuron_monitor_remove": {
|
|
271
|
+
const monitorId = args.monitor_id;
|
|
272
|
+
if (!monitorId) {
|
|
273
|
+
throw new Error("Missing required parameter: monitor_id");
|
|
274
|
+
}
|
|
275
|
+
const monitors = loadMonitors();
|
|
276
|
+
const filtered = monitors.filter((m) => m.id !== monitorId);
|
|
277
|
+
if (filtered.length === monitors.length) {
|
|
278
|
+
throw new Error(`Monitor ${monitorId} not found`);
|
|
279
|
+
}
|
|
280
|
+
saveMonitors(filtered);
|
|
281
|
+
const interval = activeIntervals.get(monitorId);
|
|
282
|
+
if (interval) {
|
|
283
|
+
clearInterval(interval);
|
|
284
|
+
activeIntervals.delete(monitorId);
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
success: true,
|
|
288
|
+
message: `Monitor ${monitorId} removed`,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
case "neuron_monitor_check": {
|
|
292
|
+
if (!checkFn) {
|
|
293
|
+
throw new Error("Check function not available");
|
|
294
|
+
}
|
|
295
|
+
const monitorId = args.monitor_id;
|
|
296
|
+
const monitors = loadMonitors();
|
|
297
|
+
if (monitorId) {
|
|
298
|
+
const monitor = monitors.find((m) => m.id === monitorId);
|
|
299
|
+
if (!monitor) {
|
|
300
|
+
throw new Error(`Monitor ${monitorId} not found`);
|
|
301
|
+
}
|
|
302
|
+
await runMonitorCheck(monitor, checkFn);
|
|
303
|
+
const updated = loadMonitors().find((m) => m.id === monitorId);
|
|
304
|
+
return {
|
|
305
|
+
monitor_id: monitorId,
|
|
306
|
+
last_check_at: updated?.last_check_at,
|
|
307
|
+
last_result: updated?.last_result,
|
|
308
|
+
alert_count: updated?.alert_count,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
const results = [];
|
|
313
|
+
for (const monitor of monitors) {
|
|
314
|
+
if (monitor.enabled) {
|
|
315
|
+
await runMonitorCheck(monitor, checkFn);
|
|
316
|
+
const updated = loadMonitors().find((m) => m.id === monitor.id);
|
|
317
|
+
results.push({
|
|
318
|
+
monitor_id: monitor.id,
|
|
319
|
+
name: monitor.name,
|
|
320
|
+
last_check_at: updated?.last_check_at,
|
|
321
|
+
last_result: updated?.last_result,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return { checks: results };
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
case "neuron_monitor_alerts": {
|
|
329
|
+
const limit = args.limit || 20;
|
|
330
|
+
const alerts = loadAlerts();
|
|
331
|
+
return {
|
|
332
|
+
alerts: alerts.slice(-limit).reverse(),
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
default:
|
|
336
|
+
throw new Error(`Unknown monitor tool: ${name}`);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
export const MONITOR_TOOLS = [
|
|
340
|
+
{
|
|
341
|
+
name: "neuron_monitor_create",
|
|
342
|
+
description: "Create a persistent page monitor that watches a URL for changes and alerts when conditions are met (price drops, new job postings, content changes). Monitors run in the background at specified intervals.",
|
|
343
|
+
inputSchema: {
|
|
344
|
+
type: "object",
|
|
345
|
+
properties: {
|
|
346
|
+
url: {
|
|
347
|
+
type: "string",
|
|
348
|
+
description: "The URL to monitor",
|
|
349
|
+
},
|
|
350
|
+
name: {
|
|
351
|
+
type: "string",
|
|
352
|
+
description: "Human-readable name for this monitor",
|
|
353
|
+
},
|
|
354
|
+
check_interval_minutes: {
|
|
355
|
+
type: "number",
|
|
356
|
+
description: "How often to check the page (in minutes). Default: 60",
|
|
357
|
+
default: 60,
|
|
358
|
+
},
|
|
359
|
+
condition: {
|
|
360
|
+
type: "object",
|
|
361
|
+
description: "The condition to watch for",
|
|
362
|
+
properties: {
|
|
363
|
+
type: {
|
|
364
|
+
type: "string",
|
|
365
|
+
enum: [
|
|
366
|
+
"content_change",
|
|
367
|
+
"text_appears",
|
|
368
|
+
"text_disappears",
|
|
369
|
+
"price_below",
|
|
370
|
+
"new_items",
|
|
371
|
+
"selector_change",
|
|
372
|
+
],
|
|
373
|
+
description: "Type of condition: content_change (any change), text_appears, text_disappears, price_below (numeric comparison), new_items (list growth), selector_change (specific element change)",
|
|
374
|
+
},
|
|
375
|
+
selector: {
|
|
376
|
+
type: "string",
|
|
377
|
+
description: "CSS selector to watch (optional, used for selector_change and to narrow scope)",
|
|
378
|
+
},
|
|
379
|
+
text: {
|
|
380
|
+
type: "string",
|
|
381
|
+
description: "Text to match for text_appears or text_disappears conditions",
|
|
382
|
+
},
|
|
383
|
+
threshold: {
|
|
384
|
+
type: "number",
|
|
385
|
+
description: "Numeric threshold for price_below condition",
|
|
386
|
+
},
|
|
387
|
+
},
|
|
388
|
+
required: ["type"],
|
|
389
|
+
},
|
|
390
|
+
enabled: {
|
|
391
|
+
type: "boolean",
|
|
392
|
+
description: "Whether the monitor is active. Default: true",
|
|
393
|
+
default: true,
|
|
394
|
+
},
|
|
395
|
+
},
|
|
396
|
+
required: ["url", "name", "condition"],
|
|
397
|
+
},
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
name: "neuron_monitor_list",
|
|
401
|
+
description: "List all monitors with their status, last check time, and alert count",
|
|
402
|
+
inputSchema: {
|
|
403
|
+
type: "object",
|
|
404
|
+
properties: {},
|
|
405
|
+
},
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
name: "neuron_monitor_remove",
|
|
409
|
+
description: "Remove a monitor by ID",
|
|
410
|
+
inputSchema: {
|
|
411
|
+
type: "object",
|
|
412
|
+
properties: {
|
|
413
|
+
monitor_id: {
|
|
414
|
+
type: "string",
|
|
415
|
+
description: "The ID of the monitor to remove",
|
|
416
|
+
},
|
|
417
|
+
},
|
|
418
|
+
required: ["monitor_id"],
|
|
419
|
+
},
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
name: "neuron_monitor_check",
|
|
423
|
+
description: "Force an immediate check on a monitor (or all monitors if no ID provided)",
|
|
424
|
+
inputSchema: {
|
|
425
|
+
type: "object",
|
|
426
|
+
properties: {
|
|
427
|
+
monitor_id: {
|
|
428
|
+
type: "string",
|
|
429
|
+
description: "The ID of the monitor to check. If omitted, checks all enabled monitors.",
|
|
430
|
+
},
|
|
431
|
+
},
|
|
432
|
+
},
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
name: "neuron_monitor_alerts",
|
|
436
|
+
description: "Get recent alerts (triggered conditions) from monitors",
|
|
437
|
+
inputSchema: {
|
|
438
|
+
type: "object",
|
|
439
|
+
properties: {
|
|
440
|
+
limit: {
|
|
441
|
+
type: "number",
|
|
442
|
+
description: "Maximum number of alerts to return. Default: 20",
|
|
443
|
+
default: 20,
|
|
444
|
+
},
|
|
445
|
+
},
|
|
446
|
+
},
|
|
447
|
+
},
|
|
448
|
+
];
|
|
449
|
+
//# sourceMappingURL=monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../src/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ToolDef } from "./tools.js";
|
|
2
|
+
export declare function startScheduler(): void;
|
|
3
|
+
export declare const SCHEDULER_TOOLS: ToolDef[];
|
|
4
|
+
export declare function handleSchedulerTool(name: string, args: Record<string, unknown>): Promise<{
|
|
5
|
+
content: Array<{
|
|
6
|
+
type: string;
|
|
7
|
+
text: string;
|
|
8
|
+
}>;
|
|
9
|
+
}>;
|