webforai 2.1.0 → 3.0.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 (154) hide show
  1. package/README.md +63 -1
  2. package/dist/adapters/index.js +58 -0
  3. package/dist/adapters/registry.js +149 -0
  4. package/dist/adapters/sites/declarative.js +178 -0
  5. package/dist/adapters/sites/hackernews.js +94 -0
  6. package/dist/adapters/sites/youtube.js +165 -0
  7. package/dist/adapters/types.js +0 -0
  8. package/dist/bin.js +3199 -399
  9. package/dist/cjs/adapters/index.js +86 -0
  10. package/dist/cjs/adapters/registry.js +178 -0
  11. package/dist/cjs/adapters/sites/declarative.js +202 -0
  12. package/dist/cjs/adapters/sites/hackernews.js +117 -0
  13. package/dist/cjs/adapters/sites/youtube.js +191 -0
  14. package/dist/cjs/adapters/types.js +16 -0
  15. package/dist/cjs/constants.js +2 -2
  16. package/dist/cjs/extractors/index.js +8 -0
  17. package/dist/cjs/extractors/lib/constants.js +186 -0
  18. package/dist/cjs/extractors/lib/sanitize.js +425 -0
  19. package/dist/cjs/extractors/lib/score.js +264 -0
  20. package/dist/cjs/extractors/lib/terminators.js +131 -0
  21. package/dist/cjs/extractors/lib/ui-chrome.js +119 -0
  22. package/dist/cjs/extractors/pipeExtractors.js +12 -9
  23. package/dist/cjs/extractors/presets/auto.js +44 -0
  24. package/dist/cjs/extractors/presets/minimal-filter.js +27 -48
  25. package/dist/cjs/extractors/presets/takumi.js +84 -122
  26. package/dist/cjs/html-to-markdown.js +44 -7
  27. package/dist/cjs/html-to-mdast.js +9 -1
  28. package/dist/cjs/index.js +33 -2
  29. package/dist/cjs/mdast-handlers/custom-a-handler.js +25 -9
  30. package/dist/cjs/mdast-handlers/custom-img-handler.js +23 -1
  31. package/dist/cjs/mdast-handlers/custom-table-handler.js +16 -0
  32. package/dist/cjs/mdast-handlers/definition-list-handler.js +99 -0
  33. package/dist/cjs/mdast-handlers/math-handler.js +12 -3
  34. package/dist/cjs/mdast-handlers/sup-sub-handler.js +39 -0
  35. package/dist/cjs/metadata/index.js +223 -0
  36. package/dist/cjs/normalize/index.js +168 -0
  37. package/dist/cjs/platform/client.js +147 -0
  38. package/dist/cjs/platform/error.js +36 -0
  39. package/dist/cjs/platform/fetch.js +37 -0
  40. package/dist/cjs/platform/index.js +40 -0
  41. package/dist/cjs/platform/types.js +34 -0
  42. package/dist/cjs/utils/hast-fast.js +284 -0
  43. package/dist/constants.js +2 -2
  44. package/dist/extractors/index.js +5 -0
  45. package/dist/extractors/lib/constants.js +150 -0
  46. package/dist/extractors/lib/sanitize.js +415 -0
  47. package/dist/extractors/lib/score.js +242 -0
  48. package/dist/extractors/lib/terminators.js +107 -0
  49. package/dist/extractors/lib/ui-chrome.js +96 -0
  50. package/dist/extractors/pipeExtractors.js +12 -9
  51. package/dist/extractors/presets/auto.js +20 -0
  52. package/dist/extractors/presets/minimal-filter.js +35 -47
  53. package/dist/extractors/presets/takumi.js +91 -122
  54. package/dist/html-to-markdown.js +42 -6
  55. package/dist/html-to-mdast.js +9 -1
  56. package/dist/index.js +34 -3
  57. package/dist/mdast-handlers/custom-a-handler.js +25 -9
  58. package/dist/mdast-handlers/custom-img-handler.js +23 -1
  59. package/dist/mdast-handlers/custom-table-handler.js +16 -0
  60. package/dist/mdast-handlers/definition-list-handler.js +76 -0
  61. package/dist/mdast-handlers/math-handler.js +12 -3
  62. package/dist/mdast-handlers/sup-sub-handler.js +16 -0
  63. package/dist/metadata/index.js +198 -0
  64. package/dist/normalize/index.js +149 -0
  65. package/dist/platform/client.js +125 -0
  66. package/dist/platform/error.js +13 -0
  67. package/dist/platform/fetch.js +14 -0
  68. package/dist/platform/index.js +19 -0
  69. package/dist/platform/types.js +9 -0
  70. package/dist/types/adapters/index.d.ts +24 -0
  71. package/dist/types/adapters/index.js.map +1 -0
  72. package/dist/types/adapters/registry.d.ts +35 -0
  73. package/dist/types/adapters/registry.js.map +1 -0
  74. package/dist/types/adapters/sites/declarative.d.ts +13 -0
  75. package/dist/types/adapters/sites/declarative.js.map +1 -0
  76. package/dist/types/adapters/sites/hackernews.d.ts +13 -0
  77. package/dist/types/adapters/sites/hackernews.js.map +1 -0
  78. package/dist/types/adapters/sites/youtube.d.ts +31 -0
  79. package/dist/types/adapters/sites/youtube.js.map +1 -0
  80. package/dist/types/adapters/types.d.ts +99 -0
  81. package/dist/types/adapters/types.js.map +1 -0
  82. package/dist/types/cli/bin.js.map +1 -1
  83. package/dist/types/cli/commands/skill/content.d.ts +9 -0
  84. package/dist/types/cli/commands/skill/content.js.map +1 -0
  85. package/dist/types/cli/commands/skill/index.d.ts +19 -0
  86. package/dist/types/cli/commands/skill/index.js.map +1 -0
  87. package/dist/types/cli/commands/webforai/interactive.d.ts +7 -0
  88. package/dist/types/cli/commands/webforai/interactive.js.map +1 -0
  89. package/dist/types/cli/commands/webforai/loadHtml.js.map +1 -1
  90. package/dist/types/cli/commands/webforai/options.d.ts +55 -0
  91. package/dist/types/cli/commands/webforai/options.js.map +1 -0
  92. package/dist/types/cli/commands/webforai/run.d.ts +10 -0
  93. package/dist/types/cli/commands/webforai/run.js.map +1 -0
  94. package/dist/types/cli/constants.d.ts +14 -4
  95. package/dist/types/cli/constants.js.map +1 -1
  96. package/dist/types/cli/helpers/selectExtractMode.js.map +1 -1
  97. package/dist/types/cli/helpers/selectLoader.js.map +1 -1
  98. package/dist/types/constants.d.ts +7 -1
  99. package/dist/types/constants.js.map +1 -1
  100. package/dist/types/extractors/index.d.ts +2 -0
  101. package/dist/types/extractors/index.js.map +1 -1
  102. package/dist/types/extractors/lib/constants.d.ts +81 -0
  103. package/dist/types/extractors/lib/constants.js.map +1 -0
  104. package/dist/types/extractors/lib/sanitize.d.ts +66 -0
  105. package/dist/types/extractors/lib/sanitize.js.map +1 -0
  106. package/dist/types/extractors/lib/score.d.ts +85 -0
  107. package/dist/types/extractors/lib/score.js.map +1 -0
  108. package/dist/types/extractors/lib/terminators.d.ts +26 -0
  109. package/dist/types/extractors/lib/terminators.js.map +1 -0
  110. package/dist/types/extractors/lib/ui-chrome.d.ts +18 -0
  111. package/dist/types/extractors/lib/ui-chrome.js.map +1 -0
  112. package/dist/types/extractors/pipeExtractors.d.ts +5 -0
  113. package/dist/types/extractors/pipeExtractors.js.map +1 -1
  114. package/dist/types/extractors/presets/auto.d.ts +30 -0
  115. package/dist/types/extractors/presets/auto.js.map +1 -0
  116. package/dist/types/extractors/presets/minimal-filter.d.ts +10 -2
  117. package/dist/types/extractors/presets/minimal-filter.js.map +1 -1
  118. package/dist/types/extractors/presets/takumi.d.ts +19 -3
  119. package/dist/types/extractors/presets/takumi.js.map +1 -1
  120. package/dist/types/extractors/types.d.ts +8 -0
  121. package/dist/types/html-to-markdown.d.ts +38 -0
  122. package/dist/types/html-to-markdown.js.map +1 -1
  123. package/dist/types/html-to-mdast.d.ts +11 -0
  124. package/dist/types/html-to-mdast.js.map +1 -1
  125. package/dist/types/index.d.ts +6 -3
  126. package/dist/types/index.js.map +1 -1
  127. package/dist/types/mdast-handlers/custom-a-handler.js.map +1 -1
  128. package/dist/types/mdast-handlers/custom-img-handler.js.map +1 -1
  129. package/dist/types/mdast-handlers/custom-table-handler.js.map +1 -1
  130. package/dist/types/mdast-handlers/definition-list-handler.d.ts +13 -0
  131. package/dist/types/mdast-handlers/definition-list-handler.js.map +1 -0
  132. package/dist/types/mdast-handlers/math-handler.js.map +1 -1
  133. package/dist/types/mdast-handlers/sup-sub-handler.d.ts +10 -0
  134. package/dist/types/mdast-handlers/sup-sub-handler.js.map +1 -0
  135. package/dist/types/metadata/index.d.ts +47 -0
  136. package/dist/types/metadata/index.js.map +1 -0
  137. package/dist/types/normalize/index.d.ts +53 -0
  138. package/dist/types/normalize/index.js.map +1 -0
  139. package/dist/types/platform/client.d.ts +54 -0
  140. package/dist/types/platform/client.js.map +1 -0
  141. package/dist/types/platform/error.d.ts +20 -0
  142. package/dist/types/platform/error.js.map +1 -0
  143. package/dist/types/platform/fetch.d.ts +34 -0
  144. package/dist/types/platform/fetch.js.map +1 -0
  145. package/dist/types/platform/index.d.ts +4 -0
  146. package/dist/types/platform/index.js.map +1 -0
  147. package/dist/types/platform/types.d.ts +135 -0
  148. package/dist/types/platform/types.js.map +1 -0
  149. package/dist/types/utils/hast-fast.d.ts +101 -0
  150. package/dist/types/utils/hast-fast.js.map +1 -0
  151. package/dist/utils/hast-fast.js +246 -0
  152. package/package.json +10 -3
  153. package/dist/types/cli/commands/webforai/index.d.ts +0 -6
  154. package/dist/types/cli/commands/webforai/index.js.map +0 -1
@@ -0,0 +1,125 @@
1
+ // src/platform/client.ts
2
+ import { PlatformApiError } from "./error.js";
3
+ import { resolveFetch } from "./fetch.js";
4
+ import {
5
+ isStoredPageStub
6
+ } from "./types.js";
7
+ var DEFAULT_BASE_URL = "https://platform.webforai.dev";
8
+ var TERMINAL_STATES = /* @__PURE__ */ new Set(["completed", "failed"]);
9
+ var sleep = (ms, signal) => new Promise((resolve, reject) => {
10
+ if (signal?.aborted) {
11
+ reject(signal.reason instanceof Error ? signal.reason : new Error("aborted"));
12
+ return;
13
+ }
14
+ const timer = setTimeout(() => {
15
+ signal?.removeEventListener("abort", onAbort);
16
+ resolve();
17
+ }, ms);
18
+ const onAbort = () => {
19
+ clearTimeout(timer);
20
+ reject(signal?.reason instanceof Error ? signal.reason : new Error("aborted"));
21
+ };
22
+ signal?.addEventListener("abort", onAbort, { once: true });
23
+ });
24
+ var parseRetryAfter = (body, response) => {
25
+ const fromBody = body?.error?.retryAfter;
26
+ if (typeof fromBody === "number") {
27
+ return fromBody;
28
+ }
29
+ const header = Number(response.headers.get("retry-after"));
30
+ return Number.isFinite(header) && header > 0 ? header : void 0;
31
+ };
32
+ var toApiError = (response, body) => {
33
+ const envelope = body;
34
+ const code = typeof envelope?.error?.code === "string" ? envelope.error.code : "invalid_response";
35
+ const message = typeof envelope?.error?.message === "string" ? envelope.error.message : `unexpected response (HTTP ${response.status})`;
36
+ return new PlatformApiError(code, message, response.status, parseRetryAfter(body, response));
37
+ };
38
+ var createPlatformClient = (options = {}) => {
39
+ const baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
40
+ const fetchImpl = resolveFetch(options.fetch);
41
+ const request = async (path, init) => {
42
+ const headers = { accept: "application/json" };
43
+ if (init.body !== void 0) {
44
+ headers["content-type"] = "application/json";
45
+ }
46
+ if (init.auth) {
47
+ if (!options.apiKey) {
48
+ throw new PlatformApiError(
49
+ "missing_api_key",
50
+ "This endpoint needs an API key: pass `apiKey` to createPlatformClient (create one on the platform dashboard).",
51
+ 0
52
+ );
53
+ }
54
+ headers.authorization = `Bearer ${options.apiKey}`;
55
+ }
56
+ const response = await fetchImpl(`${baseUrl}${path}`, {
57
+ method: init.method,
58
+ headers,
59
+ body: init.body === void 0 ? void 0 : JSON.stringify(init.body)
60
+ });
61
+ const body = await response.json().catch(() => void 0);
62
+ if (!response.ok) {
63
+ throw toApiError(response, body);
64
+ }
65
+ if (body === void 0) {
66
+ throw new PlatformApiError("invalid_response", "response body is not JSON", response.status);
67
+ }
68
+ return body;
69
+ };
70
+ const getJob = (jobId) => request(`/v1/jobs/${encodeURIComponent(jobId)}`, { method: "GET", auth: true });
71
+ const getJobResults = (jobId, opts) => {
72
+ const query = opts?.cursor ? `?cursor=${encodeURIComponent(opts.cursor)}` : "";
73
+ return request(`/v1/jobs/${encodeURIComponent(jobId)}/results${query}`, { method: "GET", auth: true });
74
+ };
75
+ const resolveStored = async (resultUrl) => {
76
+ const response = await fetchImpl(resultUrl, { method: "GET" });
77
+ if (!response.ok) {
78
+ throw new PlatformApiError(
79
+ "artifact_fetch_failed",
80
+ `stored result fetch failed (HTTP ${response.status}) \u2014 result URLs expire after ~24h`,
81
+ response.status
82
+ );
83
+ }
84
+ return await response.json();
85
+ };
86
+ return {
87
+ scrape: (opts) => request("/v1/scrape", { method: "POST", body: opts, auth: true }),
88
+ scrapeAsync: (opts) => request("/v1/scrape", { method: "POST", body: { ...opts, async: true }, auth: true }),
89
+ batch: (opts) => request("/v1/batch", { method: "POST", body: opts, auth: true }),
90
+ crawl: (opts) => request("/v1/crawl", { method: "POST", body: opts, auth: true }),
91
+ getJob,
92
+ getJobResults,
93
+ waitForJob: async (jobId, opts = {}) => {
94
+ const interval = opts.pollIntervalMs ?? 2e3;
95
+ const timeout = opts.timeoutMs ?? 10 * 60 * 1e3;
96
+ const startedAt = Date.now();
97
+ for (; ; ) {
98
+ const status = await getJob(jobId);
99
+ opts.onStatus?.(status);
100
+ if (TERMINAL_STATES.has(status.status)) {
101
+ return status;
102
+ }
103
+ if (Date.now() - startedAt + interval > timeout) {
104
+ throw new PlatformApiError("poll_timeout", `job ${jobId} still ${status.status} after ${timeout}ms`, 0);
105
+ }
106
+ await sleep(interval, opts.signal);
107
+ }
108
+ },
109
+ jobResults: async function* (jobId) {
110
+ let cursor;
111
+ do {
112
+ const page = await getJobResults(jobId, { cursor });
113
+ for (const item of page.results) {
114
+ yield isStoredPageStub(item) ? await resolveStored(item.resultUrl) : item;
115
+ }
116
+ cursor = page.cursor;
117
+ } while (cursor);
118
+ },
119
+ demoScrape: (opts) => request("/v1/demo/scrape", { method: "POST", body: opts, auth: false })
120
+ };
121
+ };
122
+ export {
123
+ DEFAULT_BASE_URL,
124
+ createPlatformClient
125
+ };
@@ -0,0 +1,13 @@
1
+ // src/platform/error.ts
2
+ var PlatformApiError = class extends Error {
3
+ constructor(code, message, status, retryAfter) {
4
+ super(message);
5
+ this.name = "PlatformApiError";
6
+ this.code = code;
7
+ this.status = status;
8
+ this.retryAfter = retryAfter;
9
+ }
10
+ };
11
+ export {
12
+ PlatformApiError
13
+ };
@@ -0,0 +1,14 @@
1
+ // src/platform/fetch.ts
2
+ var resolveFetch = (custom) => {
3
+ if (custom) {
4
+ return custom;
5
+ }
6
+ const globalFetch = globalThis.fetch;
7
+ if (typeof globalFetch !== "function") {
8
+ throw new Error("No global fetch in this runtime \u2014 pass a fetch implementation to createPlatformClient({ fetch })");
9
+ }
10
+ return globalFetch.bind(globalThis);
11
+ };
12
+ export {
13
+ resolveFetch
14
+ };
@@ -0,0 +1,19 @@
1
+ // src/platform/index.ts
2
+ import {
3
+ DEFAULT_BASE_URL,
4
+ createPlatformClient
5
+ } from "./client.js";
6
+ import { PlatformApiError } from "./error.js";
7
+ import {
8
+ ENGINES,
9
+ REGIONS,
10
+ isStoredPageStub
11
+ } from "./types.js";
12
+ export {
13
+ DEFAULT_BASE_URL,
14
+ ENGINES,
15
+ PlatformApiError,
16
+ REGIONS,
17
+ createPlatformClient,
18
+ isStoredPageStub
19
+ };
@@ -0,0 +1,9 @@
1
+ // src/platform/types.ts
2
+ var ENGINES = ["fetch", "browser", "proxy-fetch", "proxy-browser"];
3
+ var REGIONS = ["auto", "us", "eu", "uk", "jp", "asia"];
4
+ var isStoredPageStub = (item) => item.status === "ok" && "resultUrl" in item;
5
+ export {
6
+ ENGINES,
7
+ REGIONS,
8
+ isStoredPageStub
9
+ };
@@ -0,0 +1,24 @@
1
+ import type { Nodes as Hast } from "hast";
2
+ import type { AdapterContext, SiteAdapter } from "./types";
3
+ /**
4
+ * Built-in adapters, in priority order.
5
+ *
6
+ * Host-specific adapters come first so that a site with its own entry is not claimed by a
7
+ * generic documentation-framework fingerprint that would also match it.
8
+ */
9
+ export declare const BUILTIN_ADAPTERS: SiteAdapter[];
10
+ export declare const adapterById: (id: string) => SiteAdapter | undefined;
11
+ /**
12
+ * Runs the first adapter that claims the page.
13
+ *
14
+ * Returns `undefined` when no adapter applies, or when the one that did produced too little to
15
+ * be trusted — in both cases the caller should fall back to generic extraction. An adapter
16
+ * silently returning a near-empty tree is the main way site-specific code goes wrong as sites
17
+ * are redesigned, so the result is always size-checked rather than taken on faith.
18
+ */
19
+ export declare const runAdapters: (context: AdapterContext, adapters?: SiteAdapter[]) => Hast | undefined;
20
+ export { buildPageSignature, defineSelectorAdapter, removeAll, resolveAdapter, selectFirst, } from "./registry";
21
+ export { DECLARATIVE_ADAPTERS } from "./sites/declarative";
22
+ export { hackernewsAdapter } from "./sites/hackernews";
23
+ export { youtubeAdapter, youtubeCaptionTracks, type CaptionTrack } from "./sites/youtube";
24
+ export type { AdapterContext, PageSignature, SelectorAdapterSpec, SiteAdapter } from "./types";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkB,CAAC,cAAc,EAAE,iBAAiB,EAAE,GAAG,oBAAoB,CAAC,CAAC;AAE5G,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAU,EAA2B,EAAE,CAClE,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAEvD,2FAA2F;AAC3F,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAuB,EAAE,WAA0B,gBAAgB,EAAoB,EAAE;IACpH,8FAA8F;IAC9F,kFAAkF;IAClF,IAAI,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,IAAI,aAAa,GAAG,OAAO,CAAC;IAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACjG,OAAO,GAAG,2BAA2B,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC;IACxB,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,6FAA6F;IAC7F,2FAA2F;IAC3F,MAAM,MAAM,GAAmB,aAAa,CAAC,KAAK;QACjD,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAE1E,IAAI,SAA2B,CAAC;IAChC,IAAI,CAAC;QACJ,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,yFAAyF;IACzF,6FAA6F;IAC7F,gEAAgE;IAChE,eAAe,CAAC,SAAS,CAAC,CAAC;IAE3B,OAAO,IAAI,gBAAgB,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACjG,CAAC,CAAC;AAEF,2DAA2D;AAC3D,OAAO,EACN,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,WAAW,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAqB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { Element, Nodes as Hast } from "hast";
2
+ import type { AdapterContext, PageSignature, SelectorAdapterSpec, SiteAdapter } from "./types";
3
+ /**
4
+ * Builds a document summary in a single traversal.
5
+ *
6
+ * Called once per conversion and shared by every fingerprint, replacing what would otherwise be
7
+ * one full CSS-selector scan per adapter.
8
+ */
9
+ export declare const buildPageSignature: (root: Hast) => PageSignature;
10
+ /**
11
+ * Compiles a declarative spec into a runnable adapter.
12
+ *
13
+ * The compiled adapter clones nothing: `extract` is called with a tree the pipeline already owns,
14
+ * and removal happens in place on the selected container.
15
+ */
16
+ export declare const defineSelectorAdapter: (spec: SelectorAdapterSpec) => SiteAdapter;
17
+ /** Removes every node matching any of `selectors` from `root`, in place. */
18
+ export declare const removeAll: (root: Element | Hast, selectors: string[] | undefined) => void;
19
+ /** Convenience wrapper for adapters that need a single element. */
20
+ export declare const selectFirst: (root: Hast, selectors: string[]) => Element | undefined;
21
+ /**
22
+ * Finds the first adapter that claims the page.
23
+ *
24
+ * Order matters: specific hosts are registered before the generic documentation-framework
25
+ * fingerprints, so a Docusaurus-powered site with its own adapter still gets the specific one.
26
+ */
27
+ export declare const resolveAdapterByHost: (context: AdapterContext, adapters: SiteAdapter[]) => SiteAdapter | undefined;
28
+ export declare const resolveAdapterByFingerprint: (context: AdapterContext, adapters: SiteAdapter[]) => SiteAdapter | undefined;
29
+ /**
30
+ * Finds the first adapter that claims the page.
31
+ *
32
+ * Hostname matching runs before platform fingerprints: it is a string test, and a known host is
33
+ * always more reliable than a fingerprint that a host-specific site would also trigger.
34
+ */
35
+ export declare const resolveAdapter: (context: AdapterContext, adapters: SiteAdapter[]) => SiteAdapter | undefined;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/adapters/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Selector-driven site adapters.
3
+ *
4
+ * Every selector here was verified against a real capture of the site rather than recalled, and
5
+ * each spec carries a fingerprint where one exists so that self-hosted instances of the same
6
+ * platform are covered too, not just the flagship domain.
7
+ */
8
+ import type { Nodes as Hast } from "hast";
9
+ import type { SiteAdapter } from "../types";
10
+ export declare const DECLARATIVE_ADAPTERS: SiteAdapter[];
11
+ /** Exposed for tests and for callers that want to reference one adapter by name. */
12
+ export declare const declarativeAdapterById: (id: string) => SiteAdapter | undefined;
13
+ export type { Hast };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarative.js","sourceRoot":"","sources":["../../../../src/adapters/sites/declarative.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Hacker News adapter.
3
+ *
4
+ * HN is laid out with nested tables and spacer images: comment depth is encoded as the `indent`
5
+ * attribute on a `<td class="ind">` and as the pixel width of a transparent GIF. Generic
6
+ * extraction sees one enormous table, scores it as a single block and returns either everything
7
+ * or nothing, in both cases losing the reply structure that makes a thread readable.
8
+ *
9
+ * This adapter reconstructs the thread as nested blockquotes, which is the natural Markdown
10
+ * representation of a reply chain.
11
+ */
12
+ import type { SiteAdapter } from "../types";
13
+ export declare const hackernewsAdapter: SiteAdapter;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hackernews.js","sourceRoot":"","sources":["../../../../src/adapters/sites/hackernews.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * YouTube adapter.
3
+ *
4
+ * A watch page has essentially no readable DOM: the title, channel and description live in an
5
+ * embedded `ytInitialPlayerResponse` JSON blob, and everything visible is player chrome and
6
+ * recommendation rails. Generic extraction produces an empty document, so this adapter reads the
7
+ * blob directly.
8
+ *
9
+ * Captions are intentionally not fetched. They live behind separate, short-lived, signed URLs,
10
+ * and issuing network requests from a synchronous HTML-to-Markdown conversion would be a
11
+ * surprising side effect. `youtubeCaptionTracks` exposes the track list so callers can fetch
12
+ * them deliberately.
13
+ */
14
+ import type { Element, Nodes as Hast } from "hast";
15
+ import type { SiteAdapter } from "../types";
16
+ export interface CaptionTrack {
17
+ languageCode: string;
18
+ name?: string;
19
+ url: string;
20
+ isAutomatic: boolean;
21
+ }
22
+ export declare const extractAssignedJson: (source: string, name: string) => unknown;
23
+ /**
24
+ * Lists the caption tracks advertised by a YouTube watch page.
25
+ *
26
+ * Returned URLs are signed and expire, so fetch them promptly or re-read the page.
27
+ */
28
+ export declare const youtubeCaptionTracks: (root: Hast) => CaptionTrack[];
29
+ export declare const youtubeAdapter: SiteAdapter;
30
+ /** Re-exported so callers can narrow a tree before handing it to the adapter. */
31
+ export declare const isYoutubeElement: (node: unknown) => node is Element;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube.js","sourceRoot":"","sources":["../../../../src/adapters/sites/youtube.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import type { Element, Nodes as Hast } from "hast";
2
+ /**
3
+ * Cheap, precomputed summary of a document.
4
+ *
5
+ * Fingerprints must answer "is this page built with X?" without scanning the tree, because they
6
+ * run for every adapter on every conversion. Collecting the identifying markers in one pass and
7
+ * letting fingerprints do set lookups turns N full CSS traversals into one walk.
8
+ */
9
+ export interface PageSignature {
10
+ /** Every distinct class token in the document. */
11
+ classes: ReadonlySet<string>;
12
+ /** Every distinct `id`. */
13
+ ids: ReadonlySet<string>;
14
+ /** Every distinct tag name, lower-cased. */
15
+ tags: ReadonlySet<string>;
16
+ /** Concatenated `content` of `<meta name="generator">`, lower-cased. */
17
+ generator: string;
18
+ /** Concatenated `property`/`name` + `content` pairs of meta tags, lower-cased. */
19
+ meta: string;
20
+ }
21
+ /** Everything an adapter is given to decide whether, and how, it applies. */
22
+ export interface AdapterContext {
23
+ hast: Hast;
24
+ /** Page URL, when known. Adapters that key off the host require it. */
25
+ url?: string;
26
+ lang?: string;
27
+ /**
28
+ * Precomputed document summary.
29
+ *
30
+ * Optional so that adapters remain callable standalone; the pipeline always supplies it.
31
+ */
32
+ signature?: PageSignature;
33
+ /**
34
+ * True when the caller owns `hast` and an adapter may mutate it in place.
35
+ *
36
+ * Adapters prune their selected container directly, so without this an adapter would damage a
37
+ * tree the caller still intends to use.
38
+ */
39
+ owned?: boolean;
40
+ }
41
+ /**
42
+ * A site-specific extraction strategy.
43
+ *
44
+ * Adapters exist because generic scoring cannot know that a YouTube page keeps its description
45
+ * in an embedded JSON blob, or that a Hacker News thread is laid out with nested tables. They
46
+ * run before the generic extractor and may decline, in which case extraction proceeds normally.
47
+ */
48
+ export interface SiteAdapter {
49
+ /** Stable identifier, also used to select an adapter explicitly. */
50
+ id: string;
51
+ /**
52
+ * Quick applicability test.
53
+ *
54
+ * Should be cheap: it runs for every adapter on every conversion. Host checks first, DOM
55
+ * fingerprints only when the host is unknown.
56
+ */
57
+ matches: (context: AdapterContext) => boolean;
58
+ /**
59
+ * Secondary applicability test, run only after no adapter matched on hostname.
60
+ *
61
+ * Splitting this from {@link matches} keeps the common path — a known host — free of the
62
+ * platform-detection work that only matters for self-hosted instances.
63
+ */
64
+ matchesFingerprint?: (context: AdapterContext) => boolean;
65
+ /**
66
+ * Produces the content tree, or `undefined` to decline after a closer look.
67
+ *
68
+ * Declining is normal and expected — a host match does not guarantee the page is the kind
69
+ * this adapter understands (a GitHub profile is not a GitHub issue).
70
+ */
71
+ extract: (context: AdapterContext) => Hast | undefined;
72
+ }
73
+ /**
74
+ * Declarative adapter definition.
75
+ *
76
+ * Most sites need nothing more than "the content is here, minus these widgets", so they are
77
+ * expressed as data and compiled into a {@link SiteAdapter} by `defineSelectorAdapter`.
78
+ */
79
+ export interface SelectorAdapterSpec {
80
+ id: string;
81
+ /** Hostname test, applied to the URL's host. */
82
+ hosts?: RegExp;
83
+ /**
84
+ * DOM fingerprint, used when no adapter matched on hostname.
85
+ *
86
+ * This is what lets one adapter cover every self-hosted instance of a platform: any site
87
+ * built with the generator matches, not just the flagship domain. Reads only the precomputed
88
+ * {@link PageSignature}, so it must stay a set lookup rather than a tree query.
89
+ */
90
+ fingerprint?: (signature: PageSignature) => boolean;
91
+ /** Candidate content containers, best first. The first one that holds text wins. */
92
+ content: string[];
93
+ /** Selectors removed from the chosen container. */
94
+ remove?: string[];
95
+ /** Minimum text length the chosen container must hold before the adapter commits. */
96
+ minLength?: number;
97
+ /** Optional post-processing, e.g. prepending a title or appending metadata. */
98
+ decorate?: (content: Element[], context: AdapterContext) => Hast | undefined;
99
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/cli/bin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO;KACL,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,wDAAwD,CAAC;KACrE,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC,CAAC;AAE9E,OAAO;KACL,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,uBAAuB,EAAE,kCAAkC,CAAC;KACnE,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;KACpE,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;KACxE,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;KAC3D,MAAM,CAAC,eAAe,CAAC,CAAC;AAE1B,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/cli/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The Agent Skill (SKILL.md) that teaches a coding agent this CLI.
3
+ *
4
+ * Single source of truth for the skill: `webforai skill` prints it, `webforai skill
5
+ * --install` hands it to the `skills` CLI, and the copy committed at `skills/webforai/`
6
+ * in the repository (installable via `npx skills add inaridiy/webforai`) is bound to this
7
+ * template by a drift test. A unit test also asserts every public flag appears here.
8
+ */
9
+ export declare const renderSkillMarkdown: (version?: string) => string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../../../src/cli/commands/skill/content.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAU,EAAE,CAAC;;;;;gBAKjD,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgF9C,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface SkillFlags {
2
+ install?: boolean;
3
+ /** Direct-write escape hatch: skip the `skills` CLI and write into this skills directory. */
4
+ dir?: string;
5
+ global?: boolean;
6
+ agent?: string;
7
+ yes?: boolean;
8
+ copy?: boolean;
9
+ all?: boolean;
10
+ }
11
+ /** Builds the `npx skills add <source>` argv from our pass-through flags (pure, for tests). */
12
+ export declare const buildSkillsAddArgs: (source: string, flags: SkillFlags) => string[];
13
+ /**
14
+ * `webforai skill` — print the Agent Skill; `--install` delegates placement to the
15
+ * [`skills` CLI](https://github.com/vercel-labs/skills) (`npx skills add`), which manages
16
+ * agent directories, symlinks/copies and the skills lockfile far more robustly than a
17
+ * hand-rolled file write. `--dir` remains as an offline direct-write fallback.
18
+ */
19
+ export declare const skillCommand: (flags: SkillFlags) => Promise<void>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cli/commands/skill/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAchD,+FAA+F;AAC/F,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,KAAiB,EAAY,EAAE;IACjF,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAc,EAAmB,EAAE,CACxD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC/B,oFAAoF;IACpF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,KAAiB,EAAiB,EAAE;IACtE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAE1D,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO;IACR,CAAC;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC;QAC7D,OAAO;IACR,CAAC;IAED,yFAAyF;IACzF,2FAA2F;IAC3F,yBAAyB;IACzB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEvE,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC9D,OAAO,CAAC,KAAK,CACZ,+CAA+C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CACzG,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAC;YACtG,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;YAAS,CAAC;QACV,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACF,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { CliFlags } from "./options";
2
+ /**
3
+ * The guided flow behind `-i/--interactive` — the pre-v3 default. Prompts only for what the
4
+ * flags did not already provide, then runs the exact same pipeline as the non-interactive
5
+ * path and saves the result to a file.
6
+ */
7
+ export declare const interactiveCommand: (initialSource: string | undefined, flags: CliFlags, env?: Record<string, string | undefined>) => Promise<void>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../../../src/cli/commands/webforai/interactive.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"loadHtml.js","sourceRoot":"","sources":["../../../../../src/cli/commands/webforai/loadHtml.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loadHtml.js","sourceRoot":"","sources":["../../../../../src/cli/commands/webforai/loadHtml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { ENGINES, REGIONS } from "../../../platform";
2
+ import type { ExtractorName, Loader, Mode } from "../../constants";
3
+ /** A caller mistake (bad flag value, missing input) — reported without a stack, exit code 2. */
4
+ export declare class UsageError extends Error {
5
+ }
6
+ export interface CliFlags {
7
+ output?: string;
8
+ loader?: string;
9
+ mode?: string;
10
+ extractor?: string;
11
+ frontmatter?: boolean;
12
+ json?: boolean;
13
+ engine?: string;
14
+ region?: string;
15
+ screenshot?: boolean;
16
+ apiKey?: string;
17
+ platformUrl?: string;
18
+ debug?: boolean;
19
+ }
20
+ export interface ResolvedRun {
21
+ source: string;
22
+ loader: Loader;
23
+ mode: Mode;
24
+ extractor: ExtractorName;
25
+ frontmatter: boolean;
26
+ output?: string;
27
+ json: boolean;
28
+ debug: boolean;
29
+ /** Platform-loader fields; undefined otherwise. */
30
+ engine?: (typeof ENGINES)[number];
31
+ region?: (typeof REGIONS)[number];
32
+ screenshot: boolean;
33
+ apiKey?: string;
34
+ platformUrl?: string;
35
+ }
36
+ /**
37
+ * Turns raw commander flags into a validated run description. Pure aside from one existence
38
+ * check on local files, so the flag surface is unit-testable without spawning the binary.
39
+ */
40
+ export declare const resolveRunOptions: (source: string, flags: CliFlags, env?: Record<string, string | undefined>) => ResolvedRun;
41
+ /** What `--json` prints: everything an agent needs to consume the conversion programmatically. */
42
+ export interface RunEnvelope {
43
+ source: string;
44
+ loader: Loader;
45
+ /** Final URL for URL sources (after redirects when the platform reports one). */
46
+ url?: string;
47
+ engine?: string;
48
+ region?: string;
49
+ markdown: string;
50
+ metadata: Record<string, unknown>;
51
+ credits?: number;
52
+ screenshotUrl?: string;
53
+ /** Present when the markdown was also written to a file. */
54
+ output?: string;
55
+ }