web-access-cli 0.1.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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +270 -0
  3. package/README_CN.md +268 -0
  4. package/THIRD_PARTY_NOTICES.md +48 -0
  5. package/dist/cli.js +197 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config/config.js +463 -0
  8. package/dist/config/config.js.map +1 -0
  9. package/dist/config/edit.js +126 -0
  10. package/dist/config/edit.js.map +1 -0
  11. package/dist/core/diagnostics.js +94 -0
  12. package/dist/core/diagnostics.js.map +1 -0
  13. package/dist/core/errors.js +47 -0
  14. package/dist/core/errors.js.map +1 -0
  15. package/dist/core/router.js +320 -0
  16. package/dist/core/router.js.map +1 -0
  17. package/dist/core/schema.js +120 -0
  18. package/dist/core/schema.js.map +1 -0
  19. package/dist/core/types.js +22 -0
  20. package/dist/core/types.js.map +1 -0
  21. package/dist/providers/anysearch.js +225 -0
  22. package/dist/providers/anysearch.js.map +1 -0
  23. package/dist/providers/common.js +210 -0
  24. package/dist/providers/common.js.map +1 -0
  25. package/dist/providers/extract.js +155 -0
  26. package/dist/providers/extract.js.map +1 -0
  27. package/dist/providers/registry.js +31 -0
  28. package/dist/providers/registry.js.map +1 -0
  29. package/dist/providers/rsc.js +109 -0
  30. package/dist/providers/rsc.js.map +1 -0
  31. package/dist/providers/search.js +178 -0
  32. package/dist/providers/search.js.map +1 -0
  33. package/dist/providers/xcrawl.js +170 -0
  34. package/dist/providers/xcrawl.js.map +1 -0
  35. package/dist/transport/http.js +175 -0
  36. package/dist/transport/http.js.map +1 -0
  37. package/dist/version.js +2 -0
  38. package/dist/version.js.map +1 -0
  39. package/package.json +61 -0
  40. package/schemas/config.schema.json +210 -0
  41. package/schemas/extractRequest.schema.json +21 -0
  42. package/schemas/output.schema.json +435 -0
  43. package/schemas/searchRequest.schema.json +57 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAIN,cAAc,EAId,mBAAmB,GAGnB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACvC,QAAQ;IACR,KAAK;IACL,OAAO;IACP,SAAS;IACT,WAAW;IACX,QAAQ;CACC,CAAC;AACX,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACxC,WAAW;IACX,MAAM;IACN,KAAK;IACL,WAAW;IACX,QAAQ;IACR,MAAM;CACG,CAAC;AACX,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1D,MAAM,qBAAqB,GAAiB;IAC3C,SAAS,EAAE,CAAC,GAAG,wBAAwB,CAAC;IACxC,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,MAAM;IACjB,gBAAgB,EAAE,MAAM;IACxB,gBAAgB,EAAE,0BAA0B;CAC5C,CAAC;AAEF,MAAM,sBAAsB,GAAkB;IAC7C,SAAS,EAAE,CAAC,GAAG,yBAAyB,CAAC;IACzC,SAAS,EAAE,OAAO;IAClB,gBAAgB,EAAE,MAAM;IACxB,gBAAgB,EAAE,0BAA0B;IAC5C,oBAAoB,EAAE,GAAG;CACzB,CAAC;AAEF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAe;IAC1C,QAAQ;IACR,KAAK;IACL,OAAO;IACP,SAAS;IACT,WAAW;IACX,QAAQ;CACR,CAAC,CAAC;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAe;IAC3C,WAAW;IACX,MAAM;IACN,KAAK;IACL,MAAM;IACN,WAAW;IACX,QAAQ;CACR,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAA6B;IAC1D,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;IAChC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;IAC1B,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;IAC9B,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;IAClC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE;IACtC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5B,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5B,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE;IAClE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE;CAC5D,CAAC;AAEF,MAAM,gBAAgB,GAA0C;IAC/D,MAAM,EAAE,gBAAgB;IACxB,GAAG,EAAE,aAAa;IAClB,KAAK,EAAE,eAAe;IACtB,SAAS,EAAE,mBAAmB;IAC9B,IAAI,EAAE,cAAc;IACpB,SAAS,EAAE,mBAAmB;IAC9B,MAAM,EAAE,gBAAgB;CACxB,CAAC;AAEF,MAAM,iBAAiB,GAA0C;IAChE,MAAM,EAAE,iBAAiB;IACzB,GAAG,EAAE,cAAc;IACnB,KAAK,EAAE,gBAAgB;IACvB,OAAO,EAAE,kBAAkB;IAC3B,SAAS,EAAE,oBAAoB;IAC/B,IAAI,EAAE,eAAe;IACrB,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,iBAAiB;CACzB,CAAC;AAEF,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE3E,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACrC,IAAI;IACJ,MAAM;IACN,QAAQ;IACR,WAAW;IACX,SAAS;IACT,YAAY;IACZ,SAAS;IACT,kBAAkB;CAClB,CAAC,CAAC;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IACnC,WAAW;IACX,OAAO;IACP,WAAW;IACX,kBAAkB;IAClB,kBAAkB;CAClB,CAAC,CAAC;AACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACpC,WAAW;IACX,WAAW;IACX,kBAAkB;IAClB,kBAAkB;IAClB,sBAAsB;CACtB,CAAC,CAAC;AAEH,MAAM,OAAO,WAAY,SAAQ,cAAc;IAC9C,YAAY,OAAe,EAAE,OAAiB;QAC7C,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC3B,CAAC;CACD;AAED,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,YAAY,CACpB,KAAc,EACd,IAAY;IAEZ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,eAAe,CACvB,KAA8B,EAC9B,OAAoB,EACpB,IAAY;IAEZ,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YACpB,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC;IACrD,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CACxB,KAAc,EACd,IAAY,EACZ,YAAoB;IAEpB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAK,KAAgB,GAAG,CAAC;QACpD,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IAC9C,OAAO,KAAe,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IACjC,MAAM,KAAK,GAAG,gBAAgB,CAC7B,KAAK,EACL,cAAc,EACd,qBAAqB,CAAC,KAAK,CAC3B,CAAC;IACF,IAAI,KAAK,GAAG,EAAE;QAAE,MAAM,IAAI,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,IAAY;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QACnD,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,IAAY;IACxD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,IAAY;IACnD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1C,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CACxB,KAAc,EACd,IAAY;IAEZ,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,iBAAiB,CAAC,CAAC;QACjD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;YAChE,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,IAAI,IAAI,YAAY,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,IAAY;IACpD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACJ,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,kBAAkB,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QACxD,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,oBAAoB,CAAC,CAAC;IACpD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;QAC/B,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC;IACnD,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAChB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACd,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa;IACnD,MAAM,IAAI,GAAG,aAAa,KAAK,GAAG,CAAC;IACnC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1B,eAAe,CAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7D,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM;QACvD,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,sBAAsB,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAoB,CAAC;QACjD,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,eAAe,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,mBAAmB,CACvC,KAAK,CAAC,SAAS,EACf,GAAG,IAAI,YAAY,CACnB,CAAC;IACF,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,UAAU;QACzB,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,IAAI,UAAU,CAAC;QACjD,CAAC,CAAC,SAAS,CAAC;IACb,MAAM,aAAa,GAAG,mBAAmB,CACxC,KAAK,CAAC,UAAU,EAChB,GAAG,IAAI,aAAa,CACpB,CAAC;IACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC;IACnE,MAAM,gBAAgB,GACrB,KAAK,CAAC,gBAAgB,KAAK,SAAS;QACnC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,WAAW,CACX,KAAK,CAAC,gBAAgB,EACtB,GAAG,IAAI,mBAAmB,CAC1B,CAAC,WAAW,EAAE,CAAC;IACnB,IACC,gBAAgB,KAAK,SAAS;QAC9B,CAAC,mBAAmB,CAAC,QAAQ,CAAC,gBAAoC,CAAC;QAEnE,MAAM,IAAI,WAAW,CACpB,GAAG,IAAI,4CAA4C,CACnD,CAAC;IACH,IACC,gBAAgB,KAAK,SAAS;QAC9B,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAoB,CAAC;QAE9C,MAAM,IAAI,WAAW,CACpB,GAAG,IAAI,2CAA2C,CAClD,CAAC;IACH,OAAO;QACN,EAAE;QACF,IAAI,EAAE,IAAoB;QAC1B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,YAAY;YACf,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,YAAY,EAAE,GAAG,IAAI,YAAY,CAAC,EAAE;YACnE,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,aAAa;YAChB,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,aAAa,EAAE,GAAG,IAAI,aAAa,CAAC,EAAE;YACtE,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,gBAAgB;YACnB,CAAC,CAAC,EAAE,gBAAgB,EAAE,gBAAoC,EAAE;YAC5D,CAAC,CAAC,EAAE,CAAC;KACN,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,IAAY;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACxB,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,qBAAqB,CAAC,CAAC;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAChE,IAAI,EAAE,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9B,eAAe,CAAC,KAAK,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACtD,OAAO;QACN,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC;QAC1D,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B,SAAS,EAAE,gBAAgB,CAC1B,KAAK,CAAC,SAAS,EACf,kBAAkB,EAClB,qBAAqB,CAAC,SAAS,CAC/B;QACD,gBAAgB,EAAE,gBAAgB,CACjC,KAAK,CAAC,gBAAgB,EACtB,yBAAyB,EACzB,qBAAqB,CAAC,gBAAgB,CACtC;QACD,gBAAgB,EAAE,gBAAgB,CACjC,KAAK,CAAC,gBAAgB,EACtB,yBAAyB,EACzB,qBAAqB,CAAC,gBAAgB,CACtC;KACD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC/B,eAAe,CAAC,KAAK,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC;IACxD,OAAO;QACN,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,mBAAmB,CAAC;QAC3D,SAAS,EAAE,gBAAgB,CAC1B,KAAK,CAAC,SAAS,EACf,mBAAmB,EACnB,sBAAsB,CAAC,SAAS,CAChC;QACD,gBAAgB,EAAE,gBAAgB,CACjC,KAAK,CAAC,gBAAgB,EACtB,0BAA0B,EAC1B,sBAAsB,CAAC,gBAAgB,CACvC;QACD,gBAAgB,EAAE,gBAAgB,CACjC,KAAK,CAAC,gBAAgB,EACtB,0BAA0B,EAC1B,sBAAsB,CAAC,gBAAgB,CACvC;QACD,oBAAoB,EAAE,gBAAgB,CACrC,KAAK,CAAC,oBAAoB,EAC1B,8BAA8B,EAC9B,sBAAsB,CAAC,oBAAoB,CAC3C;KACD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IAKrC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9B,eAAe,CACd,KAAK,EACL,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,EACtD,QAAQ,CACR,CAAC;IACF,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACnE,MAAM,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IAC1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QAC/B,MAAM,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,WAAW,CAAC,uBAAuB,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IACD,OAAO;QACN,SAAS;QACT,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;QACjC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;KACpC,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACtB,SAAmC;IAEnC,MAAM,MAAM,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACd,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;gBAClC,MAAM,IAAI,WAAW,CACpB,eAAe,QAAQ,CAAC,EAAE,gBAAgB,QAAQ,CAAC,IAAI,EAAE,CACzD,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CACtB,SAAmC,EACnC,KAA2B,EAC3B,UAAsB;IAEtB,MAAM,OAAO,GAAG,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;IACvE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,MAAM,GACX,KAAK;QACL,CAAC,UAAU,KAAK,QAAQ;YACvB,CAAC,CAAC,CAAC,GAAG,wBAAwB,CAAC;YAC/B,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC;IACpC,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ;YACZ,MAAM,IAAI,WAAW,CACpB,GAAG,UAAU,gCAAgC,EAAE,EAAE,CACjD,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC9B,MAAM,IAAI,WAAW,CACpB,GAAG,UAAU,yBAAyB,EAAE,QAAQ,UAAU,EAAE,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB;IACnC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAChC,YAAqB,EACrB,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,YAAY,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,oBAAoB,EAAE,CAAC;IACtE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,eAAe,CACvB,IAAwB,EACxB,QAA4B,EAC5B,GAAsB;IAKtB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,IAAI,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,IAAI,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACjE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,eAAe,CACvB,QAAgC,EAChC,GAAsB;IAEtB,MAAM,cAAc,GACnB,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC;IACvD,MAAM,gBAAgB,GAAG,MAAM;QAC9B,CAAC,CAAC,MAAM,CAAC,KAAK;YACb,CAAC,CAAC,MAAM,CAAC,MAAM;YACf,CAAC,CAAC,QAAQ;QACX,CAAC,CAAC,SAAS,CAAC;IACb,MAAM,eAAe,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,eAAe,CAC9B,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EAC3D,GAAG,CACH,CAAC;IACF,MAAM,UAAU,GACf,OAAO,CAAC,KAAK;QACb,QAAQ,CAAC,OAAO;QAChB,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC;IACN,MAAM,OAAO,GAAG,UAAU;QACzB,CAAC,CAAC,gBAAgB,CAChB,UAAU,EACV,OAAO,CAAC,KAAK;YACZ,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU;gBACpB,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAChC,cAAc,CAAC;YACjB,CAAC,CAAC,aAAa,QAAQ,CAAC,EAAE,UAAU,CACrC;QACF,CAAC,CAAC,IAAI,CAAC;IACR,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK;QAClC,CAAC,CAAC,OAAO,CAAC,MAAM;QAChB,CAAC,CAAC,QAAQ,CAAC,OAAO;YACjB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,SAAS,CAAC;IACf,OAAO;QACN,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,MAAM;QACN,gBAAgB;QAChB,OAAO;QACP,aAAa;QACb,OAAO,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;QACxC,gBAAgB,EACf,QAAQ,CAAC,gBAAgB;YACzB,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;KAC3D,CAAC;AACH,CAAC;AAED,MAAM,iBAAiB,GAA0C;IAChE,MAAM,EAAE,wBAAwB;IAChC,GAAG,EAAE,oBAAoB;IACzB,KAAK,EAAE,8BAA8B;IACrC,SAAS,EAAE,2BAA2B;IACtC,IAAI,EAAE,mBAAmB;IACzB,SAAS,EAAE,2BAA2B;IACtC,MAAM,EAAE,wBAAwB;CAChC,CAAC;AASF,MAAM,UAAU,sBAAsB;IACrC,OAAO;QACN,SAAS,EAAE,wBAAwB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QACxE,MAAM,EAAE;YACP,GAAG,qBAAqB;YACxB,SAAS,EAAE,CAAC,GAAG,qBAAqB,CAAC,SAAS,CAAC;SAC/C;QACD,OAAO,EAAE;YACR,GAAG,sBAAsB;YACzB,SAAS,EAAE,CAAC,GAAG,sBAAsB,CAAC,SAAS,CAAC;SAChD;KACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CACzB,YAAqB,EACrB,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,IAAI,MAAM,GAAY,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC;YACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,WAAW,CACpB,QAAQ,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACzE,CAAC;QACH,CAAC;IACF,CAAC;SAAM,IAAI,YAAY,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,cAAc,CACrC,eAAe,EACf,GAAG,CAAC,MAAM,CAAC,SAAS,EACpB,QAAQ,CACR,CAAC;IACF,MAAM,gBAAgB,GAAG,cAAc,CACtC,eAAe,EACf,GAAG,CAAC,OAAO,CAAC,SAAS,EACrB,SAAS,CACT,CAAC;IACF,MAAM,MAAM,GAAiB;QAC5B,SAAS,EAAE,eAAe;QAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK;QAChD,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS;QAC5D,gBAAgB,EACf,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,QAAQ,CAAC,MAAM,CAAC,gBAAgB;QAChE,gBAAgB,EACf,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,QAAQ,CAAC,MAAM,CAAC,gBAAgB;KAChE,CAAC;IACF,MAAM,OAAO,GAAkB;QAC9B,SAAS,EAAE,gBAAgB;QAC3B,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS;QAC9D,gBAAgB,EACf,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,QAAQ,CAAC,OAAO,CAAC,gBAAgB;QAClE,gBAAgB,EACf,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,QAAQ,CAAC,OAAO,CAAC,gBAAgB;QAClE,oBAAoB,EACnB,GAAG,CAAC,OAAO,CAAC,oBAAoB,IAAI,QAAQ,CAAC,OAAO,CAAC,oBAAoB;KAC1E,CAAC;IACF,MAAM,GAAG,GAAc,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACvE,OAAO;QACN,IAAI;QACJ,MAAM;QACN,GAAG;QACH,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC3C,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAC9B;KACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,IAAkB,EAClB,UAAsB;IAEtB,OAAO,UAAU,KAAK,QAAQ;QAC7B,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,UAAsB;IACjE,OAAO,UAAU,KAAK,QAAQ;QAC7B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS;QACzB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,MAAiB,EACjB,UAAsB;IAEtB,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAA0B;IAIrD,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,126 @@
1
+ import { lstat, mkdir, open as openFile, stat, unlink, } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ import open from "open";
4
+ import { WebAccessError } from "../core/errors.js";
5
+ import { VERSION } from "../version.js";
6
+ import { ConfigError, createDefaultAppConfig, resolveConfigPath, } from "./config.js";
7
+ export const CONFIG_SCHEMA_URL = `https://unpkg.com/web-access-cli@${VERSION}/schemas/config.schema.json`;
8
+ function elapsed(start, now) {
9
+ return Math.max(0, Math.round(now() - start));
10
+ }
11
+ function errorMessage(error) {
12
+ return error instanceof Error ? error.message : String(error);
13
+ }
14
+ function hasCode(error, code) {
15
+ return (typeof error === "object" &&
16
+ error !== null &&
17
+ "code" in error &&
18
+ error.code === code);
19
+ }
20
+ function configFileError(message, path, error) {
21
+ return new ConfigError(message, {
22
+ path,
23
+ ...(error === undefined ? {} : { cause: errorMessage(error) }),
24
+ });
25
+ }
26
+ async function existingConfigFile(path) {
27
+ let fileInfo;
28
+ try {
29
+ fileInfo = await lstat(path);
30
+ }
31
+ catch (error) {
32
+ if (hasCode(error, "ENOENT"))
33
+ return false;
34
+ throw configFileError(`无法检查配置文件: ${path}`, path, error);
35
+ }
36
+ if (fileInfo.isSymbolicLink()) {
37
+ try {
38
+ fileInfo = await stat(path);
39
+ }
40
+ catch (error) {
41
+ throw configFileError(`配置文件符号链接不可用: ${path}`, path, error);
42
+ }
43
+ }
44
+ if (!fileInfo.isFile())
45
+ throw configFileError(`配置路径不是普通文件: ${path}`, path);
46
+ return true;
47
+ }
48
+ async function removeIncompleteFile(path, created) {
49
+ try {
50
+ const current = await lstat(path);
51
+ if (current.dev === created.dev && current.ino === created.ino)
52
+ await unlink(path);
53
+ }
54
+ catch {
55
+ // 清理失败不覆盖原始写入错误,也绝不删除其他路径。
56
+ }
57
+ }
58
+ export function serializeDefaultConfig() {
59
+ return `${JSON.stringify({
60
+ $schema: CONFIG_SCHEMA_URL,
61
+ ...createDefaultAppConfig(),
62
+ }, null, 2)}\n`;
63
+ }
64
+ export async function ensureConfigFile(path) {
65
+ if (await existingConfigFile(path))
66
+ return false;
67
+ try {
68
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
69
+ }
70
+ catch (error) {
71
+ throw configFileError(`无法创建配置目录: ${dirname(path)}`, path, error);
72
+ }
73
+ let handle;
74
+ try {
75
+ handle = await openFile(path, "wx", 0o600);
76
+ }
77
+ catch (error) {
78
+ if (hasCode(error, "EEXIST")) {
79
+ if (await existingConfigFile(path))
80
+ return false;
81
+ }
82
+ throw configFileError(`无法创建配置文件: ${path}`, path, error);
83
+ }
84
+ const created = await handle.stat();
85
+ try {
86
+ await handle.writeFile(serializeDefaultConfig(), "utf8");
87
+ await handle.sync();
88
+ }
89
+ catch (error) {
90
+ await handle.close().catch(() => undefined);
91
+ await removeIncompleteFile(path, created);
92
+ throw configFileError(`无法写入配置文件: ${path}`, path, error);
93
+ }
94
+ try {
95
+ await handle.close();
96
+ }
97
+ catch (error) {
98
+ throw configFileError(`无法关闭配置文件: ${path}`, path, error);
99
+ }
100
+ return true;
101
+ }
102
+ const openWithSystemDefault = async (path) => {
103
+ await open(path, { wait: false });
104
+ };
105
+ export async function executeConfigEdit(options = {}) {
106
+ const now = options.now ?? performance.now.bind(performance);
107
+ const started = now();
108
+ const path = resolveConfigPath(options.explicitPath, options.env);
109
+ const created = await ensureConfigFile(path);
110
+ try {
111
+ await (options.openPath ?? openWithSystemDefault)(path);
112
+ }
113
+ catch (error) {
114
+ throw new WebAccessError("open_failed", `无法用系统默认应用打开配置文件: ${path}`, {
115
+ details: { path, created, cause: errorMessage(error) },
116
+ });
117
+ }
118
+ return {
119
+ schemaVersion: 1,
120
+ ok: true,
121
+ command: "config.edit",
122
+ durationMs: elapsed(started, now),
123
+ data: { path, created, opened: true },
124
+ };
125
+ }
126
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/config/edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { capabilitySupports } from "../config/config.js";
2
+ import { getAdapter } from "../providers/registry.js";
3
+ function providerInfo(instance, loaded) {
4
+ const searchEnabled = loaded.app.search.providers.includes(instance.id);
5
+ const extractEnabled = loaded.app.extract.providers.includes(instance.id);
6
+ const adapter = getAdapter(instance.type, "search") ?? getAdapter(instance.type, "extract");
7
+ return {
8
+ id: instance.id,
9
+ type: instance.type,
10
+ capabilities: ["search", "extract"].filter((capability) => capabilitySupports(instance.type, capability)),
11
+ routes: { search: searchEnabled, extract: extractEnabled },
12
+ configured: {
13
+ credential: instance.credentialSource !== "missing",
14
+ baseUrl: instance.baseUrl !== null,
15
+ adapter: !!adapter,
16
+ },
17
+ credentialSource: instance.credentialSource,
18
+ baseUrlSource: instance.baseUrlSource,
19
+ ...(instance.type === "anysearch" || instance.type === "xcrawl"
20
+ ? { searchFilterMode: instance.searchFilterMode ?? "strict" }
21
+ : {}),
22
+ };
23
+ }
24
+ export function executeProviders(loaded) {
25
+ return {
26
+ schemaVersion: 1,
27
+ ok: true,
28
+ command: "providers",
29
+ durationMs: 0,
30
+ data: {
31
+ config: { path: loaded.path, exists: loaded.exists },
32
+ searchRoute: loaded.app.search.providers,
33
+ extractRoute: loaded.app.extract.providers,
34
+ providers: loaded.instances.map((instance) => providerInfo(instance, loaded)),
35
+ },
36
+ };
37
+ }
38
+ export function executeDoctor(loaded) {
39
+ const providers = loaded.instances.map((instance) => {
40
+ const checks = {
41
+ search: !loaded.app.search.providers.includes(instance.id) ||
42
+ (!!getAdapter(instance.type, "search") &&
43
+ (getAdapter(instance.type, "search")?.isConfigured(instance) ??
44
+ false)),
45
+ extract: !loaded.app.extract.providers.includes(instance.id) ||
46
+ (!!getAdapter(instance.type, "extract") &&
47
+ (getAdapter(instance.type, "extract")?.isConfigured(instance) ??
48
+ false)),
49
+ };
50
+ return {
51
+ id: instance.id,
52
+ type: instance.type,
53
+ checks,
54
+ ok: checks.search && checks.extract,
55
+ ...(instance.type === "anysearch" || instance.type === "xcrawl"
56
+ ? { searchFilterMode: instance.searchFilterMode ?? "strict" }
57
+ : {}),
58
+ };
59
+ });
60
+ const routeChecks = {
61
+ search: loaded.app.search.providers.length > 0,
62
+ extract: loaded.app.extract.providers.length > 0,
63
+ };
64
+ const ok = routeChecks.search &&
65
+ routeChecks.extract &&
66
+ providers.every((provider) => provider.ok);
67
+ const data = {
68
+ ok,
69
+ config: { path: loaded.path, exists: loaded.exists },
70
+ routes: routeChecks,
71
+ providers,
72
+ };
73
+ if (!ok)
74
+ return {
75
+ schemaVersion: 1,
76
+ ok: false,
77
+ command: "doctor",
78
+ durationMs: 0,
79
+ error: {
80
+ code: "doctor_failed",
81
+ message: "诊断发现未完成配置的已启用 provider",
82
+ retryable: false,
83
+ details: data,
84
+ },
85
+ };
86
+ return {
87
+ schemaVersion: 1,
88
+ ok: true,
89
+ command: "doctor",
90
+ durationMs: 0,
91
+ data,
92
+ };
93
+ }
94
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/core/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ export class WebAccessError extends Error {
2
+ code;
3
+ retryable;
4
+ provider;
5
+ httpStatus;
6
+ details;
7
+ raw;
8
+ constructor(code, message, options = {}) {
9
+ super(message);
10
+ this.name = "WebAccessError";
11
+ this.code = code;
12
+ this.retryable = options.retryable ?? false;
13
+ this.provider = options.provider;
14
+ this.httpStatus = options.httpStatus;
15
+ this.details = options.details;
16
+ this.raw = options.raw;
17
+ }
18
+ toInfo() {
19
+ return {
20
+ code: this.code,
21
+ message: this.message,
22
+ retryable: this.retryable,
23
+ ...(this.provider ? { provider: this.provider } : {}),
24
+ ...(this.httpStatus !== undefined ? { httpStatus: this.httpStatus } : {}),
25
+ ...(this.details !== undefined ? { details: this.details } : {}),
26
+ };
27
+ }
28
+ }
29
+ export function asWebAccessError(error, fallbackCode = "internal_error") {
30
+ if (error instanceof WebAccessError)
31
+ return error;
32
+ if (error instanceof DOMException && error.name === "AbortError") {
33
+ return new WebAccessError("aborted", "请求已取消");
34
+ }
35
+ const message = error instanceof Error ? error.message : String(error);
36
+ return new WebAccessError(fallbackCode, message);
37
+ }
38
+ export function redactText(text, secrets) {
39
+ let result = text;
40
+ for (const secret of secrets) {
41
+ if (!secret || secret.length < 4)
42
+ continue;
43
+ result = result.split(secret).join("[REDACTED]");
44
+ }
45
+ return result;
46
+ }
47
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC/B,IAAI,CAAY;IAChB,SAAS,CAAU;IACnB,QAAQ,CAAe;IACvB,UAAU,CAAU;IACpB,OAAO,CAAW;IAClB,GAAG,CAAW;IAEvB,YACC,IAAe,EACf,OAAe,EACf,UAMI,EAAE;QAEN,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,CAAC;IAED,MAAM;QACL,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE,CAAC;IACH,CAAC;CACD;AAED,MAAM,UAAU,gBAAgB,CAC/B,KAAc,EACd,eAA0B,gBAAgB;IAE1C,IAAI,KAAK,YAAY,cAAc;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAClE,OAAO,IAAI,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,IAAI,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,UAAU,CACzB,IAAY,EACZ,OAA4C;IAE5C,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAC3C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -0,0 +1,320 @@
1
+ import { capabilitySupports } from "../config/config.js";
2
+ import { ref } from "../providers/common.js";
3
+ import { getAdapter } from "../providers/registry.js";
4
+ import { DefaultHttpTransport } from "../transport/http.js";
5
+ import { asWebAccessError, redactText, WebAccessError } from "./errors.js";
6
+ function elapsed(start, now) {
7
+ return Math.max(0, Math.round(now() - start));
8
+ }
9
+ function withProvider(error, instance) {
10
+ if (error.provider)
11
+ return error;
12
+ return new WebAccessError(error.code, error.message, {
13
+ retryable: error.retryable,
14
+ provider: ref(instance),
15
+ httpStatus: error.httpStatus,
16
+ details: error.details,
17
+ raw: error.raw,
18
+ });
19
+ }
20
+ function safeRaw(raw, instances) {
21
+ const secrets = instances.map((instance) => instance.apiKey);
22
+ const sensitive = /^(?:auto[_-]?registered|api[_-]?key|password|username|user|email|access[_-]?token|refresh[_-]?token|authorization|cookie|client[_-]?secret)$/i;
23
+ const redact = (value) => {
24
+ if (typeof value === "string")
25
+ return redactText(value, secrets);
26
+ if (Array.isArray(value))
27
+ return value.map(redact);
28
+ if (value && typeof value === "object") {
29
+ const result = {};
30
+ for (const [key, item] of Object.entries(value))
31
+ result[key] = sensitive.test(key) ? "[REDACTED]" : redact(item);
32
+ return result;
33
+ }
34
+ return value;
35
+ };
36
+ if (typeof raw === "string") {
37
+ try {
38
+ return redact(JSON.parse(raw));
39
+ }
40
+ catch {
41
+ return redact(raw);
42
+ }
43
+ }
44
+ return redact(raw);
45
+ }
46
+ function resolveInstances(loaded, capability, selected) {
47
+ const route = capability === "search"
48
+ ? loaded.app.search.providers
49
+ : loaded.app.extract.providers;
50
+ const byId = new Map(loaded.instances.map((instance) => [instance.id, instance]));
51
+ if (selected !== "auto") {
52
+ const instance = byId.get(selected);
53
+ if (!instance)
54
+ throw new WebAccessError("provider_unknown", `未知 provider instance: ${selected}`);
55
+ if (!capabilitySupports(instance.type, capability))
56
+ throw new WebAccessError("provider_unknown", `${selected} 不支持 ${capability}`, { provider: ref(instance) });
57
+ if (!route.includes(selected))
58
+ throw new WebAccessError("provider_disabled", `${selected} 未在 ${capability}.providers route 中启用`, { provider: ref(instance) });
59
+ return { instances: [instance], automatic: false };
60
+ }
61
+ return {
62
+ instances: route
63
+ .map((id) => byId.get(id))
64
+ .filter((instance) => !!instance),
65
+ automatic: true,
66
+ };
67
+ }
68
+ function timeoutError(instance) {
69
+ return new WebAccessError("timeout", "操作超过总超时时间", {
70
+ retryable: true,
71
+ ...(instance ? { provider: ref(instance) } : {}),
72
+ });
73
+ }
74
+ function unavailableError(instance, capability) {
75
+ return new WebAccessError("provider_unavailable", `${instance.id} 未完成 ${capability} 所需配置`, { provider: ref(instance), retryable: true });
76
+ }
77
+ function normalizeAbort(error, parent, instance) {
78
+ if (error.code !== "aborted")
79
+ return withProvider(error, instance);
80
+ if (parent?.aborted)
81
+ return new WebAccessError("aborted", "请求已取消", {
82
+ provider: ref(instance),
83
+ });
84
+ return new WebAccessError("timeout", `${instance.id} 请求超时`, {
85
+ provider: ref(instance),
86
+ retryable: true,
87
+ });
88
+ }
89
+ async function runProviders(options) {
90
+ const now = options.context.now ?? performance.now.bind(performance);
91
+ const started = now();
92
+ const transport = options.context.transport ?? new DefaultHttpTransport();
93
+ let resolved;
94
+ try {
95
+ resolved = resolveInstances(options.context.loaded, options.capability, options.selected);
96
+ }
97
+ catch (error) {
98
+ return { error: asWebAccessError(error), attempts: [] };
99
+ }
100
+ const attempts = [];
101
+ let lastError;
102
+ let lastRaw;
103
+ let partial;
104
+ for (const instance of resolved.instances) {
105
+ const remaining = options.totalTimeoutMs - elapsed(started, now);
106
+ if (remaining <= 0) {
107
+ lastError = timeoutError(instance);
108
+ break;
109
+ }
110
+ const adapter = getAdapter(instance.type, options.capability);
111
+ const attemptStarted = now();
112
+ if (!adapter?.isConfigured(instance)) {
113
+ const error = unavailableError(instance, options.capability);
114
+ attempts.push({
115
+ provider: ref(instance),
116
+ status: "failed",
117
+ durationMs: elapsed(attemptStarted, now),
118
+ error: error.toInfo(),
119
+ });
120
+ lastError = error;
121
+ if (resolved.automatic)
122
+ continue;
123
+ break;
124
+ }
125
+ const attemptSignal = AbortSignal.any([
126
+ ...(options.context.signal ? [options.context.signal] : []),
127
+ AbortSignal.timeout(Math.max(1, Math.min(remaining, options.attemptTimeoutMs))),
128
+ ]);
129
+ try {
130
+ const execution = await options.invoke(instance, attemptSignal, transport);
131
+ const qualityError = options.validate?.(execution, instance);
132
+ if (qualityError) {
133
+ lastError = qualityError;
134
+ lastRaw = execution.raw;
135
+ const candidate = execution.data;
136
+ if (!partial ||
137
+ candidate.document.content.length >
138
+ partial.data.document.content.length) {
139
+ partial = {
140
+ provider: instance,
141
+ data: candidate,
142
+ raw: execution.raw,
143
+ };
144
+ }
145
+ attempts.push({
146
+ provider: ref(instance),
147
+ status: "failed",
148
+ durationMs: elapsed(attemptStarted, now),
149
+ error: qualityError.toInfo(),
150
+ });
151
+ if (!resolved.automatic || !qualityError.retryable)
152
+ break;
153
+ continue;
154
+ }
155
+ attempts.push({
156
+ provider: ref(instance),
157
+ status: "success",
158
+ durationMs: elapsed(attemptStarted, now),
159
+ });
160
+ return { provider: instance, execution, attempts };
161
+ }
162
+ catch (caught) {
163
+ const error = normalizeAbort(asWebAccessError(caught, "provider_error"), options.context.signal, instance);
164
+ lastError = error;
165
+ lastRaw = error.raw;
166
+ attempts.push({
167
+ provider: ref(instance),
168
+ status: "failed",
169
+ durationMs: elapsed(attemptStarted, now),
170
+ error: error.toInfo(),
171
+ });
172
+ if (!resolved.automatic || !error.retryable)
173
+ break;
174
+ }
175
+ }
176
+ if (!lastError)
177
+ lastError = new WebAccessError("provider_exhausted", `没有可用的 ${options.capability} provider`);
178
+ else if (resolved.automatic &&
179
+ attempts.length > 0 &&
180
+ attempts.every((attempt) => attempt.status === "failed") &&
181
+ lastError.retryable) {
182
+ lastError = new WebAccessError("provider_exhausted", `所有 ${options.capability} provider 均失败`, {
183
+ retryable: false,
184
+ details: { lastError: lastError.toInfo() },
185
+ raw: lastRaw,
186
+ });
187
+ }
188
+ return {
189
+ error: lastError,
190
+ attempts,
191
+ raw: lastRaw,
192
+ ...(partial ? { partial } : {}),
193
+ };
194
+ }
195
+ function failureEnvelope(command, request, started, now, result, instances) {
196
+ return {
197
+ schemaVersion: 1,
198
+ ok: false,
199
+ command,
200
+ durationMs: elapsed(started, now),
201
+ request,
202
+ attempts: result.attempts,
203
+ error: result.error.toInfo(),
204
+ ...(result.raw !== undefined
205
+ ? { raw: safeRaw(result.raw, instances) }
206
+ : {}),
207
+ ...(result.partial
208
+ ? {
209
+ partial: {
210
+ provider: ref(result.partial.provider),
211
+ data: result.partial.data,
212
+ raw: safeRaw(result.partial.raw, instances),
213
+ },
214
+ }
215
+ : {}),
216
+ };
217
+ }
218
+ export async function executeSearch(request, context) {
219
+ const now = context.now ?? performance.now.bind(performance);
220
+ const started = now();
221
+ const config = context.loaded.app.search;
222
+ const result = await runProviders({
223
+ capability: "search",
224
+ selected: request.provider,
225
+ context,
226
+ totalTimeoutMs: request.timeoutMs ?? config.timeoutMs,
227
+ attemptTimeoutMs: config.attemptTimeoutMs,
228
+ invoke: (instance, signal, transport) => {
229
+ const adapter = getAdapter(instance.type, "search");
230
+ if (!adapter?.search)
231
+ throw unavailableError(instance, "search");
232
+ return adapter.search({
233
+ query: request.query,
234
+ limit: request.limit,
235
+ freshness: request.freshness,
236
+ includeDomains: request.includeDomains,
237
+ excludeDomains: request.excludeDomains,
238
+ signal,
239
+ maxResponseBytes: config.maxResponseBytes,
240
+ instance,
241
+ transport,
242
+ });
243
+ },
244
+ });
245
+ if ("error" in result)
246
+ return failureEnvelope("search", request, started, now, result, context.loaded.instances);
247
+ const envelope = {
248
+ schemaVersion: 1,
249
+ ok: true,
250
+ command: "search",
251
+ durationMs: elapsed(started, now),
252
+ request,
253
+ provider: ref(result.provider),
254
+ attempts: result.attempts,
255
+ data: result.execution.data,
256
+ raw: safeRaw(result.execution.raw, context.loaded.instances),
257
+ };
258
+ return envelope;
259
+ }
260
+ export async function executeExtract(request, context) {
261
+ const now = context.now ?? performance.now.bind(performance);
262
+ const started = now();
263
+ const config = context.loaded.app.extract;
264
+ const result = await runProviders({
265
+ capability: "extract",
266
+ selected: request.provider,
267
+ context,
268
+ totalTimeoutMs: request.timeoutMs ?? config.timeoutMs,
269
+ attemptTimeoutMs: config.attemptTimeoutMs,
270
+ invoke: (instance, signal, transport) => {
271
+ const adapter = getAdapter(instance.type, "extract");
272
+ if (!adapter?.extract)
273
+ throw unavailableError(instance, "extract");
274
+ return adapter.extract({
275
+ url: request.url,
276
+ signal,
277
+ maxResponseBytes: config.maxResponseBytes,
278
+ minContentCharacters: config.minContentCharacters,
279
+ instance,
280
+ transport,
281
+ });
282
+ },
283
+ validate: (execution, instance) => {
284
+ const characters = execution.data.document.content.trim().length;
285
+ if (characters >= config.minContentCharacters)
286
+ return undefined;
287
+ return new WebAccessError("no_usable_content", `${instance.id} 返回的正文过短`, {
288
+ provider: ref(instance),
289
+ retryable: true,
290
+ details: { characters, minimum: config.minContentCharacters },
291
+ raw: execution.raw,
292
+ });
293
+ },
294
+ });
295
+ if ("error" in result)
296
+ return failureEnvelope("extract", request, started, now, result, context.loaded.instances);
297
+ const envelope = {
298
+ schemaVersion: 1,
299
+ ok: true,
300
+ command: "extract",
301
+ durationMs: elapsed(started, now),
302
+ request,
303
+ provider: ref(result.provider),
304
+ attempts: result.attempts,
305
+ data: result.execution.data,
306
+ raw: safeRaw(result.execution.raw, context.loaded.instances),
307
+ };
308
+ return envelope;
309
+ }
310
+ export function errorEnvelope(error, command = null) {
311
+ const normalized = asWebAccessError(error);
312
+ return {
313
+ schemaVersion: 1,
314
+ ok: false,
315
+ command,
316
+ durationMs: 0,
317
+ error: normalized.toInfo(),
318
+ };
319
+ }
320
+ //# sourceMappingURL=router.js.map