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.
- package/README.md +124 -17
- package/dist/advisor/actionRunner.d.ts +6 -0
- package/dist/advisor/actionRunner.d.ts.map +1 -1
- package/dist/advisor/actionRunner.js +38 -7
- package/dist/advisor/actionRunner.js.map +1 -1
- package/dist/advisor/actionSchema.d.ts +1209 -75
- package/dist/advisor/actionSchema.d.ts.map +1 -1
- package/dist/advisor/actionSchema.js +117 -5
- package/dist/advisor/actionSchema.js.map +1 -1
- package/dist/advisor/adviseDisplay.d.ts +26 -0
- package/dist/advisor/adviseDisplay.d.ts.map +1 -0
- package/dist/advisor/adviseDisplay.js +174 -0
- package/dist/advisor/adviseDisplay.js.map +1 -0
- package/dist/advisor/adviseEngine.d.ts +12 -2
- package/dist/advisor/adviseEngine.d.ts.map +1 -1
- package/dist/advisor/adviseEngine.js +88 -7
- package/dist/advisor/adviseEngine.js.map +1 -1
- package/dist/advisor/ambushPolicy.d.ts +47 -0
- package/dist/advisor/ambushPolicy.d.ts.map +1 -0
- package/dist/advisor/ambushPolicy.js +161 -0
- package/dist/advisor/ambushPolicy.js.map +1 -0
- package/dist/advisor/contextBuilder.d.ts +17 -0
- package/dist/advisor/contextBuilder.d.ts.map +1 -1
- package/dist/advisor/contextBuilder.js +25 -6
- package/dist/advisor/contextBuilder.js.map +1 -1
- package/dist/advisor/executionPolicy.d.ts +92 -0
- package/dist/advisor/executionPolicy.d.ts.map +1 -0
- package/dist/advisor/executionPolicy.js +273 -0
- package/dist/advisor/executionPolicy.js.map +1 -0
- package/dist/advisor/guards.d.ts +14 -0
- package/dist/advisor/guards.d.ts.map +1 -1
- package/dist/advisor/guards.js +143 -16
- package/dist/advisor/guards.js.map +1 -1
- package/dist/advisor/indicatorCompute.d.ts +45 -0
- package/dist/advisor/indicatorCompute.d.ts.map +1 -0
- package/dist/advisor/indicatorCompute.js +259 -0
- package/dist/advisor/indicatorCompute.js.map +1 -0
- package/dist/advisor/positionPlan.d.ts +33 -0
- package/dist/advisor/positionPlan.d.ts.map +1 -0
- package/dist/advisor/positionPlan.js +118 -0
- package/dist/advisor/positionPlan.js.map +1 -0
- package/dist/advisor/promptTemplate.d.ts +8 -2
- package/dist/advisor/promptTemplate.d.ts.map +1 -1
- package/dist/advisor/promptTemplate.js +175 -23
- package/dist/advisor/promptTemplate.js.map +1 -1
- package/dist/advisor/touchProbability.d.ts +54 -0
- package/dist/advisor/touchProbability.d.ts.map +1 -0
- package/dist/advisor/touchProbability.js +215 -0
- package/dist/advisor/touchProbability.js.map +1 -0
- package/dist/advisor/tpslPolicy.d.ts +22 -0
- package/dist/advisor/tpslPolicy.d.ts.map +1 -0
- package/dist/advisor/tpslPolicy.js +120 -0
- package/dist/advisor/tpslPolicy.js.map +1 -0
- package/dist/cli/advisorCli.d.ts.map +1 -1
- package/dist/cli/advisorCli.js +478 -126
- package/dist/cli/advisorCli.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/riskCli.d.ts +3 -0
- package/dist/cli/riskCli.d.ts.map +1 -0
- package/dist/cli/riskCli.js +120 -0
- package/dist/cli/riskCli.js.map +1 -0
- package/dist/cli/strategyCli.d.ts.map +1 -1
- package/dist/cli/strategyCli.js +3 -1
- package/dist/cli/strategyCli.js.map +1 -1
- package/dist/cli/tradingCli.d.ts.map +1 -1
- package/dist/cli/tradingCli.js +31 -1
- package/dist/cli/tradingCli.js.map +1 -1
- package/dist/core/hyperliquid/asset.d.ts +2 -0
- package/dist/core/hyperliquid/asset.d.ts.map +1 -1
- package/dist/core/hyperliquid/asset.js +25 -0
- package/dist/core/hyperliquid/asset.js.map +1 -1
- package/dist/core/hyperliquid/orders.d.ts +5 -0
- package/dist/core/hyperliquid/orders.d.ts.map +1 -1
- package/dist/core/hyperliquid/orders.js +15 -5
- package/dist/core/hyperliquid/orders.js.map +1 -1
- package/dist/core/hyperliquid/rounding.d.ts +23 -0
- package/dist/core/hyperliquid/rounding.d.ts.map +1 -0
- package/dist/core/hyperliquid/rounding.js +53 -0
- package/dist/core/hyperliquid/rounding.js.map +1 -0
- package/dist/core/risk/isolatedTopUp.d.ts +112 -0
- package/dist/core/risk/isolatedTopUp.d.ts.map +1 -0
- package/dist/core/risk/isolatedTopUp.js +209 -0
- package/dist/core/risk/isolatedTopUp.js.map +1 -0
- package/dist/core/risk/isolatedTopUpHistory.d.ts +7 -0
- package/dist/core/risk/isolatedTopUpHistory.d.ts.map +1 -0
- package/dist/core/risk/isolatedTopUpHistory.js +26 -0
- package/dist/core/risk/isolatedTopUpHistory.js.map +1 -0
- package/dist/core/risk/isolatedTopUpParse.d.ts +16 -0
- package/dist/core/risk/isolatedTopUpParse.d.ts.map +1 -0
- package/dist/core/risk/isolatedTopUpParse.js +78 -0
- package/dist/core/risk/isolatedTopUpParse.js.map +1 -0
- package/dist/core/risk/runIsolatedTopUpReconcile.d.ts +28 -0
- package/dist/core/risk/runIsolatedTopUpReconcile.d.ts.map +1 -0
- package/dist/core/risk/runIsolatedTopUpReconcile.js +184 -0
- package/dist/core/risk/runIsolatedTopUpReconcile.js.map +1 -0
- package/dist/core/state/gridReconcile.d.ts +2 -0
- package/dist/core/state/gridReconcile.d.ts.map +1 -1
- package/dist/core/state/gridReconcile.js +42 -2
- package/dist/core/state/gridReconcile.js.map +1 -1
- package/dist/core/state/intentFactory.d.ts +1 -0
- package/dist/core/state/intentFactory.d.ts.map +1 -1
- package/dist/core/state/intentFactory.js +1 -0
- package/dist/core/state/intentFactory.js.map +1 -1
- package/dist/core/state/profileStore.d.ts.map +1 -1
- package/dist/core/state/profileStore.js +12 -16
- package/dist/core/state/profileStore.js.map +1 -1
- package/dist/core/state/runReconcile.d.ts.map +1 -1
- package/dist/core/state/runReconcile.js +53 -18
- package/dist/core/state/runReconcile.js.map +1 -1
- package/dist/core/state/schema.d.ts +439 -68
- package/dist/core/state/schema.d.ts.map +1 -1
- package/dist/core/state/schema.js +51 -0
- package/dist/core/state/schema.js.map +1 -1
- package/dist/core/state/snapshot.d.ts +13 -0
- package/dist/core/state/snapshot.d.ts.map +1 -1
- package/dist/core/state/snapshot.js +36 -0
- package/dist/core/state/snapshot.js.map +1 -1
- package/dist/core/state/store.d.ts +21 -3
- package/dist/core/state/store.d.ts.map +1 -1
- package/dist/core/state/store.js +122 -13
- package/dist/core/state/store.js.map +1 -1
- package/dist/core/state/types.d.ts +13 -0
- package/dist/core/state/types.d.ts.map +1 -1
- package/dist/daemon/index.js +47 -2
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/validateChild.d.ts +13 -0
- package/dist/daemon/validateChild.d.ts.map +1 -0
- package/dist/daemon/validateChild.js +77 -0
- package/dist/daemon/validateChild.js.map +1 -0
- package/dist/strategies/grid.d.ts +1 -0
- package/dist/strategies/grid.d.ts.map +1 -1
- package/dist/strategies/grid.js +1 -0
- package/dist/strategies/grid.js.map +1 -1
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/core/state/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/core/state/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { IsolatedTopUpConfigSchema } from "../risk/isolatedTopUp.js";
|
|
2
3
|
const BracketPhaseSchema = z.enum([
|
|
3
4
|
"planned",
|
|
4
5
|
"entry_pending",
|
|
@@ -41,6 +42,8 @@ const BracketIntentSchema = z.object({
|
|
|
41
42
|
entryLimitPx: z.number(),
|
|
42
43
|
entrySz: z.number().positive(),
|
|
43
44
|
tif: z.enum(["Gtc", "Ioc", "Alo"]),
|
|
45
|
+
/** Trading strategy: ambush (limit entry, wider SL/TP) or scalp (market entry, tight SL/TP). */
|
|
46
|
+
strategy: z.enum(["scalp", "ambush"]).optional(),
|
|
44
47
|
entryReduceOnly: z.boolean().optional(),
|
|
45
48
|
tpTriggerPx: z.number().positive(),
|
|
46
49
|
slTriggerPx: z.number().positive(),
|
|
@@ -89,6 +92,8 @@ const GridIntentSchema = z.object({
|
|
|
89
92
|
replenishGapPx: z.number().positive().optional(),
|
|
90
93
|
/** Idempotency for grid replenishment (plan:/done: prefixes, see mergeGridReplenishDedupe). */
|
|
91
94
|
replenishDedupeKeys: z.array(z.string()).optional(),
|
|
95
|
+
/** User set this to true to regenerate legs from current lower/upper/grids/bias on next reconcile. */
|
|
96
|
+
regenerateGrid: z.boolean().optional(),
|
|
92
97
|
legs: z.array(GridLegSchema),
|
|
93
98
|
});
|
|
94
99
|
const SingleLimitIntentSchema = z.object({
|
|
@@ -139,10 +144,54 @@ export const UserProfileSchema = z.object({
|
|
|
139
144
|
risk: z.enum(["conservative", "balanced", "aggressive"]).default("balanced"),
|
|
140
145
|
defaultMaxSz: z.number().positive().optional(),
|
|
141
146
|
maxSzByCoin: z.record(z.string(), z.number().positive()).optional(),
|
|
147
|
+
/** Advisor / bracket minimum sz floor (profile guard; HL $10 notional still applies). */
|
|
148
|
+
defaultMinSz: z.number().positive().optional(),
|
|
149
|
+
minSzByCoin: z.record(z.string(), z.number().positive()).optional(),
|
|
142
150
|
requireTpsl: z.boolean().default(true),
|
|
143
151
|
priceDeviationPctMax: z.number().positive().default(0.03),
|
|
144
152
|
tradingStyleNotes: z.string().optional(),
|
|
145
153
|
updatedAtMs: z.number().optional(),
|
|
154
|
+
/** Optional isolated-margin auto top-up during `state reconcile` (default disabled). */
|
|
155
|
+
isolatedTopUp: IsolatedTopUpConfigSchema.optional(),
|
|
156
|
+
/** Min model confidence (0–1) required before `advise` execute / `--auto`. 0 = disabled. */
|
|
157
|
+
minConfidenceToExecute: z.number().min(0).max(1).optional(),
|
|
158
|
+
/** Random limit-price offset fraction (e.g. 0.002 = up to ±0.2%). 0 = disabled. */
|
|
159
|
+
limitPriceJitterPct: z.number().min(0).max(0.05).optional(),
|
|
160
|
+
/** Min seconds between same coin+action executions (open_with_bracket also keyed by side). 0 = disabled. */
|
|
161
|
+
executeCooldownSec: z.number().nonnegative().optional(),
|
|
162
|
+
/**
|
|
163
|
+
* Bracket entry shift toward model SL (0=off, 1=entry at SL, TP/SL translated equally).
|
|
164
|
+
* Limit-only: unfilled = no position.
|
|
165
|
+
*/
|
|
166
|
+
bracketSlEntryShift: z.number().min(0).max(1).optional(),
|
|
167
|
+
/** Relative limit deviation above which advise replaces a pending TTL ambush (default: priceDeviationPctMax). */
|
|
168
|
+
ambushReplaceDeviationPct: z.number().positive().optional(),
|
|
169
|
+
/** Min seconds after open before advise may close without TP/SL hit (0 = disabled). Applies to all bracket-linked positions. */
|
|
170
|
+
antiRushCloseMinSec: z.number().nonnegative().optional(),
|
|
171
|
+
/** After entry fill, wait this long for reconcile to place TP/SL before allow close (default 360s ≈ one advise round). */
|
|
172
|
+
protectionGraceSec: z.number().nonnegative().optional(),
|
|
173
|
+
/** Block close when |unrealized PnL| below this fraction of entry (e.g. 0.01 = 1%) unless tp_unreachable. */
|
|
174
|
+
minClosePnlPct: z.number().nonnegative().optional(),
|
|
175
|
+
/** Min TP distance / SL distance from bracket entry (default by risk: conservative 2.5, balanced 2, aggressive 1.5). */
|
|
176
|
+
minRewardRiskRatio: z.number().positive().optional(),
|
|
177
|
+
/** Max SL distance from entry as fraction of entry px (default by risk: conservative 1.2%, balanced 2%, aggressive 3%). */
|
|
178
|
+
maxSlPctFromEntry: z.number().positive().optional(),
|
|
179
|
+
/** Block bracket when computed SL touch prob exceeds this (ATR barrier model). */
|
|
180
|
+
maxSlTouchProb: z.number().min(0).max(1).optional(),
|
|
181
|
+
/** Block when SL touch prob × slSweepLiquidityMultiplier exceeds this (stop-hunt adjusted). */
|
|
182
|
+
maxSlSweepProb: z.number().min(0).max(1).optional(),
|
|
183
|
+
/** Move SL away from structure by this × ATR₁h before execute (buy: down, sell: up). 0 = off. */
|
|
184
|
+
slAntiSweepAtrFactor: z.number().nonnegative().optional(),
|
|
185
|
+
/** Multiplier on SL touch prob to approximate stop-hunt / AI sweep risk (default 2). */
|
|
186
|
+
slSweepLiquidityMultiplier: z.number().positive().optional(),
|
|
187
|
+
/** Default ambush TTL minutes when model omits expires_in_min (15–30 typical). */
|
|
188
|
+
defaultAmbushExpiresMin: z.number().positive().optional(),
|
|
189
|
+
/** Block cancel_all while unexpired TTL ambush entry is still pending (default true). */
|
|
190
|
+
forbidCancelAllWithActiveAmbush: z.boolean().default(true),
|
|
191
|
+
});
|
|
192
|
+
export const AdviseExecuteRecordSchema = z.object({
|
|
193
|
+
action: z.string(),
|
|
194
|
+
atMs: z.number(),
|
|
146
195
|
});
|
|
147
196
|
export const TradeStateFileSchema = z.object({
|
|
148
197
|
version: z.literal(1),
|
|
@@ -150,6 +199,8 @@ export const TradeStateFileSchema = z.object({
|
|
|
150
199
|
intents: z.record(z.string(), IntentRecordSchema),
|
|
151
200
|
events: z.array(StateEventSchema),
|
|
152
201
|
userProfile: UserProfileSchema.optional(),
|
|
202
|
+
/** Last successful advise execute per `${coin}:${action}` (cooldown guard). */
|
|
203
|
+
adviseExecuteHistory: z.record(z.string(), AdviseExecuteRecordSchema).optional(),
|
|
153
204
|
});
|
|
154
205
|
export function createEmptyTradeState(nowMs) {
|
|
155
206
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/core/state/schema.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/core/state/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,19 @@ export declare function indexOpenOrdersByOid(rows: NormalizedOpenOrder[]): Map<n
|
|
|
16
16
|
* Positive = long, negative = short for standard perps display.
|
|
17
17
|
*/
|
|
18
18
|
export declare function signedPositionSizeForCoin(chState: JsonValue, coin: string): number | undefined;
|
|
19
|
+
/** DEX name for `clearinghouseState(user, dex)` — explicit intent.dex or inferred from `deployer:ASSET`. */
|
|
20
|
+
export declare function resolveClearinghouseDexForCoin(coin: string, dex?: string): string | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Read signed position for `coin` from a per-dex clearinghouse cache (`""` = default dex).
|
|
23
|
+
* Used by bracket reconcile so HIP-3 builder perps match advise snapshots.
|
|
24
|
+
*/
|
|
25
|
+
export declare function signedPositionSizeForCoinFromCache(cache: ReadonlyMap<string, JsonValue>, coin: string, dex?: string): number | undefined;
|
|
26
|
+
/** Collect dex keys (plus default "") needed for bracket intents in one reconcile pass. */
|
|
27
|
+
export declare function clearinghouseDexKeysForBracketIntents(intents: Record<string, {
|
|
28
|
+
kind: string;
|
|
29
|
+
coin?: string;
|
|
30
|
+
dex?: string;
|
|
31
|
+
}>): Set<string>;
|
|
19
32
|
export declare function gridSummaryCounts(legs: Array<{
|
|
20
33
|
legPhase: string;
|
|
21
34
|
}>): Record<string, number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/core/state/snapshot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/core/state/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAeF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,GAAG,mBAAmB,EAAE,CA+C9E;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,mBAAmB,EAAE,GAC1B,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAMlC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA8B9F;AAED,4GAA4G;AAC5G,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM7F;AAMD;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EACrC,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAQpB;AAED,2FAA2F;AAC3F,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACrE,GAAG,CAAC,MAAM,CAAC,CASb;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAa3F"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { inferHlDexFromPrefixedPerpCoin } from "../hyperliquid/prefixedPerpCoin.js";
|
|
1
2
|
function parseSide(raw) {
|
|
2
3
|
if (raw === true || raw === "B" || raw === "b" || raw === "Buy") {
|
|
3
4
|
return "buy";
|
|
@@ -98,6 +99,41 @@ export function signedPositionSizeForCoin(chState, coin) {
|
|
|
98
99
|
}
|
|
99
100
|
return undefined;
|
|
100
101
|
}
|
|
102
|
+
/** DEX name for `clearinghouseState(user, dex)` — explicit intent.dex or inferred from `deployer:ASSET`. */
|
|
103
|
+
export function resolveClearinghouseDexForCoin(coin, dex) {
|
|
104
|
+
const explicit = dex?.trim();
|
|
105
|
+
if (explicit) {
|
|
106
|
+
return explicit;
|
|
107
|
+
}
|
|
108
|
+
return inferHlDexFromPrefixedPerpCoin(coin);
|
|
109
|
+
}
|
|
110
|
+
function clearinghouseCacheKey(dex) {
|
|
111
|
+
return dex ?? "";
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Read signed position for `coin` from a per-dex clearinghouse cache (`""` = default dex).
|
|
115
|
+
* Used by bracket reconcile so HIP-3 builder perps match advise snapshots.
|
|
116
|
+
*/
|
|
117
|
+
export function signedPositionSizeForCoinFromCache(cache, coin, dex) {
|
|
118
|
+
const resolvedDex = resolveClearinghouseDexForCoin(coin, dex);
|
|
119
|
+
const key = clearinghouseCacheKey(resolvedDex);
|
|
120
|
+
const ch = cache.get(key) ?? cache.get("");
|
|
121
|
+
if (!ch) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
return signedPositionSizeForCoin(ch, coin);
|
|
125
|
+
}
|
|
126
|
+
/** Collect dex keys (plus default "") needed for bracket intents in one reconcile pass. */
|
|
127
|
+
export function clearinghouseDexKeysForBracketIntents(intents) {
|
|
128
|
+
const keys = new Set([""]);
|
|
129
|
+
for (const intent of Object.values(intents)) {
|
|
130
|
+
if (intent.kind !== "bracket" || !intent.coin) {
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
keys.add(clearinghouseCacheKey(resolveClearinghouseDexForCoin(intent.coin, intent.dex)));
|
|
134
|
+
}
|
|
135
|
+
return keys;
|
|
136
|
+
}
|
|
101
137
|
export function gridSummaryCounts(legs) {
|
|
102
138
|
const acc = {
|
|
103
139
|
pending: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/core/state/snapshot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/core/state/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,30 @@
|
|
|
1
1
|
import { type IntentRecord, type TradeStateFile } from "./schema.js";
|
|
2
|
+
export type TradeStateLockOptions = {
|
|
3
|
+
/** Max wait before failing (default 30s). */
|
|
4
|
+
timeoutMs?: number;
|
|
5
|
+
/** Delay between lock attempts (default 50ms). */
|
|
6
|
+
retryMs?: number;
|
|
7
|
+
};
|
|
8
|
+
/** Cross-process mutex for a state file. Retries until timeout. */
|
|
9
|
+
export declare function withTradeStateFileLock<T>(filePath: string, fn: () => Promise<T>, opts?: TradeStateLockOptions): Promise<T>;
|
|
10
|
+
/**
|
|
11
|
+
* When reconcile (or similar) writes from a snapshot taken earlier, preserve fields
|
|
12
|
+
* that other daemons may have updated in the meantime (advise cooldown, user profile).
|
|
13
|
+
*/
|
|
14
|
+
export declare function preserveConcurrentStateFields(base: TradeStateFile, fresh: TradeStateFile): TradeStateFile;
|
|
2
15
|
export declare function readTradeStateFile(filePath: string): Promise<TradeStateFile>;
|
|
3
16
|
export declare function readOrCreateTradeStateFile(filePath: string, nowMs: number): Promise<TradeStateFile>;
|
|
4
17
|
/**
|
|
5
18
|
* Atomic write: write temp in same directory, then rename over target.
|
|
19
|
+
* Acquires a cross-process file lock (with retry) for the duration of the write.
|
|
6
20
|
*/
|
|
7
|
-
export declare function writeTradeStateFileAtomic(filePath: string, state: TradeStateFile): Promise<void>;
|
|
8
|
-
|
|
9
|
-
export declare function
|
|
21
|
+
export declare function writeTradeStateFileAtomic(filePath: string, state: TradeStateFile, lockOpts?: TradeStateLockOptions): Promise<void>;
|
|
22
|
+
/** Read-modify-write under the same cross-process lock. */
|
|
23
|
+
export declare function updateTradeStateFileAtomic(filePath: string, updater: (cur: TradeStateFile) => TradeStateFile, nowMs: number, lockOpts?: TradeStateLockOptions): Promise<TradeStateFile>;
|
|
24
|
+
export declare function appendEventsAndWriteAtomic(filePath: string, state: TradeStateFile, events: TradeStateFile["events"], lockOpts?: TradeStateLockOptions): Promise<TradeStateFile>;
|
|
25
|
+
export declare function upsertIntentInStateFileAtomic(filePath: string, intent: IntentRecord, newEvents: TradeStateFile["events"], nowMs: number, lockOpts?: TradeStateLockOptions): Promise<TradeStateFile>;
|
|
10
26
|
/** Test helper: best-effort cleanup tmp if rename failed mid-flight */
|
|
11
27
|
export declare function unsafeRemoveIfExists(p: string): Promise<void>;
|
|
28
|
+
/** @internal Exposed for reconcile merge writes that already hold lock semantics. */
|
|
29
|
+
export declare function writeTradeStateFilePreservingConcurrentFields(filePath: string, base: TradeStateFile, lockOpts?: TradeStateLockOptions): Promise<void>;
|
|
12
30
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/core/state/store.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/core/state/store.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAIrB,MAAM,MAAM,qBAAqB,GAAG;IAClC,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AA8FF,mEAAmE;AACnE,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,CAAC,EAAE,qBAAqB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAQZ;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,cAAc,GACpB,cAAc,CAMhB;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwBlF;AAED,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CASzB;AAmBD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,EACrB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,2DAA2D;AAC3D,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,cAAc,EAChD,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,OAAO,CAAC,cAAc,CAAC,CAWzB;AAED,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAChC,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,OAAO,CAAC,cAAc,CAAC,CAQzB;AAED,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,EACnC,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,OAAO,CAAC,cAAc,CAAC,CAYzB;AAED,uEAAuE;AACvE,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnE;AAED,qFAAqF;AACrF,wBAAsB,6CAA6C,CACjE,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,cAAc,EACpB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
package/dist/core/state/store.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import { mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
|
|
1
|
+
import { mkdir, open, readFile, rename, unlink, writeFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { ConfigError } from "../errors.js";
|
|
4
4
|
import { createEmptyTradeState, TradeStateFileSchema, } from "./schema.js";
|
|
5
5
|
const writeChains = new Map();
|
|
6
|
+
const DEFAULT_LOCK_OPTS = {
|
|
7
|
+
timeoutMs: 30_000,
|
|
8
|
+
retryMs: 50,
|
|
9
|
+
};
|
|
6
10
|
function chainForPath(filePath, task) {
|
|
7
11
|
const prev = writeChains.get(filePath) ?? Promise.resolve();
|
|
8
12
|
const next = prev.then(task, task);
|
|
@@ -13,6 +17,92 @@ function chainForPath(filePath, task) {
|
|
|
13
17
|
}));
|
|
14
18
|
return next;
|
|
15
19
|
}
|
|
20
|
+
function lockPathFor(filePath) {
|
|
21
|
+
return `${filePath}.lock`;
|
|
22
|
+
}
|
|
23
|
+
function resolveLockOpts(opts) {
|
|
24
|
+
return {
|
|
25
|
+
timeoutMs: opts?.timeoutMs ?? DEFAULT_LOCK_OPTS.timeoutMs,
|
|
26
|
+
retryMs: opts?.retryMs ?? DEFAULT_LOCK_OPTS.retryMs,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
async function sleep(ms) {
|
|
30
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
31
|
+
}
|
|
32
|
+
async function isStaleLock(lockPath) {
|
|
33
|
+
try {
|
|
34
|
+
const raw = await readFile(lockPath, "utf8");
|
|
35
|
+
const pid = Number.parseInt(raw.split("\n")[0]?.trim() ?? "", 10);
|
|
36
|
+
if (!Number.isFinite(pid) || pid <= 0) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
process.kill(pid, 0);
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
const err = e;
|
|
49
|
+
if (err?.code === "ENOENT") {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function acquireTradeStateFileLock(filePath, opts) {
|
|
56
|
+
const lockPath = lockPathFor(filePath);
|
|
57
|
+
const start = Date.now();
|
|
58
|
+
while (Date.now() - start < opts.timeoutMs) {
|
|
59
|
+
try {
|
|
60
|
+
await mkdir(path.dirname(lockPath), { recursive: true });
|
|
61
|
+
const fh = await open(lockPath, "wx");
|
|
62
|
+
await fh.writeFile(`${process.pid}\n${Date.now()}\n`);
|
|
63
|
+
return {
|
|
64
|
+
release: async () => {
|
|
65
|
+
await fh.close().catch(() => { });
|
|
66
|
+
await unlink(lockPath).catch(() => { });
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
const err = e;
|
|
72
|
+
if (err?.code !== "EEXIST") {
|
|
73
|
+
throw new ConfigError(`Unable to acquire state lock ${lockPath}: ${err.message}`);
|
|
74
|
+
}
|
|
75
|
+
if (await isStaleLock(lockPath)) {
|
|
76
|
+
await unlink(lockPath).catch(() => { });
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
await sleep(opts.retryMs);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
throw new ConfigError(`Timed out after ${opts.timeoutMs}ms waiting for state file lock: ${filePath}`);
|
|
83
|
+
}
|
|
84
|
+
/** Cross-process mutex for a state file. Retries until timeout. */
|
|
85
|
+
export async function withTradeStateFileLock(filePath, fn, opts) {
|
|
86
|
+
const lockOpts = resolveLockOpts(opts);
|
|
87
|
+
const { release } = await acquireTradeStateFileLock(filePath, lockOpts);
|
|
88
|
+
try {
|
|
89
|
+
return await fn();
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
await release();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* When reconcile (or similar) writes from a snapshot taken earlier, preserve fields
|
|
97
|
+
* that other daemons may have updated in the meantime (advise cooldown, user profile).
|
|
98
|
+
*/
|
|
99
|
+
export function preserveConcurrentStateFields(base, fresh) {
|
|
100
|
+
return {
|
|
101
|
+
...base,
|
|
102
|
+
adviseExecuteHistory: fresh.adviseExecuteHistory ?? base.adviseExecuteHistory,
|
|
103
|
+
userProfile: fresh.userProfile ?? base.userProfile,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
16
106
|
export async function readTradeStateFile(filePath) {
|
|
17
107
|
let raw;
|
|
18
108
|
try {
|
|
@@ -49,10 +139,7 @@ export async function readOrCreateTradeStateFile(filePath, nowMs) {
|
|
|
49
139
|
throw e;
|
|
50
140
|
}
|
|
51
141
|
}
|
|
52
|
-
|
|
53
|
-
* Atomic write: write temp in same directory, then rename over target.
|
|
54
|
-
*/
|
|
55
|
-
export async function writeTradeStateFileAtomic(filePath, state) {
|
|
142
|
+
async function writeTradeStateFileAtomicUnlocked(filePath, state) {
|
|
56
143
|
const dir = path.dirname(filePath);
|
|
57
144
|
const base = path.basename(filePath);
|
|
58
145
|
const tmp = path.join(dir, `.${base}.${process.pid}.${Date.now()}.tmp`);
|
|
@@ -63,25 +150,40 @@ export async function writeTradeStateFileAtomic(filePath, state) {
|
|
|
63
150
|
await rename(tmp, filePath);
|
|
64
151
|
});
|
|
65
152
|
}
|
|
66
|
-
|
|
153
|
+
/**
|
|
154
|
+
* Atomic write: write temp in same directory, then rename over target.
|
|
155
|
+
* Acquires a cross-process file lock (with retry) for the duration of the write.
|
|
156
|
+
*/
|
|
157
|
+
export async function writeTradeStateFileAtomic(filePath, state, lockOpts) {
|
|
158
|
+
await withTradeStateFileLock(filePath, async () => {
|
|
159
|
+
await writeTradeStateFileAtomicUnlocked(filePath, state);
|
|
160
|
+
}, lockOpts);
|
|
161
|
+
}
|
|
162
|
+
/** Read-modify-write under the same cross-process lock. */
|
|
163
|
+
export async function updateTradeStateFileAtomic(filePath, updater, nowMs, lockOpts) {
|
|
164
|
+
return withTradeStateFileLock(filePath, async () => {
|
|
165
|
+
const cur = await readOrCreateTradeStateFile(filePath, nowMs);
|
|
166
|
+
const next = updater(cur);
|
|
167
|
+
await writeTradeStateFileAtomicUnlocked(filePath, next);
|
|
168
|
+
return next;
|
|
169
|
+
}, lockOpts);
|
|
170
|
+
}
|
|
171
|
+
export async function appendEventsAndWriteAtomic(filePath, state, events, lockOpts) {
|
|
67
172
|
const next = {
|
|
68
173
|
...state,
|
|
69
174
|
updatedAtMs: Date.now(),
|
|
70
175
|
events: [...state.events, ...events],
|
|
71
176
|
};
|
|
72
|
-
await writeTradeStateFileAtomic(filePath, next);
|
|
177
|
+
await writeTradeStateFileAtomic(filePath, next, lockOpts);
|
|
73
178
|
return next;
|
|
74
179
|
}
|
|
75
|
-
export async function upsertIntentInStateFileAtomic(filePath, intent, newEvents, nowMs) {
|
|
76
|
-
|
|
77
|
-
const next = {
|
|
180
|
+
export async function upsertIntentInStateFileAtomic(filePath, intent, newEvents, nowMs, lockOpts) {
|
|
181
|
+
return updateTradeStateFileAtomic(filePath, (cur) => ({
|
|
78
182
|
...cur,
|
|
79
183
|
updatedAtMs: nowMs,
|
|
80
184
|
intents: { ...cur.intents, [intent.id]: intent },
|
|
81
185
|
events: [...cur.events, ...newEvents],
|
|
82
|
-
};
|
|
83
|
-
await writeTradeStateFileAtomic(filePath, next);
|
|
84
|
-
return next;
|
|
186
|
+
}), nowMs, lockOpts);
|
|
85
187
|
}
|
|
86
188
|
/** Test helper: best-effort cleanup tmp if rename failed mid-flight */
|
|
87
189
|
export async function unsafeRemoveIfExists(p) {
|
|
@@ -92,4 +194,11 @@ export async function unsafeRemoveIfExists(p) {
|
|
|
92
194
|
/* ignore */
|
|
93
195
|
}
|
|
94
196
|
}
|
|
197
|
+
/** @internal Exposed for reconcile merge writes that already hold lock semantics. */
|
|
198
|
+
export async function writeTradeStateFilePreservingConcurrentFields(filePath, base, lockOpts) {
|
|
199
|
+
await withTradeStateFileLock(filePath, async () => {
|
|
200
|
+
const fresh = await readOrCreateTradeStateFile(filePath, base.updatedAtMs);
|
|
201
|
+
await writeTradeStateFileAtomicUnlocked(filePath, preserveConcurrentStateFields(base, fresh));
|
|
202
|
+
}, lockOpts);
|
|
203
|
+
}
|
|
95
204
|
//# sourceMappingURL=store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/core/state/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/core/state/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,19 @@ export type ReconcileAction = {
|
|
|
29
29
|
intentId: string;
|
|
30
30
|
legIndex: number;
|
|
31
31
|
replenishDedupeKey: string;
|
|
32
|
+
} | {
|
|
33
|
+
kind: "isolated_top_up";
|
|
34
|
+
coin: string;
|
|
35
|
+
dex?: string;
|
|
36
|
+
addUsd: number;
|
|
37
|
+
partial: boolean;
|
|
38
|
+
neededUsd: number;
|
|
39
|
+
} | {
|
|
40
|
+
kind: "isolated_top_up_skip";
|
|
41
|
+
coin: string;
|
|
42
|
+
dex?: string;
|
|
43
|
+
reason: string;
|
|
44
|
+
report: Record<string, unknown>;
|
|
32
45
|
};
|
|
33
46
|
export type StateEventRow = {
|
|
34
47
|
t: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/state/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,eAAe,GACf,eAAe,GACf,cAAc,GACd,mBAAmB,GACnB,WAAW,GACX,WAAW,GACX,QAAQ,GACR,WAAW,GACX,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEnF,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/state/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,eAAe,GACf,eAAe,GACf,cAAc,GACd,mBAAmB,GACnB,WAAW,GACX,WAAW,GACX,QAAQ,GACR,WAAW,GACX,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEnF,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,IAAI,EAAE,sBAAsB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC"}
|
package/dist/daemon/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { spawn } from "node:child_process";
|
|
3
|
+
import { appendFile } from "node:fs/promises";
|
|
3
4
|
import { Command } from "commander";
|
|
4
5
|
import { dirname, join } from "node:path";
|
|
5
6
|
import { fileURLToPath } from "node:url";
|
|
6
7
|
import { VERSION } from "../meta/version.js";
|
|
7
8
|
import { formatErrorForStderr } from "../core/errorFormat.js";
|
|
8
9
|
import { prependChildGlobalArgs } from "./childArgs.js";
|
|
10
|
+
import { inferDaemonChildMode, validateDaemonChild } from "./validateChild.js";
|
|
9
11
|
function sleep(ms) {
|
|
10
12
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
11
13
|
}
|
|
@@ -65,7 +67,9 @@ async function main() {
|
|
|
65
67
|
.option("--jcc-bin <path>", "Executable for jcc_hyper_tool (default: env JCC_HYPER_TOOL_BIN, else current Node + bundled cli/index.js)")
|
|
66
68
|
.option("--network <network>", "Prepended before child args: same as jcc_hyper_tool --network (omit if child or env JCC_HYPER_NETWORK is enough)")
|
|
67
69
|
.option("--api-url <url>", "Prepended: --api-url for each child (omit if env or child sets it)")
|
|
68
|
-
.option("--state-file <path>", "Prepended: --state-file for each child (omit if env JCC_HYPER_STATE_FILE or child sets it)")
|
|
70
|
+
.option("--state-file <path>", "Prepended: --state-file for each child (omit if env JCC_HYPER_STATE_FILE or child sets it)")
|
|
71
|
+
.option("--mode <mode>", "Optional guard: grid (= state reconcile only) or advise (= advise loop only); do not mix in one daemon")
|
|
72
|
+
.option("--log-file <path>", "Append daemon execution log to file (timestamps, exit codes, errors)");
|
|
69
73
|
try {
|
|
70
74
|
await program.parseAsync([...daemonArgv], { from: "user" });
|
|
71
75
|
}
|
|
@@ -82,6 +86,44 @@ async function main() {
|
|
|
82
86
|
process.exitCode = 1;
|
|
83
87
|
return;
|
|
84
88
|
}
|
|
89
|
+
const modeRaw = opts.mode?.trim();
|
|
90
|
+
let mode;
|
|
91
|
+
if (modeRaw) {
|
|
92
|
+
if (modeRaw !== "grid" && modeRaw !== "advise") {
|
|
93
|
+
process.stderr.write("--mode must be `grid` or `advise`.\n");
|
|
94
|
+
process.exitCode = 1;
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
mode = modeRaw;
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
validateDaemonChild({
|
|
101
|
+
childArgv,
|
|
102
|
+
interval: opts.interval,
|
|
103
|
+
once: opts.once,
|
|
104
|
+
mode,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
process.stderr.write(`${formatErrorForStderr(e)}\n`);
|
|
109
|
+
process.exitCode = 1;
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
function isoNow() {
|
|
113
|
+
return new Date().toISOString();
|
|
114
|
+
}
|
|
115
|
+
async function daemonLog(msg) {
|
|
116
|
+
const line = `[${isoNow()}] ${msg}`;
|
|
117
|
+
process.stderr.write(line + "\n");
|
|
118
|
+
if (opts.logFile) {
|
|
119
|
+
await appendFile(opts.logFile, line + "\n", "utf-8").catch(() => { });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const inferred = inferDaemonChildMode(childArgv);
|
|
123
|
+
if (inferred === "grid" || inferred === "advise") {
|
|
124
|
+
const info = `mode=${mode ?? inferred} interval=${opts.interval}s child=${childArgv.slice(0, 4).join(" ")}…`;
|
|
125
|
+
await daemonLog(`daemon started: ${info}`);
|
|
126
|
+
}
|
|
85
127
|
const { file, argsPrefix } = resolveToolInvocation(opts.jccBin);
|
|
86
128
|
const childWithGlobals = prependChildGlobalArgs(childArgv, {
|
|
87
129
|
network: opts.network,
|
|
@@ -96,15 +138,18 @@ async function main() {
|
|
|
96
138
|
process.once("SIGTERM", stop);
|
|
97
139
|
let again = true;
|
|
98
140
|
while (again) {
|
|
141
|
+
await daemonLog(`开始执行: ${fullArgs.join(" ")}`);
|
|
99
142
|
const code = await runChild(file, fullArgs);
|
|
100
143
|
if (code !== 0) {
|
|
101
|
-
|
|
144
|
+
await daemonLog(`child exited with code ${code}`);
|
|
102
145
|
}
|
|
103
146
|
if (opts.once) {
|
|
104
147
|
process.exitCode = code === 0 ? 0 : 1;
|
|
105
148
|
again = false;
|
|
106
149
|
continue;
|
|
107
150
|
}
|
|
151
|
+
const next = new Date(Date.now() + opts.interval * 1000);
|
|
152
|
+
await daemonLog(`本轮完成,下次执行 ${next.toLocaleTimeString("zh-CN", { hour12: false })} (${opts.interval}s 后)`);
|
|
108
153
|
await sleep(opts.interval * 1000);
|
|
109
154
|
}
|
|
110
155
|
}
|