@staticn0va/wigolo 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +67 -2
  2. package/SKILL.md +149 -0
  3. package/dist/cache/change-detector.d.ts +7 -0
  4. package/dist/cache/change-detector.d.ts.map +1 -0
  5. package/dist/cache/change-detector.js +43 -0
  6. package/dist/cache/change-detector.js.map +1 -0
  7. package/dist/cache/diff-summary.d.ts +2 -0
  8. package/dist/cache/diff-summary.d.ts.map +1 -0
  9. package/dist/cache/diff-summary.js +87 -0
  10. package/dist/cache/diff-summary.js.map +1 -0
  11. package/dist/cache/store.d.ts +2 -0
  12. package/dist/cache/store.d.ts.map +1 -1
  13. package/dist/cache/store.js +10 -0
  14. package/dist/cache/store.js.map +1 -1
  15. package/dist/cli/auth.d.ts +2 -0
  16. package/dist/cli/auth.d.ts.map +1 -0
  17. package/dist/cli/auth.js +95 -0
  18. package/dist/cli/auth.js.map +1 -0
  19. package/dist/cli/daemon.d.ts +6 -1
  20. package/dist/cli/daemon.d.ts.map +1 -1
  21. package/dist/cli/daemon.js +56 -3
  22. package/dist/cli/daemon.js.map +1 -1
  23. package/dist/cli/doctor.d.ts +8 -0
  24. package/dist/cli/doctor.d.ts.map +1 -0
  25. package/dist/cli/doctor.js +153 -0
  26. package/dist/cli/doctor.js.map +1 -0
  27. package/dist/cli/health.d.ts +1 -1
  28. package/dist/cli/health.d.ts.map +1 -1
  29. package/dist/cli/health.js +41 -3
  30. package/dist/cli/health.js.map +1 -1
  31. package/dist/cli/index.d.ts +1 -1
  32. package/dist/cli/index.d.ts.map +1 -1
  33. package/dist/cli/index.js +1 -1
  34. package/dist/cli/index.js.map +1 -1
  35. package/dist/cli/plugin.d.ts +5 -0
  36. package/dist/cli/plugin.d.ts.map +1 -0
  37. package/dist/cli/plugin.js +188 -0
  38. package/dist/cli/plugin.js.map +1 -0
  39. package/dist/cli/shell.d.ts +2 -0
  40. package/dist/cli/shell.d.ts.map +1 -0
  41. package/dist/cli/shell.js +86 -0
  42. package/dist/cli/shell.js.map +1 -0
  43. package/dist/cli/warmup.d.ts +4 -0
  44. package/dist/cli/warmup.d.ts.map +1 -1
  45. package/dist/cli/warmup.js +78 -2
  46. package/dist/cli/warmup.js.map +1 -1
  47. package/dist/config.d.ts +10 -0
  48. package/dist/config.d.ts.map +1 -1
  49. package/dist/config.js +27 -0
  50. package/dist/config.js.map +1 -1
  51. package/dist/daemon/health-check.d.ts +16 -0
  52. package/dist/daemon/health-check.d.ts.map +1 -0
  53. package/dist/daemon/health-check.js +36 -0
  54. package/dist/daemon/health-check.js.map +1 -0
  55. package/dist/daemon/http-server.d.ts +26 -0
  56. package/dist/daemon/http-server.d.ts.map +1 -0
  57. package/dist/daemon/http-server.js +282 -0
  58. package/dist/daemon/http-server.js.map +1 -0
  59. package/dist/daemon/proxy.d.ts +10 -0
  60. package/dist/daemon/proxy.d.ts.map +1 -0
  61. package/dist/daemon/proxy.js +99 -0
  62. package/dist/daemon/proxy.js.map +1 -0
  63. package/dist/fetch/action-executor.d.ts +28 -0
  64. package/dist/fetch/action-executor.d.ts.map +1 -0
  65. package/dist/fetch/action-executor.js +86 -0
  66. package/dist/fetch/action-executor.js.map +1 -0
  67. package/dist/fetch/auth.d.ts +2 -1
  68. package/dist/fetch/auth.d.ts.map +1 -1
  69. package/dist/fetch/auth.js +30 -2
  70. package/dist/fetch/auth.js.map +1 -1
  71. package/dist/fetch/browser-pool.d.ts +30 -11
  72. package/dist/fetch/browser-pool.d.ts.map +1 -1
  73. package/dist/fetch/browser-pool.js +165 -49
  74. package/dist/fetch/browser-pool.js.map +1 -1
  75. package/dist/fetch/browser-selector.d.ts +17 -0
  76. package/dist/fetch/browser-selector.d.ts.map +1 -0
  77. package/dist/fetch/browser-selector.js +70 -0
  78. package/dist/fetch/browser-selector.js.map +1 -0
  79. package/dist/fetch/browser-types.d.ts +3 -0
  80. package/dist/fetch/browser-types.d.ts.map +1 -0
  81. package/dist/fetch/browser-types.js +45 -0
  82. package/dist/fetch/browser-types.js.map +1 -0
  83. package/dist/fetch/cdp-client.d.ts +9 -0
  84. package/dist/fetch/cdp-client.d.ts.map +1 -0
  85. package/dist/fetch/cdp-client.js +90 -0
  86. package/dist/fetch/cdp-client.js.map +1 -0
  87. package/dist/fetch/router.d.ts +4 -1
  88. package/dist/fetch/router.d.ts.map +1 -1
  89. package/dist/fetch/router.js +8 -2
  90. package/dist/fetch/router.js.map +1 -1
  91. package/dist/index.js +39 -3
  92. package/dist/index.js.map +1 -1
  93. package/dist/instructions.d.ts +26 -0
  94. package/dist/instructions.d.ts.map +1 -0
  95. package/dist/instructions.js +101 -0
  96. package/dist/instructions.js.map +1 -0
  97. package/dist/logger.d.ts +1 -1
  98. package/dist/logger.d.ts.map +1 -1
  99. package/dist/plugins/loader.d.ts +20 -0
  100. package/dist/plugins/loader.d.ts.map +1 -0
  101. package/dist/plugins/loader.js +162 -0
  102. package/dist/plugins/loader.js.map +1 -0
  103. package/dist/plugins/registry.d.ts +26 -0
  104. package/dist/plugins/registry.d.ts.map +1 -0
  105. package/dist/plugins/registry.js +68 -0
  106. package/dist/plugins/registry.js.map +1 -0
  107. package/dist/plugins/validate.d.ts +9 -0
  108. package/dist/plugins/validate.d.ts.map +1 -0
  109. package/dist/plugins/validate.js +70 -0
  110. package/dist/plugins/validate.js.map +1 -0
  111. package/dist/repl/commands/cache.d.ts +4 -0
  112. package/dist/repl/commands/cache.d.ts.map +1 -0
  113. package/dist/repl/commands/cache.js +44 -0
  114. package/dist/repl/commands/cache.js.map +1 -0
  115. package/dist/repl/commands/crawl.d.ts +7 -0
  116. package/dist/repl/commands/crawl.d.ts.map +1 -0
  117. package/dist/repl/commands/crawl.js +42 -0
  118. package/dist/repl/commands/crawl.js.map +1 -0
  119. package/dist/repl/commands/extract.d.ts +5 -0
  120. package/dist/repl/commands/extract.d.ts.map +1 -0
  121. package/dist/repl/commands/extract.js +37 -0
  122. package/dist/repl/commands/extract.js.map +1 -0
  123. package/dist/repl/commands/fetch.d.ts +5 -0
  124. package/dist/repl/commands/fetch.d.ts.map +1 -0
  125. package/dist/repl/commands/fetch.js +53 -0
  126. package/dist/repl/commands/fetch.js.map +1 -0
  127. package/dist/repl/commands/search.d.ts +5 -0
  128. package/dist/repl/commands/search.d.ts.map +1 -0
  129. package/dist/repl/commands/search.js +62 -0
  130. package/dist/repl/commands/search.js.map +1 -0
  131. package/dist/repl/commands/types.d.ts +9 -0
  132. package/dist/repl/commands/types.d.ts.map +1 -0
  133. package/dist/repl/commands/types.js +2 -0
  134. package/dist/repl/commands/types.js.map +1 -0
  135. package/dist/repl/formatters.d.ts +10 -0
  136. package/dist/repl/formatters.d.ts.map +1 -0
  137. package/dist/repl/formatters.js +209 -0
  138. package/dist/repl/formatters.js.map +1 -0
  139. package/dist/repl/parser.d.ts +9 -0
  140. package/dist/repl/parser.d.ts.map +1 -0
  141. package/dist/repl/parser.js +84 -0
  142. package/dist/repl/parser.js.map +1 -0
  143. package/dist/repl/shell.d.ts +8 -0
  144. package/dist/repl/shell.d.ts.map +1 -0
  145. package/dist/repl/shell.js +156 -0
  146. package/dist/repl/shell.js.map +1 -0
  147. package/dist/search/context-formatter.d.ts +3 -0
  148. package/dist/search/context-formatter.d.ts.map +1 -0
  149. package/dist/search/context-formatter.js +56 -0
  150. package/dist/search/context-formatter.js.map +1 -0
  151. package/dist/search/engines/bing.d.ts +1 -0
  152. package/dist/search/engines/bing.d.ts.map +1 -1
  153. package/dist/search/engines/bing.js +27 -1
  154. package/dist/search/engines/bing.js.map +1 -1
  155. package/dist/searxng/bootstrap.d.ts +30 -0
  156. package/dist/searxng/bootstrap.d.ts.map +1 -1
  157. package/dist/searxng/bootstrap.js +150 -23
  158. package/dist/searxng/bootstrap.js.map +1 -1
  159. package/dist/searxng/process.d.ts +13 -1
  160. package/dist/searxng/process.d.ts.map +1 -1
  161. package/dist/searxng/process.js +52 -2
  162. package/dist/searxng/process.js.map +1 -1
  163. package/dist/server/backend-status.d.ts +11 -0
  164. package/dist/server/backend-status.d.ts.map +1 -0
  165. package/dist/server/backend-status.js +27 -0
  166. package/dist/server/backend-status.js.map +1 -0
  167. package/dist/server.d.ts +17 -0
  168. package/dist/server.d.ts.map +1 -1
  169. package/dist/server.js +228 -91
  170. package/dist/server.js.map +1 -1
  171. package/dist/tools/cache.d.ts +2 -1
  172. package/dist/tools/cache.d.ts.map +1 -1
  173. package/dist/tools/cache.js +56 -1
  174. package/dist/tools/cache.js.map +1 -1
  175. package/dist/tools/fetch.d.ts.map +1 -1
  176. package/dist/tools/fetch.js +16 -1
  177. package/dist/tools/fetch.js.map +1 -1
  178. package/dist/tools/search.d.ts +2 -1
  179. package/dist/tools/search.d.ts.map +1 -1
  180. package/dist/tools/search.js +26 -4
  181. package/dist/tools/search.js.map +1 -1
  182. package/dist/types.d.ts +49 -0
  183. package/dist/types.d.ts.map +1 -1
  184. package/package.json +36 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp-client.js","sourceRoot":"","sources":["../../src/fetch/cdp-client.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
- import type { RawFetchResult } from '../types.js';
1
+ import type { RawFetchResult, BrowserAction } from '../types.js';
2
2
  export interface RouterFetchOptions {
3
3
  renderJs?: 'auto' | 'always' | 'never';
4
4
  useAuth?: boolean;
5
5
  headers?: Record<string, string>;
6
6
  screenshot?: boolean;
7
+ actions?: BrowserAction[];
7
8
  }
8
9
  export interface HttpClient {
9
10
  fetch(url: string, options?: {
@@ -25,6 +26,8 @@ export interface BrowserPoolInterface {
25
26
  storageStatePath?: string;
26
27
  userDataDir?: string;
27
28
  screenshot?: boolean;
29
+ actions?: BrowserAction[];
30
+ cdpUrl?: string;
28
31
  }): Promise<RawFetchResult>;
29
32
  }
30
33
  interface DomainStats {
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/fetch/router.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CACH,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACjE,OAAO,CAAC;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACpH,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AAED,UAAU,WAAW;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,WAAW;IAIpB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;gBAGzC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,oBAAoB;IAG9C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC;IA6DnF,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIvD,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,gBAAgB;CAczB"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/fetch/router.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CACH,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACjE,OAAO,CAAC;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAChK,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AAED,UAAU,WAAW;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,WAAW;IAIpB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;gBAGzC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,oBAAoB;IAG9C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC;IAoEnF,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIvD,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,gBAAgB;CAczB"}
@@ -11,14 +11,20 @@ export class SmartRouter {
11
11
  this.browserPool = browserPool;
12
12
  }
13
13
  async fetch(url, options = {}) {
14
- const { renderJs = 'auto', useAuth = false, headers, screenshot } = options;
14
+ const { renderJs = 'auto', useAuth = false, headers, screenshot, actions } = options;
15
15
  const config = getConfig();
16
16
  const logger = createLogger('fetch');
17
17
  const threshold = config.browserFallbackThreshold;
18
18
  const domain = new URL(url).hostname;
19
+ // Actions always force Playwright --- actions need a live browser page
20
+ if (actions && actions.length > 0) {
21
+ const authOptions = useAuth ? (await getAuthOptions() ?? {}) : {};
22
+ logger.debug('routing to playwright', { url, reason: 'actions present' });
23
+ return this.browserPool.fetchWithBrowser(url, { headers, screenshot, actions, ...authOptions });
24
+ }
19
25
  // Always Playwright for auth or explicit override
20
26
  if (renderJs === 'always' || useAuth) {
21
- const authOptions = useAuth ? (getAuthOptions() ?? {}) : {};
27
+ const authOptions = useAuth ? (await getAuthOptions() ?? {}) : {};
22
28
  logger.debug('routing to playwright', { url, reason: useAuth ? 'auth' : 'render_js=always' });
23
29
  return this.browserPool.fetchWithBrowser(url, { headers, screenshot, ...authOptions });
24
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/fetch/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAqC3C,MAAM,OAAO,WAAW;IAIH;IACA;IAJF,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE5D,YACmB,UAAsB,EACtB,WAAiC;QADjC,eAAU,GAAV,UAAU,CAAY;QACtB,gBAAW,GAAX,WAAW,CAAsB;IACjD,CAAC;IAEJ,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,UAA8B,EAAE;QACvD,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAC5E,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,CAAC,wBAAwB,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QAErC,kDAAkD;QAClD,IAAI,QAAQ,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAC9F,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;QACzF,CAAC;QAED,yBAAyB;QACzB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,yDAAyD;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEvC,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE7D,sCAAsC;YACtC,IAAI,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,mDAAmD,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;gBAClF,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,YAAY,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC/B,GAAG;gBACH,MAAM;gBACN,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,YAAY,IAAI,SAAS,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,0DAA0D,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBACpG,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAEO,WAAW,CAAC,MAAc;QAChC,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,gBAAgB,CACtB,MAAgD;QAEhD,OAAO;YACL,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/fetch/router.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,6 +3,11 @@ import { parseCommand } from './cli/index.js';
3
3
  import { runWarmup } from './cli/warmup.js';
4
4
  import { runDaemon } from './cli/daemon.js';
5
5
  import { runHealthCheck } from './cli/health.js';
6
+ import { runDoctor } from './cli/doctor.js';
7
+ import { runShell } from './cli/shell.js';
8
+ import { runAuth } from './cli/auth.js';
9
+ import { runPluginCommand } from './cli/plugin.js';
10
+ import { getConfig } from './config.js';
6
11
  import { startServer } from './server.js';
7
12
  const { command, args } = parseCommand(process.argv.slice(2));
8
13
  switch (command) {
@@ -12,11 +17,42 @@ switch (command) {
12
17
  case 'serve':
13
18
  runDaemon(args);
14
19
  break;
15
- case 'health':
16
- runHealthCheck();
20
+ case 'health': {
21
+ const exitCode = await runHealthCheck();
22
+ process.exit(exitCode);
17
23
  break;
18
- case 'mcp':
24
+ }
25
+ case 'doctor': {
26
+ const code = await runDoctor(getConfig().dataDir);
27
+ process.exit(code);
28
+ break;
29
+ }
30
+ case 'auth': {
31
+ const authCode = await runAuth(args);
32
+ process.exit(authCode);
33
+ break;
34
+ }
35
+ case 'shell':
36
+ await runShell(args);
37
+ break;
38
+ case 'plugin':
39
+ runPluginCommand(args);
40
+ break;
41
+ case 'mcp': {
42
+ const config = getConfig();
43
+ try {
44
+ const { tryConnectDaemon } = await import('./daemon/proxy.js');
45
+ const report = await tryConnectDaemon(config.daemonPort, config.daemonHost);
46
+ if (report) {
47
+ process.stderr.write(`[wigolo] Daemon detected at ${config.daemonHost}:${config.daemonPort} ` +
48
+ `(status: ${report.status}). Full proxy deferred to v2.1; starting local server.\n`);
49
+ }
50
+ }
51
+ catch {
52
+ // Daemon proxy module may not be available -- fall through to local server
53
+ }
19
54
  await startServer();
20
55
  break;
56
+ }
21
57
  }
22
58
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9D,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,QAAQ;QACX,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM;IAER,KAAK,OAAO;QACV,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM;IAER,KAAK,QAAQ;QACX,cAAc,EAAE,CAAC;QACjB,MAAM;IAER,KAAK,KAAK;QACR,MAAM,WAAW,EAAE,CAAC;QACpB,MAAM;AACV,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9D,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,QAAQ;QACX,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM;IAER,KAAK,OAAO;QACV,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM;IAER,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM;IACR,CAAC;IAED,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM;IACR,CAAC;IAED,KAAK,MAAM,CAAC,CAAC,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM;IACR,CAAC;IAED,KAAK,OAAO;QACV,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM;IAER,KAAK,QAAQ;QACX,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM;IAER,KAAK,KAAK,CAAC,CAAC,CAAC;QACX,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5E,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,+BAA+B,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,GAAG;oBACxE,YAAY,MAAM,CAAC,MAAM,0DAA0D,CACpF,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2EAA2E;QAC7E,CAAC;QAED,MAAM,WAAW,EAAE,CAAC;QACpB,MAAM;IACR,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * LLM knowledge layer for wigolo.
3
+ *
4
+ * Two layers. They do different jobs and must not repeat each other:
5
+ *
6
+ * Layer 1 — WIGOLO_INSTRUCTIONS: server-level STRATEGY. Injected into the
7
+ * LLM system prompt once per session by compatible MCP clients. Answers
8
+ * "when do I reach for wigolo? which of its tools fits this situation?".
9
+ *
10
+ * Layer 2 — TOOL_DESCRIPTIONS: per-tool TACTICS. Seen every time the LLM is
11
+ * picking a tool. Answers "what does this tool do, which parameters matter,
12
+ * what does the output look like?".
13
+ *
14
+ * Parameter schemas (types, enums, required/optional) belong on the JSON
15
+ * Schema, not here. Installation/configuration is for humans, not LLMs.
16
+ */
17
+ export declare const WIGOLO_INSTRUCTIONS = "Wigolo is a local-first web access layer: search the open web, fetch pages, crawl sites, and extract structured data. All results land in a local SQLite cache that persists across sessions.\n\n## When to use which tool\n\n- `search` \u2014 you need information on a topic but do not have a URL yet.\n- `fetch` \u2014 you already have a specific URL to read.\n- `crawl` \u2014 you need multiple pages from the same site (docs, wikis, references).\n- `cache` \u2014 you want to know if the content is already on disk from an earlier read.\n- `extract` \u2014 you need specific data points (tables, metadata, schema-shaped fields) rather than a whole page as markdown.\n\n## Check the cache before going to the network\n\nBefore every `search` or `fetch`, consider a `cache` call with the query text or URL pattern. Pages read in this or a prior session return instantly with their full markdown \u2014 no network, no rate limits.\n\n## Pick the right strategy\n\n- For documentation sites, prefer `crawl` with `strategy: \"sitemap\"` \u2014 it is faster and more complete than BFS because it reads sitemap.xml directly.\n- When you only need to discover what pages exist on a site, use `crawl` with `strategy: \"map\"`. It returns URLs only, no content, and is far cheaper than a full crawl. Follow up with targeted `fetch` calls.\n- For structured data (prices, specs, listings, table rows), use `extract` with `mode: \"schema\"` or `mode: \"tables\"`. Reach for `fetch` only when you want the whole page as markdown.\n\n## Scope searches, do not just broaden queries\n\n`search` accepts `include_domains` (e.g. `[\"react.dev\", \"developer.mozilla.org\"]`) and a `category` such as `\"docs\"`, `\"code\"`, `\"news\"`, or `\"papers\"`. A scoped query usually beats a broader query with post-filtering.\n\n## Performance\n\n- `max_results: 3` for focused lookups; `5` is the default; `10+` only for broad research.\n- `fetch` with `section: \"Heading Name\"` returns just the content under that heading. Cheaper and more relevant than the whole page.\n- Repeated fetches of the same URL are free \u2014 served directly from the SQLite cache.\n\n## Capabilities worth knowing\n\n- Localhost URLs work: `http://localhost:3000`, `http://127.0.0.1:8080`, and similar. Useful for reading local dev servers and internal docs.\n- `use_auth: true` on `fetch` and `crawl` reuses the user's configured browser session for pages behind a login.\n- `cache` accepts FTS5 query syntax (`AND`, `OR`, `NOT`, `\"exact phrase\"`) for precise lookups.\n- `crawl` accepts regex `include_patterns` and `exclude_patterns` to stay inside a section of a large site.";
18
+ export declare const TOOL_DESCRIPTIONS: {
19
+ readonly fetch: "Fetch a single URL and return clean markdown. Use when you have a specific URL to read. Automatically detects if JavaScript rendering is needed.\n\nKey parameters:\n- section: extract content under a specific heading (e.g., section: \"API Reference\") — faster than reading the whole page\n- use_auth: true to use stored browser session for authenticated/private pages\n- render_js: \"auto\" (default, detects JS need), \"always\" (force browser), \"never\" (HTTP only, fastest)\n- headers: custom HTTP headers if needed\n\nReturns title, markdown content, links, images, and metadata. Result is cached locally — subsequent fetches of the same URL return instantly. Works with localhost URLs (localhost:3000, etc.) for reading local dev servers.";
20
+ readonly search: "Search the web and return full markdown content from top results. Use for finding information on any topic — returns extracted page content, not just snippets.\n\nKey parameters:\n- include_domains/exclude_domains: scope results to specific sites (e.g., include_domains: [\"react.dev\"])\n- category: \"general\", \"news\", \"code\", \"docs\", \"papers\" — filters by content type\n- from_date/to_date: ISO dates for time-bounded queries\n- max_results: default 5. Use 3 for focused queries, 10+ for research.\n\nResults include title, URL, relevance_score, and full markdown_content per result. Previously fetched pages are served from local cache.";
21
+ readonly crawl: "Crawl a website starting from a URL and return content from multiple pages. Use for indexing documentation sites, wikis, or any multi-page resource.\n\nKey parameters:\n- strategy: \"bfs\" (breadth-first, default), \"dfs\" (depth-first), \"sitemap\" (use sitemap.xml — fastest for doc sites), \"map\" (URL discovery only, no content — fastest for scoping a site)\n- max_depth: how many links deep to follow (default 2)\n- max_pages: maximum pages to fetch (default 20)\n- include_patterns/exclude_patterns: regex filters on URLs\n\nReturns an array of pages with title, markdown, and depth. Content is deduplicated across pages (repeated nav/headers/footers stripped). All pages are cached for later cache queries.";
22
+ readonly cache: "Search previously fetched content without hitting the network. Use before searching the web — if relevant content was already fetched or crawled, this returns it instantly.\n\nKey parameters:\n- query: full-text search over cached markdown and titles (supports FTS5 syntax: AND, OR, NOT, \"phrase match\")\n- url_pattern: glob filter on URLs (e.g., \"*react.dev*\")\n- since: ISO date — only results cached after this date\n- stats: true to get cache size, entry count, oldest/newest dates\n- clear: true to delete matching entries\n\nReturns matching cached pages with full markdown content. Cache persists across sessions in local SQLite.";
23
+ readonly extract: "Extract structured data from a URL or raw HTML. Use when you need specific data points, tables, or metadata rather than full page markdown.\n\nKey parameters:\n- mode: \"selector\" (CSS selector → text), \"tables\" (HTML tables → JSON rows), \"metadata\" (title/author/date/description), \"schema\" (JSON Schema → heuristic field extraction)\n- css_selector: required for mode=\"selector\" — any valid CSS selector\n- schema: for mode=\"schema\", a JSON Schema object describing the fields to extract\n- multiple: true to return array of all matches (mode=\"selector\" only)\n\nFor mode=\"tables\", returns array of table objects with headers and row data. For mode=\"schema\", pass { price: \"string\", name: \"string\" } and get structured fields extracted from the page.";
24
+ };
25
+ export type ToolName = keyof typeof TOOL_DESCRIPTIONS;
26
+ //# sourceMappingURL=instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,mBAAmB,olFAmCkF,CAAC;AAEnH,eAAO,MAAM,iBAAiB;;;;;;CAmDpB,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,iBAAiB,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * LLM knowledge layer for wigolo.
3
+ *
4
+ * Two layers. They do different jobs and must not repeat each other:
5
+ *
6
+ * Layer 1 — WIGOLO_INSTRUCTIONS: server-level STRATEGY. Injected into the
7
+ * LLM system prompt once per session by compatible MCP clients. Answers
8
+ * "when do I reach for wigolo? which of its tools fits this situation?".
9
+ *
10
+ * Layer 2 — TOOL_DESCRIPTIONS: per-tool TACTICS. Seen every time the LLM is
11
+ * picking a tool. Answers "what does this tool do, which parameters matter,
12
+ * what does the output look like?".
13
+ *
14
+ * Parameter schemas (types, enums, required/optional) belong on the JSON
15
+ * Schema, not here. Installation/configuration is for humans, not LLMs.
16
+ */
17
+ export const WIGOLO_INSTRUCTIONS = `Wigolo is a local-first web access layer: search the open web, fetch pages, crawl sites, and extract structured data. All results land in a local SQLite cache that persists across sessions.
18
+
19
+ ## When to use which tool
20
+
21
+ - \`search\` — you need information on a topic but do not have a URL yet.
22
+ - \`fetch\` — you already have a specific URL to read.
23
+ - \`crawl\` — you need multiple pages from the same site (docs, wikis, references).
24
+ - \`cache\` — you want to know if the content is already on disk from an earlier read.
25
+ - \`extract\` — you need specific data points (tables, metadata, schema-shaped fields) rather than a whole page as markdown.
26
+
27
+ ## Check the cache before going to the network
28
+
29
+ Before every \`search\` or \`fetch\`, consider a \`cache\` call with the query text or URL pattern. Pages read in this or a prior session return instantly with their full markdown — no network, no rate limits.
30
+
31
+ ## Pick the right strategy
32
+
33
+ - For documentation sites, prefer \`crawl\` with \`strategy: "sitemap"\` — it is faster and more complete than BFS because it reads sitemap.xml directly.
34
+ - When you only need to discover what pages exist on a site, use \`crawl\` with \`strategy: "map"\`. It returns URLs only, no content, and is far cheaper than a full crawl. Follow up with targeted \`fetch\` calls.
35
+ - For structured data (prices, specs, listings, table rows), use \`extract\` with \`mode: "schema"\` or \`mode: "tables"\`. Reach for \`fetch\` only when you want the whole page as markdown.
36
+
37
+ ## Scope searches, do not just broaden queries
38
+
39
+ \`search\` accepts \`include_domains\` (e.g. \`["react.dev", "developer.mozilla.org"]\`) and a \`category\` such as \`"docs"\`, \`"code"\`, \`"news"\`, or \`"papers"\`. A scoped query usually beats a broader query with post-filtering.
40
+
41
+ ## Performance
42
+
43
+ - \`max_results: 3\` for focused lookups; \`5\` is the default; \`10+\` only for broad research.
44
+ - \`fetch\` with \`section: "Heading Name"\` returns just the content under that heading. Cheaper and more relevant than the whole page.
45
+ - Repeated fetches of the same URL are free — served directly from the SQLite cache.
46
+
47
+ ## Capabilities worth knowing
48
+
49
+ - Localhost URLs work: \`http://localhost:3000\`, \`http://127.0.0.1:8080\`, and similar. Useful for reading local dev servers and internal docs.
50
+ - \`use_auth: true\` on \`fetch\` and \`crawl\` reuses the user's configured browser session for pages behind a login.
51
+ - \`cache\` accepts FTS5 query syntax (\`AND\`, \`OR\`, \`NOT\`, \`"exact phrase"\`) for precise lookups.
52
+ - \`crawl\` accepts regex \`include_patterns\` and \`exclude_patterns\` to stay inside a section of a large site.`;
53
+ export const TOOL_DESCRIPTIONS = {
54
+ fetch: `Fetch a single URL and return clean markdown. Use when you have a specific URL to read. Automatically detects if JavaScript rendering is needed.
55
+
56
+ Key parameters:
57
+ - section: extract content under a specific heading (e.g., section: "API Reference") — faster than reading the whole page
58
+ - use_auth: true to use stored browser session for authenticated/private pages
59
+ - render_js: "auto" (default, detects JS need), "always" (force browser), "never" (HTTP only, fastest)
60
+ - headers: custom HTTP headers if needed
61
+
62
+ Returns title, markdown content, links, images, and metadata. Result is cached locally — subsequent fetches of the same URL return instantly. Works with localhost URLs (localhost:3000, etc.) for reading local dev servers.`,
63
+ search: `Search the web and return full markdown content from top results. Use for finding information on any topic — returns extracted page content, not just snippets.
64
+
65
+ Key parameters:
66
+ - include_domains/exclude_domains: scope results to specific sites (e.g., include_domains: ["react.dev"])
67
+ - category: "general", "news", "code", "docs", "papers" — filters by content type
68
+ - from_date/to_date: ISO dates for time-bounded queries
69
+ - max_results: default 5. Use 3 for focused queries, 10+ for research.
70
+
71
+ Results include title, URL, relevance_score, and full markdown_content per result. Previously fetched pages are served from local cache.`,
72
+ crawl: `Crawl a website starting from a URL and return content from multiple pages. Use for indexing documentation sites, wikis, or any multi-page resource.
73
+
74
+ Key parameters:
75
+ - strategy: "bfs" (breadth-first, default), "dfs" (depth-first), "sitemap" (use sitemap.xml — fastest for doc sites), "map" (URL discovery only, no content — fastest for scoping a site)
76
+ - max_depth: how many links deep to follow (default 2)
77
+ - max_pages: maximum pages to fetch (default 20)
78
+ - include_patterns/exclude_patterns: regex filters on URLs
79
+
80
+ Returns an array of pages with title, markdown, and depth. Content is deduplicated across pages (repeated nav/headers/footers stripped). All pages are cached for later cache queries.`,
81
+ cache: `Search previously fetched content without hitting the network. Use before searching the web — if relevant content was already fetched or crawled, this returns it instantly.
82
+
83
+ Key parameters:
84
+ - query: full-text search over cached markdown and titles (supports FTS5 syntax: AND, OR, NOT, "phrase match")
85
+ - url_pattern: glob filter on URLs (e.g., "*react.dev*")
86
+ - since: ISO date — only results cached after this date
87
+ - stats: true to get cache size, entry count, oldest/newest dates
88
+ - clear: true to delete matching entries
89
+
90
+ Returns matching cached pages with full markdown content. Cache persists across sessions in local SQLite.`,
91
+ extract: `Extract structured data from a URL or raw HTML. Use when you need specific data points, tables, or metadata rather than full page markdown.
92
+
93
+ Key parameters:
94
+ - mode: "selector" (CSS selector → text), "tables" (HTML tables → JSON rows), "metadata" (title/author/date/description), "schema" (JSON Schema → heuristic field extraction)
95
+ - css_selector: required for mode="selector" — any valid CSS selector
96
+ - schema: for mode="schema", a JSON Schema object describing the fields to extract
97
+ - multiple: true to return array of all matches (mode="selector" only)
98
+
99
+ For mode="tables", returns array of table objects with headers and row data. For mode="schema", pass { price: "string", name: "string" } and get structured fields extracted from the page.`,
100
+ };
101
+ //# sourceMappingURL=instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kHAmC+E,CAAC;AAEnH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAE;;;;;;;;8NAQqN;IAE5N,MAAM,EAAE;;;;;;;;yIAQ+H;IAEvI,KAAK,EAAE;;;;;;;;uLAQ8K;IAErL,KAAK,EAAE;;;;;;;;;0GASiG;IAExG,OAAO,EAAE;;;;;;;;4LAQiL;CAClL,CAAC"}
package/dist/logger.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- type Module = 'fetch' | 'search' | 'crawl' | 'cache' | 'extract' | 'searxng' | 'server' | 'cli' | 'jsonld';
1
+ type Module = 'fetch' | 'search' | 'crawl' | 'cache' | 'extract' | 'searxng' | 'server' | 'cli' | 'jsonld' | 'repl';
2
2
  export interface Logger {
3
3
  debug(msg: string, data?: Record<string, unknown>): void;
4
4
  info(msg: string, data?: Record<string, unknown>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAGA,KAAK,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;AAS3G,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1D;AAmBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiBnD"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAGA,KAAK,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AASpH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1D;AAmBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiBnD"}
@@ -0,0 +1,20 @@
1
+ import type { Extractor, SearchEngine } from '../types.js';
2
+ export interface LoadedPlugin {
3
+ name: string;
4
+ version: string;
5
+ path: string;
6
+ hasExtractor: boolean;
7
+ hasSearchEngine: boolean;
8
+ }
9
+ export interface PluginLoadError {
10
+ pluginName: string;
11
+ message: string;
12
+ }
13
+ export interface PluginLoadResult {
14
+ extractors: Extractor[];
15
+ searchEngines: SearchEngine[];
16
+ loaded: LoadedPlugin[];
17
+ errors: PluginLoadError[];
18
+ }
19
+ export declare function loadPlugins(): Promise<PluginLoadResult>;
20
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAqBD,wBAAsB,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA2J7D"}
@@ -0,0 +1,162 @@
1
+ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ import { getConfig } from '../config.js';
5
+ import { createLogger } from '../logger.js';
6
+ import { validatePluginExports } from './validate.js';
7
+ const log = createLogger('server');
8
+ function readPluginPackageJson(pluginDir) {
9
+ const pkgPath = join(pluginDir, 'package.json');
10
+ if (!existsSync(pkgPath)) {
11
+ return null;
12
+ }
13
+ try {
14
+ const raw = readFileSync(pkgPath, 'utf-8');
15
+ return JSON.parse(raw);
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ export async function loadPlugins() {
22
+ const config = getConfig();
23
+ const pluginsDir = config.pluginsDir;
24
+ const result = {
25
+ extractors: [],
26
+ searchEngines: [],
27
+ loaded: [],
28
+ errors: [],
29
+ };
30
+ if (!existsSync(pluginsDir)) {
31
+ log.debug('plugins directory does not exist, skipping', { path: pluginsDir });
32
+ return result;
33
+ }
34
+ let entries;
35
+ try {
36
+ entries = readdirSync(pluginsDir);
37
+ }
38
+ catch (err) {
39
+ log.warn('failed to read plugins directory', {
40
+ path: pluginsDir,
41
+ error: String(err),
42
+ });
43
+ return result;
44
+ }
45
+ const seenExtractorNames = new Set();
46
+ const seenEngineNames = new Set();
47
+ for (const entry of entries) {
48
+ const pluginDir = join(pluginsDir, entry);
49
+ let stat;
50
+ try {
51
+ stat = statSync(pluginDir);
52
+ }
53
+ catch {
54
+ continue;
55
+ }
56
+ // statSync follows symlinks, so this also handles symlinked plugin dirs
57
+ if (!stat.isDirectory()) {
58
+ continue;
59
+ }
60
+ const pkgJson = readPluginPackageJson(pluginDir);
61
+ const pluginName = pkgJson?.name ?? entry;
62
+ if (pkgJson === null) {
63
+ // Check if there is a package.json at all
64
+ if (existsSync(join(pluginDir, 'package.json'))) {
65
+ result.errors.push({
66
+ pluginName: entry,
67
+ message: `failed to parse package.json in ${pluginDir}`,
68
+ });
69
+ }
70
+ continue;
71
+ }
72
+ if (!pkgJson.main) {
73
+ result.errors.push({
74
+ pluginName,
75
+ message: `plugin ${pluginName} has no main field in package.json`,
76
+ });
77
+ continue;
78
+ }
79
+ const entryPath = join(pluginDir, pkgJson.main);
80
+ if (!existsSync(entryPath)) {
81
+ result.errors.push({
82
+ pluginName,
83
+ message: `entry point not found: ${entryPath}`,
84
+ });
85
+ continue;
86
+ }
87
+ let mod;
88
+ try {
89
+ const fileUrl = pathToFileURL(entryPath).href;
90
+ mod = (await import(fileUrl));
91
+ }
92
+ catch (err) {
93
+ const message = err instanceof Error ? err.message : String(err);
94
+ result.errors.push({
95
+ pluginName,
96
+ message: `failed to load plugin ${pluginName}: ${message}`,
97
+ });
98
+ log.warn('plugin import failed', { plugin: pluginName, error: message });
99
+ continue;
100
+ }
101
+ const validation = validatePluginExports(mod);
102
+ if (validation.errors.length > 0) {
103
+ for (const errMsg of validation.errors) {
104
+ result.errors.push({ pluginName, message: errMsg });
105
+ }
106
+ log.warn('plugin validation failed', { plugin: pluginName, errors: validation.errors });
107
+ }
108
+ let registered = false;
109
+ if (validation.hasExtractor) {
110
+ const extractor = mod.extractor;
111
+ if (seenExtractorNames.has(extractor.name)) {
112
+ log.warn('duplicate extractor name, skipping', {
113
+ plugin: pluginName,
114
+ extractorName: extractor.name,
115
+ });
116
+ }
117
+ else {
118
+ seenExtractorNames.add(extractor.name);
119
+ result.extractors.push(extractor);
120
+ registered = true;
121
+ log.info('loaded plugin extractor', {
122
+ plugin: pluginName,
123
+ extractorName: extractor.name,
124
+ });
125
+ }
126
+ }
127
+ if (validation.hasSearchEngine) {
128
+ const engine = mod.searchEngine;
129
+ if (seenEngineNames.has(engine.name)) {
130
+ log.warn('duplicate search engine name, skipping', {
131
+ plugin: pluginName,
132
+ engineName: engine.name,
133
+ });
134
+ }
135
+ else {
136
+ seenEngineNames.add(engine.name);
137
+ result.searchEngines.push(engine);
138
+ registered = true;
139
+ log.info('loaded plugin search engine', {
140
+ plugin: pluginName,
141
+ engineName: engine.name,
142
+ });
143
+ }
144
+ }
145
+ if (registered) {
146
+ result.loaded.push({
147
+ name: pluginName,
148
+ version: pkgJson.version ?? '0.0.0',
149
+ path: pluginDir,
150
+ hasExtractor: validation.hasExtractor,
151
+ hasSearchEngine: validation.hasSearchEngine,
152
+ });
153
+ }
154
+ }
155
+ log.info('plugin loading complete', {
156
+ extractors: result.extractors.length,
157
+ searchEngines: result.searchEngines.length,
158
+ errors: result.errors.length,
159
+ });
160
+ return result;
161
+ }
162
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Extractor, SearchEngine } from '../types.js';
2
+ export interface PluginRegistryState {
3
+ extractors: Array<{
4
+ name: string;
5
+ pluginName: string;
6
+ }>;
7
+ searchEngines: Array<{
8
+ name: string;
9
+ pluginName: string;
10
+ }>;
11
+ pluginCount: number;
12
+ }
13
+ export declare class PluginRegistry {
14
+ private extractors;
15
+ private engines;
16
+ private pluginNames;
17
+ registerExtractor(extractor: Extractor, pluginName: string): void;
18
+ registerSearchEngine(engine: SearchEngine, pluginName: string): void;
19
+ getExtractors(): Extractor[];
20
+ getSearchEngines(): SearchEngine[];
21
+ getExtractorByName(name: string): Extractor | undefined;
22
+ getSearchEngineByName(name: string): SearchEngine | undefined;
23
+ getState(): PluginRegistryState;
24
+ clear(): void;
25
+ }
26
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAc3D,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,WAAW,CAAqB;IAExC,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAgBjE,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAgBpE,aAAa,IAAI,SAAS,EAAE;IAI5B,gBAAgB,IAAI,YAAY,EAAE;IAIlC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIvD,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI7D,QAAQ,IAAI,mBAAmB;IAc/B,KAAK,IAAI,IAAI;CAKd"}
@@ -0,0 +1,68 @@
1
+ import { createLogger } from '../logger.js';
2
+ const log = createLogger('server');
3
+ export class PluginRegistry {
4
+ extractors = [];
5
+ engines = [];
6
+ pluginNames = new Set();
7
+ registerExtractor(extractor, pluginName) {
8
+ if (this.extractors.some(r => r.extractor.name === extractor.name)) {
9
+ log.warn('duplicate extractor name, ignoring', {
10
+ name: extractor.name,
11
+ plugin: pluginName,
12
+ });
13
+ return;
14
+ }
15
+ this.extractors.push({ extractor, pluginName });
16
+ this.pluginNames.add(pluginName);
17
+ log.debug('registered plugin extractor', {
18
+ name: extractor.name,
19
+ plugin: pluginName,
20
+ });
21
+ }
22
+ registerSearchEngine(engine, pluginName) {
23
+ if (this.engines.some(r => r.engine.name === engine.name)) {
24
+ log.warn('duplicate search engine name, ignoring', {
25
+ name: engine.name,
26
+ plugin: pluginName,
27
+ });
28
+ return;
29
+ }
30
+ this.engines.push({ engine, pluginName });
31
+ this.pluginNames.add(pluginName);
32
+ log.debug('registered plugin search engine', {
33
+ name: engine.name,
34
+ plugin: pluginName,
35
+ });
36
+ }
37
+ getExtractors() {
38
+ return this.extractors.map(r => r.extractor);
39
+ }
40
+ getSearchEngines() {
41
+ return this.engines.map(r => r.engine);
42
+ }
43
+ getExtractorByName(name) {
44
+ return this.extractors.find(r => r.extractor.name === name)?.extractor;
45
+ }
46
+ getSearchEngineByName(name) {
47
+ return this.engines.find(r => r.engine.name === name)?.engine;
48
+ }
49
+ getState() {
50
+ return {
51
+ extractors: this.extractors.map(r => ({
52
+ name: r.extractor.name,
53
+ pluginName: r.pluginName,
54
+ })),
55
+ searchEngines: this.engines.map(r => ({
56
+ name: r.engine.name,
57
+ pluginName: r.pluginName,
58
+ })),
59
+ pluginCount: this.pluginNames.size,
60
+ };
61
+ }
62
+ clear() {
63
+ this.extractors = [];
64
+ this.engines = [];
65
+ this.pluginNames.clear();
66
+ }
67
+ }
68
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function validateExtractor(value: unknown): boolean;
2
+ export declare function validateSearchEngine(value: unknown): boolean;
3
+ export interface PluginValidationResult {
4
+ hasExtractor: boolean;
5
+ hasSearchEngine: boolean;
6
+ errors: string[];
7
+ }
8
+ export declare function validatePluginExports(mod: unknown): PluginValidationResult;
9
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/plugins/validate.ts"],"names":[],"mappings":"AAIA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAoBzD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAgB5D;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CA+C1E"}