openplanter 0.1.2 → 0.2.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.
Files changed (92) hide show
  1. package/dist/builder.d.ts.map +1 -1
  2. package/dist/builder.js +87 -5
  3. package/dist/builder.js.map +1 -1
  4. package/dist/credentials.d.ts.map +1 -1
  5. package/dist/credentials.js +4 -1
  6. package/dist/credentials.js.map +1 -1
  7. package/dist/engine.d.ts.map +1 -1
  8. package/dist/engine.js +5 -0
  9. package/dist/engine.js.map +1 -1
  10. package/dist/investigation-tools/advanced-analytics.d.ts +130 -0
  11. package/dist/investigation-tools/advanced-analytics.d.ts.map +1 -0
  12. package/dist/investigation-tools/advanced-analytics.js +340 -0
  13. package/dist/investigation-tools/advanced-analytics.js.map +1 -0
  14. package/dist/investigation-tools/blockchain-scanner.d.ts +83 -0
  15. package/dist/investigation-tools/blockchain-scanner.d.ts.map +1 -0
  16. package/dist/investigation-tools/blockchain-scanner.js +194 -0
  17. package/dist/investigation-tools/blockchain-scanner.js.map +1 -0
  18. package/dist/investigation-tools/crypto-ecosystem.d.ts +83 -0
  19. package/dist/investigation-tools/crypto-ecosystem.d.ts.map +1 -0
  20. package/dist/investigation-tools/crypto-ecosystem.js +124 -0
  21. package/dist/investigation-tools/crypto-ecosystem.js.map +1 -0
  22. package/dist/investigation-tools/dexscreener-pairs.d.ts +41 -0
  23. package/dist/investigation-tools/dexscreener-pairs.d.ts.map +1 -0
  24. package/dist/investigation-tools/dexscreener-pairs.js +60 -0
  25. package/dist/investigation-tools/dexscreener-pairs.js.map +1 -0
  26. package/dist/investigation-tools/document-processing.d.ts +78 -0
  27. package/dist/investigation-tools/document-processing.d.ts.map +1 -0
  28. package/dist/investigation-tools/document-processing.js +252 -0
  29. package/dist/investigation-tools/document-processing.js.map +1 -0
  30. package/dist/investigation-tools/dune-analytics.d.ts +47 -0
  31. package/dist/investigation-tools/dune-analytics.d.ts.map +1 -0
  32. package/dist/investigation-tools/dune-analytics.js +160 -0
  33. package/dist/investigation-tools/dune-analytics.js.map +1 -0
  34. package/dist/investigation-tools/global-registries.d.ts +86 -0
  35. package/dist/investigation-tools/global-registries.d.ts.map +1 -0
  36. package/dist/investigation-tools/global-registries.js +212 -0
  37. package/dist/investigation-tools/global-registries.js.map +1 -0
  38. package/dist/investigation-tools/government-records.d.ts +85 -0
  39. package/dist/investigation-tools/government-records.d.ts.map +1 -0
  40. package/dist/investigation-tools/government-records.js +170 -0
  41. package/dist/investigation-tools/government-records.js.map +1 -0
  42. package/dist/investigation-tools/index.d.ts +18 -0
  43. package/dist/investigation-tools/index.d.ts.map +1 -1
  44. package/dist/investigation-tools/index.js +19 -0
  45. package/dist/investigation-tools/index.js.map +1 -1
  46. package/dist/investigation-tools/investigation-automation.d.ts +144 -0
  47. package/dist/investigation-tools/investigation-automation.d.ts.map +1 -0
  48. package/dist/investigation-tools/investigation-automation.js +345 -0
  49. package/dist/investigation-tools/investigation-automation.js.map +1 -0
  50. package/dist/investigation-tools/monitoring-tools.d.ts +102 -0
  51. package/dist/investigation-tools/monitoring-tools.d.ts.map +1 -0
  52. package/dist/investigation-tools/monitoring-tools.js +214 -0
  53. package/dist/investigation-tools/monitoring-tools.js.map +1 -0
  54. package/dist/investigation-tools/political-finance.d.ts +114 -0
  55. package/dist/investigation-tools/political-finance.d.ts.map +1 -0
  56. package/dist/investigation-tools/political-finance.js +205 -0
  57. package/dist/investigation-tools/political-finance.js.map +1 -0
  58. package/dist/investigation-tools/polymarket-markets.d.ts +137 -0
  59. package/dist/investigation-tools/polymarket-markets.d.ts.map +1 -0
  60. package/dist/investigation-tools/polymarket-markets.js +287 -0
  61. package/dist/investigation-tools/polymarket-markets.js.map +1 -0
  62. package/dist/investigation-tools/prediction-markets.d.ts +52 -0
  63. package/dist/investigation-tools/prediction-markets.d.ts.map +1 -0
  64. package/dist/investigation-tools/prediction-markets.js +116 -0
  65. package/dist/investigation-tools/prediction-markets.js.map +1 -0
  66. package/dist/investigation-tools/sec-tools.d.ts +75 -0
  67. package/dist/investigation-tools/sec-tools.d.ts.map +1 -0
  68. package/dist/investigation-tools/sec-tools.js +192 -0
  69. package/dist/investigation-tools/sec-tools.js.map +1 -0
  70. package/dist/investigation-tools/shared-crypto.d.ts +50 -0
  71. package/dist/investigation-tools/shared-crypto.d.ts.map +1 -0
  72. package/dist/investigation-tools/shared-crypto.js +122 -0
  73. package/dist/investigation-tools/shared-crypto.js.map +1 -0
  74. package/dist/investigation-tools/social-intelligence.d.ts +91 -0
  75. package/dist/investigation-tools/social-intelligence.d.ts.map +1 -0
  76. package/dist/investigation-tools/social-intelligence.js +302 -0
  77. package/dist/investigation-tools/social-intelligence.js.map +1 -0
  78. package/dist/investigation-tools/tool-registry.d.ts +12 -0
  79. package/dist/investigation-tools/tool-registry.d.ts.map +1 -0
  80. package/dist/investigation-tools/tool-registry.js +399 -0
  81. package/dist/investigation-tools/tool-registry.js.map +1 -0
  82. package/dist/investigation-tools/wallet-clusterer.d.ts +28 -0
  83. package/dist/investigation-tools/wallet-clusterer.d.ts.map +1 -0
  84. package/dist/investigation-tools/wallet-clusterer.js +179 -0
  85. package/dist/investigation-tools/wallet-clusterer.js.map +1 -0
  86. package/dist/model.d.ts.map +1 -1
  87. package/dist/model.js +1 -1
  88. package/dist/model.js.map +1 -1
  89. package/dist/tool-defs.d.ts.map +1 -1
  90. package/dist/tool-defs.js +301 -0
  91. package/dist/tool-defs.js.map +1 -1
  92. package/package.json +1 -1
@@ -0,0 +1,302 @@
1
+ /**
2
+ * social-intelligence.ts — Social media intelligence and sentiment tools.
3
+ *
4
+ * Tools: twitter_market_mentions, reddit_wsb_scanner, discord_channel_scraper,
5
+ * telegram_channel_monitor, news_sentiment_fetcher, substack_scraper
6
+ */
7
+ import { fetchJson } from "./shared.js";
8
+ import { sentimentScore, sentimentLabel, isRumor, BULLISH_KEYWORDS, BEARISH_KEYWORDS } from "./shared.js";
9
+ import { makeProvenance, scrapeHtml } from "./shared-crypto.js";
10
+ // ── Mock Data ────────────────────────────────────────────────────
11
+ const MOCK_TWITTER = {
12
+ posts: [
13
+ {
14
+ platform: "twitter", author: "@cryptowhale42", content: "Massive $TCOR buy signal. Insider whisper says acquisition incoming. Moon time! 🚀",
15
+ timestamp: "2026-02-20T14:30:00Z", url: "https://x.com/cryptowhale42/status/12345",
16
+ sentiment: 0.8, sentimentLabel: "bullish", isRumor: true,
17
+ engagement: { likes: 342, reposts: 89, replies: 56 },
18
+ tickers: ["TCOR"], keywords: ["insider", "acquisition", "moon"],
19
+ },
20
+ {
21
+ platform: "twitter", author: "@marketwatch_bot", content: "Polymarket BTC $100k market seeing unusual volume. 3x normal 24h activity.",
22
+ timestamp: "2026-02-20T12:00:00Z", url: "https://x.com/marketwatch_bot/status/12346",
23
+ sentiment: 0.3, sentimentLabel: "neutral", isRumor: false,
24
+ engagement: { likes: 120, reposts: 45, replies: 23 },
25
+ tickers: ["BTC"], keywords: ["volume", "unusual"],
26
+ },
27
+ ],
28
+ total: 2, avgSentiment: 0.55, rumorCount: 1,
29
+ provenance: makeProvenance("twitter", "test://mock", ["test_mode"]),
30
+ };
31
+ const MOCK_REDDIT = {
32
+ posts: [
33
+ {
34
+ platform: "reddit", author: "u/diamond_hands_42", content: "DD on TCOR: CEO just bought 500k shares. Insiders loading up before earnings. This is a buy signal.",
35
+ timestamp: "2026-02-20T08:00:00Z", url: "https://reddit.com/r/wallstreetbets/comments/abc123",
36
+ sentiment: 0.7, sentimentLabel: "bullish", isRumor: true,
37
+ engagement: { likes: 1200, reposts: 0, replies: 345 },
38
+ tickers: ["TCOR"], keywords: ["insider", "buy", "earnings"],
39
+ },
40
+ ],
41
+ total: 1, avgSentiment: 0.7, rumorCount: 1,
42
+ provenance: makeProvenance("reddit", "test://mock", ["test_mode"]),
43
+ };
44
+ const MOCK_NEWS = {
45
+ articles: [
46
+ {
47
+ title: "TechCorp Under SEC Investigation for Insider Trading",
48
+ source: "Reuters", url: "https://reuters.com/article/techcorp-sec",
49
+ publishedAt: "2026-02-19T16:00:00Z", summary: "The SEC has opened a formal investigation into trading patterns at TechCorp Inc ahead of its Q4 earnings announcement.",
50
+ sentiment: -0.6, sentimentLabel: "bearish", relevanceScore: 95,
51
+ tickers: ["TCOR"],
52
+ },
53
+ ],
54
+ total: 1, avgSentiment: -0.6,
55
+ provenance: makeProvenance("news_api", "test://mock", ["test_mode"]),
56
+ };
57
+ // ── Helpers ──────────────────────────────────────────────────────
58
+ const TICKER_RE = /\$([A-Z]{2,5})\b/g;
59
+ function extractTickers(text) {
60
+ const matches = text.matchAll(TICKER_RE);
61
+ return [...new Set([...matches].map((m) => m[1]))];
62
+ }
63
+ function extractKeywords(text) {
64
+ const lower = text.toLowerCase();
65
+ const found = [];
66
+ for (const kw of [...BULLISH_KEYWORDS, ...BEARISH_KEYWORDS, "insider", "manipulation", "pump", "dump", "sec", "investigation"]) {
67
+ if (lower.includes(kw))
68
+ found.push(kw);
69
+ }
70
+ return found;
71
+ }
72
+ function computeAvgSentiment(posts) {
73
+ if (posts.length === 0)
74
+ return 0;
75
+ return posts.reduce((sum, p) => sum + p.sentiment, 0) / posts.length;
76
+ }
77
+ // ── twitter_market_mentions ──────────────────────────────────────
78
+ export async function searchTwitterMentions(opts) {
79
+ if (opts.test)
80
+ return MOCK_TWITTER;
81
+ const searchQuery = opts.ticker ? `$${opts.ticker} OR ${opts.query}` : opts.query;
82
+ try {
83
+ const $ = await scrapeHtml(`https://nitter.net/search?f=tweets&q=${encodeURIComponent(searchQuery)}&since=&until=&near=`, { delay: 2.0 });
84
+ const posts = [];
85
+ $(".timeline-item").each((_, el) => {
86
+ const content = $(el).find(".tweet-content").text().trim();
87
+ const author = $(el).find(".username").first().text().trim();
88
+ const timestamp = $(el).find(".tweet-date a").attr("title") ?? "";
89
+ const link = $(el).find(".tweet-link").attr("href") ?? "";
90
+ const score = sentimentScore(content);
91
+ posts.push({
92
+ platform: "twitter", author, content: content.slice(0, 500),
93
+ timestamp, url: link ? `https://x.com${link}` : "",
94
+ sentiment: score, sentimentLabel: sentimentLabel(score),
95
+ isRumor: isRumor(content),
96
+ engagement: { likes: 0, reposts: 0, replies: 0 },
97
+ tickers: extractTickers(content),
98
+ keywords: extractKeywords(content),
99
+ });
100
+ });
101
+ const limited = posts.slice(0, opts.limit ?? 50);
102
+ return {
103
+ posts: limited, total: limited.length,
104
+ avgSentiment: computeAvgSentiment(limited),
105
+ rumorCount: limited.filter((p) => p.isRumor).length,
106
+ provenance: makeProvenance("nitter_scrape", `https://nitter.net/search?q=${searchQuery}`),
107
+ };
108
+ }
109
+ catch {
110
+ return { posts: [], total: 0, avgSentiment: 0, rumorCount: 0, provenance: makeProvenance("twitter", "nitter.net", ["scrape_failed"]) };
111
+ }
112
+ }
113
+ // ── reddit_wsb_scanner ───────────────────────────────────────────
114
+ export async function scanRedditWsb(opts) {
115
+ if (opts.test)
116
+ return MOCK_REDDIT;
117
+ const sub = opts.subreddit ?? "wallstreetbets";
118
+ const sort = opts.sort ?? "new";
119
+ const searchQuery = opts.ticker ? `$${opts.ticker} OR ${opts.ticker}` : "";
120
+ const url = searchQuery
121
+ ? `https://www.reddit.com/r/${sub}/search.json?q=${encodeURIComponent(searchQuery)}&sort=${sort}&restrict_sr=on&limit=${opts.limit ?? 25}`
122
+ : `https://www.reddit.com/r/${sub}/${sort}.json?limit=${opts.limit ?? 25}`;
123
+ try {
124
+ const data = await fetchJson(url, { delay: 1.0 });
125
+ const posts = (data.data?.children ?? []).map((child) => {
126
+ const p = child.data;
127
+ const content = `${p.title ?? ""}\n${p.selftext ?? ""}`.trim();
128
+ const score = sentimentScore(content);
129
+ return {
130
+ platform: "reddit",
131
+ author: `u/${p.author ?? "deleted"}`,
132
+ content: content.slice(0, 500),
133
+ timestamp: new Date(Number(p.created_utc ?? 0) * 1000).toISOString(),
134
+ url: `https://reddit.com${p.permalink ?? ""}`,
135
+ sentiment: score, sentimentLabel: sentimentLabel(score),
136
+ isRumor: isRumor(content),
137
+ engagement: { likes: Number(p.ups ?? 0), reposts: 0, replies: Number(p.num_comments ?? 0) },
138
+ tickers: extractTickers(content),
139
+ keywords: extractKeywords(content),
140
+ };
141
+ });
142
+ return {
143
+ posts, total: posts.length,
144
+ avgSentiment: computeAvgSentiment(posts),
145
+ rumorCount: posts.filter((p) => p.isRumor).length,
146
+ provenance: makeProvenance("reddit_api", url),
147
+ };
148
+ }
149
+ catch {
150
+ return { posts: [], total: 0, avgSentiment: 0, rumorCount: 0, provenance: makeProvenance("reddit", url, ["fetch_failed"]) };
151
+ }
152
+ }
153
+ // ── discord_channel_scraper ──────────────────────────────────────
154
+ export async function scrapeDiscord(opts) {
155
+ if (opts.test) {
156
+ return {
157
+ posts: [{
158
+ platform: "discord", author: "CryptoAlpha#1234",
159
+ content: "Just heard from a source that Polymarket BTC market is about to get whale dumped. Insider info.",
160
+ timestamp: "2026-02-20T16:00:00Z", url: "",
161
+ sentiment: -0.3, sentimentLabel: "bearish", isRumor: true,
162
+ engagement: { likes: 0, reposts: 0, replies: 5 },
163
+ tickers: ["BTC"], keywords: ["insider", "dump"],
164
+ }],
165
+ total: 1, avgSentiment: -0.3, rumorCount: 1,
166
+ provenance: makeProvenance("discord", "test://mock", ["test_mode"]),
167
+ };
168
+ }
169
+ return { posts: [], total: 0, avgSentiment: 0, rumorCount: 0, provenance: makeProvenance("discord", "", ["requires_bot_auth"]) };
170
+ }
171
+ // ── telegram_channel_monitor ─────────────────────────────────────
172
+ export async function monitorTelegram(opts) {
173
+ if (opts.test) {
174
+ return {
175
+ posts: [{
176
+ platform: "telegram", author: "CryptoSignals",
177
+ content: "ALERT: Whale accumulation on Polymarket political markets. Someone knows something.",
178
+ timestamp: "2026-02-20T15:00:00Z", url: `https://t.me/${opts.channelName}`,
179
+ sentiment: 0.4, sentimentLabel: "neutral", isRumor: true,
180
+ engagement: { likes: 0, reposts: 0, replies: 0 },
181
+ tickers: [], keywords: ["whale", "insider"],
182
+ }],
183
+ total: 1, avgSentiment: 0.4, rumorCount: 1,
184
+ provenance: makeProvenance("telegram", "test://mock", ["test_mode"]),
185
+ };
186
+ }
187
+ try {
188
+ const $ = await scrapeHtml(`https://t.me/s/${opts.channelName}`, { delay: 1.0 });
189
+ const posts = [];
190
+ $(".tgme_widget_message_wrap").each((_, el) => {
191
+ const content = $(el).find(".tgme_widget_message_text").text().trim();
192
+ const timestamp = $(el).find(".tgme_widget_message_date time").attr("datetime") ?? "";
193
+ const link = $(el).find(".tgme_widget_message_date").attr("href") ?? "";
194
+ if (opts.keyword && !content.toLowerCase().includes(opts.keyword.toLowerCase()))
195
+ return;
196
+ const score = sentimentScore(content);
197
+ posts.push({
198
+ platform: "telegram", author: opts.channelName,
199
+ content: content.slice(0, 500), timestamp, url: link,
200
+ sentiment: score, sentimentLabel: sentimentLabel(score),
201
+ isRumor: isRumor(content),
202
+ engagement: { likes: 0, reposts: 0, replies: 0 },
203
+ tickers: extractTickers(content),
204
+ keywords: extractKeywords(content),
205
+ });
206
+ });
207
+ const limited = posts.slice(0, opts.limit ?? 50);
208
+ return {
209
+ posts: limited, total: limited.length,
210
+ avgSentiment: computeAvgSentiment(limited),
211
+ rumorCount: limited.filter((p) => p.isRumor).length,
212
+ provenance: makeProvenance("telegram_scrape", `https://t.me/s/${opts.channelName}`),
213
+ };
214
+ }
215
+ catch {
216
+ return { posts: [], total: 0, avgSentiment: 0, rumorCount: 0, provenance: makeProvenance("telegram", `https://t.me/s/${opts.channelName}`, ["scrape_failed"]) };
217
+ }
218
+ }
219
+ // ── news_sentiment_fetcher ───────────────────────────────────────
220
+ export async function fetchNewsSentiment(opts) {
221
+ if (opts.test)
222
+ return MOCK_NEWS;
223
+ const searchQuery = opts.ticker ? `${opts.query} $${opts.ticker}` : opts.query;
224
+ const daysBack = opts.daysBack ?? 7;
225
+ const fromDate = new Date();
226
+ fromDate.setDate(fromDate.getDate() - daysBack);
227
+ try {
228
+ const url = `https://www.google.com/search?q=${encodeURIComponent(searchQuery)}&tbm=nws&tbs=qdr:w`;
229
+ const $ = await scrapeHtml(url, { delay: 2.0 });
230
+ const articles = [];
231
+ $("div.SoaBEf, div.dbsr").each((_, el) => {
232
+ const title = $(el).find("div.n0jPhd, div.JheGif").text().trim();
233
+ const source = $(el).find("div.MgUUmf, span.WF4CUc").text().trim();
234
+ const link = $(el).find("a").first().attr("href") ?? "";
235
+ const snippet = $(el).find("div.GI74Re, div.Y3v8qd").text().trim();
236
+ const dateText = $(el).find("span.r0bn4c, span.WG9SHc").text().trim();
237
+ if (!title)
238
+ return;
239
+ const score = sentimentScore(`${title} ${snippet}`);
240
+ articles.push({
241
+ title, source, url: link,
242
+ publishedAt: dateText, summary: snippet.slice(0, 300),
243
+ sentiment: score, sentimentLabel: sentimentLabel(score),
244
+ relevanceScore: 50,
245
+ tickers: opts.ticker ? [opts.ticker] : extractTickers(`${title} ${snippet}`),
246
+ });
247
+ });
248
+ const limited = articles.slice(0, opts.limit ?? 20);
249
+ const avgSentiment = limited.length > 0 ? limited.reduce((s, a) => s + a.sentiment, 0) / limited.length : 0;
250
+ return { articles: limited, total: limited.length, avgSentiment, provenance: makeProvenance("google_news_scrape", url) };
251
+ }
252
+ catch {
253
+ return { articles: [], total: 0, avgSentiment: 0, provenance: makeProvenance("news", "", ["scrape_failed"]) };
254
+ }
255
+ }
256
+ // ── substack_scraper ─────────────────────────────────────────────
257
+ export async function scrapeSubstack(opts) {
258
+ if (opts.test) {
259
+ return {
260
+ articles: [{
261
+ title: "The Hidden Polymarket Whale Network", source: opts.publication,
262
+ url: `https://${opts.publication}.substack.com/p/hidden-whale-network`,
263
+ publishedAt: "2026-02-18T10:00:00Z",
264
+ summary: "An investigation into connected wallet clusters on Polymarket reveals coordinated betting patterns.",
265
+ sentiment: -0.2, sentimentLabel: "neutral", relevanceScore: 85,
266
+ tickers: [],
267
+ }],
268
+ total: 1, avgSentiment: -0.2,
269
+ provenance: makeProvenance("substack", "test://mock", ["test_mode"]),
270
+ };
271
+ }
272
+ try {
273
+ const url = `https://${opts.publication}.substack.com/archive?sort=new`;
274
+ const $ = await scrapeHtml(url, { delay: 1.5 });
275
+ const articles = [];
276
+ $("div.post-preview, a.post-preview-link").each((_, el) => {
277
+ const title = $(el).find("h3, .post-preview-title").text().trim();
278
+ const link = $(el).attr("href") ?? $(el).find("a").first().attr("href") ?? "";
279
+ const snippet = $(el).find(".post-preview-description, .subtitle").text().trim();
280
+ const dateText = $(el).find("time, .post-date").text().trim();
281
+ if (!title)
282
+ return;
283
+ if (opts.keyword && !`${title} ${snippet}`.toLowerCase().includes(opts.keyword.toLowerCase()))
284
+ return;
285
+ const score = sentimentScore(`${title} ${snippet}`);
286
+ articles.push({
287
+ title, source: opts.publication,
288
+ url: link.startsWith("http") ? link : `https://${opts.publication}.substack.com${link}`,
289
+ publishedAt: dateText, summary: snippet.slice(0, 300),
290
+ sentiment: score, sentimentLabel: sentimentLabel(score),
291
+ relevanceScore: 50, tickers: extractTickers(`${title} ${snippet}`),
292
+ });
293
+ });
294
+ const limited = articles.slice(0, opts.limit ?? 20);
295
+ const avgSentiment = limited.length > 0 ? limited.reduce((s, a) => s + a.sentiment, 0) / limited.length : 0;
296
+ return { articles: limited, total: limited.length, avgSentiment, provenance: makeProvenance("substack_scrape", url) };
297
+ }
298
+ catch {
299
+ return { articles: [], total: 0, avgSentiment: 0, provenance: makeProvenance("substack", `${opts.publication}.substack.com`, ["scrape_failed"]) };
300
+ }
301
+ }
302
+ //# sourceMappingURL=social-intelligence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-intelligence.js","sourceRoot":"","sources":["../../src/investigation-tools/social-intelligence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * tool-registry.ts — TypeScript-native tool dispatch registry.
3
+ *
4
+ * Maps tool names to async handler functions for the 55 new investigation tools.
5
+ * Called from the engine when the tool name matches a registered TS tool.
6
+ */
7
+ type ToolHandler = (args: Record<string, unknown>) => Promise<unknown> | unknown;
8
+ export declare const TS_TOOL_REGISTRY: Record<string, ToolHandler>;
9
+ export declare const TS_TOOL_NAMES: Set<string>;
10
+ export declare function runTsTool(name: string, args: Record<string, unknown>): Promise<string>;
11
+ export {};
12
+ //# sourceMappingURL=tool-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAMjF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA8gBxD,CAAC;AAEF,eAAO,MAAM,aAAa,aAAyC,CAAC;AAEpE,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CAUjB"}