dexbot 1.4.25 → 1.5.0

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 (182) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +6 -2
  3. package/analysis/README.md +14 -7
  4. package/analysis/ama_fitting/package.json +1 -1
  5. package/analysis/analyze_derivatives.ts +1 -1
  6. package/analysis/bot_key_utils.ts +272 -3
  7. package/analysis/bot_usage/discover_bot_accounts.ts +64 -9
  8. package/analysis/bot_usage/kibana_bot_queries.ts +40 -1
  9. package/analysis/chart_utils.ts +6 -3
  10. package/analysis/grid_correction_check.ts +56 -20
  11. package/analysis/resolve_bot_accounts.ts +199 -0
  12. package/analysis/trade_profitability.ts +36 -8
  13. package/analysis/tradingview/README.md +25 -0
  14. package/analysis/tradingview/analyze_tradingview.ts +2 -2
  15. package/analysis/trend_detection/package.json +1 -1
  16. package/claw/modules/claw_launcher.ts +5 -4
  17. package/claw/modules/credit_runtime_adapter.ts +2 -1
  18. package/claw/modules/dexbot_profiles.ts +4 -3
  19. package/claw/package.json +1 -1
  20. package/claw/runtimes/openclaw-plugin/openclaw.plugin.json +1 -1
  21. package/claw/runtimes/openclaw-plugin/package.json +1 -1
  22. package/claw/tests/test_claw_mcp_transport.ts +2 -2
  23. package/dist/analysis/analyze_derivatives.js +1 -1
  24. package/dist/analysis/bot_key_utils.d.ts +28 -1
  25. package/dist/analysis/bot_key_utils.d.ts.map +1 -1
  26. package/dist/analysis/bot_key_utils.js +385 -3
  27. package/dist/analysis/bot_key_utils.js.map +1 -1
  28. package/dist/analysis/bot_usage/discover_bot_accounts.js +60 -10
  29. package/dist/analysis/bot_usage/discover_bot_accounts.js.map +1 -1
  30. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts +45 -1
  31. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts.map +1 -1
  32. package/dist/analysis/bot_usage/kibana_bot_queries.js +39 -1
  33. package/dist/analysis/bot_usage/kibana_bot_queries.js.map +1 -1
  34. package/dist/analysis/chart_utils.d.ts +2 -1
  35. package/dist/analysis/chart_utils.d.ts.map +1 -1
  36. package/dist/analysis/chart_utils.js +4 -1
  37. package/dist/analysis/chart_utils.js.map +1 -1
  38. package/dist/analysis/grid_correction_check.d.ts.map +1 -1
  39. package/dist/analysis/grid_correction_check.js +60 -20
  40. package/dist/analysis/grid_correction_check.js.map +1 -1
  41. package/dist/analysis/resolve_bot_accounts.d.ts +3 -0
  42. package/dist/analysis/resolve_bot_accounts.d.ts.map +1 -0
  43. package/dist/analysis/resolve_bot_accounts.js +216 -0
  44. package/dist/analysis/resolve_bot_accounts.js.map +1 -0
  45. package/dist/analysis/trade_profitability.d.ts.map +1 -1
  46. package/dist/analysis/trade_profitability.js +40 -8
  47. package/dist/analysis/trade_profitability.js.map +1 -1
  48. package/dist/analysis/tradingview/analyze_tradingview.js +2 -2
  49. package/dist/analysis/tradingview/analyze_tradingview.js.map +1 -1
  50. package/dist/bot.d.ts.map +1 -1
  51. package/dist/bot.js +2 -1
  52. package/dist/bot.js.map +1 -1
  53. package/dist/dexbot.d.ts.map +1 -1
  54. package/dist/dexbot.js +73 -17
  55. package/dist/dexbot.js.map +1 -1
  56. package/dist/market_adapter/ama_signal_runner.js +2 -2
  57. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js +2 -1
  58. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js.map +1 -1
  59. package/dist/market_adapter/inputs/fetch_lp_data.d.ts +4 -1
  60. package/dist/market_adapter/inputs/fetch_lp_data.d.ts.map +1 -1
  61. package/dist/market_adapter/inputs/fetch_lp_data.js +3 -2
  62. package/dist/market_adapter/inputs/fetch_lp_data.js.map +1 -1
  63. package/dist/modules/account_bots.d.ts +42 -1
  64. package/dist/modules/account_bots.d.ts.map +1 -1
  65. package/dist/modules/account_bots.js +168 -17
  66. package/dist/modules/account_bots.js.map +1 -1
  67. package/dist/modules/bitshares_client.d.ts +4 -1
  68. package/dist/modules/bitshares_client.d.ts.map +1 -1
  69. package/dist/modules/bitshares_client.js +12 -4
  70. package/dist/modules/bitshares_client.js.map +1 -1
  71. package/dist/modules/bot_settings.d.ts.map +1 -1
  72. package/dist/modules/bot_settings.js +2 -1
  73. package/dist/modules/bot_settings.js.map +1 -1
  74. package/dist/modules/cli_colors.d.ts +39 -0
  75. package/dist/modules/cli_colors.d.ts.map +1 -0
  76. package/dist/modules/cli_colors.js +42 -0
  77. package/dist/modules/cli_colors.js.map +1 -0
  78. package/dist/modules/constants.d.ts.map +1 -1
  79. package/dist/modules/constants.js +15 -11
  80. package/dist/modules/constants.js.map +1 -1
  81. package/dist/modules/credit_pricing.d.ts +61 -0
  82. package/dist/modules/credit_pricing.d.ts.map +1 -0
  83. package/dist/modules/credit_pricing.js +237 -0
  84. package/dist/modules/credit_pricing.js.map +1 -0
  85. package/dist/modules/credit_runtime.d.ts +1 -0
  86. package/dist/modules/credit_runtime.d.ts.map +1 -1
  87. package/dist/modules/credit_runtime.js +49 -107
  88. package/dist/modules/credit_runtime.js.map +1 -1
  89. package/dist/modules/dexbot_class.d.ts +2 -1
  90. package/dist/modules/dexbot_class.d.ts.map +1 -1
  91. package/dist/modules/dexbot_class.js +22 -6
  92. package/dist/modules/dexbot_class.js.map +1 -1
  93. package/dist/modules/dexbot_cow_runtime.d.ts +19 -2
  94. package/dist/modules/dexbot_cow_runtime.d.ts.map +1 -1
  95. package/dist/modules/dexbot_cow_runtime.js +249 -26
  96. package/dist/modules/dexbot_cow_runtime.js.map +1 -1
  97. package/dist/modules/dexbot_maintenance_runtime.d.ts +15 -16
  98. package/dist/modules/dexbot_maintenance_runtime.d.ts.map +1 -1
  99. package/dist/modules/dexbot_maintenance_runtime.js +69 -42
  100. package/dist/modules/dexbot_maintenance_runtime.js.map +1 -1
  101. package/dist/modules/fund_registry.d.ts +1 -1
  102. package/dist/modules/fund_registry.js +1 -1
  103. package/dist/modules/launcher/adapter_requirement.d.ts +38 -0
  104. package/dist/modules/launcher/adapter_requirement.d.ts.map +1 -0
  105. package/dist/modules/launcher/adapter_requirement.js +141 -0
  106. package/dist/modules/launcher/adapter_requirement.js.map +1 -0
  107. package/dist/modules/launcher/bot_supervisor.d.ts +2 -2
  108. package/dist/modules/launcher/bot_supervisor.d.ts.map +1 -1
  109. package/dist/modules/launcher/bot_supervisor.js +32 -3
  110. package/dist/modules/launcher/bot_supervisor.js.map +1 -1
  111. package/dist/modules/launcher/launch_modes.d.ts.map +1 -1
  112. package/dist/modules/launcher/launch_modes.js +5 -4
  113. package/dist/modules/launcher/launch_modes.js.map +1 -1
  114. package/dist/modules/launcher/monolithic_runtime.d.ts +1 -1
  115. package/dist/modules/launcher/monolithic_runtime.d.ts.map +1 -1
  116. package/dist/modules/launcher/monolithic_runtime.js +12 -8
  117. package/dist/modules/launcher/monolithic_runtime.js.map +1 -1
  118. package/dist/modules/launcher/status_reporting.d.ts +6 -6
  119. package/dist/modules/launcher/status_reporting.d.ts.map +1 -1
  120. package/dist/modules/launcher/status_reporting.js +9 -6
  121. package/dist/modules/launcher/status_reporting.js.map +1 -1
  122. package/dist/modules/order/export.d.ts +1 -1
  123. package/dist/modules/order/export.js +1 -1
  124. package/dist/modules/order/grid.d.ts.map +1 -1
  125. package/dist/modules/order/grid.js +47 -12
  126. package/dist/modules/order/grid.js.map +1 -1
  127. package/dist/modules/order/logger.d.ts +23 -1
  128. package/dist/modules/order/logger.d.ts.map +1 -1
  129. package/dist/modules/order/logger.js +60 -17
  130. package/dist/modules/order/logger.js.map +1 -1
  131. package/dist/modules/order/manager.d.ts.map +1 -1
  132. package/dist/modules/order/manager.js +43 -3
  133. package/dist/modules/order/manager.js.map +1 -1
  134. package/dist/modules/order/sync_engine.js +1 -1
  135. package/dist/modules/order/utils/system.d.ts +52 -4
  136. package/dist/modules/order/utils/system.d.ts.map +1 -1
  137. package/dist/modules/order/utils/system.js +106 -14
  138. package/dist/modules/order/utils/system.js.map +1 -1
  139. package/dist/modules/order/utils/validate.d.ts +1 -1
  140. package/dist/modules/order/utils/validate.d.ts.map +1 -1
  141. package/dist/modules/order/utils/validate.js +43 -3
  142. package/dist/modules/order/utils/validate.js.map +1 -1
  143. package/dist/modules/utils/chain_logs.d.ts +11 -0
  144. package/dist/modules/utils/chain_logs.d.ts.map +1 -0
  145. package/dist/modules/utils/chain_logs.js +23 -0
  146. package/dist/modules/utils/chain_logs.js.map +1 -0
  147. package/dist/modules/utils/sanitize_key.d.ts +7 -0
  148. package/dist/modules/utils/sanitize_key.d.ts.map +1 -1
  149. package/dist/modules/utils/sanitize_key.js +15 -0
  150. package/dist/modules/utils/sanitize_key.js.map +1 -1
  151. package/dist/pm2.d.ts +11 -1
  152. package/dist/pm2.d.ts.map +1 -1
  153. package/dist/pm2.js +66 -15
  154. package/dist/pm2.js.map +1 -1
  155. package/dist/scripts/analyze-credit.d.ts +4 -0
  156. package/dist/scripts/analyze-credit.d.ts.map +1 -0
  157. package/dist/scripts/analyze-credit.js +760 -0
  158. package/dist/scripts/analyze-credit.js.map +1 -0
  159. package/dist/scripts/analyze-orders.d.ts +1 -10
  160. package/dist/scripts/analyze-orders.d.ts.map +1 -1
  161. package/dist/scripts/analyze-orders.js +11 -34
  162. package/dist/scripts/analyze-orders.js.map +1 -1
  163. package/dist/scripts/test-credit-renewal.d.ts.map +1 -1
  164. package/dist/scripts/test-credit-renewal.js +37 -5
  165. package/dist/scripts/test-credit-renewal.js.map +1 -1
  166. package/dist/scripts/tv.d.ts +11 -0
  167. package/dist/scripts/tv.d.ts.map +1 -0
  168. package/dist/scripts/tv.js +357 -0
  169. package/dist/scripts/tv.js.map +1 -0
  170. package/dist/scripts/update.js +77 -10
  171. package/dist/scripts/update.js.map +1 -1
  172. package/dist/unlock.d.ts.map +1 -1
  173. package/dist/unlock.js +20 -8
  174. package/dist/unlock.js.map +1 -1
  175. package/docs/DEXBOT_COMPARISON.md +3 -3
  176. package/docs/EVOLUTION.md +7 -6
  177. package/docs/FUND_MOVEMENT_AND_ACCOUNTING.md +1 -1
  178. package/docs/MPA_CREDIT_USAGE.md +3 -1
  179. package/docs/README.md +2 -2
  180. package/docs/WORKFLOW.md +3 -1
  181. package/package.json +2 -1
  182. package/scripts/README.md +12 -0
@@ -2,7 +2,7 @@
2
2
  "id": "bitshares-claw",
3
3
  "name": "BitShares Claw",
4
4
  "description": "Native BitShares and DEXBot2 tools from the DEXBot2 claw integration",
5
- "version": "1.4.25",
5
+ "version": "1.5.0",
6
6
  "skills": [
7
7
  "skills"
8
8
  ],
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bitshares-claw-openclaw-plugin",
3
3
  "private": true,
4
- "version": "1.4.25",
4
+ "version": "1.5.0",
5
5
  "type": "module",
6
6
  "main": "index.js"
7
7
  }
@@ -30,7 +30,7 @@ async function testParserAcceptsJsonlAcrossChunksAndSingleBuffer() {
30
30
  capabilities: {},
31
31
  clientInfo: {
32
32
  name: 'claw-mcp-transport-test',
33
- version: '1.4.25'
33
+ version: '1.5.0'
34
34
  },
35
35
  protocolVersion: '2024-11-05'
36
36
  }
@@ -187,7 +187,7 @@ async function testMainEntrypointHandlesRealProcessInitialize() {
187
187
  capabilities: {},
188
188
  clientInfo: {
189
189
  name: 'claw-mcp-transport-test',
190
- version: '1.4.25'
190
+ version: '1.5.0'
191
191
  },
192
192
  protocolVersion: '2024-11-05'
193
193
  }
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * node dist/analysis/analyze_derivatives.js \\
15
15
  * --source market_adapter \
16
- * --bot-key XRP-BTS
16
+ * --bot-key AAA-BBB
17
17
  *
18
18
  * Output:
19
19
  * analysis/charts/derivative_chart.html
@@ -5,7 +5,34 @@ declare function resolveBotKey(botName: any, filePath?: string): string | null;
5
5
  declare function candleFileForBot(botKey: string, intervalLabel: string, dataDir?: string): string;
6
6
  declare function resolveCandleFile(botKey: string, intervalLabel: string, dataDir?: string, botsFile?: string): string | null;
7
7
  declare function loadBotMeta(botKey: any, filePath?: string): any;
8
+ /**
9
+ * Persist a resolved account name → ID mapping onto the bot entry in
10
+ * profiles/bots.json (`accountId` next to `preferredAccount`), so analysis
11
+ * tools can skip the chain lookup on subsequent runs. No-op when the stored
12
+ * value already matches. Prefers a byte-preserving textual patch (comments,
13
+ * key order and formatting survive); falls back to a full rewrite using the
14
+ * same atomic writeJSON serialization the bot editor uses. Returns true when
15
+ * the file was updated.
16
+ */
17
+ declare function persistBotAccountId(botKey: any, accountId: string, filePath?: string): boolean;
18
+ /**
19
+ * Return the stored chain account ID for a bot key, or null when none is
20
+ * stamped yet. When expectedRef is given, the stored ID is only returned if
21
+ * the entry's current preferredAccount still matches it — a rename must
22
+ * never silently reuse a stale ID.
23
+ */
24
+ declare function getStoredBotAccountId(botKey: any, expectedRef?: string | null, filePath?: string): string | null;
25
+ /**
26
+ * Find the bot entry whose preferredAccount matches a raw account reference
27
+ * (case-insensitive). Used by tools that accept a bare account name to locate
28
+ * the stored accountId and the persist target. Returns null for 1.2.x input
29
+ * or when no bot claims the name.
30
+ */
31
+ declare function findBotKeyByAccountRef(ref: any, filePath?: string): {
32
+ botKey: string;
33
+ meta: any;
34
+ } | null;
8
35
  declare function resolveAmaConfig(botKey: any): any;
9
36
  declare function resolveAmaKey(botKey: any): string;
10
- export { loadBotSettings, sanitizeKey, computeBotKey, resolveBotKey, candleFileForBot, resolveCandleFile, loadBotMeta, resolveAmaConfig, resolveAmaKey };
37
+ export { loadBotSettings, sanitizeKey, computeBotKey, resolveBotKey, candleFileForBot, resolveCandleFile, loadBotMeta, getStoredBotAccountId, findBotKeyByAccountRef, persistBotAccountId, resolveAmaConfig, resolveAmaKey };
11
38
  //# sourceMappingURL=bot_key_utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bot_key_utils.d.ts","sourceRoot":"","sources":["../../analysis/bot_key_utils.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAU/D,iBAAS,eAAe,CAAC,QAAQ,SAA2B,OAO3D;AAED,iBAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,UAM7C;AAED,iBAAS,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,SAA2B,iBAQvE;AAED,iBAAS,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,SAAgC,UAEvG;AAED,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,SAAgC,EAAE,QAAQ,SAA2B,iBAS7I;AAED,iBAAS,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,SAA2B,OASpE;AAED,iBAAS,gBAAgB,CAAC,MAAM,EAAE,GAAG,OAuEpC;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,GAAG,UAQjC;AAED,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAA"}
1
+ {"version":3,"file":"bot_key_utils.d.ts","sourceRoot":"","sources":["../../analysis/bot_key_utils.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAU/D,iBAAS,eAAe,CAAC,QAAQ,SAA2B,OAa3D;AAED,iBAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,UAM7C;AAED,iBAAS,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,SAA2B,iBAQvE;AAED,iBAAS,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,SAAgC,UAEvG;AAED,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,SAAgC,EAAE,QAAQ,SAA2B,iBAS7I;AAED,iBAAS,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,SAA2B,OASpE;AAwLD;;;;;;;;GAQG;AACH,iBAAS,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,SAA2B,GAAG,OAAO,CAwBzG;AAED;;;;;GAKG;AACH,iBAAS,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,SAA2B,GAAG,MAAM,GAAG,IAAI,CAY3H;AAED;;;;;GAKG;AACH,iBAAS,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,SAA2B,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,GAAG,IAAI,CAiBnH;AAED,iBAAS,gBAAgB,CAAC,MAAM,EAAE,GAAG,OAuEpC;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,GAAG,UAQjC;AAED,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAA"}
@@ -3,7 +3,8 @@ import fs from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import { PATHS } from '../modules/paths.js';
5
5
  import { getStorage } from '../modules/storage/index.js';
6
- const { readJSON } = getStorage();
6
+ const { readJSON, writeJSON } = getStorage();
7
+ import { parseJsonWithComments } from '../modules/order/utils/system.js';
7
8
  import { MARKET_ADAPTER } from '../modules/constants.js';
8
9
  import { loadMarketProfiles } from './tradingview/tradingview_uplot_chart_generator.js';
9
10
  import { sanitizeKey } from '../modules/utils/sanitize_key.js';
@@ -20,7 +21,14 @@ function loadBotSettings(filePath = PATHS.PROFILES.BOTS_JSON) {
20
21
  return readJSON(filePath);
21
22
  }
22
23
  catch (_) {
23
- return null;
24
+ // The bot editor reads/writes through a comment-tolerant parser, so
25
+ // operator comments may legally exist — fall back before giving up.
26
+ try {
27
+ return parseJsonWithComments(fs.readFileSync(filePath, 'utf8'));
28
+ }
29
+ catch (_) {
30
+ return null;
31
+ }
24
32
  }
25
33
  }
26
34
  function computeBotKey(bot, index) {
@@ -68,6 +76,380 @@ function loadBotMeta(botKey, filePath = PATHS.PROFILES.BOTS_JSON) {
68
76
  const loose = entries.find((bot) => sanitizeKey(bot?.name) === normalizedKey.replace(/-\d+$/, ''));
69
77
  return loose || null;
70
78
  }
79
+ /**
80
+ * Locate the source span of the entryIndex-th object literal inside the
81
+ * top-level "bots" array of a (possibly comment-bearing) JSON document.
82
+ * Strings and // + block comments are skipped while scanning, so braces
83
+ * inside them never disturb the balance count. Returns null when the
84
+ * document shape is unexpected — callers fall back to a full rewrite.
85
+ */
86
+ function findBotsEntrySpan(raw, entryIndex) {
87
+ const m = /"bots"\s*:\s*\[/.exec(raw);
88
+ if (!m)
89
+ return null;
90
+ let i = m.index + m[0].length; // just past '['
91
+ const n = raw.length;
92
+ let count = 0;
93
+ const skipWsComments = () => {
94
+ while (i < n) {
95
+ const c = raw[i];
96
+ if (c === ' ' || c === '\t' || c === '\n' || c === '\r') {
97
+ i++;
98
+ continue;
99
+ }
100
+ if (c === '/' && raw[i + 1] === '/') {
101
+ while (i < n && raw[i] !== '\n')
102
+ i++;
103
+ continue;
104
+ }
105
+ if (c === '/' && raw[i + 1] === '*') {
106
+ i += 2;
107
+ while (i < n && !(raw[i] === '*' && raw[i + 1] === '/'))
108
+ i++;
109
+ i += 2;
110
+ continue;
111
+ }
112
+ break;
113
+ }
114
+ };
115
+ const skipString = () => {
116
+ const q = raw[i];
117
+ i++;
118
+ while (i < n) {
119
+ const c = raw[i];
120
+ if (c === '\\') {
121
+ i += 2;
122
+ continue;
123
+ }
124
+ if (c === q) {
125
+ i++;
126
+ return;
127
+ }
128
+ i++;
129
+ }
130
+ };
131
+ // Skip one JSON value starting at raw[i]; false on malformed input.
132
+ const skipValue = () => {
133
+ skipWsComments();
134
+ if (i >= n)
135
+ return false;
136
+ const c = raw[i];
137
+ if (c === '"' || c === "'") {
138
+ skipString();
139
+ return true;
140
+ }
141
+ if (c === '{' || c === '[') {
142
+ const open = c;
143
+ const close = c === '{' ? '}' : ']';
144
+ i++;
145
+ let depth = 1;
146
+ while (i < n && depth > 0) {
147
+ const d = raw[i];
148
+ if (d === '"' || d === "'") {
149
+ skipString();
150
+ continue;
151
+ }
152
+ if (d === '/' && raw[i + 1] === '/') {
153
+ while (i < n && raw[i] !== '\n')
154
+ i++;
155
+ continue;
156
+ }
157
+ if (d === '/' && raw[i + 1] === '*') {
158
+ i += 2;
159
+ while (i < n && !(raw[i] === '*' && raw[i + 1] === '/'))
160
+ i++;
161
+ i += 2;
162
+ continue;
163
+ }
164
+ if (d === open)
165
+ depth++;
166
+ else if (d === close)
167
+ depth--;
168
+ i++;
169
+ }
170
+ return depth === 0;
171
+ }
172
+ while (i < n && raw[i] !== ',' && raw[i] !== ']' && raw[i] !== '}')
173
+ i++;
174
+ return true;
175
+ };
176
+ for (;;) {
177
+ skipWsComments();
178
+ if (i >= n)
179
+ return null;
180
+ if (raw[i] === ']')
181
+ return null; // array ended before entryIndex
182
+ if (raw[i] === '{') {
183
+ const start = i;
184
+ if (!skipValue())
185
+ return null;
186
+ if (count === entryIndex)
187
+ return { start, end: i };
188
+ count++;
189
+ }
190
+ else if (!skipValue()) {
191
+ return null;
192
+ }
193
+ skipWsComments();
194
+ if (i < n && raw[i] === ',') {
195
+ i++;
196
+ continue;
197
+ }
198
+ if (i < n && raw[i] === ']')
199
+ return null;
200
+ return null; // malformed separator
201
+ }
202
+ }
203
+ /**
204
+ * Locate the string value of a top-level key inside one bot-entry source
205
+ * span. Unlike a regex, this scan skips over // and block comments as well
206
+ * as string literals, so a key-looking fragment inside a comment (e.g.
207
+ * `// "accountId": "1.2.9999" (old)`) can never be mistaken for the real
208
+ * key. Returns the span of the quoted value (including quotes), or null
209
+ * when the key is absent or its value is not a string.
210
+ */
211
+ function findEntryKeyValueSpan(entrySrc, key) {
212
+ const n = entrySrc.length;
213
+ const isWs = (c) => c === ' ' || c === '\t' || c === '\n' || c === '\r';
214
+ let i = 0;
215
+ let depth = 0;
216
+ while (i < n) {
217
+ const c = entrySrc[i];
218
+ if (isWs(c)) {
219
+ i++;
220
+ continue;
221
+ }
222
+ if (c === '/' && entrySrc[i + 1] === '/') {
223
+ while (i < n && entrySrc[i] !== '\n')
224
+ i++;
225
+ continue;
226
+ }
227
+ if (c === '/' && entrySrc[i + 1] === '*') {
228
+ i += 2;
229
+ while (i < n && !(entrySrc[i] === '*' && entrySrc[i + 1] === '/'))
230
+ i++;
231
+ i += 2;
232
+ continue;
233
+ }
234
+ if (c === '{' || c === '[') {
235
+ depth++;
236
+ i++;
237
+ continue;
238
+ }
239
+ if (c === '}' || c === ']') {
240
+ depth--;
241
+ i++;
242
+ continue;
243
+ }
244
+ if (c !== '"') {
245
+ i++;
246
+ continue;
247
+ }
248
+ // String literal: read it (honoring backslash escapes).
249
+ let j = i + 1;
250
+ let str = '';
251
+ while (j < n) {
252
+ const d = entrySrc[j];
253
+ if (d === '\\') {
254
+ str += entrySrc.slice(j, j + 2);
255
+ j += 2;
256
+ continue;
257
+ }
258
+ if (d === '"')
259
+ break;
260
+ str += d;
261
+ j++;
262
+ }
263
+ if (j >= n)
264
+ return null;
265
+ const closingQuote = j;
266
+ if (depth !== 1 || str !== key) {
267
+ i = closingQuote + 1;
268
+ continue;
269
+ }
270
+ // Candidate key at top level: expect `:` then a quoted value.
271
+ let k = closingQuote + 1;
272
+ while (k < n && isWs(entrySrc[k]))
273
+ k++;
274
+ if (entrySrc[k] !== ':') {
275
+ i = closingQuote + 1;
276
+ continue;
277
+ }
278
+ k++;
279
+ while (k < n && isWs(entrySrc[k]))
280
+ k++;
281
+ if (entrySrc[k] !== '"') {
282
+ i = closingQuote + 1;
283
+ continue;
284
+ }
285
+ let m = k + 1;
286
+ while (m < n) {
287
+ const e = entrySrc[m];
288
+ if (e === '\\') {
289
+ m += 2;
290
+ continue;
291
+ }
292
+ if (e === '"')
293
+ return { valueStart: k, valueEnd: m + 1 };
294
+ m++;
295
+ }
296
+ return null;
297
+ }
298
+ return null;
299
+ }
300
+ /**
301
+ * Byte-preserving accountId update: replaces the value in place, or inserts
302
+ * `"accountId"` right after `"preferredAccount"` keeping the line indent, so
303
+ * comments, key order and formatting elsewhere in the file survive. The
304
+ * patched document is re-parsed (comments allowed) and the value asserted
305
+ * before the atomic tmp+rename write. Returns false on any uncertainty —
306
+ * callers fall back to a full rewrite.
307
+ */
308
+ function patchAccountIdInRaw(filePath, entryIndex, accountId) {
309
+ let raw;
310
+ try {
311
+ raw = fs.readFileSync(filePath, 'utf8');
312
+ }
313
+ catch (_) {
314
+ return false;
315
+ }
316
+ const span = findBotsEntrySpan(raw, entryIndex);
317
+ if (!span)
318
+ return false;
319
+ const entrySrc = raw.slice(span.start, span.end);
320
+ let patchedEntry = null;
321
+ const idSpan = findEntryKeyValueSpan(entrySrc, 'accountId');
322
+ if (idSpan) {
323
+ patchedEntry = entrySrc.slice(0, idSpan.valueStart)
324
+ + `"${accountId}"`
325
+ + entrySrc.slice(idSpan.valueEnd);
326
+ }
327
+ else {
328
+ const prefSpan = findEntryKeyValueSpan(entrySrc, 'preferredAccount');
329
+ if (!prefSpan)
330
+ return false;
331
+ const lineStart = entrySrc.lastIndexOf('\n', prefSpan.valueEnd) + 1;
332
+ const indentMatch = /^[ \t]*/.exec(entrySrc.slice(lineStart));
333
+ const indent = indentMatch ? indentMatch[0] : ' ';
334
+ patchedEntry = entrySrc.slice(0, prefSpan.valueEnd)
335
+ + `,\n${indent}"accountId": "${accountId}"`
336
+ + entrySrc.slice(prefSpan.valueEnd);
337
+ }
338
+ if (!patchedEntry || patchedEntry === entrySrc)
339
+ return false;
340
+ const patched = raw.slice(0, span.start) + patchedEntry + raw.slice(span.end);
341
+ try {
342
+ const reparsed = parseJsonWithComments(patched);
343
+ const checkEntries = Array.isArray(reparsed?.bots) ? reparsed.bots : [];
344
+ if (checkEntries[entryIndex]?.accountId !== accountId)
345
+ return false;
346
+ }
347
+ catch (_) {
348
+ return false;
349
+ }
350
+ const tmpPath = `${filePath}.tmp-persist-${process.pid}-${Date.now()}`;
351
+ try {
352
+ fs.writeFileSync(tmpPath, patched, 'utf8');
353
+ fs.renameSync(tmpPath, filePath);
354
+ return true;
355
+ }
356
+ catch (_) {
357
+ try {
358
+ fs.unlinkSync(tmpPath);
359
+ }
360
+ catch (_) { /* best-effort cleanup */ }
361
+ return false;
362
+ }
363
+ }
364
+ /**
365
+ * Persist a resolved account name → ID mapping onto the bot entry in
366
+ * profiles/bots.json (`accountId` next to `preferredAccount`), so analysis
367
+ * tools can skip the chain lookup on subsequent runs. No-op when the stored
368
+ * value already matches. Prefers a byte-preserving textual patch (comments,
369
+ * key order and formatting survive); falls back to a full rewrite using the
370
+ * same atomic writeJSON serialization the bot editor uses. Returns true when
371
+ * the file was updated.
372
+ */
373
+ function persistBotAccountId(botKey, accountId, filePath = PATHS.PROFILES.BOTS_JSON) {
374
+ if (!botKey || !/^1\.2\.\d+$/.test(String(accountId)))
375
+ return false;
376
+ let settings = null;
377
+ try {
378
+ settings = loadBotSettings(filePath);
379
+ }
380
+ catch (_) {
381
+ return false;
382
+ }
383
+ const entries = Array.isArray(settings?.bots) ? settings.bots : [];
384
+ const normalizedKey = String(botKey).toLowerCase();
385
+ const index = entries.findIndex((bot, i) => computeBotKey(bot, i) === normalizedKey);
386
+ if (index < 0 || entries[index]?.accountId === accountId)
387
+ return false;
388
+ try {
389
+ if (patchAccountIdInRaw(filePath, index, String(accountId)))
390
+ return true;
391
+ }
392
+ catch (_) {
393
+ // Fall through to the full rewrite below.
394
+ }
395
+ entries[index].accountId = String(accountId);
396
+ try {
397
+ writeJSON(filePath, settings);
398
+ return true;
399
+ }
400
+ catch (_) {
401
+ return false;
402
+ }
403
+ }
404
+ /**
405
+ * Return the stored chain account ID for a bot key, or null when none is
406
+ * stamped yet. When expectedRef is given, the stored ID is only returned if
407
+ * the entry's current preferredAccount still matches it — a rename must
408
+ * never silently reuse a stale ID.
409
+ */
410
+ function getStoredBotAccountId(botKey, expectedRef, filePath = PATHS.PROFILES.BOTS_JSON) {
411
+ if (!botKey)
412
+ return null;
413
+ let meta = null;
414
+ try {
415
+ meta = loadBotMeta(botKey, filePath);
416
+ }
417
+ catch (_) {
418
+ return null;
419
+ }
420
+ const stored = meta && /^1\.2\.\d+$/.test(String(meta.accountId ?? '')) ? String(meta.accountId) : null;
421
+ if (!stored)
422
+ return null;
423
+ if (expectedRef != null && String(meta.preferredAccount ?? '').toLowerCase() !== String(expectedRef).toLowerCase())
424
+ return null;
425
+ return stored;
426
+ }
427
+ /**
428
+ * Find the bot entry whose preferredAccount matches a raw account reference
429
+ * (case-insensitive). Used by tools that accept a bare account name to locate
430
+ * the stored accountId and the persist target. Returns null for 1.2.x input
431
+ * or when no bot claims the name.
432
+ */
433
+ function findBotKeyByAccountRef(ref, filePath = PATHS.PROFILES.BOTS_JSON) {
434
+ if (!ref || /^1\.2\.\d+$/.test(String(ref)))
435
+ return null;
436
+ let settings = null;
437
+ try {
438
+ settings = loadBotSettings(filePath);
439
+ }
440
+ catch (_) {
441
+ return null;
442
+ }
443
+ const entries = Array.isArray(settings?.bots) ? settings.bots : [];
444
+ const want = String(ref).toLowerCase();
445
+ for (let i = 0; i < entries.length; i++) {
446
+ const entry = entries[i];
447
+ if (entry && String(entry.preferredAccount ?? '').toLowerCase() === want) {
448
+ return { botKey: computeBotKey(entry, i), meta: entry };
449
+ }
450
+ }
451
+ return null;
452
+ }
71
453
  function resolveAmaConfig(botKey) {
72
454
  const botMeta = loadBotMeta(botKey);
73
455
  // Unknown bot key: fall back to the global erSmoothPeriod default (same
@@ -152,5 +534,5 @@ function resolveAmaKey(botKey) {
152
534
  }
153
535
  return 'AMA3';
154
536
  }
155
- export { loadBotSettings, sanitizeKey, computeBotKey, resolveBotKey, candleFileForBot, resolveCandleFile, loadBotMeta, resolveAmaConfig, resolveAmaKey };
537
+ export { loadBotSettings, sanitizeKey, computeBotKey, resolveBotKey, candleFileForBot, resolveCandleFile, loadBotMeta, getStoredBotAccountId, findBotKeyByAccountRef, persistBotAccountId, resolveAmaConfig, resolveAmaKey };
156
538
  //# sourceMappingURL=bot_key_utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bot_key_utils.js","sourceRoot":"","sources":["../../analysis/bot_key_utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot_key_utils.js","sourceRoot":"","sources":["../../analysis/bot_key_utils.ts"],"names":[],"mappings":"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"}