@jellyos/agent 0.1.3 → 0.1.4
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.
- package/README.md +9 -9
- package/dist/api/Registry.js +3 -1
- package/dist/api/Registry.js.map +1 -1
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/models/CostTracker.d.ts +66 -0
- package/dist/models/CostTracker.d.ts.map +1 -0
- package/dist/models/CostTracker.js +148 -0
- package/dist/models/CostTracker.js.map +1 -0
- package/dist/models/ModelRegistry.d.ts +146 -0
- package/dist/models/ModelRegistry.d.ts.map +1 -0
- package/dist/models/ModelRegistry.js +400 -0
- package/dist/models/ModelRegistry.js.map +1 -0
- package/dist/models/index.d.ts +5 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +3 -0
- package/dist/models/index.js.map +1 -0
- package/dist/runner/AgentRunner.d.ts +5 -1
- package/dist/runner/AgentRunner.d.ts.map +1 -1
- package/dist/runner/AgentRunner.js +18 -8
- package/dist/runner/AgentRunner.js.map +1 -1
- package/dist/runner/ModelClient.d.ts +16 -5
- package/dist/runner/ModelClient.d.ts.map +1 -1
- package/dist/runner/ModelClient.js +69 -23
- package/dist/runner/ModelClient.js.map +1 -1
- package/dist/runner/SwarmRouter.d.ts +4 -1
- package/dist/runner/SwarmRouter.d.ts.map +1 -1
- package/dist/runner/SwarmRouter.js +15 -7
- package/dist/runner/SwarmRouter.js.map +1 -1
- package/dist/session/SessionManager.d.ts +2 -2
- package/dist/session/SessionManager.js +3 -3
- package/dist/session/SessionManager.js.map +1 -1
- package/dist/tools/NewsSentiment.d.ts +67 -0
- package/dist/tools/NewsSentiment.d.ts.map +1 -0
- package/dist/tools/NewsSentiment.js +199 -0
- package/dist/tools/NewsSentiment.js.map +1 -0
- package/dist/tools/PriceFeed.d.ts +103 -0
- package/dist/tools/PriceFeed.d.ts.map +1 -0
- package/dist/tools/PriceFeed.js +230 -0
- package/dist/tools/PriceFeed.js.map +1 -0
- package/dist/tools/TechnicalAnalysis.d.ts +73 -0
- package/dist/tools/TechnicalAnalysis.d.ts.map +1 -0
- package/dist/tools/TechnicalAnalysis.js +272 -0
- package/dist/tools/TechnicalAnalysis.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tui/App.d.ts +7 -5
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +178 -56
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/StatusBar.js +1 -1
- package/dist/tui/StatusBar.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NewsSentiment.js","sourceRoot":"","sources":["../../src/tools/NewsSentiment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AAsBtD,iFAAiF;AAEjF,MAAM,KAAK,GAAG;IACZ,EAAE,IAAI,EAAE,UAAU,EAAM,GAAG,EAAE,iDAAiD,EAAE;IAChF,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,+BAA+B,EAAE;IAC/D,EAAE,IAAI,EAAE,WAAW,EAAK,GAAG,EAAE,6BAA6B,EAAE;CAC7D,CAAC;AAEF,iFAAiF;AAEjF,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;IAC3E,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU;IAC7E,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;IACxE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS;CAC5D,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW;IACxE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK;IACvE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ;IACrE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS;CAC5C,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAI,CAAC,CAAC;IAEd,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,KAAK,EAAE,CAAC;YAAC,IAAI,EAAE,CAAC;QAAC,CAAC;IAC7C,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,KAAK,EAAE,CAAC;YAAC,IAAI,EAAE,CAAC;QAAC,CAAC;IAC7C,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,gFAAgF;AAEhF,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,MAAc;IACjD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;YACpC,OAAO,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,gDAAgD,EAAE;SACrG,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAE9B,wDAAwD;QACxD,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC;QAEhE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;YACxG,MAAM,SAAS,GAAI,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAI,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAEjE,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBAAE,SAAS;YAE5B,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK;gBACL,MAAM;gBACN,GAAG,EAAQ,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC/B,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBACrE,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC;aACjC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,SAAS,eAAe,CAAC,KAAiB,EAAE,IAAI,GAAG,EAAE;IACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9O,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/E,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC/C,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;SAC3B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;SACd,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,iFAAiF;AAEjF,MAAM,OAAO,QAAQ;IACX,UAAU,GAA2B,IAAI,CAAC;IAC1C,YAAY,CAAS;IACrB,KAAK,CAAkC;IAE/C,YAAY,cAAc,GAAG,OAAO;QAClC,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC;IACrC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAClE,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,QAAQ,GAAe,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC;QACxF,MAAM,OAAO,GAAM,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9G,MAAM,QAAQ,GAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;QACzE,MAAM,QAAQ,GAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QAC1E,MAAM,OAAO,GAAM,QAAQ,CAAC,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;QACzD,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAE9C,IAAI,CAAC,UAAU,GAAG;YAChB,KAAK,EAAO,QAAQ;YACpB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI;YAC/C,QAAQ;YACR,QAAQ;YACR,OAAO;YACP,SAAS,EAAG,IAAI,CAAC,GAAG,EAAE;YACtB,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,yBAAyB,CAAC;QACvD,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC;QAC7B,MAAM,IAAI,GAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;QAEtF,OAAO;YACL,mBAAmB,IAAI,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YAC9E,KAAK,CAAC,CAAC,QAAQ,eAAe,CAAC,CAAC,QAAQ,eAAe,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY;YACvG,eAAe,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACrD,WAAW;YACX,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtF,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC1D,CAAC,CAAC;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,8CAA8C;IAC9C,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,MAAM,CAAC;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QACvC,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,CAAC;CACF;AAED,iFAAiF;AAEjF,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAEvC,iFAAiF;AAEjF,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,CAAC;CAC9F,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,MAAoC;IACjF,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,+DAA+D,EAAE,CAAC;YAC3G,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SACpD,GAAG,CAAC,CAAC,CAAC,EAAE;QACP,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACnF,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,mBAAmB,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,gBAAgB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE;aACxO,CAAC;QACF,OAAO,EAAE;YACP,YAAY,EAAI,MAAM,CAAC,YAAY;YACnC,QAAQ,EAAQ,MAAM,CAAC,QAAQ;YAC/B,QAAQ,EAAQ,MAAM,CAAC,QAAQ;YAC/B,OAAO,EAAS,MAAM,CAAC,OAAO;YAC9B,YAAY,EAAI,MAAM,CAAC,KAAK,CAAC,MAAM;YACnC,WAAW,EAAK,MAAM,CAAC,WAAW;SACnC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PriceFeed — real-time price aggregation from CoinGecko and Binance.
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - Background polling with configurable intervals
|
|
6
|
+
* - Multi-source aggregation (prioritises Binance for precision, CG for breadth)
|
|
7
|
+
* - 24h change, volume, and market cap tracking
|
|
8
|
+
* - In-memory price cache for tool lookups
|
|
9
|
+
* - Exposed as tools for the AI to query
|
|
10
|
+
*/
|
|
11
|
+
import { type Static } from "@sinclair/typebox";
|
|
12
|
+
import { EventEmitter } from "node:events";
|
|
13
|
+
export interface PriceTick {
|
|
14
|
+
symbol: string;
|
|
15
|
+
price: number;
|
|
16
|
+
change24h: number;
|
|
17
|
+
volume24h: number;
|
|
18
|
+
marketCap: number;
|
|
19
|
+
high24h: number;
|
|
20
|
+
low24h: number;
|
|
21
|
+
source: "coingecko" | "binance";
|
|
22
|
+
timestamp: number;
|
|
23
|
+
}
|
|
24
|
+
export interface CoinGeckoCoin {
|
|
25
|
+
id: string;
|
|
26
|
+
symbol: string;
|
|
27
|
+
name: string;
|
|
28
|
+
current_price: number;
|
|
29
|
+
price_change_percentage_24h: number;
|
|
30
|
+
market_cap: number;
|
|
31
|
+
total_volume: number;
|
|
32
|
+
high_24h: number;
|
|
33
|
+
low_24h: number;
|
|
34
|
+
}
|
|
35
|
+
export declare class PriceFeed extends EventEmitter {
|
|
36
|
+
private prices;
|
|
37
|
+
private pollInterval;
|
|
38
|
+
private timer?;
|
|
39
|
+
private tracking;
|
|
40
|
+
constructor(pollIntervalMs?: number);
|
|
41
|
+
start(): void;
|
|
42
|
+
stop(): void;
|
|
43
|
+
/** Add symbols to track. IDs are auto-resolved from the symbol map. */
|
|
44
|
+
track(...symbols: string[]): void;
|
|
45
|
+
fetchAll(): Promise<void>;
|
|
46
|
+
get(symbol: string): PriceTick | undefined;
|
|
47
|
+
getMultiple(symbols: string[]): PriceTick[];
|
|
48
|
+
getAll(): PriceTick[];
|
|
49
|
+
getTopMovers(limit?: number): PriceTick[];
|
|
50
|
+
formatPrice(tick: PriceTick): string;
|
|
51
|
+
/** Compact ticker line for the status bar. */
|
|
52
|
+
tickerLine(maxSymbols?: number): string;
|
|
53
|
+
}
|
|
54
|
+
export declare const priceFeed: PriceFeed;
|
|
55
|
+
export declare const getPricesParams: import("@sinclair/typebox").TObject<{
|
|
56
|
+
symbols: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
57
|
+
}>;
|
|
58
|
+
export declare function getPricesTool(_id: string, params: Static<typeof getPricesParams>): Promise<{
|
|
59
|
+
content: {
|
|
60
|
+
type: "text";
|
|
61
|
+
text: string;
|
|
62
|
+
}[];
|
|
63
|
+
details: Record<string, unknown>;
|
|
64
|
+
}>;
|
|
65
|
+
export declare const topMoversParams: import("@sinclair/typebox").TObject<{
|
|
66
|
+
limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
67
|
+
}>;
|
|
68
|
+
export declare function topMoversTool(_id: string, params: Static<typeof topMoversParams>): Promise<{
|
|
69
|
+
content: {
|
|
70
|
+
type: "text";
|
|
71
|
+
text: string;
|
|
72
|
+
}[];
|
|
73
|
+
details: {
|
|
74
|
+
count: number;
|
|
75
|
+
};
|
|
76
|
+
}>;
|
|
77
|
+
export declare const marketOverviewParams: import("@sinclair/typebox").TObject<{}>;
|
|
78
|
+
export declare function marketOverviewTool(): Promise<{
|
|
79
|
+
content: {
|
|
80
|
+
type: "text";
|
|
81
|
+
text: string;
|
|
82
|
+
}[];
|
|
83
|
+
details: {
|
|
84
|
+
totalMarketCap?: undefined;
|
|
85
|
+
avgChange24h?: undefined;
|
|
86
|
+
gainers?: undefined;
|
|
87
|
+
losers?: undefined;
|
|
88
|
+
assets?: undefined;
|
|
89
|
+
};
|
|
90
|
+
} | {
|
|
91
|
+
content: {
|
|
92
|
+
type: "text";
|
|
93
|
+
text: string;
|
|
94
|
+
}[];
|
|
95
|
+
details: {
|
|
96
|
+
totalMarketCap: number;
|
|
97
|
+
avgChange24h: number;
|
|
98
|
+
gainers: number;
|
|
99
|
+
losers: number;
|
|
100
|
+
assets: number;
|
|
101
|
+
};
|
|
102
|
+
}>;
|
|
103
|
+
//# sourceMappingURL=PriceFeed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PriceFeed.d.ts","sourceRoot":"","sources":["../../src/tools/PriceFeed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,WAAW,SAAS;IACxB,MAAM,EAAM,MAAM,CAAC;IACnB,KAAK,EAAO,MAAM,CAAC;IACnB,SAAS,EAAG,MAAM,CAAC;IACnB,SAAS,EAAG,MAAM,CAAC;IACnB,SAAS,EAAG,MAAM,CAAC;IACnB,OAAO,EAAK,MAAM,CAAC;IACnB,MAAM,EAAM,MAAM,CAAC;IACnB,MAAM,EAAM,WAAW,GAAG,SAAS,CAAC;IACpC,SAAS,EAAG,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAa,MAAM,CAAC;IACtB,MAAM,EAAS,MAAM,CAAC;IACtB,IAAI,EAAW,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B,EAAE,MAAM,CAAC;IACpC,UAAU,EAAK,MAAM,CAAC;IACtB,YAAY,EAAG,MAAM,CAAC;IACtB,QAAQ,EAAO,MAAM,CAAC;IACtB,OAAO,EAAQ,MAAM,CAAC;CACvB;AAiDD,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAC,CAAwC;IACtD,OAAO,CAAC,QAAQ,CAAyF;gBAE7F,cAAc,SAAS;IAOnC,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IAIZ,uEAAuE;IACvE,KAAK,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAM3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC/B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE;IAI3C,MAAM,IAAI,SAAS,EAAE;IAIrB,YAAY,CAAC,KAAK,SAAI,GAAG,SAAS,EAAE;IAMpC,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAYpC,8CAA8C;IAC9C,UAAU,CAAC,UAAU,SAAI,GAAG,MAAM;CAUnC;AAID,eAAO,MAAM,SAAS,WAAkB,CAAC;AAIzC,eAAO,MAAM,eAAe;;EAE1B,CAAC;AAEH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,eAAe,CAAC;;;;;;GA2BtF;AAID,eAAO,MAAM,eAAe;;EAE1B,CAAC;AAEH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,eAAe,CAAC;;;;;;;;GAOtF;AAID,eAAO,MAAM,oBAAoB,yCAAkB,CAAC;AAEpD,wBAAsB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;GAiCvC"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PriceFeed — real-time price aggregation from CoinGecko and Binance.
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - Background polling with configurable intervals
|
|
6
|
+
* - Multi-source aggregation (prioritises Binance for precision, CG for breadth)
|
|
7
|
+
* - 24h change, volume, and market cap tracking
|
|
8
|
+
* - In-memory price cache for tool lookups
|
|
9
|
+
* - Exposed as tools for the AI to query
|
|
10
|
+
*/
|
|
11
|
+
import { Type } from "@sinclair/typebox";
|
|
12
|
+
import { EventEmitter } from "node:events";
|
|
13
|
+
// ── CoinGecko ID map (common symbols) ────────────────────────────────────────
|
|
14
|
+
const SYMBOL_TO_ID = {
|
|
15
|
+
btc: "bitcoin",
|
|
16
|
+
eth: "ethereum",
|
|
17
|
+
sol: "solana",
|
|
18
|
+
bnb: "binancecoin",
|
|
19
|
+
xrp: "ripple",
|
|
20
|
+
ada: "cardano",
|
|
21
|
+
doge: "dogecoin",
|
|
22
|
+
dot: "polkadot",
|
|
23
|
+
matic: "matic-network",
|
|
24
|
+
avax: "avalanche-2",
|
|
25
|
+
link: "chainlink",
|
|
26
|
+
uni: "uniswap",
|
|
27
|
+
atom: "cosmos",
|
|
28
|
+
arb: "arbitrum",
|
|
29
|
+
op: "optimism",
|
|
30
|
+
near: "near",
|
|
31
|
+
apt: "aptos",
|
|
32
|
+
sui: "sui",
|
|
33
|
+
sei: "sei-network",
|
|
34
|
+
inj: "injective-protocol",
|
|
35
|
+
tia: "celestia",
|
|
36
|
+
wld: "worldcoin-wld",
|
|
37
|
+
pepe: "pepe",
|
|
38
|
+
wif: "dogwifcoin",
|
|
39
|
+
bonk: "bonk",
|
|
40
|
+
floki: "floki",
|
|
41
|
+
shib: "shiba-inu",
|
|
42
|
+
aave: "aave",
|
|
43
|
+
mkr: "maker",
|
|
44
|
+
ldo: "lido-dao",
|
|
45
|
+
ens: "ethereum-name-service",
|
|
46
|
+
pendle: "pendle",
|
|
47
|
+
ltc: "litecoin",
|
|
48
|
+
bch: "bitcoin-cash",
|
|
49
|
+
etc: "ethereum-classic",
|
|
50
|
+
fil: "filecoin",
|
|
51
|
+
trx: "tron",
|
|
52
|
+
usdc: "usd-coin",
|
|
53
|
+
usdt: "tether",
|
|
54
|
+
dai: "dai",
|
|
55
|
+
};
|
|
56
|
+
// ── PriceFeed class ──────────────────────────────────────────────────────────
|
|
57
|
+
export class PriceFeed extends EventEmitter {
|
|
58
|
+
prices = new Map();
|
|
59
|
+
pollInterval;
|
|
60
|
+
timer;
|
|
61
|
+
tracking = new Set(["btc", "eth", "sol", "bnb", "matic", "arb", "op", "avax"]);
|
|
62
|
+
constructor(pollIntervalMs = 60_000) {
|
|
63
|
+
super();
|
|
64
|
+
this.pollInterval = pollIntervalMs;
|
|
65
|
+
}
|
|
66
|
+
// ── Lifecycle ────────────────────────────────────────────────────────────
|
|
67
|
+
start() {
|
|
68
|
+
this.fetchAll();
|
|
69
|
+
this.timer = setInterval(() => this.fetchAll(), this.pollInterval);
|
|
70
|
+
}
|
|
71
|
+
stop() {
|
|
72
|
+
if (this.timer) {
|
|
73
|
+
clearInterval(this.timer);
|
|
74
|
+
this.timer = undefined;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Add symbols to track. IDs are auto-resolved from the symbol map. */
|
|
78
|
+
track(...symbols) {
|
|
79
|
+
for (const s of symbols)
|
|
80
|
+
this.tracking.add(s.toLowerCase());
|
|
81
|
+
}
|
|
82
|
+
// ── Fetch ────────────────────────────────────────────────────────────────
|
|
83
|
+
async fetchAll() {
|
|
84
|
+
const ids = [...this.tracking]
|
|
85
|
+
.map(s => SYMBOL_TO_ID[s])
|
|
86
|
+
.filter(Boolean)
|
|
87
|
+
.join(",");
|
|
88
|
+
if (!ids)
|
|
89
|
+
return;
|
|
90
|
+
try {
|
|
91
|
+
const res = await fetch(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&ids=${ids}&order=market_cap_desc&sparkline=false`, { signal: AbortSignal.timeout(10_000), headers: { "User-Agent": "JellyOS/1.0" } });
|
|
92
|
+
if (!res.ok)
|
|
93
|
+
return;
|
|
94
|
+
const data = (await res.json());
|
|
95
|
+
for (const coin of data) {
|
|
96
|
+
const symbol = coin.symbol.toUpperCase();
|
|
97
|
+
const tick = {
|
|
98
|
+
symbol,
|
|
99
|
+
price: coin.current_price,
|
|
100
|
+
change24h: coin.price_change_percentage_24h ?? 0,
|
|
101
|
+
volume24h: coin.total_volume ?? 0,
|
|
102
|
+
marketCap: coin.market_cap ?? 0,
|
|
103
|
+
high24h: coin.high_24h ?? 0,
|
|
104
|
+
low24h: coin.low_24h ?? 0,
|
|
105
|
+
source: "coingecko",
|
|
106
|
+
timestamp: Date.now(),
|
|
107
|
+
};
|
|
108
|
+
this.prices.set(symbol.toLowerCase(), tick);
|
|
109
|
+
}
|
|
110
|
+
this.emit("prices", [...this.prices.values()]);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Silent — will retry next interval
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// ── Query ─────────────────────────────────────────────────────────────────
|
|
117
|
+
get(symbol) {
|
|
118
|
+
return this.prices.get(symbol.toLowerCase());
|
|
119
|
+
}
|
|
120
|
+
getMultiple(symbols) {
|
|
121
|
+
return symbols.map(s => this.get(s)).filter(Boolean);
|
|
122
|
+
}
|
|
123
|
+
getAll() {
|
|
124
|
+
return [...this.prices.values()];
|
|
125
|
+
}
|
|
126
|
+
getTopMovers(limit = 5) {
|
|
127
|
+
return [...this.prices.values()]
|
|
128
|
+
.sort((a, b) => Math.abs(b.change24h) - Math.abs(a.change24h))
|
|
129
|
+
.slice(0, limit);
|
|
130
|
+
}
|
|
131
|
+
formatPrice(tick) {
|
|
132
|
+
const changeStr = tick.change24h >= 0
|
|
133
|
+
? `+${tick.change24h.toFixed(2)}%`
|
|
134
|
+
: `${tick.change24h.toFixed(2)}%`;
|
|
135
|
+
const priceStr = tick.price < 1
|
|
136
|
+
? `$${tick.price.toFixed(6)}`
|
|
137
|
+
: tick.price < 100
|
|
138
|
+
? `$${tick.price.toFixed(2)}`
|
|
139
|
+
: `$${tick.price.toLocaleString()}`;
|
|
140
|
+
return `${tick.symbol.padEnd(6)} ${priceStr} ${changeStr}`;
|
|
141
|
+
}
|
|
142
|
+
/** Compact ticker line for the status bar. */
|
|
143
|
+
tickerLine(maxSymbols = 5) {
|
|
144
|
+
return [...this.prices.values()]
|
|
145
|
+
.slice(0, maxSymbols)
|
|
146
|
+
.map(t => {
|
|
147
|
+
const sign = t.change24h >= 0 ? "▲" : "▼";
|
|
148
|
+
const p = t.price < 1 ? t.price.toFixed(4) : t.price.toFixed(0);
|
|
149
|
+
return `${t.symbol} $${p} ${sign}${Math.abs(t.change24h).toFixed(1)}%`;
|
|
150
|
+
})
|
|
151
|
+
.join(" · ");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// ── Singleton ─────────────────────────────────────────────────────────────────
|
|
155
|
+
export const priceFeed = new PriceFeed();
|
|
156
|
+
// ── Tool: get_prices ─────────────────────────────────────────────────────────
|
|
157
|
+
export const getPricesParams = Type.Object({
|
|
158
|
+
symbols: Type.Array(Type.String(), { description: "Symbols to fetch (e.g. btc, eth, sol)" }),
|
|
159
|
+
});
|
|
160
|
+
export async function getPricesTool(_id, params) {
|
|
161
|
+
const ticks = priceFeed.getAll();
|
|
162
|
+
if (ticks.length === 0) {
|
|
163
|
+
return {
|
|
164
|
+
content: [{ type: "text", text: "No price data available yet. Please wait for the first price update." }],
|
|
165
|
+
details: {},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const requested = params.symbols.map(s => s.toLowerCase());
|
|
169
|
+
const results = ticks.filter(t => requested.includes(t.symbol.toLowerCase()));
|
|
170
|
+
if (results.length === 0) {
|
|
171
|
+
return {
|
|
172
|
+
content: [{ type: "text", text: `No data for: ${params.symbols.join(", ")}. Available: ${ticks.map(t => t.symbol).join(", ")}` }],
|
|
173
|
+
details: {},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const text = results.map(t => priceFeed.formatPrice(t)).join("\n");
|
|
177
|
+
return {
|
|
178
|
+
content: [{ type: "text", text }],
|
|
179
|
+
details: results.reduce((acc, t) => {
|
|
180
|
+
acc[t.symbol] = { price: t.price, change24h: t.change24h, volume24h: t.volume24h, marketCap: t.marketCap, source: t.source };
|
|
181
|
+
return acc;
|
|
182
|
+
}, {}),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
// ── Tool: get_top_movers ─────────────────────────────────────────────────────
|
|
186
|
+
export const topMoversParams = Type.Object({
|
|
187
|
+
limit: Type.Optional(Type.Number({ default: 5, description: "Number of top movers to show" })),
|
|
188
|
+
});
|
|
189
|
+
export async function topMoversTool(_id, params) {
|
|
190
|
+
const movers = priceFeed.getTopMovers(params.limit ?? 5);
|
|
191
|
+
const text = movers.map(t => priceFeed.formatPrice(t)).join("\n");
|
|
192
|
+
return {
|
|
193
|
+
content: [{ type: "text", text: text || "No data available" }],
|
|
194
|
+
details: { count: movers.length },
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
// ── Tool: get_market_overview ────────────────────────────────────────────────
|
|
198
|
+
export const marketOverviewParams = Type.Object({});
|
|
199
|
+
export async function marketOverviewTool() {
|
|
200
|
+
const ticks = priceFeed.getAll();
|
|
201
|
+
if (ticks.length === 0) {
|
|
202
|
+
return {
|
|
203
|
+
content: [{ type: "text", text: "No market data available yet." }],
|
|
204
|
+
details: {},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
const totalCap = ticks.reduce((s, t) => s + t.marketCap, 0);
|
|
208
|
+
const avgChange = ticks.reduce((s, t) => s + t.change24h, 0) / ticks.length;
|
|
209
|
+
const gainers = ticks.filter(t => t.change24h > 0).length;
|
|
210
|
+
const losers = ticks.filter(t => t.change24h < 0).length;
|
|
211
|
+
const text = [
|
|
212
|
+
`Market Overview (${ticks.length} assets tracked)`,
|
|
213
|
+
`Total Market Cap: $${(totalCap / 1e9).toFixed(1)}B`,
|
|
214
|
+
`Avg 24h Change: ${avgChange >= 0 ? "+" : ""}${avgChange.toFixed(2)}%`,
|
|
215
|
+
`Gainers: ${gainers} | Losers: ${losers}`,
|
|
216
|
+
`---`,
|
|
217
|
+
...ticks.slice(0, 10).map(t => priceFeed.formatPrice(t)),
|
|
218
|
+
].join("\n");
|
|
219
|
+
return {
|
|
220
|
+
content: [{ type: "text", text }],
|
|
221
|
+
details: {
|
|
222
|
+
totalMarketCap: totalCap,
|
|
223
|
+
avgChange24h: avgChange,
|
|
224
|
+
gainers,
|
|
225
|
+
losers,
|
|
226
|
+
assets: ticks.length,
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=PriceFeed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PriceFeed.js","sourceRoot":"","sources":["../../src/tools/PriceFeed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Technical Analysis Toolkit — RSI, MACD, EMA, Bollinger Bands,
|
|
3
|
+
* moving averages, volume profile, and signal detection.
|
|
4
|
+
*
|
|
5
|
+
* All calculations are pure math on price arrays — no external API needed.
|
|
6
|
+
* Designed to be exposed as tools the AI can call autonomously.
|
|
7
|
+
*/
|
|
8
|
+
export interface OHLCV {
|
|
9
|
+
timestamp: number;
|
|
10
|
+
open: number;
|
|
11
|
+
high: number;
|
|
12
|
+
low: number;
|
|
13
|
+
close: number;
|
|
14
|
+
volume: number;
|
|
15
|
+
}
|
|
16
|
+
export interface AnalysisResult {
|
|
17
|
+
indicator: string;
|
|
18
|
+
value: number | number[];
|
|
19
|
+
signal?: "bullish" | "bearish" | "neutral";
|
|
20
|
+
metadata?: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
export declare function sma(prices: number[], period: number): number[];
|
|
23
|
+
export declare function ema(prices: number[], period: number): number[];
|
|
24
|
+
export declare function rsi(prices: number[], period?: number): number[];
|
|
25
|
+
export declare function macd(prices: number[], fast?: number, slow?: number, signal?: number): {
|
|
26
|
+
macd: number[];
|
|
27
|
+
signal: number[];
|
|
28
|
+
histogram: number[];
|
|
29
|
+
};
|
|
30
|
+
export declare function bollingerBands(prices: number[], period?: number, deviations?: number): {
|
|
31
|
+
upper: number[];
|
|
32
|
+
middle: number[];
|
|
33
|
+
lower: number[];
|
|
34
|
+
width: number[];
|
|
35
|
+
};
|
|
36
|
+
export declare function atr(highs: number[], lows: number[], closes: number[], period?: number): number[];
|
|
37
|
+
export declare function volumeProfile(volumes: number[], prices: number[], levels?: number): {
|
|
38
|
+
priceRange: string;
|
|
39
|
+
volume: number;
|
|
40
|
+
pct: number;
|
|
41
|
+
}[];
|
|
42
|
+
export declare function detectCrossovers(fast: number[], slow: number[]): {
|
|
43
|
+
type: "golden_cross" | "death_cross" | null;
|
|
44
|
+
index: number;
|
|
45
|
+
};
|
|
46
|
+
export declare function rsiSignal(rsiValues: number[]): AnalysisResult;
|
|
47
|
+
export declare function bollingerSignal(price: number, bands: {
|
|
48
|
+
upper: number[];
|
|
49
|
+
lower: number[];
|
|
50
|
+
}): AnalysisResult;
|
|
51
|
+
export declare function macdSignal(macdData: {
|
|
52
|
+
macd: number[];
|
|
53
|
+
signal: number[];
|
|
54
|
+
histogram: number[];
|
|
55
|
+
}): AnalysisResult;
|
|
56
|
+
export declare function fullAnalysis(ohlcv: OHLCV[]): AnalysisResult[];
|
|
57
|
+
export declare const analyzeTAParams: import("@sinclair/typebox").TObject<{
|
|
58
|
+
prices: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>;
|
|
59
|
+
highs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>>;
|
|
60
|
+
lows: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>>;
|
|
61
|
+
volumes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>>;
|
|
62
|
+
}>;
|
|
63
|
+
export declare const rsiParams: import("@sinclair/typebox").TObject<{
|
|
64
|
+
prices: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>;
|
|
65
|
+
period: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
66
|
+
}>;
|
|
67
|
+
export declare const macdParams: import("@sinclair/typebox").TObject<{
|
|
68
|
+
prices: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TNumber>;
|
|
69
|
+
fast: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
70
|
+
slow: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
71
|
+
signal: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
72
|
+
}>;
|
|
73
|
+
//# sourceMappingURL=TechnicalAnalysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TechnicalAnalysis.d.ts","sourceRoot":"","sources":["../../src/tools/TechnicalAnalysis.ts"],"names":[],"mappings":"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"}
|