neuroalpha 0.3.13 → 0.3.15

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/public/index.html CHANGED
@@ -253,18 +253,31 @@
253
253
  <input type="hidden" name="id">
254
254
  <label><span>Название счёта</span><input name="name" placeholder="Например, Т-Банк основной"></label>
255
255
  <label><span>Брокер</span>
256
- <select name="broker">
257
- <option value="tbank">Т-Банк (T-Invest API)</option>
258
- <option value="finam">Финам (Trade API)</option>
259
- <option value="alor">Алор (OpenAPI)</option>
260
- <option value="bcs">БКС Мир инвестиций</option>
256
+ <select name="broker" id="broker-select">
257
+ <optgroup label="Облачный REST API (прямое подключение по токену)">
258
+ <option value="tbank">Т-Банк (T-Invest API)</option>
259
+ <option value="finam">Финам (Finam Trade API)</option>
260
+ <option value="bcs">БКС Мир инвестиций (Trade API)</option>
261
+ <option value="alor">Алор Брокер (Alor OpenAPI v2)</option>
262
+ <option value="cifra">Цифра брокер (Tradernet API)</option>
263
+ <option value="iticapital">ITI Capital (OpenAPI)</option>
264
+ </optgroup>
265
+ <optgroup label="Подтверждение заявок (Telegram / MAX) или мост QUIK">
266
+ <option value="sber">СберИнвестиции (Сбербанк)</option>
267
+ <option value="vtb">ВТБ Мои Инвестиции</option>
268
+ <option value="alfa">Альфа-Инвестиции</option>
269
+ </optgroup>
261
270
  </select>
262
271
  </label>
263
- <label><span id="broker-token-lbl">Токен API</span><input name="token" type="text" class="secret-input" autocomplete="off" spellcheck="false" data-lpignore="true" data-1p-ignore="true" placeholder="Токен доступа к API брокера (t.…)"></label>
272
+ <details id="broker-guide-box" style="margin:2px 0 4px;border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:8px 14px">
273
+ <summary id="broker-guide-sum" style="cursor:pointer;font-weight:600;font-size:13px;color:var(--accent)">📖 Как получить токен и подключить счёт (пошаговая памятка)</summary>
274
+ <div id="broker-guide-body" class="small" style="margin-top:8px;line-height:1.55;color:var(--text)"></div>
275
+ </details>
276
+ <label><span id="broker-token-lbl">Токен API</span><input name="token" id="broker-token-input" type="text" class="secret-input" autocomplete="off" spellcheck="false" data-lpignore="true" data-1p-ignore="true" placeholder="Токен доступа к API брокера (t.…)"></label>
264
277
  <label>
265
- <span>Номер субсчёта / портфеля</span>
278
+ <span id="broker-acc-lbl">Номер субсчёта / портфеля</span>
266
279
  <div class="row-gap" style="width:100%">
267
- <input name="accountId" autocomplete="off" placeholder="ID счёта (или нажмите кнопку справа →)" style="flex:1">
280
+ <input name="accountId" id="broker-acc-input" autocomplete="off" placeholder="ID счёта (или нажмите кнопку справа →)" style="flex:1">
268
281
  <button type="button" id="btn-broker-discover" style="white-space:nowrap">🔍 Найти мои счета по токену</button>
269
282
  </div>
270
283
  </label>
@@ -353,6 +366,7 @@
353
366
  <div class="seg" id="help-tabs" style="margin:0">
354
367
  <button type="button" data-hdoc="ИНСТРУКЦИЯ.md" class="active">Как пользоваться</button>
355
368
  <button type="button" data-hdoc="МЕХАНИКА_И_ПАРАМЕТРЫ.md">Механика и параметры</button>
369
+ <button type="button" data-hdoc="БРОКЕРЫ_API.md">Подключение брокеров (API)</button>
356
370
  </div>
357
371
  </div>
358
372
  <button id="help-close" class="icon">✕</button>
package/public/styles.css CHANGED
@@ -254,9 +254,11 @@ tr.best td { background: var(--best-bg); }
254
254
  .stab-head { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
255
255
  .stab-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
256
256
  .stab-chip { background: var(--bg); border: 1px solid var(--line); border-radius: 6px; padding: 2px 8px; font-size: 12px; }
257
- .live-card { background: var(--bg); border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; margin-top: 10px; }
257
+ .live-card { background: var(--bg); border: 1px solid var(--line); border-radius: 10px; padding: 14px 18px; margin-top: 10px; }
258
258
  .live-card.stopped { opacity: .75; }
259
- .live-card.collapsed { padding: 10px 14px; }
259
+ .live-card.collapsed { padding: 12px 18px; }
260
+ .llm-prov.live-card { padding: 14px 18px; border-bottom: 1px solid var(--line); }
261
+ .llm-prov.live-card.collapsed { padding: 12px 18px; }
260
262
  .acc-fold-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; cursor: pointer; user-select: none; }
261
263
  .acc-fold-head:hover b { color: var(--accent); }
262
264
  .acc-caret { display: inline-block; width: 16px; color: var(--muted); font-size: 12px; transition: transform .15s; }
@@ -476,7 +476,7 @@ export function createRouter() {
476
476
  r.put('/brokers/:id', wrap((req, res) => res.json(saveBrokerAccount({ ...(req.body || {}), id: req.params.id }))));
477
477
  r.delete('/brokers/:id', wrap((req, res) => res.json(deleteBrokerAccount(req.params.id))));
478
478
  r.post('/brokers/:id/sync', wrap(async (req, res) => res.json(await syncBrokerAccount(req.params.id))));
479
- r.post('/brokers/:id/history', wrap(async (req, res) => res.json(await fetchBrokerHistory(req.params.id))));
479
+ r.post('/brokers/:id/history', wrap(async (req, res) => res.json(await fetchBrokerHistory(req.params.id, req.body || {}))));
480
480
  r.post('/brokers/:id/freeze-baseline', wrap(async (req, res) => res.json(await freezeBrokerBaseline(req.params.id))));
481
481
  r.post('/brokers/:id/prepare', wrap(async (req, res) => res.json(await prepareBrokerOrders(req.params.id))));
482
482
  r.post('/brokers/:id/execute', wrap(async (req, res) => res.json(await executeBrokerOrders(req.params.id))));