antitone 1.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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +219 -0
  3. package/SKILL.md +114 -0
  4. package/dist/cli.d.ts +4 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +371 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/client.d.ts +108 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +412 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/config.d.ts +42 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +117 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/errors.d.ts +53 -0
  17. package/dist/errors.d.ts.map +1 -0
  18. package/dist/errors.js +224 -0
  19. package/dist/errors.js.map +1 -0
  20. package/dist/index.d.ts +17 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +36 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/output.d.ts +74 -0
  25. package/dist/output.d.ts.map +1 -0
  26. package/dist/output.js +283 -0
  27. package/dist/output.js.map +1 -0
  28. package/dist/tools/astock.d.ts +5 -0
  29. package/dist/tools/astock.d.ts.map +1 -0
  30. package/dist/tools/astock.js +30 -0
  31. package/dist/tools/astock.js.map +1 -0
  32. package/dist/tools/backtest.d.ts +5 -0
  33. package/dist/tools/backtest.d.ts.map +1 -0
  34. package/dist/tools/backtest.js +36 -0
  35. package/dist/tools/backtest.js.map +1 -0
  36. package/dist/tools/briefing.d.ts +5 -0
  37. package/dist/tools/briefing.d.ts.map +1 -0
  38. package/dist/tools/briefing.js +28 -0
  39. package/dist/tools/briefing.js.map +1 -0
  40. package/dist/tools/calendar.d.ts +5 -0
  41. package/dist/tools/calendar.d.ts.map +1 -0
  42. package/dist/tools/calendar.js +35 -0
  43. package/dist/tools/calendar.js.map +1 -0
  44. package/dist/tools/entity.d.ts +5 -0
  45. package/dist/tools/entity.d.ts.map +1 -0
  46. package/dist/tools/entity.js +41 -0
  47. package/dist/tools/entity.js.map +1 -0
  48. package/dist/tools/index.d.ts +28 -0
  49. package/dist/tools/index.d.ts.map +1 -0
  50. package/dist/tools/index.js +58 -0
  51. package/dist/tools/index.js.map +1 -0
  52. package/dist/tools/kit.d.ts +82 -0
  53. package/dist/tools/kit.d.ts.map +1 -0
  54. package/dist/tools/kit.js +146 -0
  55. package/dist/tools/kit.js.map +1 -0
  56. package/dist/tools/market.d.ts +5 -0
  57. package/dist/tools/market.d.ts.map +1 -0
  58. package/dist/tools/market.js +194 -0
  59. package/dist/tools/market.js.map +1 -0
  60. package/dist/tools/news.d.ts +5 -0
  61. package/dist/tools/news.d.ts.map +1 -0
  62. package/dist/tools/news.js +101 -0
  63. package/dist/tools/news.js.map +1 -0
  64. package/dist/tools/usage.d.ts +13 -0
  65. package/dist/tools/usage.d.ts.map +1 -0
  66. package/dist/tools/usage.js +50 -0
  67. package/dist/tools/usage.js.map +1 -0
  68. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAsC/C,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5C,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAQD,yCAAyC;AACzC,SAAS,qBAAqB,CAAC,IAAa,EAAE,IAAY,EAAE,GAAkB,EAAE,WAAoB,EAAE,KAAK,GAAG,CAAC;IAC7G,IAAI,KAAK,GAAG,EAAE,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO;IACpE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,IAAI,IAAI,IAAI,GAAG;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI;YAAE,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAA+B,CAAC,EAAE,CAAC;QAC3E,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,yBAAyB;AACzB,SAAS,SAAS,CAAC,MAAc;IAC/B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;QACvD,IAAI,KAAK,GAAG,MAAM;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC9D,IAAI,KAAK,GAAG,MAAM;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,SAAS,mBAAmB,CAAC,IAAa,EAAE,IAAY,EAAE,OAAmB,EAAE,KAAK,GAAG,CAAC;IACtF,IAAI,KAAK,GAAG,EAAE,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO;IACpE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACpG,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,IAA+B,CAAC;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YAC7D,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,iBAAiB,KAAK,CAAC,MAAM,MAAM,CAAC;YACrF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAChH,SAAS;QACX,CAAC;QACD,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,aAAqB,EAAE,UAAkB,EAAE,MAAc,EAAE,KAAe;IACrG,MAAM,KAAK,GAAG;QACZ,UAAU,MAAM,iBAAiB,aAAa,WAAW,UAAU,MAAM;KAC1E,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAiC,EAAE,MAAc,EAAE,WAAqB;IAClG,IAAI,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC1F,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC;IAC5B,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAExC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM;YAAE,MAAM;QACrD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAChC,IAAI,KAAK,KAAK,CAAC;YAAE,SAAS;QAC1B,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;YAC9B,IAAI,GAAG,SAAS,CAAC;YACjB,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM;gBAAE,MAAM;QACvD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;QAC7C,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3C,QAAQ,CAAC,MAAM,CAAC,GAAG;YACjB,kBAAkB,EAAE,IAAI;YACxB,IAAI,EAAE,4BAA4B;YAClC,cAAc,EAAE,UAAU,CAAC,aAAa,CAAC;YACzC,OAAO;SACR,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;YACxC,IAAI,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM;gBAAE,MAAM;YACrD,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACxC,QAAQ,CAAC,MAAM,CAAC,GAAG;gBACjB,kBAAkB,EAAE,IAAI;gBACxB,IAAI,EAAE,4BAA4B;gBAClC,cAAc,EAAE,UAAU,CAAC,aAAa,CAAC;gBACzC,OAAO;aACR,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3B,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACzB,uCAAuC;IACvC,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;QACvE,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3B,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;IACtC,MAAM,IAAI,GAA4B;QACpC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,iBAAiB,EAAE,KAAK,CAAC,UAAU;QACnC,cAAc,EAAE,KAAK,CAAC,YAAY;QAClC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;KACtB,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,UAAoC,EAA2B,EAAE,CAAC,CAAC;QACvF,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,UAAU,KAAK,SAAS;QACnC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;QACxB,IAAI;KACL,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,GAAe,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAC1C,IAAI,UAAU,GAA4B;QACxC,YAAY,EAAE,MAAM;QACpB,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,KAAK,CAAC,UAAU;QAC7B,OAAO;QACP,IAAI,EAAE,mBAAmB,CAAC,aAAa,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC;KAC1E,CAAC;IAEF,6CAA6C;IAC7C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YACpB,UAAU,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;YAClC,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;YACpD,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;gBAClC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACxD,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,GAAG;YACR,GAAG,OAAO;YACV,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;SAChH,CAAC;QACF,UAAU,GAAG;YACX,YAAY,EAAE,MAAM;YACpB,cAAc,EAAE,aAAa;YAC7B,WAAW,EAAE,MAAM,CAAC,UAAU;YAC9B,OAAO;YACP,IAAI,EAAE,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC;SAC3E,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,MAAM,OAAO,GAA4B;QACvC,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE;YACV,YAAY,EAAE,MAAM;YACpB,cAAc,EAAE,aAAa;YAC7B,OAAO;YACP,IAAI,EAAE,mBAAmB,CAAC,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;SAC3D;QACD,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB,EAAE;KAC1D,CAAC;IACF,IAAI,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7B,OAAO,CAAC,iBAAiB,CAAC,GAAG,MAAM,aAAa,eAAe,CAAC;QAChE,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAUD,SAAS,YAAY,CAAC,KAAoB,EAAE,IAAY,EAAE,SAAkB,EAAE,SAAoB,EAAE,UAAmB;IACrH,MAAM,UAAU,GAAoB,KAAK,CAAC,UAAU,CAAC;IACrD,MAAM,MAAM,GAA4B;QACtC,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,SAAS,EAAE,UAAU,CAAC,SAAS;KAChC,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAC1E,IAAI,UAAU,CAAC,IAAI;QAAE,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;IACtD,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC;IAC5F,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC;IAC7E,IAAI,UAAU,CAAC,cAAc,KAAK,SAAS;QAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC;IAClG,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC;IACnF,IAAI,UAAU,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;QAChG,MAAM,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC;IACvD,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAE1E,OAAO;QACL,EAAE,EAAE,KAAK;QACT,IAAI;QACJ,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC/B,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,MAAM;QACb,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,IAAI,EAAE;YACJ,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjE;KACF,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1G,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** get_astock_board(scope: astock:read)—— A 股特色榜单。 */
2
+ import type { AntitoneClient } from "../client.js";
3
+ import { type ToolSink } from "./kit.js";
4
+ export declare function registerAstockTools(server: ToolSink, client: AntitoneClient): void;
5
+ //# sourceMappingURL=astock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astock.d.ts","sourceRoot":"","sources":["../../src/tools/astock.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAyD,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEhG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAyBlF"}
@@ -0,0 +1,30 @@
1
+ /** get_astock_board(scope: astock:read)—— A 股特色榜单。 */
2
+ import { z } from "zod";
3
+ import { countItems, fromEnvelope, registerReadTool, STALE_MS } from "./kit.js";
4
+ export function registerAstockTools(server, client) {
5
+ registerReadTool(server, client, {
6
+ name: "get_astock_board",
7
+ title: "A 股特色榜单",
8
+ description: [
9
+ "取 A 股特色榜单:涨停池(zt)、炸板池(zb)、龙虎榜(lhb)、竞价异动(auction)。",
10
+ "什么时候用:用户问「今天涨停的有哪些」「谁上了龙虎榜」「集合竞价异动」「连板梯队」。",
11
+ "board=zt 含涨停池与连板梯队;zb 是封板失败(炸板)池;auction 只在竞价时段附近有意义;lhb 为当日龙虎榜。",
12
+ "费用:1 + ⌈只数/50⌉ 积分(典型 2–3 分)。",
13
+ ].join("\n"),
14
+ inputSchema: {
15
+ board: z.enum(["zt", "zb", "lhb", "auction"]).describe("榜单类型:zt 涨停池 / zb 炸板池 / lhb 龙虎榜 / auction 竞价异动"),
16
+ },
17
+ hints: ["一次只取一个榜单;需要多个榜单时逐个调用(各自独立计费)"],
18
+ run: async (args, ctx) => {
19
+ const envelope = await ctx.client.get(`/v1/astock/${args.board}`, {
20
+ staleAfterMs: STALE_MS.sessionHalfDay,
21
+ signal: ctx.signal,
22
+ });
23
+ return fromEnvelope(envelope, {
24
+ ...(countItems(envelope.data) !== undefined ? { count: countItems(envelope.data) } : {}),
25
+ meta: { board: args.board },
26
+ });
27
+ },
28
+ });
29
+ }
30
+ //# sourceMappingURL=astock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astock.js","sourceRoot":"","sources":["../../src/tools/astock.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAEhG,MAAM,UAAU,mBAAmB,CAAC,MAAgB,EAAE,MAAsB;IAC1E,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE;QAC/B,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE;YACX,mDAAmD;YACnD,4CAA4C;YAC5C,kEAAkE;YAClE,8BAA8B;SAC/B,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;SACxG;QACD,KAAK,EAAE,CAAC,8BAA8B,CAAC;QACvC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YACvB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAU,cAAc,IAAI,CAAC,KAAK,EAAE,EAAE;gBACzE,YAAY,EAAE,QAAQ,CAAC,cAAc;gBACrC,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,QAAQ,EAAE;gBAC5B,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClG,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;aAC5B,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** run_backtest(scope: backtest:run)—— 信号回测。 */
2
+ import type { AntitoneClient } from "../client.js";
3
+ import { type ToolSink } from "./kit.js";
4
+ export declare function registerBacktestTools(server: ToolSink, client: AntitoneClient): void;
5
+ //# sourceMappingURL=backtest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backtest.d.ts","sourceRoot":"","sources":["../../src/tools/backtest.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAA6C,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA6BpF"}
@@ -0,0 +1,36 @@
1
+ /** run_backtest(scope: backtest:run)—— 信号回测。 */
2
+ import { z } from "zod";
3
+ import { fromEnvelope, registerReadTool, STALE_MS } from "./kit.js";
4
+ export function registerBacktestTools(server, client) {
5
+ registerReadTool(server, client, {
6
+ name: "run_backtest",
7
+ title: "信号回测",
8
+ description: [
9
+ "在指定持有窗口与样本天数上回测「新闻重要度信号」的收益表现,返回胜率、平均收益、样本数与分组统计。",
10
+ "什么时候用:用户问「这个信号历史上有效吗」「重要度≥4 的新闻之后股价怎么走」,需要量化验证信号价值时。",
11
+ "参数:window 持有窗口(交易日)、days 回测样本天数、direction 方向过滤、min_imp 最低重要度(1–5)。",
12
+ "费用:固定 40 积分(单次计算最重的端点),建议先用小 days 试跑再放大。",
13
+ ].join("\n"),
14
+ inputSchema: {
15
+ window: z.number().int().min(1).max(250).describe("持有窗口(交易日),如 1 / 3 / 5 / 20"),
16
+ days: z.number().int().min(1).max(3650).describe("回测样本天数(回溯多长历史),如 60 / 180"),
17
+ direction: z.enum(["long", "short", "both"]).optional().describe("方向:long 只看多、short 只看空、both 双向(默认 both)"),
18
+ min_imp: z.number().min(1).max(5).optional().describe("新闻重要度下限(1–5),如 4 表示只看重要度 ≥4 的信号"),
19
+ },
20
+ hints: ["把 days 降到 60 以内先试跑", "提高 min_imp 可减少样本量与时延"],
21
+ run: async (args, ctx) => {
22
+ const body = { window: args.window, days: args.days };
23
+ if (args.direction !== undefined)
24
+ body["direction"] = args.direction;
25
+ if (args.min_imp !== undefined)
26
+ body["min_imp"] = args.min_imp;
27
+ const envelope = await ctx.client.post("/v1/backtest/signal", {
28
+ body,
29
+ staleAfterMs: STALE_MS.daily,
30
+ signal: ctx.signal,
31
+ });
32
+ return fromEnvelope(envelope, { meta: { request: body } });
33
+ },
34
+ });
35
+ }
36
+ //# sourceMappingURL=backtest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backtest.js","sourceRoot":"","sources":["../../src/tools/backtest.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAEhD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAEpF,MAAM,UAAU,qBAAqB,CAAC,MAAgB,EAAE,MAAsB;IAC5E,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE;QAC/B,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,MAAM;QACb,WAAW,EAAE;YACX,mDAAmD;YACnD,sDAAsD;YACtD,oEAAoE;YACpE,0CAA0C;SAC3C,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAC/E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAC7E,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YAC1G,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SACzF;QACD,KAAK,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;QACrD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YACvB,MAAM,IAAI,GAA4B,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/E,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;gBAAE,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACrE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAC/D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAU,qBAAqB,EAAE;gBACrE,IAAI;gBACJ,YAAY,EAAE,QAAQ,CAAC,KAAK;gBAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** get_briefing(scope: briefing:read)。 */
2
+ import type { AntitoneClient } from "../client.js";
3
+ import { type ToolSink } from "./kit.js";
4
+ export declare function registerBriefingTools(server: ToolSink, client: AntitoneClient): void;
5
+ //# sourceMappingURL=briefing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"briefing.d.ts","sourceRoot":"","sources":["../../src/tools/briefing.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAA6C,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAuBpF"}
@@ -0,0 +1,28 @@
1
+ /** get_briefing(scope: briefing:read)。 */
2
+ import { z } from "zod";
3
+ import { fromEnvelope, registerReadTool, STALE_MS } from "./kit.js";
4
+ export function registerBriefingTools(server, client) {
5
+ registerReadTool(server, client, {
6
+ name: "get_briefing",
7
+ title: "早晚报(AI 纪要)",
8
+ description: [
9
+ "取指定时段的市场纪要:premarket 早报、midday 午报、postmarket 晚报(AI 生成,含要闻、板块、异动、情绪与前瞻)。",
10
+ "什么时候用:用户要「今天盘前/盘中/收盘总结」「给我一份今日复盘」,或需要快速建立当日市场全局认知时。",
11
+ "这是单价最高的常规端点(15 积分),一次调用可替代大量零散查询;同一时段重复调用会重复计费,结果请复用。",
12
+ "费用:固定 15 积分。",
13
+ ].join("\n"),
14
+ inputSchema: {
15
+ type: z.enum(["premarket", "midday", "postmarket"]).describe("纪要时段:premarket 早报 / midday 午报 / postmarket 晚报"),
16
+ },
17
+ hints: ["同一时段不必重复调用(重复计费)", "只要行情数据请改用 market_overview(4 积分)"],
18
+ run: async (args, ctx) => {
19
+ const envelope = await ctx.client.get("/v1/briefing", {
20
+ query: { type: args.type },
21
+ staleAfterMs: STALE_MS.daily,
22
+ signal: ctx.signal,
23
+ });
24
+ return fromEnvelope(envelope, { meta: { briefing_type: args.type } });
25
+ },
26
+ });
27
+ }
28
+ //# sourceMappingURL=briefing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"briefing.js","sourceRoot":"","sources":["../../src/tools/briefing.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAEpF,MAAM,UAAU,qBAAqB,CAAC,MAAgB,EAAE,MAAsB;IAC5E,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE;QAC/B,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE;YACX,yEAAyE;YACzE,qDAAqD;YACrD,uDAAuD;YACvD,cAAc;SACf,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;SAC9G;QACD,KAAK,EAAE,CAAC,kBAAkB,EAAE,iCAAiC,CAAC;QAC9D,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YACvB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAU,cAAc,EAAE;gBAC7D,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;gBAC1B,YAAY,EAAE,QAAQ,CAAC,KAAK;gBAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxE,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** get_calendar(scope: calendar:read)。 */
2
+ import type { AntitoneClient } from "../client.js";
3
+ import { type ToolSink } from "./kit.js";
4
+ export declare function registerCalendarTools(server: ToolSink, client: AntitoneClient): void;
5
+ //# sourceMappingURL=calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/tools/calendar.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAyD,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEhG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA6BpF"}
@@ -0,0 +1,35 @@
1
+ /** get_calendar(scope: calendar:read)。 */
2
+ import { z } from "zod";
3
+ import { DEFAULT_LIMIT } from "../config.js";
4
+ import { countItems, fromEnvelope, registerReadTool, STALE_MS } from "./kit.js";
5
+ export function registerCalendarTools(server, client) {
6
+ registerReadTool(server, client, {
7
+ name: "get_calendar",
8
+ title: "财经日历",
9
+ description: [
10
+ "取未来/近期的财经事件日历:宏观数据、财报、新股、解禁、会议等(带时间、类型、重要性、影响标的)。",
11
+ "什么时候用:用户问「今天/本周有什么重要数据或事件」「有什么要关注的时点」,或需要为行情波动找事件解释时。",
12
+ "参数:limit 条数(默认 20)、event_type 事件类型、market 市场。",
13
+ "费用:1 + ⌈条数/50⌉ 积分(20 条 → 2 分)。",
14
+ ].join("\n"),
15
+ inputSchema: {
16
+ limit: z.number().int().min(1).max(200).optional().describe("返回条数,默认 20,最大 200"),
17
+ event_type: z.string().min(1).max(32).optional().describe("事件类型过滤,如 macro / earnings / ipo / unlock(以服务端取值为主)"),
18
+ market: z.string().min(1).max(16).optional().describe("市场过滤,如 cn / hk / us"),
19
+ },
20
+ hints: ["把 limit 降到 20 以内", "用 event_type / market 收窄范围"],
21
+ run: async (args, ctx) => {
22
+ const limit = args.limit ?? DEFAULT_LIMIT;
23
+ const envelope = await ctx.client.get("/v1/calendar", {
24
+ query: { limit, event_type: args.event_type, market: args.market },
25
+ staleAfterMs: STALE_MS.daily,
26
+ signal: ctx.signal,
27
+ });
28
+ return fromEnvelope(envelope, {
29
+ ...(countItems(envelope.data) !== undefined ? { count: countItems(envelope.data) } : {}),
30
+ meta: { limit_requested: limit },
31
+ });
32
+ },
33
+ });
34
+ }
35
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/tools/calendar.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAEhG,MAAM,UAAU,qBAAqB,CAAC,MAAgB,EAAE,MAAsB;IAC5E,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE;QAC/B,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,MAAM;QACb,WAAW,EAAE;YACX,mDAAmD;YACnD,uDAAuD;YACvD,+CAA+C;YAC/C,gCAAgC;SACjC,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAChF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YAC/G,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SAC7E;QACD,KAAK,EAAE,CAAC,kBAAkB,EAAE,4BAA4B,CAAC;QACzD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAU,cAAc,EAAE;gBAC7D,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;gBAClE,YAAY,EAAE,QAAQ,CAAC,KAAK;gBAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,QAAQ,EAAE;gBAC5B,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClG,IAAI,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE;aACjC,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** get_entity(scope: entity:read)。 */
2
+ import type { AntitoneClient } from "../client.js";
3
+ import { type ToolSink } from "./kit.js";
4
+ export declare function registerEntityTools(server: ToolSink, client: AntitoneClient): void;
5
+ //# sourceMappingURL=entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/tools/entity.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAGtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAsE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE7G,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAsClF"}
@@ -0,0 +1,41 @@
1
+ /** get_entity(scope: entity:read)。 */
2
+ import { z } from "zod";
3
+ import { badInput, fromEnvelope, fromEnvelopes, registerReadTool, STALE_MS } from "./kit.js";
4
+ export function registerEntityTools(server, client) {
5
+ registerReadTool(server, client, {
6
+ name: "get_entity",
7
+ title: "标的档案",
8
+ description: [
9
+ "取单个标的的档案:公司简介、所属板块/题材、行业、上市信息;include_financials=true 时附带财务数据(营收、净利、增速等)。",
10
+ "什么时候用:用户问「这家公司是做什么的」「XX 属于什么行业/板块」;需要基本面数据做分析时。",
11
+ "参数:symbol 代码、include_financials 是否带财务(额外 +6 积分)。",
12
+ "费用:档案固定 2 积分;含财务为 2 + 6 = 8 积分。",
13
+ ].join("\n"),
14
+ inputSchema: {
15
+ symbol: z.string().min(1).max(32).describe("股票代码,如 600519"),
16
+ include_financials: z.boolean().optional().describe("是否包含财务数据,默认 false(开启后额外 +6 积分)"),
17
+ },
18
+ hints: ["不需要财务数据时保持 include_financials=false(省 6 积分)"],
19
+ run: async (args, ctx) => {
20
+ const symbol = args.symbol.trim();
21
+ if (!symbol)
22
+ throw badInput("symbol 不能为空。", '传入股票代码,如 "600519"。');
23
+ const profile = await ctx.client.get(`/v1/entities/${encodeURIComponent(symbol)}`, {
24
+ staleAfterMs: STALE_MS.archive,
25
+ signal: ctx.signal,
26
+ });
27
+ if (args.include_financials !== true) {
28
+ return fromEnvelope(profile, { meta: { symbol, include_financials: false } });
29
+ }
30
+ const financials = await ctx.client.get(`/v1/entities/${encodeURIComponent(symbol)}/financials`, {
31
+ staleAfterMs: STALE_MS.archive,
32
+ signal: ctx.signal,
33
+ });
34
+ return fromEnvelopes([
35
+ ["profile", profile],
36
+ ["financials", financials],
37
+ ], { meta: { symbol, include_financials: true } });
38
+ },
39
+ });
40
+ }
41
+ //# sourceMappingURL=entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/tools/entity.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAE7G,MAAM,UAAU,mBAAmB,CAAC,MAAgB,EAAE,MAAsB;IAC1E,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE;QAC/B,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,MAAM;QACb,WAAW,EAAE;YACX,2EAA2E;YAC3E,iDAAiD;YACjD,kDAAkD;YAClD,iCAAiC;SAClC,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC3D,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;SACtF;QACD,KAAK,EAAE,CAAC,6CAA6C,CAAC;QACtD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM;gBAAE,MAAM,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAU,gBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE;gBAC1F,YAAY,EAAE,QAAQ,CAAC,OAAO;gBAC9B,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;gBACrC,OAAO,YAAY,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAU,gBAAgB,kBAAkB,CAAC,MAAM,CAAC,aAAa,EAAE;gBACxG,YAAY,EAAE,QAAQ,CAAC,OAAO;gBAC9B,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC,CAAC;YACH,OAAO,aAAa,CAClB;gBACE,CAAC,SAAS,EAAE,OAAO,CAAC;gBACpB,CAAC,YAAY,EAAE,UAAU,CAAC;aAC3B,EACD,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,CAC/C,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,28 @@
1
+ /** 工具注册总入口:14 个 §9 表格条目 → 16 个工具(list_sectors/get_sector、list_themes/get_theme_news 拆成独立工具)。 */
2
+ import type { AntitoneClient } from "../client.js";
3
+ import type { ToolSink } from "./kit.js";
4
+ /** 工具 → 所需 scope(docs/api-platform-master-plan.md §9 表格)。403 时核对这里。 */
5
+ export declare const TOOL_SCOPES: Record<string, string>;
6
+ export declare const TOOL_NAMES: string[];
7
+ export declare function registerAllTools(server: ToolSink, client: AntitoneClient): void;
8
+ /** 被捕获的工具定义(CLI 复用 MCP 的同一份 spec,避免两套定义漂移)。 */
9
+ export interface CapturedTool {
10
+ name: string;
11
+ meta: {
12
+ title?: string;
13
+ description?: string;
14
+ inputSchema: unknown;
15
+ };
16
+ handler: (args: unknown, extra: {
17
+ signal: AbortSignal;
18
+ }) => Promise<unknown>;
19
+ }
20
+ /**
21
+ * 用「哑服务器」把所有工具注册一遍,把定义抓出来给 CLI 用。
22
+ *
23
+ * 为什么不各自实现一套:CLI 与 MCP 必须**永远同参同义**。让 CLI 直接调用
24
+ * registerReadTool 装好的同一个 handler,截断、计费回执、错误规范化全部共用,
25
+ * 新增工具只写一处。
26
+ */
27
+ export declare function collectTools(client: AntitoneClient): CapturedTool[];
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAEhG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAUzC,uEAAuE;AACvE,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiB9C,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,EAA6B,CAAC;AAE7D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAS/E;AAED,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IACrE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9E;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,EAAE,CAUnE"}
@@ -0,0 +1,58 @@
1
+ /** 工具注册总入口:14 个 §9 表格条目 → 16 个工具(list_sectors/get_sector、list_themes/get_theme_news 拆成独立工具)。 */
2
+ import { registerAstockTools } from "./astock.js";
3
+ import { registerBacktestTools } from "./backtest.js";
4
+ import { registerBriefingTools } from "./briefing.js";
5
+ import { registerCalendarTools } from "./calendar.js";
6
+ import { registerEntityTools } from "./entity.js";
7
+ import { registerMarketTools } from "./market.js";
8
+ import { registerNewsTools } from "./news.js";
9
+ import { registerUsageTools } from "./usage.js";
10
+ /** 工具 → 所需 scope(docs/api-platform-master-plan.md §9 表格)。403 时核对这里。 */
11
+ export const TOOL_SCOPES = {
12
+ search_news: "news:read",
13
+ get_news: "news:read",
14
+ get_story: "news:read",
15
+ market_overview: "market:read",
16
+ list_sectors: "market:read",
17
+ get_sector: "market:read",
18
+ list_themes: "market:read",
19
+ get_theme_news: "market:read",
20
+ get_quotes: "market:read",
21
+ get_kline: "market:read",
22
+ get_calendar: "calendar:read",
23
+ get_briefing: "briefing:read",
24
+ get_entity: "entity:read",
25
+ get_astock_board: "astock:read",
26
+ run_backtest: "backtest:run",
27
+ get_usage: "usage:read",
28
+ };
29
+ export const TOOL_NAMES = Object.keys(TOOL_SCOPES);
30
+ export function registerAllTools(server, client) {
31
+ registerNewsTools(server, client);
32
+ registerMarketTools(server, client);
33
+ registerCalendarTools(server, client);
34
+ registerBriefingTools(server, client);
35
+ registerEntityTools(server, client);
36
+ registerAstockTools(server, client);
37
+ registerBacktestTools(server, client);
38
+ registerUsageTools(server, client);
39
+ }
40
+ /**
41
+ * 用「哑服务器」把所有工具注册一遍,把定义抓出来给 CLI 用。
42
+ *
43
+ * 为什么不各自实现一套:CLI 与 MCP 必须**永远同参同义**。让 CLI 直接调用
44
+ * registerReadTool 装好的同一个 handler,截断、计费回执、错误规范化全部共用,
45
+ * 新增工具只写一处。
46
+ */
47
+ export function collectTools(client) {
48
+ const captured = [];
49
+ const stub = {
50
+ registerTool(name, meta, handler) {
51
+ captured.push({ name, meta: meta, handler: handler });
52
+ return undefined;
53
+ },
54
+ };
55
+ registerAllTools(stub, client);
56
+ return captured;
57
+ }
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAIhG,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,uEAAuE;AACvE,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,WAAW,EAAE,WAAW;IACxB,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,WAAW;IACtB,eAAe,EAAE,aAAa;IAC9B,YAAY,EAAE,aAAa;IAC3B,UAAU,EAAE,aAAa;IACzB,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,aAAa;IAC7B,UAAU,EAAE,aAAa;IACzB,SAAS,EAAE,aAAa;IACxB,YAAY,EAAE,eAAe;IAC7B,YAAY,EAAE,eAAe;IAC7B,UAAU,EAAE,aAAa;IACzB,gBAAgB,EAAE,aAAa;IAC/B,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,YAAY;CACxB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAa,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAE7D,MAAM,UAAU,gBAAgB,CAAC,MAAgB,EAAE,MAAsB;IACvE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AASD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAsB;IACjD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAa;QACrB,YAAY,CAAC,IAAY,EAAE,IAA6B,EAAE,OAA4E;YACpI,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAA4B,EAAE,OAAO,EAAE,OAAkC,EAAE,CAAC,CAAC;YACzG,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;IACF,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * 工具注册脚手架:统一处理 as_of / stale / billing 汇总、32 KB 截断与错误转 isError。
3
+ * 所有工具都是只读的(readOnlyHint: true),参数一律用 zod 定义并配中文 description。
4
+ */
5
+ /**
6
+ * 工具注册接收端的最小接口(CLI/测试/未来的 server 都实现它)。
7
+ * 2026-09-17 去 MCP:产品决策改为「CLI + Skill」,不再注册 MCP 协议服务器。
8
+ */
9
+ export interface ToolSink {
10
+ registerTool(name: string, meta: Record<string, unknown>, handler: ToolHandler): unknown;
11
+ }
12
+ export type ToolHandler = (args: unknown, extra: {
13
+ signal: AbortSignal;
14
+ }) => Promise<unknown>;
15
+ /** 工具注解(本地定义,原为 MCP 的 ToolAnnotations)。 */
16
+ export interface ToolAnnotations {
17
+ readOnlyHint?: boolean;
18
+ destructiveHint?: boolean;
19
+ idempotentHint?: boolean;
20
+ openWorldHint?: boolean;
21
+ }
22
+ import type { z, ZodRawShape } from "zod";
23
+ import { type AntitoneClient, type DataEnvelope } from "../client.js";
24
+ import { AntitoneError } from "../errors.js";
25
+ export declare const READ_ONLY_ANNOTATIONS: ToolAnnotations;
26
+ /** 判定 stale 的时间阈值(按数据新鲜度性质分档)。 */
27
+ export declare const STALE_MS: {
28
+ /** 实时行情:5 分钟。 */
29
+ readonly quote: number;
30
+ /** 新闻流:30 分钟。 */
31
+ readonly news: number;
32
+ /** 日线/板块/题材/涨停等半日频数据:6 小时。 */
33
+ readonly sessionHalfDay: number;
34
+ /** 日历/早晚报/回测/日频档案:24 小时。 */
35
+ readonly daily: number;
36
+ /** 实体档案:7 天。 */
37
+ readonly archive: number;
38
+ };
39
+ export interface ToolContext {
40
+ client: AntitoneClient;
41
+ signal?: AbortSignal;
42
+ }
43
+ export interface ToolOutcome {
44
+ /** 直接放进结果 data 字段的内容(多端点工具自行组装成对象)。 */
45
+ data: unknown;
46
+ /** 参与 as_of / stale / billing 汇总的原始响应(至少一个)。 */
47
+ envelopes: DataEnvelope<unknown>[];
48
+ /** 截断后实际返回的条数。 */
49
+ count?: number;
50
+ /** 截断时使用的收窄建议。 */
51
+ hints?: string[];
52
+ meta?: Record<string, unknown>;
53
+ maxBytes?: number;
54
+ }
55
+ /** 单端点工具的结果包装。 */
56
+ export declare function fromEnvelope(envelope: DataEnvelope<unknown>, options?: {
57
+ count?: number;
58
+ hints?: string[];
59
+ meta?: Record<string, unknown>;
60
+ maxBytes?: number;
61
+ }): ToolOutcome;
62
+ /** 多端点工具的结果包装(如 market_overview = phase + breadth)。 */
63
+ export declare function fromEnvelopes(entries: Array<[string, DataEnvelope<unknown>]>, options?: {
64
+ count?: number;
65
+ hints?: string[];
66
+ meta?: Record<string, unknown>;
67
+ maxBytes?: number;
68
+ }): ToolOutcome;
69
+ /** 列表长度探测:items / data / list / rows / 顶层数组。 */
70
+ export declare function countItems(data: unknown): number | undefined;
71
+ /** 参数校验失败(属于用户输入问题,直接 isError 返回,不发请求)。 */
72
+ export declare function badInput(message: string, hint: string): AntitoneError;
73
+ export interface ReadToolSpec<S extends ZodRawShape> {
74
+ name: string;
75
+ title: string;
76
+ description: string;
77
+ inputSchema: S;
78
+ hints?: string[];
79
+ run: (args: z.infer<z.ZodObject<S>>, ctx: ToolContext) => Promise<ToolOutcome>;
80
+ }
81
+ export declare function registerReadTool<S extends ZodRawShape>(server: ToolSink, client: AntitoneClient, spec: ReadToolSpec<S>): void;
82
+ //# sourceMappingURL=kit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../../src/tools/kit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * 工具注册脚手架:统一处理 as_of / stale / billing 汇总、32 KB 截断与错误转 isError。
3
+ * 所有工具都是只读的(readOnlyHint: true),参数一律用 zod 定义并配中文 description。
4
+ */
5
+ import { mergeEnvelopes } from "../client.js";
6
+ /**
7
+ * 所有工具共用的余额说明。
8
+ * 2026-09-16:一次真实 Agent 会话里,模型看到 billing.balance = 0 后主动放弃调用
9
+ * 付费行情接口、改用公开数据 —— 但它当天还有 100 积分(≈¥0.50)免费额度没用。
10
+ * 这条说明 + 返回里的 billing.free_daily 一起解决"看不到额度就不敢用"的问题。
11
+ */
12
+ const BALANCE_NOTE = "余额说明:余额为 0 不代表不能调用 —— 账号每天有免费额度(默认 100 积分 ≈ ¥0.50,按账号计、当日作废)," +
13
+ "会自动抵扣。每次返回的 billing.free_daily 给出今日剩余额度,billing.note 会直接说明本次是否由免费额度覆盖。";
14
+ import { AntitoneError, normalizeAnyThrown } from "../errors.js";
15
+ import { buildErrorResult, buildSuccessResult } from "../output.js";
16
+ export const READ_ONLY_ANNOTATIONS = {
17
+ readOnlyHint: true,
18
+ destructiveHint: false,
19
+ idempotentHint: true,
20
+ openWorldHint: true,
21
+ };
22
+ /** 判定 stale 的时间阈值(按数据新鲜度性质分档)。 */
23
+ export const STALE_MS = {
24
+ /** 实时行情:5 分钟。 */
25
+ quote: 5 * 60 * 1000,
26
+ /** 新闻流:30 分钟。 */
27
+ news: 30 * 60 * 1000,
28
+ /** 日线/板块/题材/涨停等半日频数据:6 小时。 */
29
+ sessionHalfDay: 6 * 60 * 60 * 1000,
30
+ /** 日历/早晚报/回测/日频档案:24 小时。 */
31
+ daily: 24 * 60 * 60 * 1000,
32
+ /** 实体档案:7 天。 */
33
+ archive: 7 * 24 * 60 * 60 * 1000,
34
+ };
35
+ /** 单端点工具的结果包装。 */
36
+ export function fromEnvelope(envelope, options = {}) {
37
+ const outcome = { data: envelope.data, envelopes: [envelope] };
38
+ if (options.count !== undefined)
39
+ outcome.count = options.count;
40
+ if (options.hints !== undefined)
41
+ outcome.hints = options.hints;
42
+ if (options.meta !== undefined)
43
+ outcome.meta = options.meta;
44
+ if (options.maxBytes !== undefined)
45
+ outcome.maxBytes = options.maxBytes;
46
+ return outcome;
47
+ }
48
+ /** 多端点工具的结果包装(如 market_overview = phase + breadth)。 */
49
+ export function fromEnvelopes(entries, options = {}) {
50
+ const data = {};
51
+ for (const [key, envelope] of entries)
52
+ data[key] = envelope.data;
53
+ const outcome = { data, envelopes: entries.map(([, envelope]) => envelope) };
54
+ if (options.count !== undefined)
55
+ outcome.count = options.count;
56
+ if (options.hints !== undefined)
57
+ outcome.hints = options.hints;
58
+ if (options.meta !== undefined)
59
+ outcome.meta = options.meta;
60
+ if (options.maxBytes !== undefined)
61
+ outcome.maxBytes = options.maxBytes;
62
+ return outcome;
63
+ }
64
+ /** 列表长度探测:items / data / list / rows / 顶层数组。 */
65
+ export function countItems(data) {
66
+ if (Array.isArray(data))
67
+ return data.length;
68
+ if (data && typeof data === "object") {
69
+ const record = data;
70
+ for (const key of ["items", "data", "list", "rows", "results", "news", "records"]) {
71
+ const value = record[key];
72
+ if (Array.isArray(value))
73
+ return value.length;
74
+ }
75
+ }
76
+ return undefined;
77
+ }
78
+ /** 参数校验失败(属于用户输入问题,直接 isError 返回,不发请求)。 */
79
+ export function badInput(message, hint) {
80
+ return new AntitoneError({ kind: "bad_request", message, hint, retryable: false });
81
+ }
82
+ /**
83
+ * 计费聚合:**始终走 mergeEnvelopes**。
84
+ *
85
+ * 2026-09-16 修复:此前单端点直接返回 envelopes[0].billing,绕过了合并逻辑,
86
+ * 导致只在合并分支里加的 free_daily 合并与 note("余额 0 但仍可用")在单端点工具上丢失 ——
87
+ * 而绝大多数工具都是单端点。
88
+ */
89
+ function summarizeBilling(envelopes) {
90
+ if (envelopes.length === 0)
91
+ return undefined;
92
+ const entries = envelopes.map((envelope, index) => [
93
+ `call_${index + 1}`,
94
+ envelope,
95
+ ]);
96
+ return mergeEnvelopes(entries).billing;
97
+ }
98
+ export function registerReadTool(server, client, spec) {
99
+ // 收敛为具体的 ZodRawShape 类型:SDK 的 registerTool 在「类型参数形态的 shape」下无法完成重载推断,
100
+ // 运行期传给 SDK 的仍是同一份 zod schema(参数校验照旧)。
101
+ const inputSchema = spec.inputSchema;
102
+ server.registerTool(spec.name, {
103
+ title: spec.title,
104
+ // 统一的「余额语义」补在白名单最后:实测 Agent 看到 balance=0 会自行放弃调用
105
+ // 付费端点(改用公开数据),但它其实还有每日免费额度可用。
106
+ description: `${spec.description}\n${BALANCE_NOTE}`,
107
+ inputSchema,
108
+ annotations: READ_ONLY_ANNOTATIONS,
109
+ },
110
+ // 参数已由 SDK 按 inputSchema 校验并解析;这里只做类型转换,让 spec.run 侧拿到强类型 args。
111
+ async (args, extra) => {
112
+ const startedAt = Date.now();
113
+ try {
114
+ const outcome = await spec.run(args, { client, signal: extra.signal });
115
+ const envelopes = outcome.envelopes;
116
+ const summaries = envelopes.map((envelope, index) => [`call_${index + 1}`, envelope]);
117
+ const merged = mergeEnvelopes(summaries);
118
+ const billing = summarizeBilling(envelopes);
119
+ const result = buildSuccessResult({
120
+ tool: spec.name,
121
+ data: outcome.data,
122
+ endpoints: merged.endpoints,
123
+ asOf: merged.asOf,
124
+ asOfSource: merged.asOfSource,
125
+ stale: merged.stale,
126
+ staleAfterMs: merged.staleAfterMs,
127
+ ...(billing ? { billing } : {}),
128
+ requestId: merged.requestId,
129
+ httpStatus: merged.httpStatus,
130
+ durationMs: merged.durationMs,
131
+ ...(outcome.count !== undefined ? { count: outcome.count } : {}),
132
+ narrowHints: outcome.hints ?? spec.hints ?? [],
133
+ ...(outcome.maxBytes !== undefined ? { maxBytes: outcome.maxBytes } : {}),
134
+ ...(outcome.meta ? { meta: outcome.meta } : {}),
135
+ });
136
+ return result;
137
+ }
138
+ catch (error) {
139
+ const normalized = normalizeAnyThrown(error);
140
+ // 诊断信息只能写 stderr:stdout 是 MCP 的 JSON-RPC 通道。
141
+ process.stderr.write(`[antitone-mcp] 工具 ${spec.name} 失败:${normalized.message}\n`);
142
+ return buildErrorResult({ tool: spec.name, error: normalized, durationMs: Date.now() - startedAt });
143
+ }
144
+ });
145
+ }
146
+ //# sourceMappingURL=kit.js.map