jcc_hyper_tool 0.1.5 → 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.
Files changed (135) hide show
  1. package/README.md +124 -17
  2. package/dist/advisor/actionRunner.d.ts +6 -0
  3. package/dist/advisor/actionRunner.d.ts.map +1 -1
  4. package/dist/advisor/actionRunner.js +38 -7
  5. package/dist/advisor/actionRunner.js.map +1 -1
  6. package/dist/advisor/actionSchema.d.ts +1209 -75
  7. package/dist/advisor/actionSchema.d.ts.map +1 -1
  8. package/dist/advisor/actionSchema.js +117 -5
  9. package/dist/advisor/actionSchema.js.map +1 -1
  10. package/dist/advisor/adviseDisplay.d.ts +26 -0
  11. package/dist/advisor/adviseDisplay.d.ts.map +1 -0
  12. package/dist/advisor/adviseDisplay.js +174 -0
  13. package/dist/advisor/adviseDisplay.js.map +1 -0
  14. package/dist/advisor/adviseEngine.d.ts +12 -2
  15. package/dist/advisor/adviseEngine.d.ts.map +1 -1
  16. package/dist/advisor/adviseEngine.js +88 -7
  17. package/dist/advisor/adviseEngine.js.map +1 -1
  18. package/dist/advisor/ambushPolicy.d.ts +47 -0
  19. package/dist/advisor/ambushPolicy.d.ts.map +1 -0
  20. package/dist/advisor/ambushPolicy.js +161 -0
  21. package/dist/advisor/ambushPolicy.js.map +1 -0
  22. package/dist/advisor/contextBuilder.d.ts +17 -0
  23. package/dist/advisor/contextBuilder.d.ts.map +1 -1
  24. package/dist/advisor/contextBuilder.js +25 -6
  25. package/dist/advisor/contextBuilder.js.map +1 -1
  26. package/dist/advisor/executionPolicy.d.ts +92 -0
  27. package/dist/advisor/executionPolicy.d.ts.map +1 -0
  28. package/dist/advisor/executionPolicy.js +273 -0
  29. package/dist/advisor/executionPolicy.js.map +1 -0
  30. package/dist/advisor/guards.d.ts +14 -0
  31. package/dist/advisor/guards.d.ts.map +1 -1
  32. package/dist/advisor/guards.js +143 -16
  33. package/dist/advisor/guards.js.map +1 -1
  34. package/dist/advisor/indicatorCompute.d.ts +45 -0
  35. package/dist/advisor/indicatorCompute.d.ts.map +1 -0
  36. package/dist/advisor/indicatorCompute.js +259 -0
  37. package/dist/advisor/indicatorCompute.js.map +1 -0
  38. package/dist/advisor/positionPlan.d.ts +33 -0
  39. package/dist/advisor/positionPlan.d.ts.map +1 -0
  40. package/dist/advisor/positionPlan.js +118 -0
  41. package/dist/advisor/positionPlan.js.map +1 -0
  42. package/dist/advisor/promptTemplate.d.ts +8 -2
  43. package/dist/advisor/promptTemplate.d.ts.map +1 -1
  44. package/dist/advisor/promptTemplate.js +175 -23
  45. package/dist/advisor/promptTemplate.js.map +1 -1
  46. package/dist/advisor/touchProbability.d.ts +54 -0
  47. package/dist/advisor/touchProbability.d.ts.map +1 -0
  48. package/dist/advisor/touchProbability.js +215 -0
  49. package/dist/advisor/touchProbability.js.map +1 -0
  50. package/dist/advisor/tpslPolicy.d.ts +22 -0
  51. package/dist/advisor/tpslPolicy.d.ts.map +1 -0
  52. package/dist/advisor/tpslPolicy.js +120 -0
  53. package/dist/advisor/tpslPolicy.js.map +1 -0
  54. package/dist/cli/advisorCli.d.ts.map +1 -1
  55. package/dist/cli/advisorCli.js +478 -126
  56. package/dist/cli/advisorCli.js.map +1 -1
  57. package/dist/cli/index.js +2 -0
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/cli/riskCli.d.ts +3 -0
  60. package/dist/cli/riskCli.d.ts.map +1 -0
  61. package/dist/cli/riskCli.js +120 -0
  62. package/dist/cli/riskCli.js.map +1 -0
  63. package/dist/cli/strategyCli.d.ts.map +1 -1
  64. package/dist/cli/strategyCli.js +3 -1
  65. package/dist/cli/strategyCli.js.map +1 -1
  66. package/dist/cli/tradingCli.d.ts.map +1 -1
  67. package/dist/cli/tradingCli.js +31 -1
  68. package/dist/cli/tradingCli.js.map +1 -1
  69. package/dist/core/hyperliquid/asset.d.ts +2 -0
  70. package/dist/core/hyperliquid/asset.d.ts.map +1 -1
  71. package/dist/core/hyperliquid/asset.js +25 -0
  72. package/dist/core/hyperliquid/asset.js.map +1 -1
  73. package/dist/core/hyperliquid/orders.d.ts +5 -0
  74. package/dist/core/hyperliquid/orders.d.ts.map +1 -1
  75. package/dist/core/hyperliquid/orders.js +15 -5
  76. package/dist/core/hyperliquid/orders.js.map +1 -1
  77. package/dist/core/hyperliquid/rounding.d.ts +23 -0
  78. package/dist/core/hyperliquid/rounding.d.ts.map +1 -0
  79. package/dist/core/hyperliquid/rounding.js +53 -0
  80. package/dist/core/hyperliquid/rounding.js.map +1 -0
  81. package/dist/core/risk/isolatedTopUp.d.ts +112 -0
  82. package/dist/core/risk/isolatedTopUp.d.ts.map +1 -0
  83. package/dist/core/risk/isolatedTopUp.js +209 -0
  84. package/dist/core/risk/isolatedTopUp.js.map +1 -0
  85. package/dist/core/risk/isolatedTopUpHistory.d.ts +7 -0
  86. package/dist/core/risk/isolatedTopUpHistory.d.ts.map +1 -0
  87. package/dist/core/risk/isolatedTopUpHistory.js +26 -0
  88. package/dist/core/risk/isolatedTopUpHistory.js.map +1 -0
  89. package/dist/core/risk/isolatedTopUpParse.d.ts +16 -0
  90. package/dist/core/risk/isolatedTopUpParse.d.ts.map +1 -0
  91. package/dist/core/risk/isolatedTopUpParse.js +78 -0
  92. package/dist/core/risk/isolatedTopUpParse.js.map +1 -0
  93. package/dist/core/risk/runIsolatedTopUpReconcile.d.ts +28 -0
  94. package/dist/core/risk/runIsolatedTopUpReconcile.d.ts.map +1 -0
  95. package/dist/core/risk/runIsolatedTopUpReconcile.js +184 -0
  96. package/dist/core/risk/runIsolatedTopUpReconcile.js.map +1 -0
  97. package/dist/core/state/gridReconcile.d.ts +2 -0
  98. package/dist/core/state/gridReconcile.d.ts.map +1 -1
  99. package/dist/core/state/gridReconcile.js +42 -2
  100. package/dist/core/state/gridReconcile.js.map +1 -1
  101. package/dist/core/state/intentFactory.d.ts +1 -0
  102. package/dist/core/state/intentFactory.d.ts.map +1 -1
  103. package/dist/core/state/intentFactory.js +1 -0
  104. package/dist/core/state/intentFactory.js.map +1 -1
  105. package/dist/core/state/profileStore.d.ts.map +1 -1
  106. package/dist/core/state/profileStore.js +12 -16
  107. package/dist/core/state/profileStore.js.map +1 -1
  108. package/dist/core/state/runReconcile.d.ts.map +1 -1
  109. package/dist/core/state/runReconcile.js +53 -18
  110. package/dist/core/state/runReconcile.js.map +1 -1
  111. package/dist/core/state/schema.d.ts +439 -68
  112. package/dist/core/state/schema.d.ts.map +1 -1
  113. package/dist/core/state/schema.js +51 -0
  114. package/dist/core/state/schema.js.map +1 -1
  115. package/dist/core/state/snapshot.d.ts +13 -0
  116. package/dist/core/state/snapshot.d.ts.map +1 -1
  117. package/dist/core/state/snapshot.js +36 -0
  118. package/dist/core/state/snapshot.js.map +1 -1
  119. package/dist/core/state/store.d.ts +21 -3
  120. package/dist/core/state/store.d.ts.map +1 -1
  121. package/dist/core/state/store.js +122 -13
  122. package/dist/core/state/store.js.map +1 -1
  123. package/dist/core/state/types.d.ts +13 -0
  124. package/dist/core/state/types.d.ts.map +1 -1
  125. package/dist/daemon/index.js +47 -2
  126. package/dist/daemon/index.js.map +1 -1
  127. package/dist/daemon/validateChild.d.ts +13 -0
  128. package/dist/daemon/validateChild.d.ts.map +1 -0
  129. package/dist/daemon/validateChild.js +77 -0
  130. package/dist/daemon/validateChild.js.map +1 -0
  131. package/dist/strategies/grid.d.ts +1 -0
  132. package/dist/strategies/grid.d.ts.map +1 -1
  133. package/dist/strategies/grid.js +1 -0
  134. package/dist/strategies/grid.js.map +1 -1
  135. package/package.json +3 -1
@@ -1 +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"}
1
+ {"version":3,"file":"actionSchema.d.ts","sourceRoot":"","sources":["../../src/advisor/actionSchema.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,19 @@ export const PriceTargetSchema = z.object({
5
5
  time_est: z.string(),
6
6
  probability: z.number().min(0).max(1).optional(),
7
7
  });
8
+ export const Range15_30mSchema = z.object({
9
+ low: z.number().positive(),
10
+ high: z.number().positive(),
11
+ optimistic_side: z.enum(["buy", "sell"]),
12
+ confidence: z.number().min(0).max(1).optional(),
13
+ });
8
14
  export const AnalysisSchema = z.object({
9
- indicators: z.string().optional(),
10
- elliott_wave: z.string().optional(),
11
- chan_theory: z.string().optional(),
15
+ indicators: z.string(),
16
+ elliott_wave: z.string(),
17
+ chan_theory: z.string(),
12
18
  price_targets: z.array(PriceTargetSchema).optional(),
13
19
  time_horizon: z.string().optional(),
20
+ range_15_30m: Range15_30mSchema.optional(),
14
21
  });
15
22
  const analysisField = { analysis: AnalysisSchema.optional() };
16
23
  export const AdvisorActionSchema = z.discriminatedUnion("action", [
@@ -38,6 +45,11 @@ export const AdvisorActionSchema = z.discriminatedUnion("action", [
38
45
  action: z.literal("close_position"),
39
46
  method: z.enum(["market", "limit"]),
40
47
  limit_px: z.number().positive().optional(),
48
+ /**
49
+ * Required when active_position_plan shows trend_toward_tp: model asserts price
50
+ * is unlikely to reach TP before SL/time horizon (not merely "no protection on book").
51
+ */
52
+ tp_unreachable: z.boolean().optional(),
41
53
  reason: z.string(),
42
54
  confidence: z.number().min(0).max(1),
43
55
  ...analysisField,
@@ -47,17 +59,37 @@ export const AdvisorActionSchema = z.discriminatedUnion("action", [
47
59
  reason: z.string(),
48
60
  ...analysisField,
49
61
  }),
62
+ z.object({
63
+ action: z.literal("place_limit_ambush"),
64
+ side: z.enum(["buy", "sell"]),
65
+ limit_px: z.number().positive(),
66
+ sz: z.number().positive(),
67
+ tp_px: z.number().positive(),
68
+ sl_px: z.number().positive(),
69
+ /** TTL minutes for unfilled entry (typical 15–30). */
70
+ expires_in_min: z.number().positive(),
71
+ is_market: z.boolean().default(true),
72
+ protection_limit_px: z.number().positive().optional(),
73
+ range_15_30m: Range15_30mSchema.optional(),
74
+ reason: z.string(),
75
+ confidence: z.number().min(0).max(1),
76
+ risk_flags: z.array(z.string()).default([]),
77
+ ...analysisField,
78
+ }),
50
79
  ]);
80
+ export function isAdvisorBracketOpenAction(action) {
81
+ return action.action === "open_with_bracket" || action.action === "place_limit_ambush";
82
+ }
51
83
  /** Bracket and non–is_market paths need an explicit protection limit. */
52
84
  export function refineBracketProtection(action) {
53
- if (action.action !== "open_with_bracket") {
85
+ if (!isAdvisorBracketOpenAction(action)) {
54
86
  return action;
55
87
  }
56
88
  if (action.is_market) {
57
89
  return action;
58
90
  }
59
91
  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");
92
+ throw new Error(`${action.action} with is_market=false requires protection_limit_px`);
61
93
  }
62
94
  return action;
63
95
  }
@@ -87,4 +119,84 @@ export function parseAdvisorActionFromModelText(raw) {
87
119
  }
88
120
  return refineBracketProtection(data);
89
121
  }
122
+ // ---------------------------------------------------------------------------
123
+ // Dual-output schema (scalp + ambush in one LLM call)
124
+ // ---------------------------------------------------------------------------
125
+ const StrategyActionSchema = z.discriminatedUnion("action", [
126
+ z.object({ action: z.literal("wait"), reason: z.string(), confidence: z.number().min(0).max(1) }),
127
+ z.object({
128
+ action: z.literal("open_with_bracket"),
129
+ side: z.enum(["buy", "sell"]),
130
+ limit_px: z.number().positive(),
131
+ sz: z.number().positive(),
132
+ tp_px: z.number().positive(),
133
+ sl_px: z.number().positive(),
134
+ is_market: z.boolean().default(true),
135
+ protection_limit_px: z.number().positive().optional(),
136
+ reason: z.string(),
137
+ confidence: z.number().min(0).max(1),
138
+ risk_flags: z.array(z.string()).default([]),
139
+ }),
140
+ z.object({
141
+ action: z.literal("close_position"),
142
+ method: z.enum(["market", "limit"]),
143
+ limit_px: z.number().positive().optional(),
144
+ tp_unreachable: z.boolean().optional(),
145
+ reason: z.string(),
146
+ confidence: z.number().min(0).max(1),
147
+ }),
148
+ z.object({
149
+ action: z.literal("cancel_all"),
150
+ reason: z.string(),
151
+ }),
152
+ z.object({
153
+ action: z.literal("place_limit_ambush"),
154
+ side: z.enum(["buy", "sell"]),
155
+ limit_px: z.number().positive(),
156
+ sz: z.number().positive(),
157
+ tp_px: z.number().positive(),
158
+ sl_px: z.number().positive(),
159
+ expires_in_min: z.number().positive(),
160
+ is_market: z.boolean().default(true),
161
+ protection_limit_px: z.number().positive().optional(),
162
+ range_15_30m: Range15_30mSchema.optional(),
163
+ reason: z.string(),
164
+ confidence: z.number().min(0).max(1),
165
+ risk_flags: z.array(z.string()).default([]),
166
+ }),
167
+ ]);
168
+ export const DualAdvisorResponseSchema = z.object({
169
+ analysis: AnalysisSchema,
170
+ scalp: StrategyActionSchema.optional(),
171
+ ambush: StrategyActionSchema.optional(),
172
+ });
173
+ export function parseDualAdvisorResponse(raw) {
174
+ const json = extractJsonObjectFromModelText(raw);
175
+ const obj = JSON.parse(json);
176
+ const parsed = DualAdvisorResponseSchema.safeParse(obj);
177
+ if (!parsed.success) {
178
+ throw new Error(parsed.error.message);
179
+ }
180
+ const data = parsed.data;
181
+ // Validate close_position limit_px
182
+ for (const slot of [data.scalp, data.ambush]) {
183
+ if (slot?.action === "close_position" && slot.method === "limit") {
184
+ if (slot.limit_px === undefined || !Number.isFinite(slot.limit_px)) {
185
+ throw new Error("close_position with method=limit requires limit_px");
186
+ }
187
+ }
188
+ }
189
+ return data;
190
+ }
191
+ /** Flatten dual response into executable actions (wait skipped). */
192
+ export function dualActionsFromResponse(resp) {
193
+ const out = [];
194
+ if (resp.scalp && resp.scalp.action !== "wait") {
195
+ out.push({ strategy: "scalp", action: resp.scalp });
196
+ }
197
+ if (resp.ambush && resp.ambush.action !== "wait") {
198
+ out.push({ strategy: "ambush", action: resp.ambush });
199
+ }
200
+ return out;
201
+ }
90
202
  //# sourceMappingURL=actionSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actionSchema.js","sourceRoot":"","sources":["../../src/advisor/actionSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actionSchema.js","sourceRoot":"","sources":["../../src/advisor/actionSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { AdvisorAction, AdvisorAnalysis } from "./actionSchema.js";
2
+ export type AdvisorTurnDisplayInput = {
3
+ action: AdvisorAction;
4
+ coin: string;
5
+ mid: number | null;
6
+ logPath: string;
7
+ reasoningContent?: string | null;
8
+ /** Max chars of model reasoning shown in terminal (full text stays in session log). Use `Infinity` for no limit. */
9
+ reasoningPreviewMax?: number;
10
+ /** Dual-output: shared analysis from response. */
11
+ analysis?: AdvisorAnalysis;
12
+ };
13
+ /** Pass as `reasoningPreviewMax` to print the full model reasoning in terminal. */
14
+ export declare const UNLIMITED_REASONING_PREVIEW: number;
15
+ export type AdvisorExecutedDisplayInput = {
16
+ command: string;
17
+ action: AdvisorAction;
18
+ exitCode: number;
19
+ logPath: string;
20
+ };
21
+ /** Human-readable terminal block for one model turn. */
22
+ export declare function formatAdvisorTurnDisplay(input: AdvisorTurnDisplayInput): string;
23
+ export declare function formatAdvisorExecutedDisplay(input: AdvisorExecutedDisplayInput): string;
24
+ /** One-line hint for REPL `show` before the shell command. */
25
+ export declare function formatAdvisorShowHeader(action: AdvisorAction, coin: string): string;
26
+ //# sourceMappingURL=adviseDisplay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adviseDisplay.d.ts","sourceRoot":"","sources":["../../src/advisor/adviseDisplay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAExE,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oHAAoH;IACpH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,2BAA2B,QAAW,CAAC;AAEpD,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAmIF,wDAAwD;AACxD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAiD/E;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,2BAA2B,GAAG,MAAM,CAcvF;AAED,8DAA8D;AAC9D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnF"}
@@ -0,0 +1,174 @@
1
+ /** Pass as `reasoningPreviewMax` to print the full model reasoning in terminal. */
2
+ export const UNLIMITED_REASONING_PREVIEW = Infinity;
3
+ function line(char = "─", width = 56) {
4
+ return char.repeat(width);
5
+ }
6
+ function pct(confidence) {
7
+ return `${Math.round(confidence * 100)}%`;
8
+ }
9
+ function actionTitle(action) {
10
+ switch (action.action) {
11
+ case "wait":
12
+ return "观望 (wait)";
13
+ case "open_with_bracket":
14
+ return `开仓 + bracket (${action.side})`;
15
+ case "place_limit_ambush":
16
+ return `埋伏限价 + bracket (${action.side}, TTL ${action.expires_in_min}m)`;
17
+ case "close_position":
18
+ return `平仓 (${action.method})`;
19
+ case "cancel_all":
20
+ return "撤销全部挂单 (cancel_all)";
21
+ }
22
+ }
23
+ function formatAnalysis(analysis) {
24
+ if (!analysis) {
25
+ return [];
26
+ }
27
+ const out = [];
28
+ if (analysis.indicators?.trim()) {
29
+ out.push(` 指标: ${analysis.indicators.trim()}`);
30
+ }
31
+ if (analysis.elliott_wave?.trim()) {
32
+ out.push(` 波浪: ${analysis.elliott_wave.trim()}`);
33
+ }
34
+ if (analysis.chan_theory?.trim()) {
35
+ out.push(` 缠论: ${analysis.chan_theory.trim()}`);
36
+ }
37
+ if (analysis.time_horizon?.trim()) {
38
+ out.push(` 时间维度: ${analysis.time_horizon.trim()}`);
39
+ }
40
+ if (analysis.range_15_30m) {
41
+ const r = analysis.range_15_30m;
42
+ const conf = r.confidence !== undefined ? ` · 信心 ${pct(r.confidence)}` : "";
43
+ out.push(` 15–30m 区间: ${r.low}–${r.high} · 乐观方向 ${r.optimistic_side}${conf}`);
44
+ }
45
+ if (analysis.price_targets && analysis.price_targets.length > 0) {
46
+ for (const t of analysis.price_targets) {
47
+ const prob = t.probability !== undefined ? ` · 概率 ${pct(t.probability)}` : "";
48
+ out.push(` 目标价 ${t.level} (${t.label}, ${t.time_est})${prob}`);
49
+ }
50
+ }
51
+ return out;
52
+ }
53
+ function formatActionDetails(action, coin) {
54
+ const out = [];
55
+ switch (action.action) {
56
+ case "open_with_bracket":
57
+ out.push(` 合约: ${coin}`);
58
+ out.push(` 方向: ${action.side}`);
59
+ out.push(` 限价: ${action.limit_px}`);
60
+ out.push(` 数量: ${action.sz}`);
61
+ out.push(` 止盈: ${action.tp_px}`);
62
+ out.push(` 止损: ${action.sl_px}`);
63
+ out.push(` 保护单: ${action.is_market ? "触发后市价" : `限价 ${action.protection_limit_px}`}`);
64
+ if (action.risk_flags.length > 0) {
65
+ out.push(` 风险标记: ${action.risk_flags.join(", ")}`);
66
+ }
67
+ break;
68
+ case "place_limit_ambush":
69
+ out.push(` 合约: ${coin}`);
70
+ out.push(` 方向: ${action.side}`);
71
+ out.push(` 埋伏限价: ${action.limit_px}`);
72
+ out.push(` 数量: ${action.sz}`);
73
+ out.push(` 止盈: ${action.tp_px}`);
74
+ out.push(` 止损: ${action.sl_px}`);
75
+ out.push(` TTL: ${action.expires_in_min} 分钟`);
76
+ out.push(` 保护单: ${action.is_market ? "触发后市价" : `限价 ${action.protection_limit_px}`}`);
77
+ if (action.range_15_30m) {
78
+ const r = action.range_15_30m;
79
+ out.push(` 15–30m 区间: ${r.low}–${r.high} (${r.optimistic_side})`);
80
+ }
81
+ if (action.risk_flags.length > 0) {
82
+ out.push(` 风险标记: ${action.risk_flags.join(", ")}`);
83
+ }
84
+ break;
85
+ case "close_position":
86
+ out.push(` 合约: ${coin}`);
87
+ out.push(` 方式: ${action.method}`);
88
+ if (action.method === "limit" && action.limit_px !== undefined) {
89
+ out.push(` 限价: ${action.limit_px}`);
90
+ }
91
+ if (action.tp_unreachable === true) {
92
+ out.push(` TP 不可达: 是(thesis 已调整)`);
93
+ }
94
+ break;
95
+ case "cancel_all":
96
+ out.push(` 范围: state 中仍在簿上的挂单`);
97
+ break;
98
+ case "wait":
99
+ out.push(` 本轮: 不提交交易所指令`);
100
+ break;
101
+ }
102
+ return out;
103
+ }
104
+ function reasoningPreview(text, max) {
105
+ if (!text?.trim()) {
106
+ return [];
107
+ }
108
+ const trimmed = text.trim();
109
+ if (trimmed.length <= max) {
110
+ return trimmed.split("\n").map((l) => ` ${l}`);
111
+ }
112
+ const head = trimmed.slice(0, max).trimEnd();
113
+ return [
114
+ ...head.split("\n").map((l) => ` ${l}`),
115
+ ` …(推理全文 ${trimmed.length} 字,见审计日志)`,
116
+ ];
117
+ }
118
+ function isUnlimitedReasoningPreview(max) {
119
+ return !Number.isFinite(max) || max <= 0;
120
+ }
121
+ /** Human-readable terminal block for one model turn. */
122
+ export function formatAdvisorTurnDisplay(input) {
123
+ const { action, coin, mid, logPath } = input;
124
+ const previewMax = input.reasoningPreviewMax ?? 480;
125
+ const showFullReasoning = isUnlimitedReasoningPreview(previewMax);
126
+ const midStr = mid !== null && Number.isFinite(mid) ? String(mid) : "—";
127
+ const blocks = [
128
+ line("═"),
129
+ ` 顾问建议 · ${coin} · mid ${midStr}`,
130
+ line("═"),
131
+ "",
132
+ `【结论】${actionTitle(action)}`,
133
+ ];
134
+ if ("confidence" in action && typeof action.confidence === "number") {
135
+ blocks.push(`【信心】${pct(action.confidence)}`);
136
+ }
137
+ blocks.push("", "【理由】", ` ${action.reason.trim()}`);
138
+ const analysisLines = formatAnalysis(input.analysis ?? action.analysis);
139
+ if (analysisLines.length > 0) {
140
+ blocks.push("", "【分析】", ...analysisLines);
141
+ }
142
+ const detailLines = formatActionDetails(action, coin);
143
+ if (detailLines.length > 0) {
144
+ blocks.push("", "【参数】", ...detailLines);
145
+ }
146
+ const reasoningLines = reasoningPreview(input.reasoningContent, showFullReasoning ? Number.MAX_SAFE_INTEGER : previewMax);
147
+ if (reasoningLines.length > 0) {
148
+ blocks.push("", showFullReasoning ? "【推理原文】" : "【推理摘要】", ...reasoningLines);
149
+ }
150
+ blocks.push("", line("─"), `审计日志: ${logPath}`, showFullReasoning
151
+ ? "(完整 JSON action 已写入上述文件)"
152
+ : "(完整 JSON action / reasoning 已写入上述文件)", "");
153
+ return `${blocks.join("\n")}\n`;
154
+ }
155
+ export function formatAdvisorExecutedDisplay(input) {
156
+ const status = input.exitCode === 0 ? "成功" : `失败 (exit ${input.exitCode})`;
157
+ const blocks = [
158
+ line("═"),
159
+ ` 执行结果 · ${actionTitle(input.action)} · ${status}`,
160
+ line("═"),
161
+ "",
162
+ `命令: ${input.command}`,
163
+ "",
164
+ line("─"),
165
+ `审计日志: ${input.logPath}`,
166
+ "",
167
+ ];
168
+ return `${blocks.join("\n")}\n`;
169
+ }
170
+ /** One-line hint for REPL `show` before the shell command. */
171
+ export function formatAdvisorShowHeader(action, coin) {
172
+ return `【预览】${coin} · ${actionTitle(action)} · ${action.reason.trim()}\n`;
173
+ }
174
+ //# sourceMappingURL=adviseDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adviseDisplay.js","sourceRoot":"","sources":["../../src/advisor/adviseDisplay.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,19 @@
1
1
  import type { ChatTurn, DeepseekChatResult } from "./deepseekClient.js";
2
- import type { AdvisorAction } from "./actionSchema.js";
2
+ import type { AdvisorAction, DualAdvisorResponse } from "./actionSchema.js";
3
3
  import type { UserProfile } from "../core/state/schema.js";
4
4
  import { type GlobalCliPrefixedArgs } from "./actionRunner.js";
5
5
  import type { AdvisorMarketSnapshot } from "./contextBuilder.js";
6
+ import { type AdvisorExecutionPolicy, type AdvisorExecutionPolicyCli } from "./executionPolicy.js";
6
7
  export type AdvisorModelTurnResult = {
7
8
  /** Messages for the next API call (assistant entries include `reasoning_content` when present). */
8
9
  messages: ChatTurn[];
9
- action: AdvisorAction;
10
+ /** Parsed dual response (scalp + ambush). */
11
+ response: DualAdvisorResponse;
12
+ /** Executable actions extracted from response (wait skipped). */
13
+ actions: Array<{
14
+ strategy: "scalp" | "ambush";
15
+ action: AdvisorAction;
16
+ }>;
10
17
  lastAssistant: DeepseekChatResult;
11
18
  };
12
19
  /**
@@ -39,5 +46,8 @@ export declare function executeAdvisorAction(params: {
39
46
  statePath: string | undefined;
40
47
  noState: boolean;
41
48
  confirmLive?: (prompt: string) => Promise<void>;
49
+ executionPolicy?: AdvisorExecutionPolicy;
50
+ executionPolicyCli?: AdvisorExecutionPolicyCli;
51
+ nowMs?: number;
42
52
  }): Promise<ExecuteAdvisorResult>;
43
53
  //# sourceMappingURL=adviseEngine.d.ts.map
@@ -1 +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"}
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,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAI3D,OAAO,EAML,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,qBAAqB,EAAsB,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAQL,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,sBAAsB,GAAG;IACnC,mGAAmG;IACnG,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,iEAAiE;IACjE,OAAO,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;IACxE,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,CAmClC;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;IAChD,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuJhC"}
@@ -1,7 +1,12 @@
1
1
  import { assistantChatTurnFromResult, deepseekChat } from "./deepseekClient.js";
2
- import { parseAdvisorActionFromModelText } from "./actionSchema.js";
2
+ import { parseDualAdvisorResponse, dualActionsFromResponse } from "./actionSchema.js";
3
+ import { isAdvisorBracketOpenAction } from "./actionSchema.js";
3
4
  import { assertAdvisorActionPassesGuards } from "./guards.js";
5
+ import { mergeUserProfileDefaults } from "../core/state/profileStore.js";
6
+ import { readOrCreateTradeStateFile } from "../core/state/store.js";
7
+ import { reconcilePendingAmbushBeforePlace } from "./ambushPolicy.js";
4
8
  import { advisorActionToCliArgs, assertAdviseActionNeedsState, buildGlobalPrefix, formatCliInvocation, spawnJccHyperTool, } from "./actionRunner.js";
9
+ import { assertAdvisorConfidenceGate, assertAdviseExecuteCooldown, prepareAdvisorActionForExecution, readAdviseExecuteHistory, recordAdviseExecuteCooldown, resolveAdvisorExecutionPolicy, resolveAdvisorSzCap, } from "./executionPolicy.js";
5
10
  /**
6
11
  * Calls DeepSeek; validates JSON/Zod; on failure appends repair instructions (bounded retries).
7
12
  */
@@ -17,9 +22,10 @@ export async function runAdvisorModelTurnWithRepair(params) {
17
22
  fetchImpl: params.fetchImpl,
18
23
  });
19
24
  try {
20
- const action = parseAdvisorActionFromModelText(lastRes.content);
25
+ const response = parseDualAdvisorResponse(lastRes.content);
26
+ const actions = dualActionsFromResponse(response);
21
27
  msgs = [...msgs, assistantChatTurnFromResult(lastRes)];
22
- return { messages: msgs, action, lastAssistant: lastRes };
28
+ return { messages: msgs, response, actions, lastAssistant: lastRes };
23
29
  }
24
30
  catch (e) {
25
31
  const msg = e instanceof Error ? e.message : String(e);
@@ -50,23 +56,85 @@ export async function executeAdvisorAction(params) {
50
56
  }
51
57
  const posRow = params.snapshot.positions[params.snapshot.coin];
52
58
  const positionSignedSz = posRow?.signed_sz;
53
- assertAdvisorActionPassesGuards(params.action, {
59
+ const nowMs = params.nowMs ?? Date.now();
60
+ let tradeState = params.statePath && !params.noState
61
+ ? await readOrCreateTradeStateFile(params.statePath, nowMs)
62
+ : undefined;
63
+ const guardInputs = {
54
64
  coin: params.coin,
55
65
  maxSz: params.maxSz,
56
66
  requireTpsl: params.requireTpsl,
57
67
  mid: params.snapshot.mid,
58
68
  positionSignedSz,
69
+ positionEntryPx: posRow?.entry_px,
59
70
  profile: params.profile,
71
+ szDecimals: params.snapshot.sz_decimals,
72
+ tradeState,
73
+ nowMs,
74
+ kline1h: params.snapshot.kline_1h,
75
+ skipTouchProb: true,
76
+ };
77
+ const policy = params.executionPolicy ??
78
+ resolveAdvisorExecutionPolicy(params.profile, params.executionPolicyCli ?? {});
79
+ assertAdvisorConfidenceGate(params.action, policy.minConfidence);
80
+ if (policy.executeCooldownSec > 0 && params.statePath && !params.noState) {
81
+ assertAdviseExecuteCooldown({
82
+ history: readAdviseExecuteHistory(tradeState),
83
+ coin: params.coin,
84
+ action: params.action,
85
+ cooldownSec: policy.executeCooldownSec,
86
+ nowMs,
87
+ });
88
+ }
89
+ assertAdvisorActionPassesGuards(params.action, guardInputs);
90
+ const maxDevPct = mergeUserProfileDefaults(params.profile).priceDeviationPctMax;
91
+ const slShift = policy.bracketSlEntryShift;
92
+ const { action: execAction, notes: execNotes } = prepareAdvisorActionForExecution(params.action, {
93
+ slEntryShift: slShift,
94
+ limitJitterPct: policy.limitJitterPct,
95
+ mid: params.snapshot.mid,
96
+ maxDevPct,
97
+ szDecimals: params.snapshot.sz_decimals,
98
+ kline1h: params.snapshot.kline_1h,
99
+ profile: params.profile,
100
+ });
101
+ for (const note of execNotes) {
102
+ process.stderr.write(`advise: ${note}.\n`);
103
+ }
104
+ assertAdvisorActionPassesGuards(execAction, {
105
+ ...guardInputs,
106
+ skipEntryMidDeviation: slShift > 0 && isAdvisorBracketOpenAction(execAction),
107
+ skipTouchProb: false,
60
108
  });
61
- assertAdviseActionNeedsState(params.action, params.noState, params.statePath);
109
+ assertAdviseActionNeedsState(execAction, params.noState, params.statePath);
110
+ if (execAction.action === "place_limit_ambush" &&
111
+ params.statePath &&
112
+ !params.noState) {
113
+ const replace = await reconcilePendingAmbushBeforePlace({
114
+ statePath: params.statePath,
115
+ coin: params.coin,
116
+ action: execAction,
117
+ replaceDeviationPct: policy.ambushReplaceDeviationPct,
118
+ nowMs,
119
+ });
120
+ for (const id of replace.cancelledIntentIds) {
121
+ process.stderr.write(`advise: ambush replace — requested cancel of stale intent ${id}.\n`);
122
+ }
123
+ tradeState = await readOrCreateTradeStateFile(params.statePath, nowMs);
124
+ }
125
+ const szCap = resolveAdvisorSzCap(guardInputs);
62
126
  const g = buildGlobalPrefix(params.globals);
63
- const argv = advisorActionToCliArgs(params.action, {
127
+ const argv = advisorActionToCliArgs(execAction, {
64
128
  coin: params.snapshot.coin,
65
129
  mid: params.snapshot.mid,
66
130
  positionSignedSz,
67
131
  globals: g,
68
132
  live: params.live,
69
133
  assumeYes: params.assumeYes,
134
+ szCap,
135
+ limitJitterPct: policy.limitJitterPct,
136
+ maxDevPct,
137
+ szDecimals: params.snapshot.sz_decimals,
70
138
  });
71
139
  const command = formatCliInvocation(argv);
72
140
  if (params.live && !params.assumeYes && params.confirmLive) {
@@ -80,8 +148,21 @@ export async function executeAdvisorAction(params) {
80
148
  catch {
81
149
  /* non-JSON stdout */
82
150
  }
151
+ const exitCode = cap.status ?? 1;
152
+ if (exitCode === 0 &&
153
+ params.live &&
154
+ params.statePath &&
155
+ !params.noState &&
156
+ policy.executeCooldownSec > 0) {
157
+ await recordAdviseExecuteCooldown({
158
+ statePath: params.statePath,
159
+ coin: params.coin,
160
+ action: params.action,
161
+ nowMs,
162
+ });
163
+ }
83
164
  return {
84
- exitCode: cap.status ?? 1,
165
+ exitCode,
85
166
  stdout: cap.stdout,
86
167
  stderr: cap.stderr,
87
168
  command,
@@ -1 +1 @@
1
- {"version":3,"file":"adviseEngine.js","sourceRoot":"","sources":["../../src/advisor/adviseEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adviseEngine.js","sourceRoot":"","sources":["../../src/advisor/adviseEngine.ts"],"names":[],"mappings":"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"}