jcc_hyper_tool 0.1.3 → 0.1.5

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 (102) hide show
  1. package/README.md +53 -22
  2. package/dist/advisor/actionRunner.d.ts +29 -0
  3. package/dist/advisor/actionRunner.d.ts.map +1 -0
  4. package/dist/advisor/actionRunner.js +163 -0
  5. package/dist/advisor/actionRunner.js.map +1 -0
  6. package/dist/advisor/actionSchema.d.ts +417 -0
  7. package/dist/advisor/actionSchema.d.ts.map +1 -0
  8. package/dist/advisor/actionSchema.js +90 -0
  9. package/dist/advisor/actionSchema.js.map +1 -0
  10. package/dist/advisor/adviseEngine.d.ts +43 -0
  11. package/dist/advisor/adviseEngine.d.ts.map +1 -0
  12. package/dist/advisor/adviseEngine.js +91 -0
  13. package/dist/advisor/adviseEngine.js.map +1 -0
  14. package/dist/advisor/contextBuilder.d.ts +34 -0
  15. package/dist/advisor/contextBuilder.d.ts.map +1 -0
  16. package/dist/advisor/contextBuilder.js +134 -0
  17. package/dist/advisor/contextBuilder.js.map +1 -0
  18. package/dist/advisor/deepseekClient.d.ts +26 -0
  19. package/dist/advisor/deepseekClient.d.ts.map +1 -0
  20. package/dist/advisor/deepseekClient.js +96 -0
  21. package/dist/advisor/deepseekClient.js.map +1 -0
  22. package/dist/advisor/guards.d.ts +17 -0
  23. package/dist/advisor/guards.d.ts.map +1 -0
  24. package/dist/advisor/guards.js +71 -0
  25. package/dist/advisor/guards.js.map +1 -0
  26. package/dist/advisor/promptTemplate.d.ts +5 -0
  27. package/dist/advisor/promptTemplate.d.ts.map +1 -0
  28. package/dist/advisor/promptTemplate.js +78 -0
  29. package/dist/advisor/promptTemplate.js.map +1 -0
  30. package/dist/advisor/sessionLog.d.ts +41 -0
  31. package/dist/advisor/sessionLog.d.ts.map +1 -0
  32. package/dist/advisor/sessionLog.js +7 -0
  33. package/dist/advisor/sessionLog.js.map +1 -0
  34. package/dist/cli/advisorCli.d.ts +3 -0
  35. package/dist/cli/advisorCli.d.ts.map +1 -0
  36. package/dist/cli/advisorCli.js +354 -0
  37. package/dist/cli/advisorCli.js.map +1 -0
  38. package/dist/cli/index.js +6 -3
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/cli/strategyCli.js +1 -1
  41. package/dist/cli/tradingCli.d.ts.map +1 -1
  42. package/dist/cli/tradingCli.js +3 -1
  43. package/dist/cli/tradingCli.js.map +1 -1
  44. package/dist/core/cliBin.d.ts +8 -0
  45. package/dist/core/cliBin.d.ts.map +1 -0
  46. package/dist/core/cliBin.js +15 -0
  47. package/dist/core/cliBin.js.map +1 -0
  48. package/dist/core/errorFormat.d.ts +7 -0
  49. package/dist/core/errorFormat.d.ts.map +1 -0
  50. package/dist/core/errorFormat.js +59 -0
  51. package/dist/core/errorFormat.js.map +1 -0
  52. package/dist/core/errors.d.ts +2 -1
  53. package/dist/core/errors.d.ts.map +1 -1
  54. package/dist/core/errors.js +3 -1
  55. package/dist/core/errors.js.map +1 -1
  56. package/dist/core/hyperliquid/client.d.ts +3 -0
  57. package/dist/core/hyperliquid/client.d.ts.map +1 -1
  58. package/dist/core/hyperliquid/client.js +31 -21
  59. package/dist/core/hyperliquid/client.js.map +1 -1
  60. package/dist/core/hyperliquid/exchange.d.ts +3 -0
  61. package/dist/core/hyperliquid/exchange.d.ts.map +1 -1
  62. package/dist/core/hyperliquid/exchange.js +31 -21
  63. package/dist/core/hyperliquid/exchange.js.map +1 -1
  64. package/dist/core/hyperliquid/exchangeParse.d.ts +3 -0
  65. package/dist/core/hyperliquid/exchangeParse.d.ts.map +1 -1
  66. package/dist/core/hyperliquid/exchangeParse.js +62 -0
  67. package/dist/core/hyperliquid/exchangeParse.js.map +1 -1
  68. package/dist/core/hyperliquid/httpRequest.d.ts +36 -0
  69. package/dist/core/hyperliquid/httpRequest.d.ts.map +1 -0
  70. package/dist/core/hyperliquid/httpRequest.js +171 -0
  71. package/dist/core/hyperliquid/httpRequest.js.map +1 -0
  72. package/dist/core/hyperliquid/watchOrders.d.ts.map +1 -1
  73. package/dist/core/hyperliquid/watchOrders.js +2 -1
  74. package/dist/core/hyperliquid/watchOrders.js.map +1 -1
  75. package/dist/core/state/gcTradeState.js +1 -1
  76. package/dist/core/state/gcTradeState.js.map +1 -1
  77. package/dist/core/state/openOrdersAgg.d.ts +13 -0
  78. package/dist/core/state/openOrdersAgg.d.ts.map +1 -0
  79. package/dist/core/state/openOrdersAgg.js +50 -0
  80. package/dist/core/state/openOrdersAgg.js.map +1 -0
  81. package/dist/core/state/profileStore.d.ts +6 -0
  82. package/dist/core/state/profileStore.d.ts.map +1 -0
  83. package/dist/core/state/profileStore.js +30 -0
  84. package/dist/core/state/profileStore.js.map +1 -0
  85. package/dist/core/state/runCancelOpen.js +3 -3
  86. package/dist/core/state/runCancelOpen.js.map +1 -1
  87. package/dist/core/state/runReconcile.d.ts.map +1 -1
  88. package/dist/core/state/runReconcile.js +43 -18
  89. package/dist/core/state/runReconcile.js.map +1 -1
  90. package/dist/core/state/schema.d.ts +148 -78
  91. package/dist/core/state/schema.d.ts.map +1 -1
  92. package/dist/core/state/schema.js +11 -0
  93. package/dist/core/state/schema.js.map +1 -1
  94. package/dist/core/state/statePaths.d.ts +1 -0
  95. package/dist/core/state/statePaths.d.ts.map +1 -1
  96. package/dist/core/state/statePaths.js +4 -0
  97. package/dist/core/state/statePaths.js.map +1 -1
  98. package/dist/core/state/store.js +1 -1
  99. package/dist/core/state/store.js.map +1 -1
  100. package/dist/daemon/index.js +3 -3
  101. package/dist/daemon/index.js.map +1 -1
  102. package/package.json +1 -1
@@ -0,0 +1,417 @@
1
+ import { z } from "zod";
2
+ export declare const PriceTargetSchema: z.ZodObject<{
3
+ level: z.ZodNumber;
4
+ label: z.ZodString;
5
+ time_est: z.ZodString;
6
+ probability: z.ZodOptional<z.ZodNumber>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ level: number;
9
+ label: string;
10
+ time_est: string;
11
+ probability?: number | undefined;
12
+ }, {
13
+ level: number;
14
+ label: string;
15
+ time_est: string;
16
+ probability?: number | undefined;
17
+ }>;
18
+ export declare const AnalysisSchema: z.ZodObject<{
19
+ indicators: z.ZodOptional<z.ZodString>;
20
+ elliott_wave: z.ZodOptional<z.ZodString>;
21
+ chan_theory: z.ZodOptional<z.ZodString>;
22
+ price_targets: z.ZodOptional<z.ZodArray<z.ZodObject<{
23
+ level: z.ZodNumber;
24
+ label: z.ZodString;
25
+ time_est: z.ZodString;
26
+ probability: z.ZodOptional<z.ZodNumber>;
27
+ }, "strip", z.ZodTypeAny, {
28
+ level: number;
29
+ label: string;
30
+ time_est: string;
31
+ probability?: number | undefined;
32
+ }, {
33
+ level: number;
34
+ label: string;
35
+ time_est: string;
36
+ probability?: number | undefined;
37
+ }>, "many">>;
38
+ time_horizon: z.ZodOptional<z.ZodString>;
39
+ }, "strip", z.ZodTypeAny, {
40
+ indicators?: string | undefined;
41
+ elliott_wave?: string | undefined;
42
+ chan_theory?: string | undefined;
43
+ price_targets?: {
44
+ level: number;
45
+ label: string;
46
+ time_est: string;
47
+ probability?: number | undefined;
48
+ }[] | undefined;
49
+ time_horizon?: string | undefined;
50
+ }, {
51
+ indicators?: string | undefined;
52
+ elliott_wave?: string | undefined;
53
+ chan_theory?: string | undefined;
54
+ price_targets?: {
55
+ level: number;
56
+ label: string;
57
+ time_est: string;
58
+ probability?: number | undefined;
59
+ }[] | undefined;
60
+ time_horizon?: string | undefined;
61
+ }>;
62
+ export type AdvisorAnalysis = z.infer<typeof AnalysisSchema>;
63
+ export type PriceTarget = z.infer<typeof PriceTargetSchema>;
64
+ export declare const AdvisorActionSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject<{
65
+ analysis: z.ZodOptional<z.ZodObject<{
66
+ indicators: z.ZodOptional<z.ZodString>;
67
+ elliott_wave: z.ZodOptional<z.ZodString>;
68
+ chan_theory: z.ZodOptional<z.ZodString>;
69
+ price_targets: z.ZodOptional<z.ZodArray<z.ZodObject<{
70
+ level: z.ZodNumber;
71
+ label: z.ZodString;
72
+ time_est: z.ZodString;
73
+ probability: z.ZodOptional<z.ZodNumber>;
74
+ }, "strip", z.ZodTypeAny, {
75
+ level: number;
76
+ label: string;
77
+ time_est: string;
78
+ probability?: number | undefined;
79
+ }, {
80
+ level: number;
81
+ label: string;
82
+ time_est: string;
83
+ probability?: number | undefined;
84
+ }>, "many">>;
85
+ time_horizon: z.ZodOptional<z.ZodString>;
86
+ }, "strip", z.ZodTypeAny, {
87
+ indicators?: string | undefined;
88
+ elliott_wave?: string | undefined;
89
+ chan_theory?: string | undefined;
90
+ price_targets?: {
91
+ level: number;
92
+ label: string;
93
+ time_est: string;
94
+ probability?: number | undefined;
95
+ }[] | undefined;
96
+ time_horizon?: string | undefined;
97
+ }, {
98
+ indicators?: string | undefined;
99
+ elliott_wave?: string | undefined;
100
+ chan_theory?: string | undefined;
101
+ price_targets?: {
102
+ level: number;
103
+ label: string;
104
+ time_est: string;
105
+ probability?: number | undefined;
106
+ }[] | undefined;
107
+ time_horizon?: string | undefined;
108
+ }>>;
109
+ action: z.ZodLiteral<"wait">;
110
+ reason: z.ZodString;
111
+ confidence: z.ZodNumber;
112
+ }, "strip", z.ZodTypeAny, {
113
+ action: "wait";
114
+ reason: string;
115
+ confidence: number;
116
+ analysis?: {
117
+ indicators?: string | undefined;
118
+ elliott_wave?: string | undefined;
119
+ chan_theory?: string | undefined;
120
+ price_targets?: {
121
+ level: number;
122
+ label: string;
123
+ time_est: string;
124
+ probability?: number | undefined;
125
+ }[] | undefined;
126
+ time_horizon?: string | undefined;
127
+ } | undefined;
128
+ }, {
129
+ action: "wait";
130
+ reason: string;
131
+ confidence: number;
132
+ analysis?: {
133
+ indicators?: string | undefined;
134
+ elliott_wave?: string | undefined;
135
+ chan_theory?: string | undefined;
136
+ price_targets?: {
137
+ level: number;
138
+ label: string;
139
+ time_est: string;
140
+ probability?: number | undefined;
141
+ }[] | undefined;
142
+ time_horizon?: string | undefined;
143
+ } | undefined;
144
+ }>, z.ZodObject<{
145
+ analysis: z.ZodOptional<z.ZodObject<{
146
+ indicators: z.ZodOptional<z.ZodString>;
147
+ elliott_wave: z.ZodOptional<z.ZodString>;
148
+ chan_theory: z.ZodOptional<z.ZodString>;
149
+ price_targets: z.ZodOptional<z.ZodArray<z.ZodObject<{
150
+ level: z.ZodNumber;
151
+ label: z.ZodString;
152
+ time_est: z.ZodString;
153
+ probability: z.ZodOptional<z.ZodNumber>;
154
+ }, "strip", z.ZodTypeAny, {
155
+ level: number;
156
+ label: string;
157
+ time_est: string;
158
+ probability?: number | undefined;
159
+ }, {
160
+ level: number;
161
+ label: string;
162
+ time_est: string;
163
+ probability?: number | undefined;
164
+ }>, "many">>;
165
+ time_horizon: z.ZodOptional<z.ZodString>;
166
+ }, "strip", z.ZodTypeAny, {
167
+ indicators?: string | undefined;
168
+ elliott_wave?: string | undefined;
169
+ chan_theory?: string | undefined;
170
+ price_targets?: {
171
+ level: number;
172
+ label: string;
173
+ time_est: string;
174
+ probability?: number | undefined;
175
+ }[] | undefined;
176
+ time_horizon?: string | undefined;
177
+ }, {
178
+ indicators?: string | undefined;
179
+ elliott_wave?: string | undefined;
180
+ chan_theory?: string | undefined;
181
+ price_targets?: {
182
+ level: number;
183
+ label: string;
184
+ time_est: string;
185
+ probability?: number | undefined;
186
+ }[] | undefined;
187
+ time_horizon?: string | undefined;
188
+ }>>;
189
+ action: z.ZodLiteral<"open_with_bracket">;
190
+ side: z.ZodEnum<["buy", "sell"]>;
191
+ limit_px: z.ZodNumber;
192
+ sz: z.ZodNumber;
193
+ tp_px: z.ZodNumber;
194
+ sl_px: z.ZodNumber;
195
+ is_market: z.ZodDefault<z.ZodBoolean>;
196
+ protection_limit_px: z.ZodOptional<z.ZodNumber>;
197
+ reason: z.ZodString;
198
+ confidence: z.ZodNumber;
199
+ risk_flags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
200
+ }, "strip", z.ZodTypeAny, {
201
+ action: "open_with_bracket";
202
+ reason: string;
203
+ confidence: number;
204
+ side: "buy" | "sell";
205
+ limit_px: number;
206
+ sz: number;
207
+ tp_px: number;
208
+ sl_px: number;
209
+ is_market: boolean;
210
+ risk_flags: string[];
211
+ analysis?: {
212
+ indicators?: string | undefined;
213
+ elliott_wave?: string | undefined;
214
+ chan_theory?: string | undefined;
215
+ price_targets?: {
216
+ level: number;
217
+ label: string;
218
+ time_est: string;
219
+ probability?: number | undefined;
220
+ }[] | undefined;
221
+ time_horizon?: string | undefined;
222
+ } | undefined;
223
+ protection_limit_px?: number | undefined;
224
+ }, {
225
+ action: "open_with_bracket";
226
+ reason: string;
227
+ confidence: number;
228
+ side: "buy" | "sell";
229
+ limit_px: number;
230
+ sz: number;
231
+ tp_px: number;
232
+ sl_px: number;
233
+ analysis?: {
234
+ indicators?: string | undefined;
235
+ elliott_wave?: string | undefined;
236
+ chan_theory?: string | undefined;
237
+ price_targets?: {
238
+ level: number;
239
+ label: string;
240
+ time_est: string;
241
+ probability?: number | undefined;
242
+ }[] | undefined;
243
+ time_horizon?: string | undefined;
244
+ } | undefined;
245
+ is_market?: boolean | undefined;
246
+ protection_limit_px?: number | undefined;
247
+ risk_flags?: string[] | undefined;
248
+ }>, z.ZodObject<{
249
+ analysis: z.ZodOptional<z.ZodObject<{
250
+ indicators: z.ZodOptional<z.ZodString>;
251
+ elliott_wave: z.ZodOptional<z.ZodString>;
252
+ chan_theory: z.ZodOptional<z.ZodString>;
253
+ price_targets: z.ZodOptional<z.ZodArray<z.ZodObject<{
254
+ level: z.ZodNumber;
255
+ label: z.ZodString;
256
+ time_est: z.ZodString;
257
+ probability: z.ZodOptional<z.ZodNumber>;
258
+ }, "strip", z.ZodTypeAny, {
259
+ level: number;
260
+ label: string;
261
+ time_est: string;
262
+ probability?: number | undefined;
263
+ }, {
264
+ level: number;
265
+ label: string;
266
+ time_est: string;
267
+ probability?: number | undefined;
268
+ }>, "many">>;
269
+ time_horizon: z.ZodOptional<z.ZodString>;
270
+ }, "strip", z.ZodTypeAny, {
271
+ indicators?: string | undefined;
272
+ elliott_wave?: string | undefined;
273
+ chan_theory?: string | undefined;
274
+ price_targets?: {
275
+ level: number;
276
+ label: string;
277
+ time_est: string;
278
+ probability?: number | undefined;
279
+ }[] | undefined;
280
+ time_horizon?: string | undefined;
281
+ }, {
282
+ indicators?: string | undefined;
283
+ elliott_wave?: string | undefined;
284
+ chan_theory?: string | undefined;
285
+ price_targets?: {
286
+ level: number;
287
+ label: string;
288
+ time_est: string;
289
+ probability?: number | undefined;
290
+ }[] | undefined;
291
+ time_horizon?: string | undefined;
292
+ }>>;
293
+ action: z.ZodLiteral<"close_position">;
294
+ method: z.ZodEnum<["market", "limit"]>;
295
+ limit_px: z.ZodOptional<z.ZodNumber>;
296
+ reason: z.ZodString;
297
+ confidence: z.ZodNumber;
298
+ }, "strip", z.ZodTypeAny, {
299
+ action: "close_position";
300
+ reason: string;
301
+ confidence: number;
302
+ method: "market" | "limit";
303
+ analysis?: {
304
+ indicators?: string | undefined;
305
+ elliott_wave?: string | undefined;
306
+ chan_theory?: string | undefined;
307
+ price_targets?: {
308
+ level: number;
309
+ label: string;
310
+ time_est: string;
311
+ probability?: number | undefined;
312
+ }[] | undefined;
313
+ time_horizon?: string | undefined;
314
+ } | undefined;
315
+ limit_px?: number | undefined;
316
+ }, {
317
+ action: "close_position";
318
+ reason: string;
319
+ confidence: number;
320
+ method: "market" | "limit";
321
+ analysis?: {
322
+ indicators?: string | undefined;
323
+ elliott_wave?: string | undefined;
324
+ chan_theory?: string | undefined;
325
+ price_targets?: {
326
+ level: number;
327
+ label: string;
328
+ time_est: string;
329
+ probability?: number | undefined;
330
+ }[] | undefined;
331
+ time_horizon?: string | undefined;
332
+ } | undefined;
333
+ limit_px?: number | undefined;
334
+ }>, z.ZodObject<{
335
+ analysis: z.ZodOptional<z.ZodObject<{
336
+ indicators: z.ZodOptional<z.ZodString>;
337
+ elliott_wave: z.ZodOptional<z.ZodString>;
338
+ chan_theory: z.ZodOptional<z.ZodString>;
339
+ price_targets: z.ZodOptional<z.ZodArray<z.ZodObject<{
340
+ level: z.ZodNumber;
341
+ label: z.ZodString;
342
+ time_est: z.ZodString;
343
+ probability: z.ZodOptional<z.ZodNumber>;
344
+ }, "strip", z.ZodTypeAny, {
345
+ level: number;
346
+ label: string;
347
+ time_est: string;
348
+ probability?: number | undefined;
349
+ }, {
350
+ level: number;
351
+ label: string;
352
+ time_est: string;
353
+ probability?: number | undefined;
354
+ }>, "many">>;
355
+ time_horizon: z.ZodOptional<z.ZodString>;
356
+ }, "strip", z.ZodTypeAny, {
357
+ indicators?: string | undefined;
358
+ elliott_wave?: string | undefined;
359
+ chan_theory?: string | undefined;
360
+ price_targets?: {
361
+ level: number;
362
+ label: string;
363
+ time_est: string;
364
+ probability?: number | undefined;
365
+ }[] | undefined;
366
+ time_horizon?: string | undefined;
367
+ }, {
368
+ indicators?: string | undefined;
369
+ elliott_wave?: string | undefined;
370
+ chan_theory?: string | undefined;
371
+ price_targets?: {
372
+ level: number;
373
+ label: string;
374
+ time_est: string;
375
+ probability?: number | undefined;
376
+ }[] | undefined;
377
+ time_horizon?: string | undefined;
378
+ }>>;
379
+ action: z.ZodLiteral<"cancel_all">;
380
+ reason: z.ZodString;
381
+ }, "strip", z.ZodTypeAny, {
382
+ action: "cancel_all";
383
+ reason: string;
384
+ analysis?: {
385
+ indicators?: string | undefined;
386
+ elliott_wave?: string | undefined;
387
+ chan_theory?: string | undefined;
388
+ price_targets?: {
389
+ level: number;
390
+ label: string;
391
+ time_est: string;
392
+ probability?: number | undefined;
393
+ }[] | undefined;
394
+ time_horizon?: string | undefined;
395
+ } | undefined;
396
+ }, {
397
+ action: "cancel_all";
398
+ reason: string;
399
+ analysis?: {
400
+ indicators?: string | undefined;
401
+ elliott_wave?: string | undefined;
402
+ chan_theory?: string | undefined;
403
+ price_targets?: {
404
+ level: number;
405
+ label: string;
406
+ time_est: string;
407
+ probability?: number | undefined;
408
+ }[] | undefined;
409
+ time_horizon?: string | undefined;
410
+ } | undefined;
411
+ }>]>;
412
+ export type AdvisorAction = z.infer<typeof AdvisorActionSchema>;
413
+ /** Bracket and non–is_market paths need an explicit protection limit. */
414
+ export declare function refineBracketProtection(action: AdvisorAction): AdvisorAction;
415
+ export declare function extractJsonObjectFromModelText(raw: string): string;
416
+ export declare function parseAdvisorActionFromModelText(raw: string): AdvisorAction;
417
+ //# sourceMappingURL=actionSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionSchema.d.ts","sourceRoot":"","sources":["../../src/advisor/actionSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMzB,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC7D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAI5D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkC9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAW5E;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUlE;AAED,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAc1E"}
@@ -0,0 +1,90 @@
1
+ import { z } from "zod";
2
+ export const PriceTargetSchema = z.object({
3
+ level: z.number(),
4
+ label: z.string(),
5
+ time_est: z.string(),
6
+ probability: z.number().min(0).max(1).optional(),
7
+ });
8
+ export const AnalysisSchema = z.object({
9
+ indicators: z.string().optional(),
10
+ elliott_wave: z.string().optional(),
11
+ chan_theory: z.string().optional(),
12
+ price_targets: z.array(PriceTargetSchema).optional(),
13
+ time_horizon: z.string().optional(),
14
+ });
15
+ const analysisField = { analysis: AnalysisSchema.optional() };
16
+ export const AdvisorActionSchema = z.discriminatedUnion("action", [
17
+ z.object({
18
+ action: z.literal("wait"),
19
+ reason: z.string(),
20
+ confidence: z.number().min(0).max(1),
21
+ ...analysisField,
22
+ }),
23
+ z.object({
24
+ action: z.literal("open_with_bracket"),
25
+ side: z.enum(["buy", "sell"]),
26
+ limit_px: z.number().positive(),
27
+ sz: z.number().positive(),
28
+ tp_px: z.number().positive(),
29
+ sl_px: z.number().positive(),
30
+ is_market: z.boolean().default(true),
31
+ protection_limit_px: z.number().positive().optional(),
32
+ reason: z.string(),
33
+ confidence: z.number().min(0).max(1),
34
+ risk_flags: z.array(z.string()).default([]),
35
+ ...analysisField,
36
+ }),
37
+ z.object({
38
+ action: z.literal("close_position"),
39
+ method: z.enum(["market", "limit"]),
40
+ limit_px: z.number().positive().optional(),
41
+ reason: z.string(),
42
+ confidence: z.number().min(0).max(1),
43
+ ...analysisField,
44
+ }),
45
+ z.object({
46
+ action: z.literal("cancel_all"),
47
+ reason: z.string(),
48
+ ...analysisField,
49
+ }),
50
+ ]);
51
+ /** Bracket and non–is_market paths need an explicit protection limit. */
52
+ export function refineBracketProtection(action) {
53
+ if (action.action !== "open_with_bracket") {
54
+ return action;
55
+ }
56
+ if (action.is_market) {
57
+ return action;
58
+ }
59
+ if (action.protection_limit_px === undefined || !Number.isFinite(action.protection_limit_px)) {
60
+ throw new Error("open_with_bracket with is_market=false requires protection_limit_px");
61
+ }
62
+ return action;
63
+ }
64
+ export function extractJsonObjectFromModelText(raw) {
65
+ const t = raw.trim();
66
+ const fence = /^```(?:json)?\s*([\s\S]*?)```$/im.exec(t);
67
+ const body = fence ? fence[1].trim() : t;
68
+ const start = body.indexOf("{");
69
+ const end = body.lastIndexOf("}");
70
+ if (start < 0 || end <= start) {
71
+ throw new Error("Model output did not contain a JSON object");
72
+ }
73
+ return body.slice(start, end + 1);
74
+ }
75
+ export function parseAdvisorActionFromModelText(raw) {
76
+ const json = extractJsonObjectFromModelText(raw);
77
+ const obj = JSON.parse(json);
78
+ const parsed = AdvisorActionSchema.safeParse(obj);
79
+ if (!parsed.success) {
80
+ throw new Error(parsed.error.message);
81
+ }
82
+ const data = parsed.data;
83
+ if (data.action === "close_position" && data.method === "limit") {
84
+ if (data.limit_px === undefined || !Number.isFinite(data.limit_px)) {
85
+ throw new Error("close_position with method=limit requires limit_px");
86
+ }
87
+ }
88
+ return refineBracketProtection(data);
89
+ }
90
+ //# sourceMappingURL=actionSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionSchema.js","sourceRoot":"","sources":["../../src/advisor/actionSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { ChatTurn, DeepseekChatResult } from "./deepseekClient.js";
2
+ import type { AdvisorAction } from "./actionSchema.js";
3
+ import type { UserProfile } from "../core/state/schema.js";
4
+ import { type GlobalCliPrefixedArgs } from "./actionRunner.js";
5
+ import type { AdvisorMarketSnapshot } from "./contextBuilder.js";
6
+ export type AdvisorModelTurnResult = {
7
+ /** Messages for the next API call (assistant entries include `reasoning_content` when present). */
8
+ messages: ChatTurn[];
9
+ action: AdvisorAction;
10
+ lastAssistant: DeepseekChatResult;
11
+ };
12
+ /**
13
+ * Calls DeepSeek; validates JSON/Zod; on failure appends repair instructions (bounded retries).
14
+ */
15
+ export declare function runAdvisorModelTurnWithRepair(params: {
16
+ messages: ChatTurn[];
17
+ apiKey: string;
18
+ fetchImpl?: typeof fetch;
19
+ /** Extra attempts after the first failure (2 retries → 3 tries total). */
20
+ maxRepair?: number;
21
+ }): Promise<AdvisorModelTurnResult>;
22
+ export type ExecuteAdvisorResult = {
23
+ exitCode: number;
24
+ stdout: string;
25
+ stderr: string;
26
+ command: string;
27
+ response: unknown;
28
+ };
29
+ export declare function executeAdvisorAction(params: {
30
+ action: AdvisorAction;
31
+ coin: string;
32
+ snapshot: AdvisorMarketSnapshot;
33
+ profile: UserProfile | undefined;
34
+ maxSz: number;
35
+ requireTpsl?: boolean;
36
+ globals: GlobalCliPrefixedArgs;
37
+ live: boolean;
38
+ assumeYes: boolean;
39
+ statePath: string | undefined;
40
+ noState: boolean;
41
+ confirmLive?: (prompt: string) => Promise<void>;
42
+ }): Promise<ExecuteAdvisorResult>;
43
+ //# sourceMappingURL=adviseEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adviseEngine.d.ts","sourceRoot":"","sources":["../../src/advisor/adviseEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAML,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,qBAAqB,EAAsB,MAAM,qBAAqB,CAAC;AAErF,MAAM,MAAM,sBAAsB,GAAG;IACnC,mGAAmG;IACnG,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,aAAa,EAAE,kBAAkB,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,wBAAsB,6BAA6B,CAAC,MAAM,EAAE;IAC1D,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAkClC;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,qBAAqB,CAAC;IAChC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAwDhC"}
@@ -0,0 +1,91 @@
1
+ import { assistantChatTurnFromResult, deepseekChat } from "./deepseekClient.js";
2
+ import { parseAdvisorActionFromModelText } from "./actionSchema.js";
3
+ import { assertAdvisorActionPassesGuards } from "./guards.js";
4
+ import { advisorActionToCliArgs, assertAdviseActionNeedsState, buildGlobalPrefix, formatCliInvocation, spawnJccHyperTool, } from "./actionRunner.js";
5
+ /**
6
+ * Calls DeepSeek; validates JSON/Zod; on failure appends repair instructions (bounded retries).
7
+ */
8
+ export async function runAdvisorModelTurnWithRepair(params) {
9
+ const maxRepair = params.maxRepair ?? 2;
10
+ const maxAttempts = maxRepair + 1;
11
+ let msgs = [...params.messages];
12
+ let lastRes = { content: "" };
13
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
14
+ lastRes = await deepseekChat({
15
+ apiKey: params.apiKey,
16
+ messages: msgs,
17
+ fetchImpl: params.fetchImpl,
18
+ });
19
+ try {
20
+ const action = parseAdvisorActionFromModelText(lastRes.content);
21
+ msgs = [...msgs, assistantChatTurnFromResult(lastRes)];
22
+ return { messages: msgs, action, lastAssistant: lastRes };
23
+ }
24
+ catch (e) {
25
+ const msg = e instanceof Error ? e.message : String(e);
26
+ if (attempt >= maxAttempts - 1) {
27
+ throw e;
28
+ }
29
+ msgs = [
30
+ ...msgs,
31
+ assistantChatTurnFromResult(lastRes),
32
+ {
33
+ role: "user",
34
+ content: `Your reply failed validation: ${msg}. Output ONE JSON object only, no markdown, matching the schema.`,
35
+ },
36
+ ];
37
+ }
38
+ }
39
+ throw new Error("advisor: model repair loop exhausted");
40
+ }
41
+ export async function executeAdvisorAction(params) {
42
+ if (params.action.action === "wait") {
43
+ return {
44
+ exitCode: 0,
45
+ stdout: "",
46
+ stderr: "",
47
+ command: "(no exchange action)",
48
+ response: { note: "wait" },
49
+ };
50
+ }
51
+ const posRow = params.snapshot.positions[params.snapshot.coin];
52
+ const positionSignedSz = posRow?.signed_sz;
53
+ assertAdvisorActionPassesGuards(params.action, {
54
+ coin: params.coin,
55
+ maxSz: params.maxSz,
56
+ requireTpsl: params.requireTpsl,
57
+ mid: params.snapshot.mid,
58
+ positionSignedSz,
59
+ profile: params.profile,
60
+ });
61
+ assertAdviseActionNeedsState(params.action, params.noState, params.statePath);
62
+ const g = buildGlobalPrefix(params.globals);
63
+ const argv = advisorActionToCliArgs(params.action, {
64
+ coin: params.snapshot.coin,
65
+ mid: params.snapshot.mid,
66
+ positionSignedSz,
67
+ globals: g,
68
+ live: params.live,
69
+ assumeYes: params.assumeYes,
70
+ });
71
+ const command = formatCliInvocation(argv);
72
+ if (params.live && !params.assumeYes && params.confirmLive) {
73
+ await params.confirmLive(`Proposed command:\n${command}\n`);
74
+ }
75
+ const cap = spawnJccHyperTool(argv, { stdio: "pipe" });
76
+ let response = { stdout: cap.stdout, stderr: cap.stderr };
77
+ try {
78
+ response = JSON.parse(cap.stdout);
79
+ }
80
+ catch {
81
+ /* non-JSON stdout */
82
+ }
83
+ return {
84
+ exitCode: cap.status ?? 1,
85
+ stdout: cap.stdout,
86
+ stderr: cap.stderr,
87
+ command,
88
+ response,
89
+ };
90
+ }
91
+ //# sourceMappingURL=adviseEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adviseEngine.js","sourceRoot":"","sources":["../../src/advisor/adviseEngine.ts"],"names":[],"mappings":"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"}