neuroalpha 0.6.10 → 0.6.12

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.
@@ -23,7 +23,7 @@
23
23
 
24
24
  Экран разделён на две части (границу между ними можно перетаскивать мышью, а кнопку чата в шапке — сворачивать/разворачивать):
25
25
 
26
- - **Слева — ИИ-агент «Стратег»**: ваш персональный аналитик и помощник. Понимает текст и голосовой ввод (`🎙`). Умеет выводить пошаговую инструкцию по подключению любого из 9 брокеров, находить ваши субсчета по токену и подключать их прямо из диалога, разбирать текущий живой прогноз, новости Мосбиржи и состояние ваших брокерских счетов.
26
+ - **Слева — ИИ-агент «Стратег»**: ваш персональный аналитик и помощник. Понимает текст и голосовой ввод (`🎙`), поддерживает быстрый старт чистой беседы кнопкой **`➕ Новая`** и просмотр сохранённых диалогов (`.md`) по кнопке **`🗂 Архив`**. Умеет выводить пошаговую инструкцию по подключению любого из 9 брокеров, находить ваши субсчета по токену и подключать их прямо из диалога, разбирать текущий живой прогноз, новости Мосбиржи и состояние ваших брокерских счетов.
27
27
  - **Справа — единое рабочее окно с левым меню навигации (`#main-nav`)**, в котором сразу при входе открывается раздел **«Брокерские счета»**:
28
28
  1. **Торговля:**
29
29
  - **Брокерские счета** — управление всеми подключёнными счетами (боевыми и тестовыми).
@@ -65,13 +65,16 @@
65
65
 
66
66
  ---
67
67
 
68
- ## 4. Прогноз сейчас и пороги входа
68
+ ## 4. Прогноз сейчас, эшелоны ликвидности и сопровождение сделок
69
69
 
70
70
  В разделе **«Прогноз сейчас»** каждые **45 секунд** по живым котировкам Мосбиржи обновляются две таблицы: **«Сильнее рынка»** (кандидаты в покупку) и **«Слабее рынка»** (кандидаты в шорт).
71
71
 
72
- - **Порог выгоды на вход (`2,5×` от полных издержек на круг):** чтобы не тратить деньги на комиссии и рыночный шум, сделка открывается только тогда, когда ожидаемый импульс акции в 2,5 раза превышает удвоенную сумму комиссии и проскальзывания (например, при издержках `0,05%` базовый порог составляет **`+0,25%`**).
73
- - **Авто-балансировка по тренду индекса:** когда индекс Мосбиржи растёт (выше своей 20-дневной средней), покупки идут по базовому порогу (`+0,25%`), а вход в контртрендовый шорт ужесточается в `1,25×` (`-0,313%`). На падающем рынке система автоматически облегчает шорты и ужесточает покупки.
74
- - **Удержание позиции:** первые 65 минут после открытия действует мягкий порог удержания (`0,35×`), дающий сделке развиться, после чего включается плотный порог фиксации прибыли (`0,95×`).
72
+ - **Разделение на 1-й и 2-й эшелоны ликвидности, перелив капитала и потеснение:**
73
+ - **1-й эшелон (33 наиболее ликвидные акции Мосбиржи):** низкие потери в стакане (`0,065%` на сторону = `0,13%` за полный круг со всеми комиссиями), базовый порог входа `~+0,40%`, живой `Conviction Sizing` разгоняет сильные одиночные сигналы вплоть до `92%` бюджета в лонг и `70%` в шорт на `1×` (в режиме «Хозяин»; до `75% / 56%` на «VIP», `52% / 40%` на «Профи», `58%` на «Инвесторе»), а с ростом плеча счёта лимит одной бумаги растёт сублинейно (`1 + 0,80 × (плечо − 1)`), сохраняя свободный маржинальный резерв под параллельные идеи.
74
+ - **2–3-й эшелон (остальные ~92 акции):** более широкий спред в стакане (`0,125%` на сторону = `0,25%` за полный круг), порог входа повышен в `1,20×` (`~+0,48%`), прямой предел позиции до `17%` в лонг и до `7%` в шорт на `1×` (с плавным ростом по плечу `0,72 / 0,40`) и жёстким потолком не более `15%` от реального 10-минутного оборота свечи.
75
+ - **Итеративный перелив (`water-filling`) и динамическое потеснение:** мелкие по ёмкости сделки 2-го эшелона не отнимают квоту у лидеров 1-го эшелона, а при нехватке лимита под новый сильный сигнал 1-го эшелона робот освобождает место ротацией остывшей позиции или частичным подрезанием 2-го эшелона (на `auto` — в реальном времени, на `confirm` — в плановых 30-минутных пакетах).
76
+ - **Авто-балансировка по тренду индекса:** когда индекс Мосбиржи растёт, покупки идут по базовому порогу (`+0,40%` / `+0,48%`), а вход в контртрендовый шорт ужесточается в `1,25×` (`−0,50%` / `−0,60%`). На падающем рынке система автоматически облегчает шорты (`×0,90`) и ужесточает покупки (`×1,25`).
77
+ - **Глубина сопровождения `130 минут` (`holdBars = 13`) и фиксация прибыли:** первые 45 минут после открытия действует мягкий порог удержания (`0,35×`), затем к 130-й минуте он плавно поднимается к `0,95×` с подстройкой под сегодняшнюю волатильность бумаги. При достижении порога Take-Profit включается скользящая защита прибыли (в 1-м эшелоне удерживает `≥70%` пика, во 2-м эшелоне — `≥75%` пика с допустимым откатом не более `0,35%`).
75
78
 
76
79
  ---
77
80
 
@@ -89,5 +92,5 @@
89
92
  - Торговля **в рост и в падение (с шортами)** с повышенной концентрацией слота;
90
93
  - Количество брокерских счетов и начальная сумма торговли определяются **по индивидуальному согласованию**.
91
94
  - **Режим «Хозяин» (`owner` — для владельца / администратора платформы):**
92
- - **Без ограничений** по размеру позиции (внутричасовой перехват `H/5` каждые 30 минут, `Conviction Sizing` до 75% капитала), числу счетов и сумме капитала;
95
+ - **Максимальная отдача капитала** (внутричасовой перехват `H/5` каждые 30 минут, живой `Conviction Sizing` до `92%` капитала в лонг / `70%` в шорт в 1-м эшелоне с сублинейным плечом и динамическим потеснением), без ограничений по числу счетов и сумме капитала;
93
96
  - Эксклюзивный доступ к разделу **«Эксперименты»**.
@@ -89,30 +89,37 @@
89
89
 
90
90
  Даже идеальный прогноз (`IC > 0.10`) можно превратить в убыток, если неправильно входить, пересиживать сделки или торговать бумагами, в которых сломалась структура. Поэтому поверх прогноза работает **адаптивный движок портфеля**:
91
91
 
92
- ### 5.1. Ожидаемое движение (`Edge`) и Порог выгоды (`modelMinEdge`)
93
- Модель выдаёт прогноз в стандартных отклонениях $\hat{y}_i$. Чтобы перевести его в реальные ожидаемые проценты движения за горизонт $H$ свечей, вычисляется:
92
+ ### 5.1. Ожидаемое движение (`Edge`), эшелоны ликвидности и издержки «на сторону»
93
+ Модель выдаёт прогноз в стандартных отклонениях $\hat{y}_i$. Чтобы перевести его в реальные ожидаемые проценты движения за мульти-горизонт обучения $H = 15$ свечей ($2,5$ часа), вычисляется:
94
94
  $$\text{Edge}_i = \hat{y}_i \cdot \sigma_i \cdot \sqrt{H}$$
95
- Сделка открывается только тогда, когда ожидаемое движение перекрывает удвоенные издержки (вход + выход = $2 \times (\text{комиссия} + \text{проскальзывание})$) минимум в `modelMinEdge` раз (по умолчанию в **2.5 раза**).
95
+ Каждая сделка состоит из **двух операций (двух «сторон»)**: входа и выхода. При одинаковой комиссии брокера (`0,04%` на сторону = `0,08%` за круг) реальные потери в биржевом стакане зависят от эшелона ликвидности:
96
+ * **1-й эшелон (`TIER1_LIQUID_SYMBOLS`, 33 ликвидные акции Мосбиржи, включая `SBER`, `LKOH`, `GAZP`, `T`, `YDEX`, `PLZL`, `VTBR`, `OZON`, `MTLR`, `BSPB`, `RTKM`, `SVCB` и др.):** плотный стакан с потерями на спреде `~0,025%` → полные издержки **`0,065%` на сторону (`0,13%` за круг)**, базовый порог входа — **`1,0×`** (`~+0,40%`).
97
+ * **2–3-й эшелон (остальные ~92 акции, включая высоковолатильные бумаги с широким спредом `SMLT`, `PIKK`, `POSI`, `AFKS`, `VKCO`, `SPBE`, `UGLD`, `HEAD` и др.):** потери в стакане `~0,085%` → полные издержки **`0,125%` на сторону (`0,25%` за круг)**, порог входа повышен в **`1,20×` (`TIER2_EDGE_MULT`, `~+0,48%`)**.
96
98
 
97
- ### 5.2. Полушаговое сопровождение позиций (`H / 2`) и Двухступенчатый выход
98
- Вместо того чтобы смотреть на рынок только раз в `H` часов, в режиме самообучения портфель проверяется каждые **`H / 2` свечей** (при горизонте 2 часа — каждый час):
99
- * **В первой половине жизни сделки (`barsHeld < H`):** действует мягкий порог удержания (`0.35 × порог входа`), чтобы случайный внутридневной шум не выбил позицию сразу после открытия.
100
- * **По истечении горизонта (`barsHeld >= H`):** включается строгий порог удержания (`0.75 × порог входа`). Если сигнал сохраняет силу — позиция удерживается дальше без лишней перепродажи и двойной комиссии; если импульс затух — прибыль сразу фиксируется, а слот освобождается для новой идеи.
99
+ ### 5.2. Глубина сопровождения `130 минут` (`holdBars = 13`), динамическая рампа удержания и `Profit Lock`
100
+ В режиме самообучения портфель проверяется на каждом шаге `holdBars / 5` (каждые 20–30 минут), а новые внутридневные входы прекращаются за `130 минут` до окончания вечерней сессии (`21:30 МСК`):
101
+ * **Первые 45 минут жизни сделки:** действует мягкий порог удержания (`0,35 × порог входа`), чтобы случайный внутридневной шум не выбил позицию сразу после открытия.
102
+ * **С 45-й по 130-ю минуту (`exitHoldRatio`):** порог удержания плавно поднимается к `0,95 × порог входа`, динамически масштабируясь по отношению сегодняшней фактической волатильности бумаги к её обычной сигме (`realizedBarPct / sigmaBarPct` в коридоре `[0,75..1,25]`).
103
+ * **Скользящая фиксация прибыли (`profitLockLevels`):** включает защиту безубытка от `+0,85% × tierMult` (после 15 мин) и скользящий Take-Profit от `+1,20% × tierMult` (`+1,55% × tierMult` в первые 15 мин). В 1-м эшелоне трал удерживает не менее `70%` пиковой прибыли (допуская откат до `0,45%`), а во 2-м эшелоне действует уплотнённый трал — удерживает **не менее `75%` пика и допускает откат не более `0,35%`**, забирая импульс до разворота широкого спреда.
101
104
 
102
- ### 5.3. Временный карантин «акций-убийц» с экспоненциальным затуханием
105
+ ### 5.3. Временный карантин «акций-убийц» с экспоненциальным затуханием и пробоем сильным сигналом
103
106
  На рынке периодически возникают бумаги, в которых из-за корпоративного конфликта, допэмиссии или специфических новостей перестают работать статистические связи.
104
- * Система ведёт по каждой акции скользящий счётчик чистой доходности прошлых сделок `stockPnl[i]`.
105
- * Если бумага за серию сделок (`stockCnt >= 3`) принесла накопленный убыток ниже `-1.2%`, она автоматически ставится **на карантин** — новые сделки по ней блокируются.
106
- * **Важная механика амнистии:** на каждом шаге счётчики умножаются на коэффициент затухания `0.99` (период полураспада ~15 торговых дней). Поэтому бумага не банится навсегда — через 2–3 недели, когда аномалия на рынке проходит, акция возвращается в оборот.
107
+ * Система ведёт по каждой акции скользящий FIFO-счётчик чистой доходности закрытых кругов сделок `stockPnl[i]`.
108
+ * Если бумага за серию сделок (`stockCnt >= 2` при `stockPnl < -1.2%` или `stockPnl < -2.5%`) принесла накопленный убыток, она ставится **на карантин** — обычные сигналы по ней пропускаются.
109
+ * **Амнистия и пробой сильным сигналом (`110%`):** на каждом 30-минутном шаге счётчики умножаются на коэффициент затухания `0.9985` (период полураспада ~15 торговых дней), а особо сильный сигнал (**`≥ 110%` от индивидуального порога входа**) пробивает карантин досрочно.
107
110
 
108
111
  ### 5.4. Адаптивная балансировка `Long / Short` по тренду индекса Мосбиржи
109
112
  Модель предсказывает движение акции *относительно индекса*.
110
113
  * Когда индекс Мосбиржи находится в среднесрочном падающем тренде (ниже уровня 10 торговых дней назад или в 3-дневном проливе >1%), покупать акции против падающего рынка опасно, а продавать слабые акции (шорт) — наоборот, вдвойне выгодно.
111
114
  * В режиме `Покупки и продажи (longshort)` с включённым самообучением система автоматически **повышает входной фильтр для покупок (`×1.25`)** и **облегчает вход для коротких продаж (`×0.90`)** на падающем рынке (и наоборот — на растущем рынке).
112
- * Именно эта механика позволяет стратегии стабильно зарабатывать и в растущие месяцы, и на затяжном падении индекса Мосбиржи (например, +253.9% за период, где сам индекс упал на −21%).
115
+ * Именно эта механика позволяет стратегии стабильно зарабатывать и в растущие месяцы, и на затяжном падении индекса Мосбиржи.
113
116
 
114
- ### 5.5. Динамическое распределение капитала по слотам и силе сигнала (`Dynamic Top-K` + `Conviction Slot Sizing`)
115
- В режиме автопилота (`modelTopK = 0`) система не распыляет капитал на фиксированное число бумаг: если на рынке есть только 1 явный лидер, а остальные сигналы слабее 62–78% от лидера, капитал концентрируется в лучшем импульсе. При этом в режиме «Хозяин» (`owner`) слот масштабируется пропорционально силе сигнала (`Conviction Sizing`: вплоть до `1.65×` и до `75%` капитала в исключительных импульсах, на тарифе «VIP» — до `48%`, на «Профи» — до `28%`, на «Инвесторе» — до `24%`), с жёстким контролем, чтобы сумма всех открытых позиций никогда не превышала `99%` капитала (без кредитного плеча).
117
+ ### 5.5. Адаптивная загрузка без холостого резерва: живой `Conviction Sizing`, сублинейное плечо, `water-filling` и двухступенчатое потеснение
118
+ Поскольку `81,5%` активного времени на рынке открыта всего **одна** позиция, система не замораживает половину лимита в «мёртвом резерве» под гипотетические будущие сделки, а решает три задачи раздельно:
119
+ * **1-й эшелон (живой `Conviction Sizing` + сублинейное плечо):** пограничный сигнал получает умеренный базовый объём, а сильный одиночный импульс пропорционально `conv` (до `1,92×` в режиме «Хозяин») разгоняется до **`92%` бюджета в лонг и `70%` в шорт** на счёте `1×` (`75% / 56%` на «VIP», `52% / 40%` на «Профи», `58%` в лонг на «Инвесторе»). С ростом плеча счёта потолок *одной* бумаги растёт **сублинейно** (`1 + 0,80 × (плечо − 1)`), удерживая риск одиночной сделки в рамках контроля просадки и превращая остаток бесплатного внутридневного плеча под залог `LQDT` в эластичный резерв под 2-ю и 3-ю параллельные идеи.
120
+ * **2-й эшелон (прямой риск-лимит + стакан биржи):** без двойного перемножения штрафов действует прямой потолок — до **`17%` бюджета в лонг** (`1 + 0,72 × (плечо − 1)`) и до **`7%` в шорт** (`1 + 0,40 × (плечо − 1)`), жёстко отсечённый по реальной глубине биржевого стакана (**не более `15%` от медианного 10-минутного оборота свечи `barTurnoverRub`**).
121
+ * **Итеративный перелив (`waterFillAllocations`) и чистая отдача (`netPickSort`):** веса сделок рассчитываются за вычетом круговых издержек эшелона (`|Edge| − 0,13%` в 1-м эшелоне и `|Edge| − 0,25%` во 2-м). При одновременном входе сделки с узким лимитом (2-й эшелон / тонкий стакан) забирают ровно свой потолок, а весь оставшийся ресурс переливается крупным лидерам 1-го эшелона без пустых остатков.
122
+ * **Двухступенчатое динамическое потеснение (`crowdOut`):** если свободного лимита реально не хватает под новый сильный сигнал 1-го эшелона, робот (с защитной выдержкой `≥ 20 минут` от «пилы») либо ротирует остывшую позицию целиком, либо частично подрезает позицию 2-го эшелона с полным сохранением `entryTs` и накопленного `peakPrice` для скользящего `Profit Lock`.
116
123
 
117
124
  ---
118
125
 
@@ -150,7 +157,7 @@ $$\text{Edge}_i = \hat{y}_i \cdot \sigma_i \cdot \sqrt{H}$$
150
157
  4. **Только лимитные заявки с точным шагом цены (`limitOffsetPct`):** Заявки выставляются от живой цены с защитным лимитным отступом (по умолчанию `0.1%`), округлённым строго по шагу цены (`MINSTEP` / `minPriceIncrement`) конкретной бумаги.
151
158
  5. **Защита краёв сессии (`skipEdgeMinutes`):** В окна `06:50–07:25`, `09:50–10:10` и `18:35–18:55` МСК новые входы не открываются и фиксация прибыли не срабатывает на шуме стакана; аварийные стопы работают всегда.
152
159
  6. **Аварийный стоп позиции — 7% от средней цены входа** (у брокера стоп-заявкой и во внутреннем контуре). Модель торгует возврат к среднему, поэтому стоп стоит широко: проверка на истории показала, что прежние 4,5–5% закрывали позиции на пике отклонения и снижали итог на обеих половинах периода.
153
- 6.1. **Плечо (`maxLeverage`, настройка счёта):** множитель размера позиций в ликвидных бумагах 1-го эшелона и предел суммарной позиции (× капитал). Бумаги 2–3-го эшелона всегда торгуются половинным размером. Работает только при включённой маржинальной торговле; тариф «Инвестор» — без плеча, «Профи» — до 3, «VIP» и «Хозяин» — до 7. Предел заявки дополнительно проверяет брокер (`GetMaxLots`, маржинальный лимит).
160
+ 6.1. **Плечо (`maxLeverage`, настройка счёта):** предел суммарной позиции (`×` капитал) и сублинейный множитель одиночной сделки (`tierSizeMult`). В 1-м эшелоне предел одной бумаги растёт по закону `1 + 0,80 × (плечо − 1)`, оставляя часть бесплатного внутридневного плеча свободным резервом под параллельные идеи; во 2–3-м эшелоне прямой лимит (`17%` лонг / `7%` шорт на `1×`, наклон по плечу `0,72` / `0,40`) защищён потолком `15%` от 10-минутного оборота свечи (`barTurnoverRub`). Работает только при включённой маржинальной торговле; тариф «Инвестор» — без плеча, «Профи» — до 3, «VIP» и «Хозяин» — до 7. Предел заявки дополнительно проверяет брокер (`GetMaxLots`, маржинальный лимит).
154
161
  6.2. **Стоп по общей просадке (`maxDrawdownPct`, настройка счёта, 0 — выкл.):** если оценка счёта опустилась от своего максимума на заданный процент, новые входы запрещаются до ручного снятия («Снять стоп по просадке»); открытые позиции сопровождаются. После вывода денег стоп снимается вручную.
155
162
  6.3. **Капитал в LQDT как залог** (при включённых «Свободные рубли в LQDT» и маржинальной торговле): паи LQDT не продаются под входы — внутридневные позиции открываются под обеспечение и закрываются до ночи (платы за перенос нет), а свободные рубли размещаются в LQDT, когда у стратегии нет открытых позиций.
156
163
  6.4. **Вход против планки:** если брокер отклонил вход из-за ценового коридора Мосбиржи (код 30099 — бумага у планки), вход в эту бумагу в ту же сторону блокируется до конца торгового дня.
@@ -166,13 +173,14 @@ $$\text{Edge}_i = \hat{y}_i \cdot \sigma_i \cdot \sqrt{H}$$
166
173
 
167
174
  Изменение правил проверяется в лаборатории `scripts/strategy-lab.mjs` (варианты — в `scripts/strategy-lab-variants.mjs`) и принимается, только если оно лучше текущих правил **и на первой, и на второй половине периода**. Каждая отправленная заявка записывается в журнал решений `trade_decisions` (причина, ожидание и порог, контекст дня, плечо, версия программы; `GET /api/brokers/:id/decisions`).
168
175
 
169
- Проверка правил 06.11.2026 (пошаговые прогнозы 06.2024–11.2026, 788 сделок, капитал 800 тыс. ₽, LQDT за период — 18,5% годовых):
176
+ Проверка правил 13.11.2026 (пошаговые прогнозы 06.2024–11.2026, 59 051 свеча, 896 сделок, капитал 800 тыс. ₽, LQDT за период — 18,5% годовых):
170
177
 
171
178
  | Правила | CAGR (весь период) | 1-я / 2-я половина | PF | Макс. просадка | Худшая сделка, % капитала |
172
179
  |---|---|---|---|---|---|
173
180
  | До 06.11.2026 (без LQDT, 2-й эшелон полным размером) | 12,9% | 19,3% / 6,8% | 1,40 | 4,4% | −2,0% |
174
- | Текущие, плечо 1 | 31,5% | 38,0% / 25,6% | 1,55 | 2,2% | −2,0% |
175
- | Текущие, плечо 3 | 52,1% | 56,2% / 48,5% | 1,87 | 7,0% | −6,8% |
176
- | Текущие, плечо 5 | 75,2% | 76,0% / 74,9% | 2,02 | 12,5% | −12,9% |
181
+ | Предыдущие (`v0.6.11`, полка `50%/38%` T1), плечо 2× | 59,8% | 73,8% / 47,4% | 2,03 | 3,6% | −1,9% |
182
+ | Текущие (живой `Conviction` + сублинейное плечо + перелив + потеснение), плечо 1× | **48,7%** | **59,9% / 38,7%** | **1,90** | **3,4%** | −1,3% |
183
+ | Текущие (живой `Conviction` + сублинейное плечо + перелив + потеснение), плечо 2× | **77,6%** | **95,0% / 62,4%** | **2,05** | **5,6%** | −2,4% |
184
+ | Текущие (живой `Conviction` + сублинейное плечо + перелив + потеснение), плечо 3× | **110,3%** | **133,7% / 90,1%** | **2,18** | **7,1%** | −3,4% |
177
185
 
178
186
  Отклонены (хуже хотя бы на одной половине или с катастрофическим хвостом): защита вечным фьючерсом IMOEXF (издержки больше выигрыша), пассивные лимитные входы, снижение порога входа, 6–8 позиций на сторону, выход по времени, отключение фиксации прибыли, стоп по волатильности и «стоп отмены идеи», размер позиции по риску. Результат на истории не гарантирует будущий: плечо пропорционально увеличивает и доходность, и просадки.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neuroalpha",
3
- "version": "0.6.10",
3
+ "version": "0.6.12",
4
4
  "description": "НейроАльфа — ИИ-автопилот для рынка акций Мосбиржи: эмбеддинги акций, самообучение правил, коннекторы Т-Банк / БКС / Финам / Алор и боты Telegram / MAX",
5
5
  "author": "Roman A. Perepelkin",
6
6
  "license": "UNLICENSED",
package/public/app.js CHANGED
@@ -1651,6 +1651,20 @@ async function viewArchivedMarkdown(id) {
1651
1651
  }
1652
1652
  }
1653
1653
 
1654
+ async function startNewChatSession() {
1655
+ try {
1656
+ if (speechRec && speechActive) stopVoiceInput(false);
1657
+ await post('/api/chat/new');
1658
+ $('#archive-modal').hidden = true;
1659
+ if (document.body.classList.contains('chat-closed')) setChatClosed(false);
1660
+ $('#chat-input')?.focus();
1661
+ } catch (e) {
1662
+ toast(e.message, 'error');
1663
+ }
1664
+ }
1665
+
1666
+ $('#btn-chat-new')?.addEventListener('click', startNewChatSession);
1667
+ $('#archive-new-chat')?.addEventListener('click', startNewChatSession);
1654
1668
  $('#btn-chat-archive')?.addEventListener('click', openChatArchiveList);
1655
1669
  $('#archive-back')?.addEventListener('click', openChatArchiveList);
1656
1670
  $('#archive-close')?.addEventListener('click', () => { $('#archive-modal').hidden = true; });
package/public/index.html CHANGED
@@ -37,6 +37,9 @@
37
37
  <textarea id="chat-input" rows="2" placeholder="Спросите Стратега о прогнозе, портфеле или настройках счёта…"></textarea>
38
38
  <div class="prompt-bar">
39
39
  <div class="prompt-left">
40
+ <button type="button" id="btn-chat-new" class="ghost-select model-btn" title="Начать новую сессию со Стратегом (текущая беседа сохранится в архив)">
41
+ <span>➕ Новая</span>
42
+ </button>
40
43
  <button type="button" id="btn-chat-archive" class="ghost-select model-btn" title="Архив предыдущих сессий со Стратегом (.md)">
41
44
  <span>🗂 Архив</span>
42
45
  </button>
@@ -346,6 +349,7 @@
346
349
  <div class="modal-head" style="gap:10px;flex-wrap:wrap">
347
350
  <b id="archive-title">Архив сессий со Стратегом</b>
348
351
  <span class="grow"></span>
352
+ <button id="archive-new-chat" type="button" class="small" title="Начать новую сессию со Стратегом">➕ Новая сессия</button>
349
353
  <button id="archive-back" type="button" class="small" hidden>← Все сессии</button>
350
354
  <button id="archive-open-chat" type="button" class="primary small" hidden title="Загрузить эту сессию в панель чата и продолжить диалог">Открыть в чате</button>
351
355
  <button id="archive-download-md" type="button" class="small" hidden title="Скачать файл сессии в формате Markdown (.md)">⬇ Скачать .md</button>