imperium-crawl 2.3.1 → 2.5.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.
- package/README.md +146 -11
- package/dist/cli-explore.d.ts +30 -0
- package/dist/cli-explore.d.ts.map +1 -0
- package/dist/cli-explore.js +427 -0
- package/dist/cli-explore.js.map +1 -0
- package/dist/cli-recorder.d.ts +44 -0
- package/dist/cli-recorder.d.ts.map +1 -0
- package/dist/cli-recorder.js +67 -0
- package/dist/cli-recorder.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +51 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +31 -1
- package/dist/constants.js.map +1 -1
- package/dist/flows/engine.d.ts +7 -0
- package/dist/flows/engine.d.ts.map +1 -0
- package/dist/flows/engine.js +183 -0
- package/dist/flows/engine.js.map +1 -0
- package/dist/flows/index.d.ts +6 -0
- package/dist/flows/index.d.ts.map +1 -0
- package/dist/flows/index.js +6 -0
- package/dist/flows/index.js.map +1 -0
- package/dist/flows/server.d.ts +11 -0
- package/dist/flows/server.d.ts.map +1 -0
- package/dist/flows/server.js +81 -0
- package/dist/flows/server.js.map +1 -0
- package/dist/flows/smart-target.d.ts +9 -0
- package/dist/flows/smart-target.d.ts.map +1 -0
- package/dist/flows/smart-target.js +84 -0
- package/dist/flows/smart-target.js.map +1 -0
- package/dist/flows/storage.d.ts +26 -0
- package/dist/flows/storage.d.ts.map +1 -0
- package/dist/flows/storage.js +118 -0
- package/dist/flows/storage.js.map +1 -0
- package/dist/flows/templates.d.ts +4 -0
- package/dist/flows/templates.d.ts.map +1 -0
- package/dist/flows/templates.js +35 -0
- package/dist/flows/templates.js.map +1 -0
- package/dist/flows/types.d.ts +3356 -0
- package/dist/flows/types.d.ts.map +1 -0
- package/dist/flows/types.js +133 -0
- package/dist/flows/types.js.map +1 -0
- package/dist/knowledge/index.d.ts +1 -0
- package/dist/knowledge/index.d.ts.map +1 -1
- package/dist/knowledge/index.js +1 -0
- package/dist/knowledge/index.js.map +1 -1
- package/dist/knowledge/record-browser.d.ts +17 -0
- package/dist/knowledge/record-browser.d.ts.map +1 -0
- package/dist/knowledge/record-browser.js +29 -0
- package/dist/knowledge/record-browser.js.map +1 -0
- package/dist/knowledge/store.d.ts +19 -0
- package/dist/knowledge/store.d.ts.map +1 -1
- package/dist/knowledge/store.js +63 -4
- package/dist/knowledge/store.js.map +1 -1
- package/dist/llm/retry.d.ts +4 -2
- package/dist/llm/retry.d.ts.map +1 -1
- package/dist/llm/retry.js +15 -4
- package/dist/llm/retry.js.map +1 -1
- package/dist/sessions/browser-connect.d.ts +30 -0
- package/dist/sessions/browser-connect.d.ts.map +1 -0
- package/dist/sessions/browser-connect.js +68 -0
- package/dist/sessions/browser-connect.js.map +1 -0
- package/dist/sessions/browser-state.d.ts +35 -0
- package/dist/sessions/browser-state.d.ts.map +1 -0
- package/dist/sessions/browser-state.js +74 -0
- package/dist/sessions/browser-state.js.map +1 -0
- package/dist/sessions/index.d.ts +1 -1
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +1 -1
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/inject-cookies.d.ts +20 -0
- package/dist/sessions/inject-cookies.d.ts.map +1 -0
- package/dist/sessions/inject-cookies.js +57 -0
- package/dist/sessions/inject-cookies.js.map +1 -0
- package/dist/sessions/manager.d.ts +31 -1
- package/dist/sessions/manager.d.ts.map +1 -1
- package/dist/sessions/manager.js +97 -6
- package/dist/sessions/manager.js.map +1 -1
- package/dist/sessions/types.d.ts +2 -0
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/skills/chain.d.ts +61 -0
- package/dist/skills/chain.d.ts.map +1 -0
- package/dist/skills/chain.js +182 -0
- package/dist/skills/chain.js.map +1 -0
- package/dist/skills/conditions.d.ts +14 -0
- package/dist/skills/conditions.d.ts.map +1 -0
- package/dist/skills/conditions.js +208 -0
- package/dist/skills/conditions.js.map +1 -0
- package/dist/skills/manager.d.ts +47 -2
- package/dist/skills/manager.d.ts.map +1 -1
- package/dist/skills/manager.js.map +1 -1
- package/dist/skills/parameters.d.ts +49 -0
- package/dist/skills/parameters.d.ts.map +1 -0
- package/dist/skills/parameters.js +157 -0
- package/dist/skills/parameters.js.map +1 -0
- package/dist/snapshot/store.d.ts +8 -0
- package/dist/snapshot/store.d.ts.map +1 -1
- package/dist/snapshot/store.js +48 -0
- package/dist/snapshot/store.js.map +1 -1
- package/dist/stealth/antibot-detector.d.ts +1 -1
- package/dist/stealth/antibot-detector.d.ts.map +1 -1
- package/dist/stealth/antibot-detector.js +56 -0
- package/dist/stealth/antibot-detector.js.map +1 -1
- package/dist/stealth/browser-image-extract.d.ts +43 -0
- package/dist/stealth/browser-image-extract.d.ts.map +1 -0
- package/dist/stealth/browser-image-extract.js +268 -0
- package/dist/stealth/browser-image-extract.js.map +1 -0
- package/dist/stealth/browser.d.ts +5 -0
- package/dist/stealth/browser.d.ts.map +1 -1
- package/dist/stealth/browser.js +82 -1
- package/dist/stealth/browser.js.map +1 -1
- package/dist/stealth/chrome-profile.d.ts +1 -0
- package/dist/stealth/chrome-profile.d.ts.map +1 -1
- package/dist/stealth/chrome-profile.js +28 -5
- package/dist/stealth/chrome-profile.js.map +1 -1
- package/dist/stealth/detector.d.ts +10 -1
- package/dist/stealth/detector.d.ts.map +1 -1
- package/dist/stealth/detector.js +117 -25
- package/dist/stealth/detector.js.map +1 -1
- package/dist/stealth/headers.d.ts +1 -1
- package/dist/stealth/headers.d.ts.map +1 -1
- package/dist/stealth/headers.js +94 -2
- package/dist/stealth/headers.js.map +1 -1
- package/dist/stealth/index.d.ts +5 -0
- package/dist/stealth/index.d.ts.map +1 -1
- package/dist/stealth/index.js +257 -27
- package/dist/stealth/index.js.map +1 -1
- package/dist/stealth/proxy.d.ts +40 -1
- package/dist/stealth/proxy.d.ts.map +1 -1
- package/dist/stealth/proxy.js +90 -6
- package/dist/stealth/proxy.js.map +1 -1
- package/dist/tools/action-executor.d.ts +66 -0
- package/dist/tools/action-executor.d.ts.map +1 -0
- package/dist/tools/action-executor.js +403 -0
- package/dist/tools/action-executor.js.map +1 -0
- package/dist/tools/batch-download.d.ts +33 -0
- package/dist/tools/batch-download.d.ts.map +1 -0
- package/dist/tools/batch-download.js +208 -0
- package/dist/tools/batch-download.js.map +1 -0
- package/dist/tools/batch-scrape.d.ts +2 -2
- package/dist/tools/browser.d.ts +100 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +448 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/crawl.d.ts +2 -2
- package/dist/tools/create-skill.d.ts +2 -2
- package/dist/tools/discover-apis.d.ts +1 -1
- package/dist/tools/discover-apis.d.ts.map +1 -1
- package/dist/tools/discover-apis.js +3 -0
- package/dist/tools/discover-apis.js.map +1 -1
- package/dist/tools/download.d.ts +39 -6
- package/dist/tools/download.d.ts.map +1 -1
- package/dist/tools/download.js +248 -44
- package/dist/tools/download.js.map +1 -1
- package/dist/tools/extract.d.ts +1 -1
- package/dist/tools/image-search.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +26 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inspect-flow.d.ts +24 -0
- package/dist/tools/inspect-flow.d.ts.map +1 -0
- package/dist/tools/inspect-flow.js +23 -0
- package/dist/tools/inspect-flow.js.map +1 -0
- package/dist/tools/instagram.d.ts +2 -2
- package/dist/tools/interact.d.ts +91 -50
- package/dist/tools/interact.d.ts.map +1 -1
- package/dist/tools/interact.js +80 -299
- package/dist/tools/interact.js.map +1 -1
- package/dist/tools/knowledge.d.ts +24 -0
- package/dist/tools/knowledge.d.ts.map +1 -0
- package/dist/tools/knowledge.js +99 -0
- package/dist/tools/knowledge.js.map +1 -0
- package/dist/tools/list-flows.d.ts +21 -0
- package/dist/tools/list-flows.d.ts.map +1 -0
- package/dist/tools/list-flows.js +18 -0
- package/dist/tools/list-flows.js.map +1 -0
- package/dist/tools/list-skills.js +1 -1
- package/dist/tools/list-skills.js.map +1 -1
- package/dist/tools/manifest.d.ts.map +1 -1
- package/dist/tools/manifest.js +48 -0
- package/dist/tools/manifest.js.map +1 -1
- package/dist/tools/monitor-websocket.d.ts +1 -1
- package/dist/tools/monitor.d.ts +46 -0
- package/dist/tools/monitor.d.ts.map +1 -0
- package/dist/tools/monitor.js +213 -0
- package/dist/tools/monitor.js.map +1 -0
- package/dist/tools/news-search.d.ts +1 -1
- package/dist/tools/pdf-extract.d.ts +38 -0
- package/dist/tools/pdf-extract.d.ts.map +1 -0
- package/dist/tools/pdf-extract.js +244 -0
- package/dist/tools/pdf-extract.js.map +1 -0
- package/dist/tools/query-api.d.ts +6 -6
- package/dist/tools/readability.d.ts +2 -2
- package/dist/tools/record-flow.d.ts +39 -0
- package/dist/tools/record-flow.d.ts.map +1 -0
- package/dist/tools/record-flow.js +406 -0
- package/dist/tools/record-flow.js.map +1 -0
- package/dist/tools/reddit.d.ts +4 -4
- package/dist/tools/run-flow.d.ts +54 -0
- package/dist/tools/run-flow.d.ts.map +1 -0
- package/dist/tools/run-flow.js +47 -0
- package/dist/tools/run-flow.js.map +1 -0
- package/dist/tools/run-skill.d.ts +14 -4
- package/dist/tools/run-skill.d.ts.map +1 -1
- package/dist/tools/run-skill.js +74 -0
- package/dist/tools/run-skill.js.map +1 -1
- package/dist/tools/scrape.d.ts +9 -6
- package/dist/tools/scrape.d.ts.map +1 -1
- package/dist/tools/scrape.js +19 -1
- package/dist/tools/scrape.js.map +1 -1
- package/dist/tools/screenshot.d.ts.map +1 -1
- package/dist/tools/screenshot.js +6 -0
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/search.d.ts +1 -1
- package/dist/tools/serve-flow.d.ts +36 -0
- package/dist/tools/serve-flow.d.ts.map +1 -0
- package/dist/tools/serve-flow.js +42 -0
- package/dist/tools/serve-flow.js.map +1 -0
- package/dist/tools/snapshot.d.ts +5 -5
- package/dist/tools/snapshot.d.ts.map +1 -1
- package/dist/tools/snapshot.js +3 -0
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/validate-flow.d.ts +24 -0
- package/dist/tools/validate-flow.d.ts.map +1 -0
- package/dist/tools/validate-flow.js +23 -0
- package/dist/tools/validate-flow.js.map +1 -0
- package/dist/tools/video-search.d.ts +1 -1
- package/dist/tools/watch.d.ts +68 -0
- package/dist/tools/watch.d.ts.map +1 -0
- package/dist/tools/watch.js +224 -0
- package/dist/tools/watch.js.map +1 -0
- package/dist/tools/youtube.d.ts +2 -2
- package/dist/utils/fetcher.d.ts +13 -4
- package/dist/utils/fetcher.d.ts.map +1 -1
- package/dist/utils/fetcher.js +153 -23
- package/dist/utils/fetcher.js.map +1 -1
- package/package.json +19 -5
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getKnowledgeEngine } from "../knowledge/index.js";
|
|
3
|
+
import { toolResult } from "../utils/tool-response.js";
|
|
4
|
+
export const name = "knowledge";
|
|
5
|
+
export const description = "Show the adaptive knowledge engine stats — per-domain success rates, stealth levels, rate limits, and anti-bot detection history. Useful for debugging scraping issues and understanding which domains are problematic.";
|
|
6
|
+
export const schema = z.object({
|
|
7
|
+
domain: z
|
|
8
|
+
.string()
|
|
9
|
+
.max(500)
|
|
10
|
+
.optional()
|
|
11
|
+
.describe("Filter to a specific domain (e.g. 'example.com'). Shows all domains if omitted."),
|
|
12
|
+
sort: z
|
|
13
|
+
.enum(["domain", "success_rate", "fail_count", "last_updated"])
|
|
14
|
+
.default("last_updated")
|
|
15
|
+
.describe("Sort order for results"),
|
|
16
|
+
min_requests: z
|
|
17
|
+
.number()
|
|
18
|
+
.min(1)
|
|
19
|
+
.default(1)
|
|
20
|
+
.describe("Minimum total requests to include a domain (filters out noise)"),
|
|
21
|
+
});
|
|
22
|
+
export async function execute(input) {
|
|
23
|
+
const engine = getKnowledgeEngine();
|
|
24
|
+
await engine.load();
|
|
25
|
+
const domains = [];
|
|
26
|
+
// Access internal store via get() — scan known domains
|
|
27
|
+
// We need to read the file directly since store is private
|
|
28
|
+
const { getKnowledgeFilePath } = await import("../config.js");
|
|
29
|
+
const fs = await import("node:fs/promises");
|
|
30
|
+
let allKnowledge = {};
|
|
31
|
+
try {
|
|
32
|
+
const data = await fs.readFile(getKnowledgeFilePath(), "utf-8");
|
|
33
|
+
allKnowledge = JSON.parse(data);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// No knowledge file yet
|
|
37
|
+
}
|
|
38
|
+
let entries = Object.values(allKnowledge);
|
|
39
|
+
// Filter by domain if specified
|
|
40
|
+
if (input.domain) {
|
|
41
|
+
const filter = input.domain.toLowerCase();
|
|
42
|
+
entries = entries.filter((e) => e.domain.toLowerCase().includes(filter));
|
|
43
|
+
}
|
|
44
|
+
// Filter by minimum requests
|
|
45
|
+
entries = entries.filter((e) => e.success_count + e.fail_count >= input.min_requests);
|
|
46
|
+
// Sort
|
|
47
|
+
entries.sort((a, b) => {
|
|
48
|
+
switch (input.sort) {
|
|
49
|
+
case "domain":
|
|
50
|
+
return a.domain.localeCompare(b.domain);
|
|
51
|
+
case "success_rate": {
|
|
52
|
+
const rateA = a.success_count / Math.max(1, a.success_count + a.fail_count);
|
|
53
|
+
const rateB = b.success_count / Math.max(1, b.success_count + b.fail_count);
|
|
54
|
+
return rateB - rateA;
|
|
55
|
+
}
|
|
56
|
+
case "fail_count":
|
|
57
|
+
return b.fail_count - a.fail_count;
|
|
58
|
+
case "last_updated":
|
|
59
|
+
default:
|
|
60
|
+
return new Date(b.last_updated).getTime() - new Date(a.last_updated).getTime();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
if (entries.length === 0) {
|
|
64
|
+
return toolResult({ domains: [], total: 0, message: "No knowledge data found. Start scraping to build domain intelligence." });
|
|
65
|
+
}
|
|
66
|
+
const domainStats = entries.map((e) => {
|
|
67
|
+
const total = e.success_count + e.fail_count;
|
|
68
|
+
const successRate = total > 0 ? Math.round((e.success_count / total) * 100) : 0;
|
|
69
|
+
return {
|
|
70
|
+
domain: e.domain,
|
|
71
|
+
optimal_level: e.optimal_stealth_level,
|
|
72
|
+
success_rate: `${successRate}%`,
|
|
73
|
+
requests: total,
|
|
74
|
+
success: e.success_count,
|
|
75
|
+
failures: e.fail_count,
|
|
76
|
+
avg_response_ms: e.avg_response_time_ms,
|
|
77
|
+
rate_limit_rpm: e.safe_rate_limit,
|
|
78
|
+
antibot: e.antibot_system ?? "none",
|
|
79
|
+
captcha: e.captcha_type ?? "none",
|
|
80
|
+
needs_proxy: e.needs_proxy,
|
|
81
|
+
last_updated: e.last_updated.split("T")[0],
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
const summary = {
|
|
85
|
+
total_domains: entries.length,
|
|
86
|
+
domains_with_antibot: entries.filter((e) => e.antibot_system).length,
|
|
87
|
+
domains_needing_proxy: entries.filter((e) => e.needs_proxy).length,
|
|
88
|
+
domains_with_captcha: entries.filter((e) => e.captcha_type).length,
|
|
89
|
+
total_requests: entries.reduce((sum, e) => sum + e.success_count + e.fail_count, 0),
|
|
90
|
+
overall_success_rate: (() => {
|
|
91
|
+
const totalS = entries.reduce((s, e) => s + e.success_count, 0);
|
|
92
|
+
const totalF = entries.reduce((s, e) => s + e.fail_count, 0);
|
|
93
|
+
const t = totalS + totalF;
|
|
94
|
+
return t > 0 ? `${Math.round((totalS / t) * 100)}%` : "0%";
|
|
95
|
+
})(),
|
|
96
|
+
};
|
|
97
|
+
return toolResult({ summary, domains: domainStats });
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=knowledge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/tools/knowledge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const name = "list_flows";
|
|
3
|
+
export declare const description = "List saved Imperium Flows across project-local and global flow storage.";
|
|
4
|
+
export declare const schema: z.ZodObject<{
|
|
5
|
+
flows_dir: z.ZodOptional<z.ZodString>;
|
|
6
|
+
global: z.ZodDefault<z.ZodBoolean>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
global: boolean;
|
|
9
|
+
flows_dir?: string | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
flows_dir?: string | undefined;
|
|
12
|
+
global?: boolean | undefined;
|
|
13
|
+
}>;
|
|
14
|
+
export type ListFlowsInput = z.infer<typeof schema>;
|
|
15
|
+
export declare function execute(input: ListFlowsInput): Promise<{
|
|
16
|
+
content: {
|
|
17
|
+
type: "text";
|
|
18
|
+
text: string;
|
|
19
|
+
}[];
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=list-flows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-flows.d.ts","sourceRoot":"","sources":["../../src/tools/list-flows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,IAAI,eAAe,CAAC;AACjC,eAAO,MAAM,WAAW,4EAA4E,CAAC;AAErG,eAAO,MAAM,MAAM;;;;;;;;;EAGjB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAEpD,wBAAsB,OAAO,CAAC,KAAK,EAAE,cAAc;;;;;GAOlD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResult } from "../utils/tool-response.js";
|
|
3
|
+
import { listFlows, resolveFlowsDir } from "../flows/index.js";
|
|
4
|
+
export const name = "list_flows";
|
|
5
|
+
export const description = "List saved Imperium Flows across project-local and global flow storage.";
|
|
6
|
+
export const schema = z.object({
|
|
7
|
+
flows_dir: z.string().optional().describe("Flow storage directory override"),
|
|
8
|
+
global: z.boolean().default(false).describe("Use ~/.imperium-crawl/flows instead of ./flows"),
|
|
9
|
+
});
|
|
10
|
+
export async function execute(input) {
|
|
11
|
+
const flows = await listFlows({ flowsDir: input.flows_dir, global: input.global });
|
|
12
|
+
return toolResult({
|
|
13
|
+
total: flows.length,
|
|
14
|
+
storage: input.flows_dir || input.global ? resolveFlowsDir({ flowsDir: input.flows_dir, global: input.global }) : "project + global",
|
|
15
|
+
flows,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=list-flows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-flows.js","sourceRoot":"","sources":["../../src/tools/list-flows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAC;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,yEAAyE,CAAC;AAErG,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC5E,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;CAC9F,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAqB;IACjD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACnF,OAAO,UAAU,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,OAAO,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB;QACpI,KAAK;KACN,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -25,7 +25,7 @@ export async function execute(_input) {
|
|
|
25
25
|
text: JSON.stringify({
|
|
26
26
|
total: skills.length,
|
|
27
27
|
skills: skills.map((s) => {
|
|
28
|
-
const tool = s.tool ?? "extract";
|
|
28
|
+
const tool = s.tool ?? s.type ?? "extract";
|
|
29
29
|
const base = {
|
|
30
30
|
name: s.name,
|
|
31
31
|
description: s.description,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-skills.js","sourceRoot":"","sources":["../../src/tools/list-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,WAAW,GAAG,8EAA8E,CAAC;AAE1G,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAInC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAuB;IACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAEvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO,EAAE,kDAAkD;wBAC3D,MAAM,EAAE,EAAE;qBACX,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,KAAK,EAAE,MAAM,CAAC,MAAM;oBACpB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBACvB,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"list-skills.js","sourceRoot":"","sources":["../../src/tools/list-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,WAAW,GAAG,8EAA8E,CAAC;AAE1G,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAInC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAuB;IACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAEvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO,EAAE,kDAAkD;wBAC3D,MAAM,EAAE,EAAE;qBACX,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,KAAK,EAAE,MAAM,CAAC,MAAM;oBACpB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBACvB,MAAM,IAAI,GAAI,CAAsC,CAAC,IAAI,IAAK,CAAuB,CAAC,IAAI,IAAI,SAAS,CAAC;wBACxG,MAAM,IAAI,GAAG;4BACX,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,WAAW,EAAE,CAAC,CAAC,WAAW;4BAC1B,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,IAAI;4BACJ,UAAU,EAAE,CAAC,CAAC,UAAU;4BACxB,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;yBACpC,CAAC;wBAEF,wEAAwE;wBACxE,IAAI,IAAI,KAAK,SAAS,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;4BAC3C,MAAM,aAAa,GAAG,CAAuB,CAAC;4BAC9C,OAAO;gCACL,GAAG,IAAI;gCACP,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;gCACnD,cAAc,EAAE,CAAC,CAAC,aAAa,CAAC,UAAU;6BAC3C,CAAC;wBACJ,CAAC;wBAED,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC;iBACH,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/tools/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/tools/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,aAAa,EA0MxC,CAAC"}
|
package/dist/tools/manifest.js
CHANGED
|
@@ -122,14 +122,62 @@ export const TOOL_MANIFEST = [
|
|
|
122
122
|
cmd: "instagram",
|
|
123
123
|
description: "Search Instagram profiles, get profile details with engagement metrics, and discover influencers by niche/location. Search/discover require BRAVE_API_KEY.",
|
|
124
124
|
},
|
|
125
|
+
// Intelligence
|
|
126
|
+
{
|
|
127
|
+
cmd: "knowledge",
|
|
128
|
+
description: "Show adaptive knowledge engine stats — per-domain success rates, stealth levels, rate limits, and anti-bot detection history. Useful for debugging scraping issues.",
|
|
129
|
+
},
|
|
125
130
|
// Media & feeds
|
|
126
131
|
{
|
|
127
132
|
cmd: "download",
|
|
128
133
|
description: "Download media files (images, videos) from URLs. Supports direct files, page media extraction (og:image, all images), YouTube, TikTok, and bulk downloads.",
|
|
129
134
|
},
|
|
135
|
+
{
|
|
136
|
+
cmd: "batch-download",
|
|
137
|
+
description: "Download multiple files (PDFs, images, documents) in parallel with session cookie support. Uses L1 HTTP fetch — 10x faster than browser downloads.",
|
|
138
|
+
},
|
|
130
139
|
{
|
|
131
140
|
cmd: "rss",
|
|
132
141
|
description: "Fetch and parse RSS/Atom feeds. Returns structured items with title, link, date, author, content, and categories.",
|
|
133
142
|
},
|
|
143
|
+
// Documents
|
|
144
|
+
{
|
|
145
|
+
cmd: "pdf-extract",
|
|
146
|
+
description: "Extract text, pages, tables, and metadata from a local or remote PDF. Native text-layer strategy (pdfjs-dist). OCR + Vision fallbacks deferred to v2.6.0.",
|
|
147
|
+
},
|
|
148
|
+
// Change tracking
|
|
149
|
+
{
|
|
150
|
+
cmd: "watch",
|
|
151
|
+
description: "One-shot change detector: scrape a URL, hash its content, compare against the last snapshot, and fire a webhook on change. Run via cron for periodic checks.",
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
cmd: "monitor",
|
|
155
|
+
description: "Portfolio-level change tracker across many URLs grouped by topic. Emits a markdown digest of meaningful changes per run.",
|
|
156
|
+
},
|
|
157
|
+
// Imperium Flows
|
|
158
|
+
{
|
|
159
|
+
cmd: "record-flow",
|
|
160
|
+
description: "Record a headed browser workflow and save it as a generic Imperium Flow family/variant.",
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
cmd: "run-flow",
|
|
164
|
+
description: "Run a saved Imperium Flow by family/variant with runtime input JSON, CAPTCHA handling, and evidence collection.",
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
cmd: "serve-flow",
|
|
168
|
+
description: "Expose saved Imperium Flows as a local HTTP API.",
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
cmd: "list-flows",
|
|
172
|
+
description: "List saved Imperium Flows across project-local and global storage.",
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
cmd: "inspect-flow",
|
|
176
|
+
description: "Inspect one Imperium Flow definition by family/variant.",
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
cmd: "validate-flow",
|
|
180
|
+
description: "Validate an Imperium Flow schema and report its inputs, steps, and storage path.",
|
|
181
|
+
},
|
|
134
182
|
];
|
|
135
183
|
//# sourceMappingURL=manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/tools/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,WAAW;IACX;QACE,GAAG,EAAE,QAAQ;QACb,WAAW,EACT,sKAAsK;KACzK;IACD;QACE,GAAG,EAAE,OAAO;QACZ,WAAW,EACT,qKAAqK;KACxK;IACD;QACE,GAAG,EAAE,KAAK;QACV,WAAW,EACT,8GAA8G;KACjH;IACD;QACE,GAAG,EAAE,SAAS;QACd,WAAW,EACT,6JAA6J;KAChK;IACD;QACE,GAAG,EAAE,aAAa;QAClB,WAAW,EACT,+HAA+H;KAClI;IACD;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EACT,iFAAiF;KACpF;IACD,SAAS;IACT;QACE,GAAG,EAAE,QAAQ;QACb,WAAW,EACT,qFAAqF;KACxF;IACD;QACE,GAAG,EAAE,aAAa;QAClB,WAAW,EAAE,0EAA0E;KACxF;IACD;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EAAE,mEAAmE;KACjF;IACD;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EAAE,mEAAmE;KACjF;IACD,SAAS;IACT;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EACT,4IAA4I;KAC/I;IACD;QACE,GAAG,EAAE,WAAW;QAChB,WAAW,EAAE,+EAA+E;KAC7F;IACD;QACE,GAAG,EAAE,aAAa;QAClB,WAAW,EAAE,yDAAyD;KACvE;IACD,gBAAgB;IAChB;QACE,GAAG,EAAE,eAAe;QACpB,WAAW,EACT,mKAAmK;KACtK;IACD;QACE,GAAG,EAAE,WAAW;QAChB,WAAW,EACT,+GAA+G;KAClH;IACD;QACE,GAAG,EAAE,mBAAmB;QACxB,WAAW,EACT,4GAA4G;KAC/G;IACD,KAAK;IACL;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EACT,oJAAoJ;KACvJ;IACD,cAAc;IACd;QACE,GAAG,EAAE,UAAU;QACf,WAAW,EACT,6IAA6I;KAChJ;IACD;QACE,GAAG,EAAE,UAAU;QACf,WAAW,EACT,mSAAmS;KACtS;IACD,QAAQ;IACR;QACE,GAAG,EAAE,cAAc;QACnB,WAAW,EACT,qGAAqG;KACxG;IACD;QACE,GAAG,EAAE,WAAW;QAChB,WAAW,EACT,4DAA4D;KAC/D;IACD;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EAAE,wEAAwE;KACtF;IACD;QACE,GAAG,EAAE,YAAY;QACjB,WAAW,EAAE,6DAA6D;KAC3E;IACD,eAAe;IACf;QACE,GAAG,EAAE,SAAS;QACd,WAAW,EACT,iHAAiH;KACpH;IACD;QACE,GAAG,EAAE,QAAQ;QACb,WAAW,EACT,8EAA8E;KACjF;IACD;QACE,GAAG,EAAE,WAAW;QAChB,WAAW,EACT,4JAA4J;KAC/J;IACD,gBAAgB;IAChB;QACE,GAAG,EAAE,UAAU;QACf,WAAW,EACT,4JAA4J;KAC/J;IACD;QACE,GAAG,EAAE,KAAK;QACV,WAAW,EACT,mHAAmH;KACtH;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/tools/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,8 +19,8 @@ export declare const schema: z.ZodObject<{
|
|
|
19
19
|
filter_url?: string | undefined;
|
|
20
20
|
}, {
|
|
21
21
|
url: string;
|
|
22
|
-
proxy?: string | undefined;
|
|
23
22
|
timeout?: number | undefined;
|
|
23
|
+
proxy?: string | undefined;
|
|
24
24
|
chrome_profile?: string | undefined;
|
|
25
25
|
duration_seconds?: number | undefined;
|
|
26
26
|
max_messages?: number | undefined;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* monitor — portfolio-level change tracker over many URLs, grouped by topic.
|
|
3
|
+
*
|
|
4
|
+
* v2.5.0: minimal scope — JSON config parser + markdown digest generator.
|
|
5
|
+
* Internally reuses the watch tool's runWatchOnce() for per-URL change detection.
|
|
6
|
+
* Filters out sub-threshold churn (min_change_pct) and emits a single digest
|
|
7
|
+
* file per run, listing the top changes per topic.
|
|
8
|
+
*
|
|
9
|
+
* YAML config + LLM summarisation are deferred to v2.6.0.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
export declare const name = "monitor";
|
|
13
|
+
export declare const description = "Portfolio-level change tracker: read a JSON config of topics and URLs, run watch on each, emit a markdown digest of changes.";
|
|
14
|
+
export declare const schema: z.ZodObject<{
|
|
15
|
+
config: z.ZodOptional<z.ZodString>;
|
|
16
|
+
urls: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
17
|
+
topic: z.ZodOptional<z.ZodString>;
|
|
18
|
+
output_dir: z.ZodDefault<z.ZodString>;
|
|
19
|
+
min_change_pct: z.ZodDefault<z.ZodNumber>;
|
|
20
|
+
export_format: z.ZodDefault<z.ZodEnum<["markdown"]>>;
|
|
21
|
+
hash_on: z.ZodDefault<z.ZodEnum<["content", "readability", "markdown"]>>;
|
|
22
|
+
}, "strip", z.ZodTypeAny, {
|
|
23
|
+
output_dir: string;
|
|
24
|
+
hash_on: "readability" | "markdown" | "content";
|
|
25
|
+
min_change_pct: number;
|
|
26
|
+
export_format: "markdown";
|
|
27
|
+
urls?: string[] | undefined;
|
|
28
|
+
config?: string | undefined;
|
|
29
|
+
topic?: string | undefined;
|
|
30
|
+
}, {
|
|
31
|
+
urls?: string[] | undefined;
|
|
32
|
+
output_dir?: string | undefined;
|
|
33
|
+
hash_on?: "readability" | "markdown" | "content" | undefined;
|
|
34
|
+
config?: string | undefined;
|
|
35
|
+
topic?: string | undefined;
|
|
36
|
+
min_change_pct?: number | undefined;
|
|
37
|
+
export_format?: "markdown" | undefined;
|
|
38
|
+
}>;
|
|
39
|
+
export type MonitorInput = z.infer<typeof schema>;
|
|
40
|
+
export declare function execute(input: MonitorInput): Promise<{
|
|
41
|
+
content: {
|
|
42
|
+
type: "text";
|
|
43
|
+
text: string;
|
|
44
|
+
}[];
|
|
45
|
+
}>;
|
|
46
|
+
//# sourceMappingURL=monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/tools/monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,IAAI,YAAY,CAAC;AAE9B,eAAO,MAAM,WAAW,iIACwG,CAAC;AAEjI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;EA+BjB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAwGlD,wBAAsB,OAAO,CAAC,KAAK,EAAE,YAAY;;;;;GAsFhD"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* monitor — portfolio-level change tracker over many URLs, grouped by topic.
|
|
3
|
+
*
|
|
4
|
+
* v2.5.0: minimal scope — JSON config parser + markdown digest generator.
|
|
5
|
+
* Internally reuses the watch tool's runWatchOnce() for per-URL change detection.
|
|
6
|
+
* Filters out sub-threshold churn (min_change_pct) and emits a single digest
|
|
7
|
+
* file per run, listing the top changes per topic.
|
|
8
|
+
*
|
|
9
|
+
* YAML config + LLM summarisation are deferred to v2.6.0.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
13
|
+
import { existsSync } from "node:fs";
|
|
14
|
+
import { join, resolve as resolvePath } from "node:path";
|
|
15
|
+
import { toolResult, errorResult } from "../utils/tool-response.js";
|
|
16
|
+
import { debugLog } from "../utils/debug.js";
|
|
17
|
+
import { runWatchOnce } from "./watch.js";
|
|
18
|
+
export const name = "monitor";
|
|
19
|
+
export const description = "Portfolio-level change tracker: read a JSON config of topics and URLs, run watch on each, emit a markdown digest of changes.";
|
|
20
|
+
export const schema = z.object({
|
|
21
|
+
config: z
|
|
22
|
+
.string()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("Path to JSON config (topics with URL lists). Mutually exclusive with --urls/--topic."),
|
|
25
|
+
urls: z
|
|
26
|
+
.array(z.string())
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Single-topic shortcut: list of URLs. Repeat --urls."),
|
|
29
|
+
topic: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("Topic name when using --urls"),
|
|
33
|
+
output_dir: z
|
|
34
|
+
.string()
|
|
35
|
+
.default("./data/monitor")
|
|
36
|
+
.describe("Output dir for state, snapshots, and digests"),
|
|
37
|
+
min_change_pct: z
|
|
38
|
+
.number()
|
|
39
|
+
.min(0)
|
|
40
|
+
.max(100)
|
|
41
|
+
.default(5)
|
|
42
|
+
.describe("Minimum % of lines changed to count as a 'meaningful' change"),
|
|
43
|
+
export_format: z
|
|
44
|
+
.enum(["markdown"])
|
|
45
|
+
.default("markdown")
|
|
46
|
+
.describe("Digest format (markdown only in v2.5.0)"),
|
|
47
|
+
hash_on: z
|
|
48
|
+
.enum(["content", "readability", "markdown"])
|
|
49
|
+
.default("readability")
|
|
50
|
+
.describe("Passed through to watch — what to hash per URL"),
|
|
51
|
+
});
|
|
52
|
+
async function loadConfig(input) {
|
|
53
|
+
if (input.config) {
|
|
54
|
+
const path = resolvePath(input.config);
|
|
55
|
+
if (!existsSync(path))
|
|
56
|
+
throw new Error(`Config not found: ${path}`);
|
|
57
|
+
const raw = await readFile(path, "utf-8");
|
|
58
|
+
const parsed = JSON.parse(raw);
|
|
59
|
+
if (!parsed.topics || !Array.isArray(parsed.topics)) {
|
|
60
|
+
throw new Error("Config missing 'topics' array");
|
|
61
|
+
}
|
|
62
|
+
return { topics: parsed.topics };
|
|
63
|
+
}
|
|
64
|
+
if (input.urls && input.urls.length > 0) {
|
|
65
|
+
return {
|
|
66
|
+
topics: [{ name: input.topic || "default", urls: input.urls }],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
throw new Error("Must provide --config OR --urls");
|
|
70
|
+
}
|
|
71
|
+
function computeChangePct(prev, next) {
|
|
72
|
+
if (!prev)
|
|
73
|
+
return 100;
|
|
74
|
+
const prevLines = prev.split("\n");
|
|
75
|
+
const nextLines = next.split("\n");
|
|
76
|
+
const prevSet = new Set(prevLines);
|
|
77
|
+
const nextSet = new Set(nextLines);
|
|
78
|
+
let removed = 0;
|
|
79
|
+
let added = 0;
|
|
80
|
+
for (const l of prevLines)
|
|
81
|
+
if (!nextSet.has(l))
|
|
82
|
+
removed++;
|
|
83
|
+
for (const l of nextLines)
|
|
84
|
+
if (!prevSet.has(l))
|
|
85
|
+
added++;
|
|
86
|
+
const total = Math.max(prevLines.length, nextLines.length, 1);
|
|
87
|
+
return ((removed + added) / (2 * total)) * 100;
|
|
88
|
+
}
|
|
89
|
+
function renderMarkdownDigest(reports, generatedAt, minPct) {
|
|
90
|
+
const lines = [];
|
|
91
|
+
lines.push(`# Monitor digest — ${generatedAt.split("T")[0]}`);
|
|
92
|
+
lines.push("");
|
|
93
|
+
lines.push(`Generated: ${generatedAt}`);
|
|
94
|
+
lines.push(`Threshold: ${minPct}% line change`);
|
|
95
|
+
lines.push("");
|
|
96
|
+
const totalMeaningful = reports.reduce((s, r) => s + r.meaningful_changes, 0);
|
|
97
|
+
lines.push(`**${totalMeaningful}** meaningful change(s) across **${reports.length}** topic(s).`);
|
|
98
|
+
lines.push("");
|
|
99
|
+
for (const report of reports) {
|
|
100
|
+
lines.push(`## ${report.name}`);
|
|
101
|
+
lines.push(`- URLs checked: ${report.urls_checked}`);
|
|
102
|
+
lines.push(`- Meaningful changes: ${report.meaningful_changes}`);
|
|
103
|
+
lines.push("");
|
|
104
|
+
const meaningful = report.changes.filter((c) => c.changed && c.change_pct >= minPct);
|
|
105
|
+
if (meaningful.length === 0) {
|
|
106
|
+
lines.push("_No meaningful changes._");
|
|
107
|
+
lines.push("");
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
for (const c of meaningful) {
|
|
111
|
+
lines.push(`### ${c.url}`);
|
|
112
|
+
lines.push(`- Change: ${c.change_pct.toFixed(1)}% of lines`);
|
|
113
|
+
lines.push(`- Previous: \`${c.previous_hash?.slice(0, 12) ?? "(none)"}\``);
|
|
114
|
+
lines.push(`- Current: \`${c.current_hash.slice(0, 12)}\``);
|
|
115
|
+
lines.push("");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return lines.join("\n");
|
|
119
|
+
}
|
|
120
|
+
export async function execute(input) {
|
|
121
|
+
try {
|
|
122
|
+
const config = await loadConfig(input);
|
|
123
|
+
const outDir = resolvePath(input.output_dir);
|
|
124
|
+
await mkdir(outDir, { recursive: true });
|
|
125
|
+
const reports = [];
|
|
126
|
+
for (const topic of config.topics) {
|
|
127
|
+
const topicDir = join(outDir, slug(topic.name));
|
|
128
|
+
await mkdir(topicDir, { recursive: true });
|
|
129
|
+
const threshold = topic.min_change_pct ?? input.min_change_pct;
|
|
130
|
+
const changes = [];
|
|
131
|
+
for (const url of topic.urls) {
|
|
132
|
+
try {
|
|
133
|
+
const watchInput = {
|
|
134
|
+
url,
|
|
135
|
+
output_dir: topicDir,
|
|
136
|
+
hash_on: input.hash_on,
|
|
137
|
+
diff_format: "unified",
|
|
138
|
+
one_shot: true,
|
|
139
|
+
};
|
|
140
|
+
const wr = await runWatchOnce(watchInput);
|
|
141
|
+
// For change %, load previous snapshot next to current one if it exists
|
|
142
|
+
let pct = 0;
|
|
143
|
+
if (wr.first_run) {
|
|
144
|
+
pct = 0;
|
|
145
|
+
}
|
|
146
|
+
else if (wr.changed) {
|
|
147
|
+
// Re-derive from snapshot files written by runWatchOnce
|
|
148
|
+
const prevPath = wr.snapshot_file.replace(/\.snapshot\.txt$/, ".previous.txt");
|
|
149
|
+
let prevSig = null;
|
|
150
|
+
if (existsSync(prevPath)) {
|
|
151
|
+
try {
|
|
152
|
+
prevSig = await readFile(prevPath, "utf-8");
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
prevSig = null;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
let currSig = "";
|
|
159
|
+
try {
|
|
160
|
+
currSig = await readFile(wr.snapshot_file, "utf-8");
|
|
161
|
+
}
|
|
162
|
+
catch { /* noop */ }
|
|
163
|
+
pct = computeChangePct(prevSig, currSig);
|
|
164
|
+
}
|
|
165
|
+
changes.push({
|
|
166
|
+
url,
|
|
167
|
+
changed: wr.changed,
|
|
168
|
+
first_run: wr.first_run,
|
|
169
|
+
change_pct: pct,
|
|
170
|
+
previous_hash: wr.previous_hash,
|
|
171
|
+
current_hash: wr.current_hash,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
catch (urlErr) {
|
|
175
|
+
debugLog("monitor", `failed for ${url}`, urlErr);
|
|
176
|
+
changes.push({
|
|
177
|
+
url,
|
|
178
|
+
changed: false,
|
|
179
|
+
first_run: false,
|
|
180
|
+
change_pct: 0,
|
|
181
|
+
previous_hash: null,
|
|
182
|
+
current_hash: "",
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const meaningful = changes.filter((c) => c.changed && c.change_pct >= threshold).length;
|
|
187
|
+
reports.push({
|
|
188
|
+
name: topic.name,
|
|
189
|
+
urls_checked: topic.urls.length,
|
|
190
|
+
changes,
|
|
191
|
+
meaningful_changes: meaningful,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
const generatedAt = new Date().toISOString();
|
|
195
|
+
const digestBody = renderMarkdownDigest(reports, generatedAt, input.min_change_pct);
|
|
196
|
+
const digestFile = join(outDir, `digest-${generatedAt.replace(/[:.]/g, "-")}.md`);
|
|
197
|
+
await writeFile(digestFile, digestBody, "utf-8");
|
|
198
|
+
return toolResult({
|
|
199
|
+
generated_at: generatedAt,
|
|
200
|
+
topics: reports,
|
|
201
|
+
digest_file: digestFile,
|
|
202
|
+
format: input.export_format,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
debugLog("monitor", "failed", err);
|
|
207
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function slug(s) {
|
|
211
|
+
return s.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 40) || "topic";
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/tools/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,8 @@ export declare const schema: z.ZodObject<{
|
|
|
13
13
|
freshness?: "pd" | "pw" | "pm" | "py" | undefined;
|
|
14
14
|
}, {
|
|
15
15
|
query: string;
|
|
16
|
-
country?: string | undefined;
|
|
17
16
|
count?: number | undefined;
|
|
17
|
+
country?: string | undefined;
|
|
18
18
|
freshness?: "pd" | "pw" | "pm" | "py" | undefined;
|
|
19
19
|
}>;
|
|
20
20
|
export type NewsSearchInput = z.infer<typeof schema>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pdf-extract — extract text, pages, tables, and metadata from a PDF.
|
|
3
|
+
*
|
|
4
|
+
* v2.5.0: native strategy only (pdfjs-dist text layer).
|
|
5
|
+
* OCR + Claude Vision fallbacks are deferred to v2.6.0.
|
|
6
|
+
*
|
|
7
|
+
* Accepts a local path or a remote URL (auto-download to tmp).
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
export declare const name = "pdf_extract";
|
|
11
|
+
export declare const description = "Extract text, pages, tables, and metadata from a local or remote PDF. Native text-layer strategy (pdfjs-dist). OCR/Vision fallbacks deferred to v2.6.0.";
|
|
12
|
+
export declare const schema: z.ZodObject<{
|
|
13
|
+
input: z.ZodString;
|
|
14
|
+
output: z.ZodDefault<z.ZodString>;
|
|
15
|
+
preserve_layout: z.ZodDefault<z.ZodBoolean>;
|
|
16
|
+
extract_tables: z.ZodDefault<z.ZodBoolean>;
|
|
17
|
+
max_pages: z.ZodDefault<z.ZodNumber>;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
input: string;
|
|
20
|
+
output: string;
|
|
21
|
+
max_pages: number;
|
|
22
|
+
preserve_layout: boolean;
|
|
23
|
+
extract_tables: boolean;
|
|
24
|
+
}, {
|
|
25
|
+
input: string;
|
|
26
|
+
output?: string | undefined;
|
|
27
|
+
max_pages?: number | undefined;
|
|
28
|
+
preserve_layout?: boolean | undefined;
|
|
29
|
+
extract_tables?: boolean | undefined;
|
|
30
|
+
}>;
|
|
31
|
+
export type PdfExtractInput = z.infer<typeof schema>;
|
|
32
|
+
export declare function execute(input: PdfExtractInput): Promise<{
|
|
33
|
+
content: {
|
|
34
|
+
type: "text";
|
|
35
|
+
text: string;
|
|
36
|
+
}[];
|
|
37
|
+
}>;
|
|
38
|
+
//# sourceMappingURL=pdf-extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf-extract.d.ts","sourceRoot":"","sources":["../../src/tools/pdf-extract.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAElC,eAAO,MAAM,WAAW,4JACmI,CAAC;AAE5J,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;EAsBjB,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AA8JrD,wBAAsB,OAAO,CAAC,KAAK,EAAE,eAAe;;;;;GAyGnD"}
|