@jellyos/agent 0.1.4 → 0.1.6
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.npm.md +212 -0
- package/bin/jellyos-mcp +26 -0
- package/dist/api/ExtensionAPI.d.ts +11 -0
- package/dist/cli.js +127 -49
- package/dist/index.d.ts +15 -2
- package/dist/index.js +13 -3
- package/dist/loader.d.ts +2 -9
- package/dist/loader.js +2 -1
- package/dist/mcp/entry.d.ts +2 -0
- package/dist/mcp/entry.js +71 -0
- package/dist/mcp/server.d.ts +31 -0
- package/dist/mcp/server.js +128 -0
- package/dist/models/ModelRegistry.d.ts +12 -1
- package/dist/models/ModelRegistry.js +105 -9
- package/dist/runner/AgentRunner.d.ts +19 -2
- package/dist/runner/AgentRunner.js +247 -17
- package/dist/runner/ModelClient.d.ts +10 -1
- package/dist/runner/ModelClient.js +79 -6
- package/dist/runner/SwarmRouter.d.ts +6 -6
- package/dist/runner/SwarmRouter.js +73 -24
- package/dist/runner/ToolDispatcher.d.ts +10 -0
- package/dist/runner/ToolDispatcher.js +106 -2
- package/dist/scheduler/AgentScheduler.d.ts +118 -0
- package/dist/scheduler/AgentScheduler.js +253 -0
- package/dist/session/ContextStore.d.ts +96 -0
- package/dist/session/ContextStore.js +207 -0
- package/dist/session/GoalManager.d.ts +101 -0
- package/dist/session/GoalManager.js +167 -0
- package/dist/session/MemoryStore.d.ts +48 -0
- package/dist/session/MemoryStore.js +166 -0
- package/dist/session/SessionManager.d.ts +45 -4
- package/dist/session/SessionManager.js +151 -8
- package/dist/telemetry/Tracer.d.ts +48 -0
- package/dist/telemetry/Tracer.js +102 -0
- package/dist/tools/MarketSentiment.d.ts +166 -0
- package/dist/tools/MarketSentiment.js +209 -0
- package/dist/tools/NewsSentiment.js +40 -13
- package/dist/tools/PriceFeed.d.ts +2 -0
- package/dist/tools/PriceFeed.js +79 -27
- package/dist/tools/TechnicalAnalysis.d.ts +37 -0
- package/dist/tools/TechnicalAnalysis.js +85 -0
- package/dist/tui/App.d.ts +4 -3
- package/dist/tui/App.js +346 -119
- package/dist/tui/ModelSelector.d.ts +22 -0
- package/dist/tui/ModelSelector.js +86 -0
- package/dist/tui/REPL.d.ts +2 -1
- package/dist/tui/REPL.js +11 -6
- package/package.json +10 -6
- package/dist/api/ExtensionAPI.d.ts.map +0 -1
- package/dist/api/ExtensionAPI.js.map +0 -1
- package/dist/api/Registry.d.ts.map +0 -1
- package/dist/api/Registry.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js.map +0 -1
- package/dist/models/CostTracker.d.ts.map +0 -1
- package/dist/models/CostTracker.js.map +0 -1
- package/dist/models/ModelRegistry.d.ts.map +0 -1
- package/dist/models/ModelRegistry.js.map +0 -1
- package/dist/models/index.d.ts.map +0 -1
- package/dist/models/index.js.map +0 -1
- package/dist/runner/AgentRunner.d.ts.map +0 -1
- package/dist/runner/AgentRunner.js.map +0 -1
- package/dist/runner/ModelClient.d.ts.map +0 -1
- package/dist/runner/ModelClient.js.map +0 -1
- package/dist/runner/SwarmRouter.d.ts.map +0 -1
- package/dist/runner/SwarmRouter.js.map +0 -1
- package/dist/runner/ToolDispatcher.d.ts.map +0 -1
- package/dist/runner/ToolDispatcher.js.map +0 -1
- package/dist/session/SessionManager.d.ts.map +0 -1
- package/dist/session/SessionManager.js.map +0 -1
- package/dist/tools/NewsSentiment.d.ts.map +0 -1
- package/dist/tools/NewsSentiment.js.map +0 -1
- package/dist/tools/PriceFeed.d.ts.map +0 -1
- package/dist/tools/PriceFeed.js.map +0 -1
- package/dist/tools/TechnicalAnalysis.d.ts.map +0 -1
- package/dist/tools/TechnicalAnalysis.js.map +0 -1
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js.map +0 -1
- package/dist/tui/App.d.ts.map +0 -1
- package/dist/tui/App.js.map +0 -1
- package/dist/tui/REPL.d.ts.map +0 -1
- package/dist/tui/REPL.js.map +0 -1
- package/dist/tui/StatusBar.d.ts.map +0 -1
- package/dist/tui/StatusBar.js.map +0 -1
- package/dist/tui/theme.d.ts.map +0 -1
- package/dist/tui/theme.js.map +0 -1
|
@@ -269,4 +269,89 @@ export const macdParams = Type.Object({
|
|
|
269
269
|
slow: Type.Optional(Type.Number({ default: 26 })),
|
|
270
270
|
signal: Type.Optional(Type.Number({ default: 9 })),
|
|
271
271
|
});
|
|
272
|
+
// ── Tool: get_candles (#18 — fetch real OHLCV data from Binance) ─────────────
|
|
273
|
+
export const getCandlesParams = Type.Object({
|
|
274
|
+
symbol: Type.String({ description: "Crypto symbol e.g. BTC, ETH, SOL" }),
|
|
275
|
+
interval: Type.Optional(Type.String({ description: "Candle interval: 1m 5m 15m 1h 4h 1d (default: 1h)" })),
|
|
276
|
+
limit: Type.Optional(Type.Number({ description: "Number of candles 1-500 (default: 100)" })),
|
|
277
|
+
analyze: Type.Optional(Type.Boolean({ description: "Run full TA analysis on fetched candles (default: true)" })),
|
|
278
|
+
});
|
|
279
|
+
export async function getCandlesTool(_id, params) {
|
|
280
|
+
const symbol = params.symbol.toUpperCase().replace(/USDT$/, "") + "USDT";
|
|
281
|
+
const interval = params.interval ?? "1h";
|
|
282
|
+
const limit = Math.min(Math.max(params.limit ?? 100, 10), 500);
|
|
283
|
+
const analyze = params.analyze !== false;
|
|
284
|
+
const VALID_INTERVALS = new Set(["1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "6h", "8h", "12h", "1d", "3d", "1w", "1M"]);
|
|
285
|
+
if (!VALID_INTERVALS.has(interval)) {
|
|
286
|
+
return {
|
|
287
|
+
content: [{ type: "text", text: `Invalid interval "${interval}". Valid: ${[...VALID_INTERVALS].join(", ")}` }],
|
|
288
|
+
details: {},
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
const res = await fetch(`https://api.binance.com/api/v3/klines?symbol=${symbol}&interval=${interval}&limit=${limit}`, { signal: AbortSignal.timeout(12_000), headers: { "User-Agent": "JellyOS/1.0" } });
|
|
293
|
+
if (!res.ok) {
|
|
294
|
+
return {
|
|
295
|
+
content: [{ type: "text", text: `Binance API error ${res.status} for ${symbol}. Check symbol.` }],
|
|
296
|
+
details: {},
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
const raw = await res.json();
|
|
300
|
+
const candles = raw.map(c => ({
|
|
301
|
+
timestamp: c[0],
|
|
302
|
+
open: parseFloat(c[1]),
|
|
303
|
+
high: parseFloat(c[2]),
|
|
304
|
+
low: parseFloat(c[3]),
|
|
305
|
+
close: parseFloat(c[4]),
|
|
306
|
+
volume: parseFloat(c[5]),
|
|
307
|
+
}));
|
|
308
|
+
const latest = candles[candles.length - 1];
|
|
309
|
+
const oldest = candles[0];
|
|
310
|
+
const chgPct = ((latest.close - oldest.close) / oldest.close * 100).toFixed(2);
|
|
311
|
+
const priceStr = latest.close < 1
|
|
312
|
+
? `$${latest.close.toFixed(6)}`
|
|
313
|
+
: `$${latest.close.toLocaleString(undefined, { maximumFractionDigits: 2 })}`;
|
|
314
|
+
const lines = [
|
|
315
|
+
`${symbol} | ${interval} | ${candles.length} candles`,
|
|
316
|
+
`Close: ${priceStr} Period change: ${parseFloat(chgPct) >= 0 ? "+" : ""}${chgPct}%`,
|
|
317
|
+
`High: $${latest.high.toLocaleString()} Low: $${latest.low.toLocaleString()}`,
|
|
318
|
+
`Volume (last bar): ${latest.volume.toLocaleString()}`,
|
|
319
|
+
];
|
|
320
|
+
if (analyze && candles.length >= 30) {
|
|
321
|
+
const results = fullAnalysis(candles);
|
|
322
|
+
const summary = results.find(r => r.indicator === "SUMMARY");
|
|
323
|
+
lines.push("", "── Technical Analysis ──");
|
|
324
|
+
for (const r of results) {
|
|
325
|
+
if (r.indicator === "SUMMARY")
|
|
326
|
+
continue;
|
|
327
|
+
const icon = r.signal === "bullish" ? "🟢" : r.signal === "bearish" ? "🔴" : "⚪";
|
|
328
|
+
const val = typeof r.value === "number" ? r.value.toFixed(2) : String(r.value);
|
|
329
|
+
const meta = r.metadata?.condition ? ` (${String(r.metadata.condition)})` : "";
|
|
330
|
+
lines.push(` ${icon} ${r.indicator.padEnd(16)} ${val}${meta}`);
|
|
331
|
+
}
|
|
332
|
+
if (summary) {
|
|
333
|
+
const icon = summary.signal === "bullish" ? "🟢" : summary.signal === "bearish" ? "🔴" : "⚪";
|
|
334
|
+
lines.push("", `${icon} OVERALL: ${String(summary.signal).toUpperCase()} — ${String(summary.metadata?.bullish_indicators ?? 0)} bull / ${String(summary.metadata?.bearish_indicators ?? 0)} bear signals`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
else if (analyze && candles.length < 30) {
|
|
338
|
+
lines.push(`(need 30+ candles for TA, got ${candles.length} — increase limit)`);
|
|
339
|
+
}
|
|
340
|
+
return {
|
|
341
|
+
content: [{ type: "text", text: lines.join("\n") }],
|
|
342
|
+
details: {
|
|
343
|
+
symbol, interval, candleCount: candles.length,
|
|
344
|
+
latest: { close: latest.close, high: latest.high, low: latest.low, volume: latest.volume },
|
|
345
|
+
priceChangePercent: parseFloat(chgPct),
|
|
346
|
+
},
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
catch (e) {
|
|
350
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
351
|
+
return {
|
|
352
|
+
content: [{ type: "text", text: `Failed to fetch candles for ${symbol}: ${msg}` }],
|
|
353
|
+
details: {},
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
}
|
|
272
357
|
//# sourceMappingURL=TechnicalAnalysis.js.map
|
package/dist/tui/App.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* App — root Ink component.
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Multi-pane TUI with context bar, syntax-highlighted tool output,
|
|
4
|
+
* live side panel with ticker/prices, and command palette triggered via /palette.
|
|
5
5
|
*/
|
|
6
6
|
import { Registry } from "../api/Registry.js";
|
|
7
7
|
import type { ModelRegistry } from "../models/ModelRegistry.js";
|
|
@@ -15,6 +15,7 @@ export interface AppProps {
|
|
|
15
15
|
costTracker?: CostTracker;
|
|
16
16
|
onNotifyReady?: (fn: (msg: string) => void) => void;
|
|
17
17
|
onStatusReady?: (fn: (key: string, val: string) => void) => void;
|
|
18
|
+
onModelSelectorReady?: (fn: (query?: string) => void) => void;
|
|
18
19
|
}
|
|
19
|
-
export declare function App({ registry, systemPrompt, effectLevel: initialEffect, chain: initialChain, modelReg, costTracker, onNotifyReady, onStatusReady, }: AppProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare function App({ registry, systemPrompt, effectLevel: initialEffect, chain: initialChain, modelReg, costTracker, onNotifyReady, onStatusReady, onModelSelectorReady, }: AppProps): import("react/jsx-runtime").JSX.Element;
|
|
20
21
|
//# sourceMappingURL=App.d.ts.map
|