agent-web-interface 4.4.0 → 4.5.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 (319) hide show
  1. package/dist/src/browser/browser-session-config.d.ts +33 -0
  2. package/dist/src/browser/browser-session-config.d.ts.map +1 -0
  3. package/dist/src/browser/browser-session-config.js +24 -0
  4. package/dist/src/browser/browser-session-config.js.map +1 -0
  5. package/dist/src/browser/ensure-browser.d.ts +12 -27
  6. package/dist/src/browser/ensure-browser.d.ts.map +1 -1
  7. package/dist/src/browser/ensure-browser.js +104 -37
  8. package/dist/src/browser/ensure-browser.js.map +1 -1
  9. package/dist/src/browser/index.d.ts +2 -1
  10. package/dist/src/browser/index.d.ts.map +1 -1
  11. package/dist/src/browser/index.js +1 -0
  12. package/dist/src/browser/index.js.map +1 -1
  13. package/dist/src/browser/session-manager.d.ts +20 -0
  14. package/dist/src/browser/session-manager.d.ts.map +1 -1
  15. package/dist/src/browser/session-manager.js +122 -17
  16. package/dist/src/browser/session-manager.js.map +1 -1
  17. package/dist/src/browser/session-manager.types.d.ts +14 -2
  18. package/dist/src/browser/session-manager.types.d.ts.map +1 -1
  19. package/dist/src/browser/session-manager.types.js +5 -1
  20. package/dist/src/browser/session-manager.types.js.map +1 -1
  21. package/dist/src/cli/args.d.ts +12 -18
  22. package/dist/src/cli/args.d.ts.map +1 -1
  23. package/dist/src/cli/args.js +35 -40
  24. package/dist/src/cli/args.js.map +1 -1
  25. package/dist/src/form/constraint-extraction.d.ts +5 -0
  26. package/dist/src/form/constraint-extraction.d.ts.map +1 -1
  27. package/dist/src/form/constraint-extraction.js +13 -6
  28. package/dist/src/form/constraint-extraction.js.map +1 -1
  29. package/dist/src/form/field-extractor.d.ts.map +1 -1
  30. package/dist/src/form/field-extractor.js +14 -7
  31. package/dist/src/form/field-extractor.js.map +1 -1
  32. package/dist/src/form/form-state.d.ts.map +1 -1
  33. package/dist/src/form/form-state.js +16 -4
  34. package/dist/src/form/form-state.js.map +1 -1
  35. package/dist/src/gateway/http-gateway.d.ts +56 -0
  36. package/dist/src/gateway/http-gateway.d.ts.map +1 -0
  37. package/dist/src/gateway/http-gateway.js +229 -0
  38. package/dist/src/gateway/http-gateway.js.map +1 -0
  39. package/dist/src/gateway/json-rpc-errors.d.ts +6 -0
  40. package/dist/src/gateway/json-rpc-errors.d.ts.map +1 -0
  41. package/dist/src/gateway/json-rpc-errors.js +11 -0
  42. package/dist/src/gateway/json-rpc-errors.js.map +1 -0
  43. package/dist/src/gateway/session-router.d.ts +80 -0
  44. package/dist/src/gateway/session-router.d.ts.map +1 -0
  45. package/dist/src/gateway/session-router.js +177 -0
  46. package/dist/src/gateway/session-router.js.map +1 -0
  47. package/dist/src/http-entry.d.ts +20 -0
  48. package/dist/src/http-entry.d.ts.map +1 -0
  49. package/dist/src/http-entry.js +112 -0
  50. package/dist/src/http-entry.js.map +1 -0
  51. package/dist/src/index.d.ts +1 -10
  52. package/dist/src/index.d.ts.map +1 -1
  53. package/dist/src/index.js +25 -232
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/lib/text-utils.d.ts +0 -24
  56. package/dist/src/lib/text-utils.d.ts.map +1 -1
  57. package/dist/src/lib/text-utils.js +2 -38
  58. package/dist/src/lib/text-utils.js.map +1 -1
  59. package/dist/src/observation/eid-linker.d.ts.map +1 -1
  60. package/dist/src/observation/eid-linker.js +1 -21
  61. package/dist/src/observation/eid-linker.js.map +1 -1
  62. package/dist/src/server/index.d.ts +0 -1
  63. package/dist/src/server/index.d.ts.map +1 -1
  64. package/dist/src/server/index.js +0 -1
  65. package/dist/src/server/index.js.map +1 -1
  66. package/dist/src/server/mcp-server.d.ts +6 -2
  67. package/dist/src/server/mcp-server.d.ts.map +1 -1
  68. package/dist/src/server/mcp-server.js +3 -91
  69. package/dist/src/server/mcp-server.js.map +1 -1
  70. package/dist/src/server/server-config.d.ts +4 -20
  71. package/dist/src/server/server-config.d.ts.map +1 -1
  72. package/dist/src/server/server-config.js +6 -50
  73. package/dist/src/server/server-config.js.map +1 -1
  74. package/dist/src/server/tool-registrar.types.d.ts +25 -0
  75. package/dist/src/server/tool-registrar.types.d.ts.map +1 -0
  76. package/dist/src/server/tool-registrar.types.js +10 -0
  77. package/dist/src/server/tool-registrar.types.js.map +1 -0
  78. package/dist/src/server/tool-result-handler.d.ts +61 -0
  79. package/dist/src/server/tool-result-handler.d.ts.map +1 -0
  80. package/dist/src/server/tool-result-handler.js +137 -0
  81. package/dist/src/server/tool-result-handler.js.map +1 -0
  82. package/dist/src/session/session-controller.d.ts +123 -0
  83. package/dist/src/session/session-controller.d.ts.map +1 -0
  84. package/dist/src/session/session-controller.js +273 -0
  85. package/dist/src/session/session-controller.js.map +1 -0
  86. package/dist/src/shared/services/index.d.ts +0 -2
  87. package/dist/src/shared/services/index.d.ts.map +1 -1
  88. package/dist/src/shared/services/index.js +0 -2
  89. package/dist/src/shared/services/index.js.map +1 -1
  90. package/dist/src/shared/version.d.ts +10 -0
  91. package/dist/src/shared/version.d.ts.map +1 -0
  92. package/dist/src/shared/version.js +32 -0
  93. package/dist/src/shared/version.js.map +1 -0
  94. package/dist/src/snapshot/element-resolver.d.ts +3 -2
  95. package/dist/src/snapshot/element-resolver.d.ts.map +1 -1
  96. package/dist/src/snapshot/element-resolver.js +83 -8
  97. package/dist/src/snapshot/element-resolver.js.map +1 -1
  98. package/dist/src/snapshot/extractors/attribute-extractor.d.ts.map +1 -1
  99. package/dist/src/snapshot/extractors/attribute-extractor.js +4 -0
  100. package/dist/src/snapshot/extractors/attribute-extractor.js.map +1 -1
  101. package/dist/src/snapshot/extractors/layout-extractor.d.ts +9 -7
  102. package/dist/src/snapshot/extractors/layout-extractor.d.ts.map +1 -1
  103. package/dist/src/snapshot/extractors/layout-extractor.js +34 -19
  104. package/dist/src/snapshot/extractors/layout-extractor.js.map +1 -1
  105. package/dist/src/snapshot/extractors/state-extractor.d.ts +2 -2
  106. package/dist/src/snapshot/extractors/state-extractor.d.ts.map +1 -1
  107. package/dist/src/snapshot/extractors/state-extractor.js +22 -2
  108. package/dist/src/snapshot/extractors/state-extractor.js.map +1 -1
  109. package/dist/src/snapshot/extractors/types.d.ts +6 -0
  110. package/dist/src/snapshot/extractors/types.d.ts.map +1 -1
  111. package/dist/src/snapshot/extractors/types.js.map +1 -1
  112. package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -1
  113. package/dist/src/snapshot/snapshot-compiler.js +15 -2
  114. package/dist/src/snapshot/snapshot-compiler.js.map +1 -1
  115. package/dist/src/snapshot/snapshot.types.d.ts +10 -1
  116. package/dist/src/snapshot/snapshot.types.d.ts.map +1 -1
  117. package/dist/src/snapshot/snapshot.types.js.map +1 -1
  118. package/dist/src/state/actionables-filter.d.ts.map +1 -1
  119. package/dist/src/state/actionables-filter.js +7 -3
  120. package/dist/src/state/actionables-filter.js.map +1 -1
  121. package/dist/src/state/atoms-extractor.d.ts.map +1 -1
  122. package/dist/src/state/atoms-extractor.js +3 -23
  123. package/dist/src/state/atoms-extractor.js.map +1 -1
  124. package/dist/src/state/diff-engine.d.ts.map +1 -1
  125. package/dist/src/state/diff-engine.js +6 -33
  126. package/dist/src/state/diff-engine.js.map +1 -1
  127. package/dist/src/state/element-identity.d.ts +3 -6
  128. package/dist/src/state/element-identity.d.ts.map +1 -1
  129. package/dist/src/state/element-identity.js +10 -7
  130. package/dist/src/state/element-identity.js.map +1 -1
  131. package/dist/src/state/element-ref.types.d.ts +5 -27
  132. package/dist/src/state/element-ref.types.d.ts.map +1 -1
  133. package/dist/src/state/state-manager.d.ts.map +1 -1
  134. package/dist/src/state/state-manager.js +3 -1
  135. package/dist/src/state/state-manager.js.map +1 -1
  136. package/dist/src/state/state-renderer.d.ts.map +1 -1
  137. package/dist/src/state/state-renderer.js +3 -1
  138. package/dist/src/state/state-renderer.js.map +1 -1
  139. package/dist/src/state/types.d.ts +2 -1
  140. package/dist/src/state/types.d.ts.map +1 -1
  141. package/dist/src/state/url-sanitization.d.ts +1 -1
  142. package/dist/src/state/url-sanitization.d.ts.map +1 -1
  143. package/dist/src/state/url-sanitization.js +29 -13
  144. package/dist/src/state/url-sanitization.js.map +1 -1
  145. package/dist/src/tools/action-context.d.ts +6 -11
  146. package/dist/src/tools/action-context.d.ts.map +1 -1
  147. package/dist/src/tools/action-context.js +10 -19
  148. package/dist/src/tools/action-context.js.map +1 -1
  149. package/dist/src/tools/action-stabilization.d.ts.map +1 -1
  150. package/dist/src/tools/action-stabilization.js +6 -0
  151. package/dist/src/tools/action-stabilization.js.map +1 -1
  152. package/dist/src/tools/browser-tools.d.ts +3 -2
  153. package/dist/src/tools/browser-tools.d.ts.map +1 -1
  154. package/dist/src/tools/browser-tools.js +5 -3
  155. package/dist/src/tools/browser-tools.js.map +1 -1
  156. package/dist/src/tools/canvas-tools.d.ts +2 -1
  157. package/dist/src/tools/canvas-tools.d.ts.map +1 -1
  158. package/dist/src/tools/canvas-tools.js +5 -7
  159. package/dist/src/tools/canvas-tools.js.map +1 -1
  160. package/dist/src/tools/errors.d.ts +2 -34
  161. package/dist/src/tools/errors.d.ts.map +1 -1
  162. package/dist/src/tools/errors.js +1 -44
  163. package/dist/src/tools/errors.js.map +1 -1
  164. package/dist/src/tools/execute-action.d.ts +4 -3
  165. package/dist/src/tools/execute-action.d.ts.map +1 -1
  166. package/dist/src/tools/execute-action.js +32 -23
  167. package/dist/src/tools/execute-action.js.map +1 -1
  168. package/dist/src/tools/form-tools.d.ts +3 -8
  169. package/dist/src/tools/form-tools.d.ts.map +1 -1
  170. package/dist/src/tools/form-tools.js +38 -18
  171. package/dist/src/tools/form-tools.js.map +1 -1
  172. package/dist/src/tools/index.d.ts +6 -6
  173. package/dist/src/tools/index.d.ts.map +1 -1
  174. package/dist/src/tools/index.js +7 -10
  175. package/dist/src/tools/index.js.map +1 -1
  176. package/dist/src/tools/interaction-tools.d.ts +6 -5
  177. package/dist/src/tools/interaction-tools.d.ts.map +1 -1
  178. package/dist/src/tools/interaction-tools.js +29 -32
  179. package/dist/src/tools/interaction-tools.js.map +1 -1
  180. package/dist/src/tools/navigation-tools.d.ts +7 -13
  181. package/dist/src/tools/navigation-tools.d.ts.map +1 -1
  182. package/dist/src/tools/navigation-tools.js +52 -59
  183. package/dist/src/tools/navigation-tools.js.map +1 -1
  184. package/dist/src/tools/observation-tools.d.ts +6 -5
  185. package/dist/src/tools/observation-tools.d.ts.map +1 -1
  186. package/dist/src/tools/observation-tools.js +30 -34
  187. package/dist/src/tools/observation-tools.js.map +1 -1
  188. package/dist/src/tools/readability-tools.d.ts +16 -0
  189. package/dist/src/tools/readability-tools.d.ts.map +1 -0
  190. package/dist/src/tools/readability-tools.js +45 -0
  191. package/dist/src/tools/readability-tools.js.map +1 -0
  192. package/dist/src/tools/response-builder.d.ts +20 -32
  193. package/dist/src/tools/response-builder.d.ts.map +1 -1
  194. package/dist/src/tools/response-builder.js +31 -47
  195. package/dist/src/tools/response-builder.js.map +1 -1
  196. package/dist/src/tools/stale-element-retry.d.ts.map +1 -1
  197. package/dist/src/tools/stale-element-retry.js +37 -2
  198. package/dist/src/tools/stale-element-retry.js.map +1 -1
  199. package/dist/src/tools/tool-context.d.ts +4 -36
  200. package/dist/src/tools/tool-context.d.ts.map +1 -1
  201. package/dist/src/tools/tool-context.js +6 -75
  202. package/dist/src/tools/tool-context.js.map +1 -1
  203. package/dist/src/tools/tool-context.types.d.ts +141 -0
  204. package/dist/src/tools/tool-context.types.d.ts.map +1 -0
  205. package/dist/src/tools/tool-context.types.js +11 -0
  206. package/dist/src/tools/tool-context.types.js.map +1 -0
  207. package/dist/src/tools/tool-registration.d.ts +25 -0
  208. package/dist/src/tools/tool-registration.d.ts.map +1 -0
  209. package/dist/src/tools/tool-registration.js +180 -0
  210. package/dist/src/tools/tool-registration.js.map +1 -0
  211. package/dist/src/tools/tool-schemas.d.ts +88 -1947
  212. package/dist/src/tools/tool-schemas.d.ts.map +1 -1
  213. package/dist/src/tools/tool-schemas.js +21 -302
  214. package/dist/src/tools/tool-schemas.js.map +1 -1
  215. package/dist/src/tools/viewport-tools.d.ts +4 -3
  216. package/dist/src/tools/viewport-tools.d.ts.map +1 -1
  217. package/dist/src/tools/viewport-tools.js +17 -21
  218. package/dist/src/tools/viewport-tools.js.map +1 -1
  219. package/dist/src/worker/chrome-worker-process.d.ts +4 -0
  220. package/dist/src/worker/chrome-worker-process.d.ts.map +1 -1
  221. package/dist/src/worker/chrome-worker-process.js +1 -1
  222. package/dist/src/worker/chrome-worker-process.js.map +1 -1
  223. package/package.json +7 -3
  224. package/dist/src/factpack/action-selector.d.ts +0 -36
  225. package/dist/src/factpack/action-selector.d.ts.map +0 -1
  226. package/dist/src/factpack/action-selector.js +0 -367
  227. package/dist/src/factpack/action-selector.js.map +0 -1
  228. package/dist/src/factpack/dialog-detector.d.ts +0 -19
  229. package/dist/src/factpack/dialog-detector.d.ts.map +0 -1
  230. package/dist/src/factpack/dialog-detector.js +0 -354
  231. package/dist/src/factpack/dialog-detector.js.map +0 -1
  232. package/dist/src/factpack/form-detector.d.ts +0 -28
  233. package/dist/src/factpack/form-detector.d.ts.map +0 -1
  234. package/dist/src/factpack/form-detector.js +0 -555
  235. package/dist/src/factpack/form-detector.js.map +0 -1
  236. package/dist/src/factpack/index.d.ts +0 -32
  237. package/dist/src/factpack/index.d.ts.map +0 -1
  238. package/dist/src/factpack/index.js +0 -73
  239. package/dist/src/factpack/index.js.map +0 -1
  240. package/dist/src/factpack/page-classifier.d.ts +0 -22
  241. package/dist/src/factpack/page-classifier.d.ts.map +0 -1
  242. package/dist/src/factpack/page-classifier.js +0 -526
  243. package/dist/src/factpack/page-classifier.js.map +0 -1
  244. package/dist/src/factpack/types.d.ts +0 -307
  245. package/dist/src/factpack/types.d.ts.map +0 -1
  246. package/dist/src/factpack/types.js +0 -12
  247. package/dist/src/factpack/types.js.map +0 -1
  248. package/dist/src/lib/constants.d.ts +0 -27
  249. package/dist/src/lib/constants.d.ts.map +0 -1
  250. package/dist/src/lib/constants.js +0 -63
  251. package/dist/src/lib/constants.js.map +0 -1
  252. package/dist/src/lib/index.d.ts +0 -12
  253. package/dist/src/lib/index.d.ts.map +0 -1
  254. package/dist/src/lib/index.js +0 -17
  255. package/dist/src/lib/index.js.map +0 -1
  256. package/dist/src/lib/regions.d.ts +0 -29
  257. package/dist/src/lib/regions.d.ts.map +0 -1
  258. package/dist/src/lib/regions.js +0 -93
  259. package/dist/src/lib/regions.js.map +0 -1
  260. package/dist/src/lib/scoring.d.ts +0 -47
  261. package/dist/src/lib/scoring.d.ts.map +0 -1
  262. package/dist/src/lib/scoring.js +0 -79
  263. package/dist/src/lib/scoring.js.map +0 -1
  264. package/dist/src/lib/selectors.d.ts +0 -42
  265. package/dist/src/lib/selectors.d.ts.map +0 -1
  266. package/dist/src/lib/selectors.js +0 -138
  267. package/dist/src/lib/selectors.js.map +0 -1
  268. package/dist/src/renderer/budget-manager.d.ts +0 -46
  269. package/dist/src/renderer/budget-manager.d.ts.map +0 -1
  270. package/dist/src/renderer/budget-manager.js +0 -133
  271. package/dist/src/renderer/budget-manager.js.map +0 -1
  272. package/dist/src/renderer/constants.d.ts +0 -38
  273. package/dist/src/renderer/constants.d.ts.map +0 -1
  274. package/dist/src/renderer/constants.js +0 -29
  275. package/dist/src/renderer/constants.js.map +0 -1
  276. package/dist/src/renderer/index.d.ts +0 -12
  277. package/dist/src/renderer/index.d.ts.map +0 -1
  278. package/dist/src/renderer/index.js +0 -16
  279. package/dist/src/renderer/index.js.map +0 -1
  280. package/dist/src/renderer/section-renderers.d.ts +0 -42
  281. package/dist/src/renderer/section-renderers.d.ts.map +0 -1
  282. package/dist/src/renderer/section-renderers.js +0 -252
  283. package/dist/src/renderer/section-renderers.js.map +0 -1
  284. package/dist/src/renderer/token-counter.d.ts +0 -45
  285. package/dist/src/renderer/token-counter.d.ts.map +0 -1
  286. package/dist/src/renderer/token-counter.js +0 -65
  287. package/dist/src/renderer/token-counter.js.map +0 -1
  288. package/dist/src/renderer/types.d.ts +0 -71
  289. package/dist/src/renderer/types.d.ts.map +0 -1
  290. package/dist/src/renderer/types.js +0 -7
  291. package/dist/src/renderer/types.js.map +0 -1
  292. package/dist/src/renderer/xml-renderer.d.ts +0 -42
  293. package/dist/src/renderer/xml-renderer.d.ts.map +0 -1
  294. package/dist/src/renderer/xml-renderer.js +0 -103
  295. package/dist/src/renderer/xml-renderer.js.map +0 -1
  296. package/dist/src/server/session-store.d.ts +0 -163
  297. package/dist/src/server/session-store.d.ts.map +0 -1
  298. package/dist/src/server/session-store.js +0 -248
  299. package/dist/src/server/session-store.js.map +0 -1
  300. package/dist/src/session/session-worker-binding.d.ts +0 -57
  301. package/dist/src/session/session-worker-binding.d.ts.map +0 -1
  302. package/dist/src/session/session-worker-binding.js +0 -109
  303. package/dist/src/session/session-worker-binding.js.map +0 -1
  304. package/dist/src/shared/services/dom-transformer.service.d.ts +0 -71
  305. package/dist/src/shared/services/dom-transformer.service.d.ts.map +0 -1
  306. package/dist/src/shared/services/dom-transformer.service.js +0 -190
  307. package/dist/src/shared/services/dom-transformer.service.js.map +0 -1
  308. package/dist/src/shared/services/selector-builder.service.d.ts +0 -53
  309. package/dist/src/shared/services/selector-builder.service.d.ts.map +0 -1
  310. package/dist/src/shared/services/selector-builder.service.js +0 -240
  311. package/dist/src/shared/services/selector-builder.service.js.map +0 -1
  312. package/dist/src/state/constants.d.ts +0 -125
  313. package/dist/src/state/constants.d.ts.map +0 -1
  314. package/dist/src/state/constants.js +0 -131
  315. package/dist/src/state/constants.js.map +0 -1
  316. package/dist/src/tools/state-manager-registry.d.ts +0 -26
  317. package/dist/src/tools/state-manager-registry.d.ts.map +0 -1
  318. package/dist/src/tools/state-manager-registry.js +0 -39
  319. package/dist/src/tools/state-manager-registry.js.map +0 -1
@@ -1,73 +0,0 @@
1
- /**
2
- * FactPack Module
3
- *
4
- * Extracts higher-level semantic facts from compiled BaseSnapshot.
5
- *
6
- * Design: Generic First, Specific Second
7
- * - All extractors return useful data even when specific patterns aren't matched
8
- * - 'unknown'/'generic' are valid results, not failures
9
- * - Confidence scores allow consumers to decide thresholds
10
- */
11
- import { detectDialogs } from './dialog-detector.js';
12
- import { detectForms } from './form-detector.js';
13
- import { classifyPage } from './page-classifier.js';
14
- import { selectKeyActions } from './action-selector.js';
15
- // ============================================================================
16
- // Orchestration
17
- // ============================================================================
18
- /**
19
- * Extract a complete FactPack from a BaseSnapshot.
20
- *
21
- * Executes all extractors and combines results:
22
- * 1. Dialog detection (independent)
23
- * 2. Form detection (may use dialog context)
24
- * 3. Page classification (uses form results)
25
- * 4. Action selection (uses all context)
26
- *
27
- * @param snapshot - The compiled snapshot to analyze
28
- * @param options - Extraction options
29
- * @returns Complete FactPack with all extracted facts
30
- */
31
- export function extractFactPack(snapshot, options = {}) {
32
- const startTime = performance.now();
33
- // Step 1: Detect dialogs (independent)
34
- const dialogs = detectDialogs(snapshot);
35
- // Step 2: Detect forms (may use dialog context in future)
36
- const formOptions = {
37
- include_disabled_fields: options.include_disabled_fields ?? true,
38
- };
39
- const forms = detectForms(snapshot, formOptions);
40
- // Step 3: Classify page (uses form results)
41
- const pageType = classifyPage(snapshot, forms);
42
- // Step 4: Select actions (uses all context)
43
- const actionOptions = {
44
- max_actions: options.max_actions ?? 12,
45
- min_action_score: options.min_action_score ?? 0.2,
46
- forms,
47
- dialogs,
48
- pageType: pageType.classification,
49
- };
50
- const actions = selectKeyActions(snapshot, actionOptions);
51
- const extractionTimeMs = performance.now() - startTime;
52
- return {
53
- page_type: pageType,
54
- dialogs,
55
- forms,
56
- actions,
57
- meta: {
58
- snapshot_id: snapshot.snapshot_id,
59
- extraction_time_ms: extractionTimeMs,
60
- },
61
- };
62
- }
63
- // ============================================================================
64
- // Re-exports
65
- // ============================================================================
66
- // Types
67
- export * from './types.js';
68
- // Individual extractors
69
- export { detectDialogs } from './dialog-detector.js';
70
- export { detectForms } from './form-detector.js';
71
- export { classifyPage } from './page-classifier.js';
72
- export { selectKeyActions } from './action-selector.js';
73
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/factpack/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAA6B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAA+B,MAAM,sBAAsB,CAAC;AAGrF,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,QAAsB,EAAE,UAA2B,EAAE;IACnF,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAEpC,uCAAuC;IACvC,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAExC,0DAA0D;IAC1D,MAAM,WAAW,GAAyB;QACxC,uBAAuB,EAAE,OAAO,CAAC,uBAAuB,IAAI,IAAI;KACjE,CAAC;IACF,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAEjD,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE/C,4CAA4C;IAC5C,MAAM,aAAa,GAA2B;QAC5C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;QACtC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,GAAG;QACjD,KAAK;QACL,OAAO;QACP,QAAQ,EAAE,QAAQ,CAAC,cAAc;KAClC,CAAC;IACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAE1D,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAEvD,OAAO;QACL,SAAS,EAAE,QAAQ;QACnB,OAAO;QACP,KAAK;QACL,OAAO;QACP,IAAI,EAAE;YACJ,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,kBAAkB,EAAE,gBAAgB;SACrC;KACF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,wBAAwB;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAA6B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAA+B,MAAM,sBAAsB,CAAC"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Page Classifier
3
- *
4
- * Classifies page type based on URL, title, and content analysis.
5
- *
6
- * Design: Generic First, Specific Second
7
- * 1. Collect signals from URL, title, and content (always useful)
8
- * 2. Calculate type scores (may result in 'unknown')
9
- * 3. Extract entities where possible
10
- * 4. Always return useful summary info (has_forms, has_navigation, etc.)
11
- */
12
- import type { BaseSnapshot } from '../snapshot/snapshot.types.js';
13
- import type { PageClassificationResult, FormDetectionResult } from './types.js';
14
- /**
15
- * Classify a page based on URL, title, and content analysis.
16
- *
17
- * @param snapshot - The snapshot to analyze
18
- * @param formResult - Optional form detection result for context
19
- * @returns Classification result with type, confidence, signals, and entities
20
- */
21
- export declare function classifyPage(snapshot: BaseSnapshot, formResult?: FormDetectionResult): PageClassificationResult;
22
- //# sourceMappingURL=page-classifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-classifier.d.ts","sourceRoot":"","sources":["../../../src/factpack/page-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,KAAK,EACV,wBAAwB,EAKxB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AA6iBpB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,YAAY,EACtB,UAAU,CAAC,EAAE,mBAAmB,GAC/B,wBAAwB,CA0C1B"}
@@ -1,526 +0,0 @@
1
- /**
2
- * Page Classifier
3
- *
4
- * Classifies page type based on URL, title, and content analysis.
5
- *
6
- * Design: Generic First, Specific Second
7
- * 1. Collect signals from URL, title, and content (always useful)
8
- * 2. Calculate type scores (may result in 'unknown')
9
- * 3. Extract entities where possible
10
- * 4. Always return useful summary info (has_forms, has_navigation, etc.)
11
- */
12
- import { QueryEngine } from '../query/query-engine.js';
13
- import { normalizeText } from '../lib/text-utils.js';
14
- // ============================================================================
15
- // URL Pattern Mappings
16
- // ============================================================================
17
- /** URL path patterns that indicate page types */
18
- const URL_PATTERNS = [
19
- // High confidence patterns
20
- { pattern: /\/cart\/?$/i, type: 'cart', weight: 0.9 },
21
- { pattern: /\/basket\/?$/i, type: 'cart', weight: 0.9 },
22
- { pattern: /\/checkout/i, type: 'checkout', weight: 0.9 },
23
- { pattern: /\/login\/?$/i, type: 'login', weight: 0.85 },
24
- { pattern: /\/signin\/?$/i, type: 'login', weight: 0.85 },
25
- { pattern: /\/sign-in\/?$/i, type: 'login', weight: 0.85 },
26
- { pattern: /\/auth\/?$/i, type: 'login', weight: 0.7 },
27
- { pattern: /\/signup\/?$/i, type: 'signup', weight: 0.85 },
28
- { pattern: /\/sign-up\/?$/i, type: 'signup', weight: 0.85 },
29
- { pattern: /\/register\/?$/i, type: 'signup', weight: 0.85 },
30
- // Product patterns
31
- { pattern: /\/product\//i, type: 'product', weight: 0.8 },
32
- { pattern: /\/item\//i, type: 'product', weight: 0.8 },
33
- { pattern: /\/p\//i, type: 'product', weight: 0.7 },
34
- { pattern: /\/dp\//i, type: 'product', weight: 0.8 }, // Amazon style
35
- { pattern: /\/products\/?$/i, type: 'product-listing', weight: 0.75 },
36
- { pattern: /\/shop\/?$/i, type: 'product-listing', weight: 0.6 },
37
- // Category/listing patterns
38
- { pattern: /\/category\//i, type: 'category', weight: 0.75 },
39
- { pattern: /\/c\//i, type: 'category', weight: 0.6 },
40
- { pattern: /\/collections?\//i, type: 'category', weight: 0.7 },
41
- // Search patterns
42
- { pattern: /\/search/i, type: 'search-results', weight: 0.8 },
43
- { pattern: /[?&]q=/i, type: 'search-results', weight: 0.75 },
44
- { pattern: /[?&]query=/i, type: 'search-results', weight: 0.75 },
45
- { pattern: /[?&]search=/i, type: 'search-results', weight: 0.75 },
46
- // Content patterns
47
- { pattern: /\/blog\//i, type: 'article', weight: 0.75 },
48
- { pattern: /\/article\//i, type: 'article', weight: 0.8 },
49
- { pattern: /\/post\//i, type: 'article', weight: 0.75 },
50
- { pattern: /\/news\//i, type: 'article', weight: 0.7 },
51
- // Account patterns
52
- { pattern: /\/account\/?$/i, type: 'account', weight: 0.8 },
53
- { pattern: /\/profile\/?$/i, type: 'account', weight: 0.8 },
54
- { pattern: /\/settings\/?$/i, type: 'account', weight: 0.7 },
55
- { pattern: /\/my-account/i, type: 'account', weight: 0.8 },
56
- // Info pages
57
- { pattern: /\/about\/?$/i, type: 'about', weight: 0.8 },
58
- { pattern: /\/about-us\/?$/i, type: 'about', weight: 0.8 },
59
- { pattern: /\/contact\/?$/i, type: 'contact', weight: 0.8 },
60
- { pattern: /\/contact-us\/?$/i, type: 'contact', weight: 0.8 },
61
- { pattern: /\/help\/?$/i, type: 'documentation', weight: 0.7 },
62
- { pattern: /\/docs?\/?$/i, type: 'documentation', weight: 0.8 },
63
- { pattern: /\/documentation\//i, type: 'documentation', weight: 0.85 },
64
- { pattern: /\/faq\/?$/i, type: 'documentation', weight: 0.7 },
65
- // Error pages
66
- { pattern: /\/404\/?$/i, type: 'error', weight: 0.9 },
67
- { pattern: /\/error\/?$/i, type: 'error', weight: 0.8 },
68
- { pattern: /\/not-found\/?$/i, type: 'error', weight: 0.85 },
69
- // Homepage (low weight - needs corroboration)
70
- { pattern: /^\/?$/, type: 'homepage', weight: 0.5 },
71
- ];
72
- // ============================================================================
73
- // Title Pattern Mappings
74
- // ============================================================================
75
- /** Title patterns that indicate page types */
76
- const TITLE_PATTERNS = [
77
- // Auth
78
- { pattern: /\bsign in\b/i, type: 'login', weight: 0.7 },
79
- { pattern: /\blog in\b/i, type: 'login', weight: 0.7 },
80
- { pattern: /\blogin\b/i, type: 'login', weight: 0.7 },
81
- { pattern: /\bsign up\b/i, type: 'signup', weight: 0.7 },
82
- { pattern: /\bregister\b/i, type: 'signup', weight: 0.65 },
83
- { pattern: /\bcreate account\b/i, type: 'signup', weight: 0.7 },
84
- // Commerce
85
- { pattern: /\bshopping cart\b/i, type: 'cart', weight: 0.85 },
86
- { pattern: /\byour cart\b/i, type: 'cart', weight: 0.85 },
87
- { pattern: /\bcheckout\b/i, type: 'checkout', weight: 0.8 },
88
- { pattern: /\bpayment\b/i, type: 'checkout', weight: 0.6 },
89
- // Content
90
- { pattern: /\b(blog|article|post)\b/i, type: 'article', weight: 0.5 },
91
- // Error
92
- { pattern: /\b404\b/i, type: 'error', weight: 0.9 },
93
- { pattern: /\bpage not found\b/i, type: 'error', weight: 0.9 },
94
- { pattern: /\berror\b/i, type: 'error', weight: 0.5 },
95
- { pattern: /\b500\b/i, type: 'error', weight: 0.85 },
96
- { pattern: /\bserver error\b/i, type: 'error', weight: 0.85 },
97
- // Info
98
- { pattern: /\babout us\b/i, type: 'about', weight: 0.8 },
99
- { pattern: /\bcontact us\b/i, type: 'contact', weight: 0.8 },
100
- { pattern: /\bhelp\b/i, type: 'documentation', weight: 0.5 },
101
- { pattern: /\bdocumentation\b/i, type: 'documentation', weight: 0.7 },
102
- // Search
103
- { pattern: /\bsearch results\b/i, type: 'search-results', weight: 0.85 },
104
- ];
105
- // ============================================================================
106
- // Content Patterns
107
- // ============================================================================
108
- /** Button/link labels indicating cart functionality */
109
- const CART_ACTION_PATTERNS = [
110
- /\badd to cart\b/i,
111
- /\badd to bag\b/i,
112
- /\badd to basket\b/i,
113
- /\bbuy now\b/i,
114
- /\bpurchase\b/i,
115
- ];
116
- /** Patterns for auth-related actions */
117
- const AUTH_ACTION_PATTERNS = [/\bsign in\b/i, /\blog in\b/i, /\bsign up\b/i, /\bregister\b/i];
118
- /** Patterns for price display */
119
- const PRICE_PATTERNS = [
120
- /\$\d+(\.\d{2})?/, // $XX.XX
121
- /€\d+([.,]\d{2})?/, // €XX,XX
122
- /£\d+(\.\d{2})?/, // £XX.XX
123
- /\d+([.,]\d{2})?\s*(USD|EUR|GBP)/i,
124
- ];
125
- // ============================================================================
126
- // Helper Functions
127
- // ============================================================================
128
- /**
129
- * Analyze URL for page type signals.
130
- */
131
- function analyzeUrl(url) {
132
- const signals = [];
133
- try {
134
- const parsed = new URL(url);
135
- const pathname = parsed.pathname;
136
- for (const { pattern, type, weight } of URL_PATTERNS) {
137
- if (pattern.test(pathname) || pattern.test(url)) {
138
- signals.push({
139
- source: 'url',
140
- signal: `url-pattern-${type}`,
141
- evidence: `URL matches pattern: ${pattern.source}`,
142
- weight,
143
- });
144
- }
145
- }
146
- }
147
- catch {
148
- // Invalid URL - no signals
149
- }
150
- return signals;
151
- }
152
- /**
153
- * Analyze title for page type signals.
154
- */
155
- function analyzeTitle(title) {
156
- const signals = [];
157
- const normalized = normalizeText(title);
158
- for (const { pattern, type, weight } of TITLE_PATTERNS) {
159
- if (pattern.test(normalized)) {
160
- signals.push({
161
- source: 'title',
162
- signal: `title-pattern-${type}`,
163
- evidence: `Title contains: ${pattern.source}`,
164
- weight,
165
- });
166
- }
167
- }
168
- return signals;
169
- }
170
- /**
171
- * Analyze content for page type signals.
172
- */
173
- function analyzeContent(snapshot, engine, formResult) {
174
- const signals = [];
175
- // Check for forms with specific purposes
176
- if (formResult) {
177
- for (const form of formResult.forms) {
178
- if (form.purpose === 'login') {
179
- signals.push({
180
- source: 'form',
181
- signal: 'form-purpose-login',
182
- evidence: 'Login form detected',
183
- weight: 0.85,
184
- });
185
- }
186
- else if (form.purpose === 'signup') {
187
- signals.push({
188
- source: 'form',
189
- signal: 'form-purpose-signup',
190
- evidence: 'Signup form detected',
191
- weight: 0.85,
192
- });
193
- }
194
- else if (form.purpose === 'checkout') {
195
- signals.push({
196
- source: 'form',
197
- signal: 'form-purpose-checkout',
198
- evidence: 'Checkout form detected',
199
- weight: 0.9,
200
- });
201
- }
202
- else if (form.purpose === 'contact') {
203
- signals.push({
204
- source: 'form',
205
- signal: 'form-purpose-contact',
206
- evidence: 'Contact form detected',
207
- weight: 0.8,
208
- });
209
- }
210
- else if (form.purpose === 'search') {
211
- signals.push({
212
- source: 'form',
213
- signal: 'form-purpose-search',
214
- evidence: 'Search form detected',
215
- weight: 0.5, // Low weight - many pages have search
216
- });
217
- }
218
- }
219
- }
220
- // Check for cart action buttons
221
- const buttons = engine.find({ kind: 'button', limit: 50 });
222
- for (const match of buttons.matches) {
223
- const label = normalizeText(match.node.label);
224
- if (CART_ACTION_PATTERNS.some((p) => p.test(label))) {
225
- signals.push({
226
- source: 'element',
227
- signal: 'cart-action-button',
228
- evidence: `Add to cart button: "${match.node.label}"`,
229
- weight: 0.75,
230
- });
231
- break; // Only count once
232
- }
233
- }
234
- // Check for auth action buttons
235
- for (const match of buttons.matches) {
236
- const label = normalizeText(match.node.label);
237
- if (AUTH_ACTION_PATTERNS.some((p) => p.test(label))) {
238
- // Context matters - in header vs main content
239
- if (match.node.where.region === 'main') {
240
- signals.push({
241
- source: 'element',
242
- signal: 'auth-action-main',
243
- evidence: `Auth action in main: "${match.node.label}"`,
244
- weight: 0.5,
245
- });
246
- }
247
- break;
248
- }
249
- }
250
- // Check for price elements (indicates product page)
251
- const texts = engine.find({ kind: 'text', limit: 100 });
252
- for (const match of texts.matches) {
253
- const label = match.node.label;
254
- if (PRICE_PATTERNS.some((p) => p.test(label))) {
255
- signals.push({
256
- source: 'element',
257
- signal: 'price-element',
258
- evidence: `Price found: "${label.substring(0, 30)}"`,
259
- weight: 0.5,
260
- });
261
- break; // Only count once
262
- }
263
- }
264
- // Check for long paragraphs (indicates article)
265
- const paragraphs = engine.find({ kind: 'paragraph', limit: 20 });
266
- const longParagraphs = paragraphs.matches.filter((m) => m.node.label.length > 200);
267
- if (longParagraphs.length >= 3) {
268
- signals.push({
269
- source: 'content',
270
- signal: 'long-paragraphs',
271
- evidence: `${longParagraphs.length} long paragraphs found`,
272
- weight: 0.6,
273
- });
274
- }
275
- // Check for error indicators
276
- const headings = engine.find({ kind: 'heading', limit: 10 });
277
- for (const match of headings.matches) {
278
- const label = normalizeText(match.node.label);
279
- if (/\b404\b/.test(label) || /\bnot found\b/i.test(label)) {
280
- signals.push({
281
- source: 'element',
282
- signal: 'error-heading-404',
283
- evidence: `Error heading: "${match.node.label}"`,
284
- weight: 0.95,
285
- });
286
- break;
287
- }
288
- if (/\b500\b/.test(label) || /\bserver error\b/i.test(label)) {
289
- signals.push({
290
- source: 'element',
291
- signal: 'error-heading-500',
292
- evidence: `Error heading: "${match.node.label}"`,
293
- weight: 0.95,
294
- });
295
- break;
296
- }
297
- }
298
- return signals;
299
- }
300
- /**
301
- * Calculate page summary info.
302
- */
303
- function calculateSummaryInfo(snapshot, engine, formResult) {
304
- // Has forms
305
- const has_forms = (formResult?.forms.length ?? 0) > 0;
306
- // Has navigation
307
- const navNodes = engine.find({ kind: 'navigation', limit: 1 });
308
- const navRegion = engine.find({ region: 'nav', limit: 1 });
309
- const has_navigation = navNodes.matches.length > 0 || navRegion.matches.length > 0;
310
- // Has main content
311
- const mainRegion = engine.find({ region: 'main', limit: 1 });
312
- const has_main_content = mainRegion.matches.length > 0;
313
- // Has search
314
- const searchForms = formResult?.forms.filter((f) => f.purpose === 'search').length ?? 0;
315
- const searchInputs = engine
316
- .find({ kind: 'input', limit: 50 })
317
- .matches.filter((m) => m.node.attributes?.input_type === 'search' ||
318
- m.node.attributes?.autocomplete === 'search' ||
319
- /search/i.test(m.node.label));
320
- const has_search = searchForms > 0 || searchInputs.length > 0;
321
- return { has_forms, has_navigation, has_main_content, has_search };
322
- }
323
- /**
324
- * Calculate type scores from signals.
325
- */
326
- function calculateTypeScores(signals) {
327
- const scores = new Map();
328
- // All possible types
329
- const allTypes = [
330
- 'homepage',
331
- 'product',
332
- 'product-listing',
333
- 'category',
334
- 'search-results',
335
- 'article',
336
- 'login',
337
- 'signup',
338
- 'checkout',
339
- 'cart',
340
- 'account',
341
- 'contact',
342
- 'about',
343
- 'documentation',
344
- 'error',
345
- ];
346
- // Initialize all to 0
347
- for (const type of allTypes) {
348
- scores.set(type, 0);
349
- }
350
- // Accumulate signal weights
351
- for (const signal of signals) {
352
- // Extract type from signal name if it follows pattern
353
- const match = /-(login|signup|checkout|cart|product|article|error|contact|about|documentation|search-results|homepage|product-listing|category|account)/.exec(signal.signal);
354
- if (match) {
355
- const type = match[1];
356
- const current = scores.get(type) ?? 0;
357
- scores.set(type, current + signal.weight);
358
- }
359
- }
360
- return scores;
361
- }
362
- /**
363
- * Select primary and secondary types from scores.
364
- */
365
- function selectTypes(scores) {
366
- const sorted = [...scores.entries()].filter(([, score]) => score > 0).sort((a, b) => b[1] - a[1]);
367
- if (sorted.length === 0) {
368
- return { primary: { type: 'unknown', score: 0.2 } };
369
- }
370
- const [primaryType, primaryScore] = sorted[0];
371
- // Normalize score to 0-1 range (cap at 1.0)
372
- const normalizedPrimary = Math.min(primaryScore, 1.0);
373
- // If score is too low, return unknown
374
- if (normalizedPrimary < 0.4) {
375
- return { primary: { type: 'unknown', score: normalizedPrimary } };
376
- }
377
- const result = {
378
- primary: { type: primaryType, score: normalizedPrimary },
379
- };
380
- // Add secondary if close to primary
381
- if (sorted.length > 1) {
382
- const [secondaryType, secondaryScore] = sorted[1];
383
- const normalizedSecondary = Math.min(secondaryScore, 1.0);
384
- // Only include if secondary is at least 60% of primary
385
- if (normalizedSecondary >= normalizedPrimary * 0.6) {
386
- result.secondary = { type: secondaryType, score: normalizedSecondary };
387
- }
388
- }
389
- return result;
390
- }
391
- /**
392
- * Extract entities from the page.
393
- */
394
- function extractEntities(snapshot, engine, pageType) {
395
- const entities = [];
396
- // Extract based on page type
397
- if (pageType === 'product') {
398
- // Try to find product name from main heading
399
- const mainHeadings = engine.find({ kind: 'heading', region: 'main', limit: 3 });
400
- if (mainHeadings.matches.length > 0) {
401
- const heading = mainHeadings.matches[0].node;
402
- if (heading.attributes?.heading_level === 1 || heading.label.length > 5) {
403
- entities.push({
404
- type: 'product-name',
405
- value: heading.label,
406
- node_id: heading.node_id,
407
- confidence: 0.7,
408
- });
409
- }
410
- }
411
- // Try to find price
412
- const texts = engine.find({ kind: 'text', limit: 100 });
413
- for (const match of texts.matches) {
414
- for (const pattern of PRICE_PATTERNS) {
415
- const priceMatch = match.node.label.match(pattern);
416
- if (priceMatch) {
417
- entities.push({
418
- type: 'price',
419
- value: priceMatch[0],
420
- node_id: match.node.node_id,
421
- confidence: 0.8,
422
- });
423
- break;
424
- }
425
- }
426
- if (entities.some((e) => e.type === 'price'))
427
- break;
428
- }
429
- }
430
- if (pageType === 'article') {
431
- // Article title from main H1
432
- const h1s = engine
433
- .find({ kind: 'heading', limit: 10 })
434
- .matches.filter((m) => m.node.attributes?.heading_level === 1);
435
- if (h1s.length > 0) {
436
- entities.push({
437
- type: 'article-title',
438
- value: h1s[0].node.label,
439
- node_id: h1s[0].node.node_id,
440
- confidence: 0.8,
441
- });
442
- }
443
- }
444
- if (pageType === 'error') {
445
- // Error code
446
- const headings = engine.find({ kind: 'heading', limit: 5 });
447
- for (const match of headings.matches) {
448
- const codeMatch = /\b(404|500|403|401|503)\b/.exec(match.node.label);
449
- if (codeMatch) {
450
- entities.push({
451
- type: 'error-code',
452
- value: codeMatch[1],
453
- node_id: match.node.node_id,
454
- confidence: 0.95,
455
- });
456
- break;
457
- }
458
- }
459
- }
460
- if (pageType === 'search-results') {
461
- // Try to extract search query from URL or title
462
- try {
463
- const url = new URL(snapshot.url);
464
- const query = url.searchParams.get('q') ??
465
- url.searchParams.get('query') ??
466
- url.searchParams.get('search');
467
- if (query) {
468
- entities.push({
469
- type: 'search-query',
470
- value: query,
471
- confidence: 0.9,
472
- });
473
- }
474
- }
475
- catch {
476
- // Invalid URL
477
- }
478
- }
479
- return entities;
480
- }
481
- // ============================================================================
482
- // Main Classification Function
483
- // ============================================================================
484
- /**
485
- * Classify a page based on URL, title, and content analysis.
486
- *
487
- * @param snapshot - The snapshot to analyze
488
- * @param formResult - Optional form detection result for context
489
- * @returns Classification result with type, confidence, signals, and entities
490
- */
491
- export function classifyPage(snapshot, formResult) {
492
- const startTime = performance.now();
493
- const engine = new QueryEngine(snapshot);
494
- // Step 1: Collect signals from all sources
495
- const signals = [
496
- ...analyzeUrl(snapshot.url),
497
- ...analyzeTitle(snapshot.title),
498
- ...analyzeContent(snapshot, engine, formResult),
499
- ];
500
- // Step 2: Calculate type scores
501
- const scores = calculateTypeScores(signals);
502
- // Step 3: Select primary/secondary types
503
- const { primary, secondary } = selectTypes(scores);
504
- // Step 4: Calculate summary info (always useful even for unknown)
505
- const summaryInfo = calculateSummaryInfo(snapshot, engine, formResult);
506
- // Step 5: Extract entities
507
- const entities = extractEntities(snapshot, engine, primary.type);
508
- const classificationTimeMs = performance.now() - startTime;
509
- const classification = {
510
- type: primary.type,
511
- confidence: primary.score,
512
- secondary_type: secondary?.type,
513
- secondary_confidence: secondary?.score,
514
- signals,
515
- entities,
516
- ...summaryInfo,
517
- };
518
- return {
519
- classification,
520
- meta: {
521
- signals_evaluated: signals.length,
522
- classification_time_ms: classificationTimeMs,
523
- },
524
- };
525
- }
526
- //# sourceMappingURL=page-classifier.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-classifier.js","sourceRoot":"","sources":["../../../src/factpack/page-classifier.ts"],"names":[],"mappings":"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"}