@ai.weget.jp/bot 0.1.8 → 0.1.10

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 (34) hide show
  1. package/README.md +41 -16
  2. package/dist/src/config/systemConfig.js +1 -0
  3. package/dist/src/gmoCoinRuntime.js +1 -0
  4. package/dist/src/gmoFxRuntime.js +1 -0
  5. package/dist/src/index.js +1 -0
  6. package/dist/src/ipc/registerHandlers.js +1 -1
  7. package/dist/src/main.js +1 -1
  8. package/dist/src/platformApi.js +1 -0
  9. package/dist/src/preload.cjs +37 -8
  10. package/dist/src/renderer/app.js +1 -1
  11. package/dist/src/renderer/index.html +415 -20
  12. package/dist/src/renderer/styles.css +775 -3
  13. package/dist/src/services/authApiService.js +1 -1
  14. package/dist/src/services/codexService.js +1 -0
  15. package/dist/src/services/windowManagerService.js +1 -1
  16. package/dist/src/skillHostState.js +1 -0
  17. package/dist/src/skills.js +1 -0
  18. package/dist/src/wsClient.js +1 -1
  19. package/package.json +6 -19
  20. package/scripts/build-ts.cjs +8 -2
  21. package/dist/src/renderer/chat.css +0 -128
  22. package/dist/src/renderer/chat.html +0 -27
  23. package/dist/src/renderer/chat.js +0 -1
  24. package/dist/src/services/aiMemoryService.js +0 -1
  25. package/dist/src/services/commandOrchestratorService.js +0 -1
  26. package/dist/src/services/debugLogService.js +0 -1
  27. package/dist/src/services/taskExecutorService.js +0 -1
  28. package/dist/src/services/taskParsingService.js +0 -1
  29. package/dist/src/services/textService.js +0 -1
  30. package/dist/src/services/workflowService.js +0 -1
  31. package/scripts/backtest-loop.cjs +0 -137
  32. package/scripts/prepare-playwright-browsers.cjs +0 -181
  33. package/scripts/run-workflow.cjs +0 -381
  34. package/scripts/workflows/kaitori-login.json +0 -17
@@ -13,10 +13,11 @@
13
13
  <img src="./logo.png" alt="weget logo" class="brand-logo" />
14
14
  <div class="brand-copy">
15
15
  <h1>WeBot</h1>
16
- <span>weget AI bot</span>
16
+ <span>weget trade bot</span>
17
17
  </div>
18
18
  </div>
19
19
  <h1>Bot Login</h1>
20
+ <div id="login-notice" class="user-notice hidden"></div>
20
21
  <form id="login-form">
21
22
  <label>
22
23
  <span>Bot ID</span>
@@ -42,10 +43,14 @@
42
43
  </main>
43
44
 
44
45
  <main id="app-shell" class="app-shell hidden">
46
+ <div id="user-notice" class="user-notice hidden"></div>
45
47
  <header class="app-header">
46
48
  <div class="brand-row compact">
47
49
  <img src="./logo.png" alt="weget logo" class="brand-logo" />
48
- <h1>Bot Console</h1>
50
+ <div class="brand-copy">
51
+ <h1>Bot Host Console</h1>
52
+ <span>codex host, skills, and local runtime</span>
53
+ </div>
49
54
  </div>
50
55
  <div class="status-wrap">
51
56
  <span class="label">Status</span>
@@ -53,17 +58,337 @@
53
58
  </div>
54
59
  </header>
55
60
 
56
- <nav class="tabs">
57
- <button type="button" class="tab-btn is-active" data-tab="chat">Chat</button>
58
- <button type="button" class="tab-btn" data-tab="config">Bot Config</button>
59
- <button type="button" class="tab-btn" data-tab="logs">Logs</button>
61
+ <nav class="tabs-shell">
62
+ <div class="tab-group">
63
+ <span class="tab-group-label">Host</span>
64
+ <div class="tabs">
65
+ <button type="button" class="tab-btn" data-tab="config">Host Control</button>
66
+ <button type="button" class="tab-btn" data-tab="ai">Codex Console</button>
67
+ </div>
68
+ </div>
69
+ <div class="tab-group">
70
+ <span class="tab-group-label">Installed Skills</span>
71
+ <div class="tabs">
72
+ <button id="tab-btn-skill-gmo-coin" type="button" class="tab-btn is-active" data-tab="coin">skill-gmo-coin</button>
73
+ <button id="tab-btn-skill-gmo-fx" type="button" class="tab-btn" data-tab="fx">skill-gmo-fx</button>
74
+ <button id="tab-btn-skill-browser" type="button" class="tab-btn" data-tab="browser">skill-browser</button>
75
+ </div>
76
+ </div>
60
77
  </nav>
61
78
 
62
- <section id="tab-chat" class="tab-panel is-active">
79
+ <section id="tab-coin" class="tab-panel is-active">
80
+ <section class="panel market-shell coin-theme">
81
+ <div class="skill-surface-head">
82
+ <div>
83
+ <div class="skill-surface-kicker">Installed Skill</div>
84
+ <h2 id="coin-skill-title">GMO Coin Skill</h2>
85
+ <div id="coin-skill-package" class="skill-surface-package">@ai.weget.jp/skill-gmo-coin</div>
86
+ </div>
87
+ <div class="skill-surface-statuses">
88
+ <span id="coin-skill-enabled" class="skill-surface-badge">enabled</span>
89
+ <span id="coin-skill-version" class="skill-surface-badge is-muted">builtin</span>
90
+ </div>
91
+ </div>
92
+ <div class="market-layout">
93
+ <div class="market-main">
94
+ <section class="panel market-table-panel">
95
+ <div class="market-panel-header">
96
+ <h2>Coin Market</h2>
97
+ </div>
98
+ <div class="row config-actions market-pair-row">
99
+ <img id="coin-market-icon" class="market-icon" alt="coin pair icon" />
100
+ <select id="coin-symbol-select">
101
+ <option value="BTC_JPY" selected>BTC/JPY</option>
102
+ <option value="ETH_JPY">ETH/JPY</option>
103
+ <option value="BCH_JPY">BCH/JPY</option>
104
+ <option value="LTC_JPY">LTC/JPY</option>
105
+ <option value="XRP_JPY">XRP/JPY</option>
106
+ <option value="DOT_JPY">DOT/JPY</option>
107
+ <option value="ATOM_JPY">ATOM/JPY</option>
108
+ <option value="ADA_JPY">ADA/JPY</option>
109
+ <option value="LINK_JPY">LINK/JPY</option>
110
+ <option value="DOGE_JPY">DOGE/JPY</option>
111
+ <option value="SOL_JPY">SOL/JPY</option>
112
+ <option value="SUI_JPY">SUI/JPY</option>
113
+ </select>
114
+ </div>
115
+ </section>
116
+ <section class="panel market-chart-panel">
117
+ <div id="coin-kline-intervals" class="kline-toolbar">
118
+ <button type="button" class="interval-btn" data-interval="5m">5分</button>
119
+ <button type="button" class="interval-btn is-active" data-interval="15m">15分</button>
120
+ <button type="button" class="interval-btn" data-interval="30m">30分</button>
121
+ <button type="button" class="interval-btn" data-interval="1h">1小时</button>
122
+ </div>
123
+ <canvas id="coin-kline-canvas" width="860" height="320"></canvas>
124
+ </section>
125
+ </div>
126
+ <aside class="market-side">
127
+ <section class="panel order-panel">
128
+ <div class="row config-actions side-title-row">
129
+ <h3>Order</h3>
130
+ </div>
131
+ <div class="side-price-box">
132
+ <div class="side-bid">
133
+ <span>BID</span>
134
+ <strong id="coin-order-bid">-</strong>
135
+ </div>
136
+ <div class="side-spread">
137
+ <strong id="coin-order-spread">-</strong>
138
+ </div>
139
+ <div class="side-ask">
140
+ <span>ASK</span>
141
+ <strong id="coin-order-ask">-</strong>
142
+ </div>
143
+ </div>
144
+ <div class="row config-actions order-qty-row">
145
+ <label class="side-label">取引数量</label>
146
+ <div class="qty-input-wrap">
147
+ <input id="coin-order-qty" value="1" />
148
+ </div>
149
+ </div>
150
+ <div class="required-amount-box">
151
+ <span>必要証拠金</span>
152
+ <strong id="coin-required-amount">- 円</strong>
153
+ </div>
154
+ <div class="row config-actions order-action-row">
155
+ <button id="coin-buy-btn" type="button" class="order-buy-btn">Buy</button>
156
+ <button id="coin-sell-btn" type="button" class="order-sell-btn">Sell</button>
157
+ </div>
158
+ <div class="order-account-info">
159
+ <div class="buying-power-head">
160
+ <span>余力・口座情報</span>
161
+ <button id="coin-account-info-refresh-btn" type="button" class="buying-power-refresh-btn secondary">⟳</button>
162
+ </div>
163
+ <div class="info-row"><span>評価損益 (スワップ含む)</span><strong id="coin-account-pnl">- 円</strong></div>
164
+ <div class="info-row"><span>拘束証拠金</span><strong id="coin-account-margin">- 円</strong></div>
165
+ <div class="info-row"><span>取引余力</span><strong id="coin-account-available">- 円</strong></div>
166
+ <div class="info-row"><span>証拠金維持率</span><strong id="coin-account-margin-ratio">- %</strong></div>
167
+ </div>
168
+ </section>
169
+ </aside>
170
+ </div>
171
+ <div class="positions-grid">
172
+ <section class="panel position-panel">
173
+ <div class="position-head">
174
+ <h3>建玉サマリー</h3>
175
+ <button id="coin-position-summary-refresh-btn" type="button" class="buying-power-refresh-btn secondary">⟳</button>
176
+ </div>
177
+ <table class="position-table">
178
+ <thead>
179
+ <tr>
180
+ <th>決済</th>
181
+ <th>銘柄名<br />売買区分</th>
182
+ <th>建玉数量</th>
183
+ <th>平均建玉レート</th>
184
+ <th>評価損益<br />累計スワップ</th>
185
+ </tr>
186
+ </thead>
187
+ <tbody id="coin-position-summary-body">
188
+ <tr><td colspan="5" class="empty-cell">対象のお取引はございません。</td></tr>
189
+ </tbody>
190
+ </table>
191
+ </section>
192
+ <section class="panel position-panel">
193
+ <div class="position-head">
194
+ <h3>建玉一覧</h3>
195
+ <button id="coin-position-list-refresh-btn" type="button" class="buying-power-refresh-btn secondary">⟳</button>
196
+ </div>
197
+ <table class="position-table">
198
+ <thead>
199
+ <tr>
200
+ <th>決済</th>
201
+ <th>銘柄名<br />売買区分</th>
202
+ <th>建玉数量</th>
203
+ <th>建玉レート</th>
204
+ <th>評価損益<br />累計スワップ</th>
205
+ <th>約定日時</th>
206
+ </tr>
207
+ </thead>
208
+ <tbody id="coin-position-list-body">
209
+ <tr><td colspan="6" class="empty-cell">対象のお取引はございません。</td></tr>
210
+ </tbody>
211
+ </table>
212
+ </section>
213
+ </div>
214
+ </section>
215
+ </section>
216
+
217
+ <section id="tab-fx" class="tab-panel">
218
+ <section class="panel market-shell fx-theme">
219
+ <div class="skill-surface-head">
220
+ <div>
221
+ <div class="skill-surface-kicker">Installed Skill</div>
222
+ <h2 id="fx-skill-title">GMO FX Skill</h2>
223
+ <div id="fx-skill-package" class="skill-surface-package">@ai.weget.jp/skill-gmo-fx</div>
224
+ </div>
225
+ <div class="skill-surface-statuses">
226
+ <span id="fx-skill-enabled" class="skill-surface-badge">enabled</span>
227
+ <span id="fx-skill-version" class="skill-surface-badge is-muted">builtin</span>
228
+ </div>
229
+ </div>
230
+ <div class="market-layout">
231
+ <div class="market-main">
232
+ <section class="panel market-table-panel">
233
+ <div class="market-panel-header">
234
+ <h2>FX Market</h2>
235
+ </div>
236
+ <div class="row config-actions market-pair-row">
237
+ <img id="fx-market-icon" class="market-icon" alt="fx pair icon" />
238
+ <select id="fx-symbol-select">
239
+ <option value="USD_JPY" selected>USD/JPY</option>
240
+ <option value="EUR_JPY">EUR/JPY</option>
241
+ <option value="GBP_JPY">GBP/JPY</option>
242
+ <option value="AUD_JPY">AUD/JPY</option>
243
+ <option value="NZD_JPY">NZD/JPY</option>
244
+ <option value="CAD_JPY">CAD/JPY</option>
245
+ <option value="CHF_JPY">CHF/JPY</option>
246
+ <option value="TRY_JPY">TRY/JPY</option>
247
+ <option value="ZAR_JPY">ZAR/JPY</option>
248
+ <option value="MXN_JPY">MXN/JPY</option>
249
+ <option value="EUR_USD">EUR/USD</option>
250
+ <option value="GBP_USD">GBP/USD</option>
251
+ <option value="AUD_USD">AUD/USD</option>
252
+ <option value="NZD_USD">NZD/USD</option>
253
+ </select>
254
+ </div>
255
+ </section>
256
+ <section class="panel market-chart-panel">
257
+ <div id="fx-kline-intervals" class="kline-toolbar">
258
+ <button type="button" class="interval-btn" data-interval="5m">5分</button>
259
+ <button type="button" class="interval-btn is-active" data-interval="15m">15分</button>
260
+ <button type="button" class="interval-btn" data-interval="30m">30分</button>
261
+ <button type="button" class="interval-btn" data-interval="1h">1小时</button>
262
+ </div>
263
+ <canvas id="fx-kline-canvas" width="860" height="320"></canvas>
264
+ </section>
265
+ </div>
266
+ <aside class="market-side">
267
+ <section class="panel order-panel">
268
+ <div class="row config-actions side-title-row">
269
+ <h3>Order</h3>
270
+ </div>
271
+ <div class="side-price-box">
272
+ <div class="side-bid">
273
+ <span>BID</span>
274
+ <strong id="fx-order-bid">-</strong>
275
+ </div>
276
+ <div class="side-spread">
277
+ <strong id="fx-order-spread">-</strong>
278
+ </div>
279
+ <div class="side-ask">
280
+ <span>ASK</span>
281
+ <strong id="fx-order-ask">-</strong>
282
+ </div>
283
+ </div>
284
+ <div class="row config-actions order-qty-row">
285
+ <label class="side-label">取引数量</label>
286
+ <div class="qty-input-wrap">
287
+ <input id="fx-order-qty" value="100" />
288
+ </div>
289
+ </div>
290
+ <div class="required-amount-box">
291
+ <span>必要証拠金</span>
292
+ <strong id="fx-required-amount">- 円</strong>
293
+ </div>
294
+ <div class="row config-actions order-action-row">
295
+ <button id="fx-buy-btn" type="button" class="order-buy-btn">Buy</button>
296
+ <button id="fx-sell-btn" type="button" class="order-sell-btn">Sell</button>
297
+ </div>
298
+ <div class="order-account-info">
299
+ <div class="buying-power-head">
300
+ <span>余力・口座情報</span>
301
+ <button id="fx-account-info-refresh-btn" type="button" class="buying-power-refresh-btn secondary">⟳</button>
302
+ </div>
303
+ <div class="info-row"><span>評価損益 (スワップ含む)</span><strong id="fx-account-pnl">- 円</strong></div>
304
+ <div class="info-row"><span>拘束証拠金</span><strong id="fx-account-margin">- 円</strong></div>
305
+ <div class="info-row"><span>取引余力</span><strong id="fx-account-available">- 円</strong></div>
306
+ <div class="info-row"><span>証拠金維持率</span><strong id="fx-account-margin-ratio">- %</strong></div>
307
+ </div>
308
+ </section>
309
+ </aside>
310
+ </div>
311
+ <div class="positions-grid">
312
+ <section class="panel position-panel">
313
+ <div class="position-head">
314
+ <h3>建玉サマリー</h3>
315
+ <button id="fx-position-summary-refresh-btn" type="button" class="buying-power-refresh-btn secondary">⟳</button>
316
+ </div>
317
+ <table class="position-table">
318
+ <thead>
319
+ <tr>
320
+ <th>決済</th>
321
+ <th>銘柄名<br />売買区分</th>
322
+ <th>建玉数量</th>
323
+ <th>平均建玉レート</th>
324
+ <th>評価損益<br />累計スワップ</th>
325
+ </tr>
326
+ </thead>
327
+ <tbody id="fx-position-summary-body">
328
+ <tr><td colspan="5" class="empty-cell">対象のお取引はございません。</td></tr>
329
+ </tbody>
330
+ </table>
331
+ </section>
332
+ <section class="panel position-panel">
333
+ <div class="position-head">
334
+ <h3>建玉一覧</h3>
335
+ <button id="fx-position-list-refresh-btn" type="button" class="buying-power-refresh-btn secondary">⟳</button>
336
+ </div>
337
+ <table class="position-table">
338
+ <thead>
339
+ <tr>
340
+ <th>決済</th>
341
+ <th>銘柄名<br />売買区分</th>
342
+ <th>建玉数量</th>
343
+ <th>建玉レート</th>
344
+ <th>評価損益<br />累計スワップ</th>
345
+ <th>約定日時</th>
346
+ </tr>
347
+ </thead>
348
+ <tbody id="fx-position-list-body">
349
+ <tr><td colspan="6" class="empty-cell">対象のお取引はございません。</td></tr>
350
+ </tbody>
351
+ </table>
352
+ </section>
353
+ </div>
354
+ </section>
355
+ </section>
356
+
357
+ <section id="tab-browser" class="tab-panel">
358
+ <section class="panel">
359
+ <div class="skill-surface-head">
360
+ <div>
361
+ <div class="skill-surface-kicker">Installed Skill</div>
362
+ <h2 id="browser-skill-title">Browser Skill</h2>
363
+ <div id="browser-skill-package" class="skill-surface-package">@ai.weget.jp/skill-browser</div>
364
+ </div>
365
+ <div class="skill-surface-statuses">
366
+ <span id="browser-skill-enabled" class="skill-surface-badge">enabled</span>
367
+ <span id="browser-skill-version" class="skill-surface-badge is-muted">builtin</span>
368
+ </div>
369
+ </div>
370
+ <div class="browser-skill-shell">
371
+ <div class="browser-skill-card">
372
+ <h3>Local UI Status</h3>
373
+ <p class="muted">这个 skill 已经作为公开包安装进宿主,但当前本地页仍是 scaffold,占位用于后续接 browser runtime。</p>
374
+ </div>
375
+ <div class="browser-skill-card">
376
+ <h3>Declared Tools</h3>
377
+ <div id="browser-skill-tools" class="skill-tags"></div>
378
+ </div>
379
+ </div>
380
+ </section>
381
+ </section>
382
+
383
+ <section id="tab-ai" class="tab-panel">
63
384
  <section class="panel">
385
+ <div class="panel-title-block">
386
+ <h2>Codex Console</h2>
387
+ <p class="muted">本地桌面聊天同样走 Codex 中枢,不单独保存任何模型 key。</p>
388
+ </div>
64
389
  <div id="messages" class="messages"></div>
65
390
  <form id="chat-form" class="composer">
66
- <textarea id="chat-input" rows="3" placeholder="Type your message..." required></textarea>
391
+ <textarea id="chat-input" rows="3" placeholder="Ask Codex to inspect code, reason about tasks, or operate through enabled skills..." required></textarea>
67
392
  <button id="send-btn" type="submit">Send</button>
68
393
  </form>
69
394
  </section>
@@ -71,19 +396,89 @@
71
396
 
72
397
  <section id="tab-config" class="tab-panel">
73
398
  <section class="panel">
74
- <h2>Bot Config</h2>
75
- <div id="session" class="muted">not logged in</div>
76
- <div class="row config-actions">
77
- <button id="logout-btn" type="button" class="secondary">Logout</button>
399
+ <div class="panel-title-block">
400
+ <h2>Host Control</h2>
401
+ <p class="muted">本地宿主状态、Codex 登录、默认模型、skill 状态和交易凭据都在这里管理。</p>
78
402
  </div>
79
- <div id="runtime-info" class="runtime-grid"></div>
80
- </section>
81
- </section>
82
-
83
- <section id="tab-logs" class="tab-panel">
84
- <section class="panel">
85
- <h2>Realtime Logs</h2>
86
- <div id="logs" class="logs-list"></div>
403
+ <section class="host-section">
404
+ <div class="host-section-head">
405
+ <h3>Session & Runtime</h3>
406
+ <span id="session" class="muted">local mode (not logged in)</span>
407
+ </div>
408
+ <div id="runtime-info" class="runtime-grid"></div>
409
+ </section>
410
+ <section class="host-section">
411
+ <h3>Codex Auth</h3>
412
+ <div class="codex-auth-box">
413
+ <div class="codex-auth-head">
414
+ <span class="muted">本地 OAuth 登录仅保存在当前机器,不通过 Platform 下发。</span>
415
+ </div>
416
+ <div class="codex-auth-actions">
417
+ <button id="codex-login-btn" type="button" class="secondary">Start Login</button>
418
+ <button id="codex-copy-login-btn" type="button" class="secondary">Copy Command</button>
419
+ <button id="codex-refresh-auth-btn" type="button" class="secondary">Refresh Status</button>
420
+ </div>
421
+ <code id="codex-login-command" class="codex-command">codex login --device-auth</code>
422
+ </div>
423
+ </section>
424
+ <section class="host-section">
425
+ <h3>Default Model</h3>
426
+ <label>
427
+ <span>模型</span>
428
+ <select id="ai-model">
429
+ <option value="gpt-4.1-mini">gpt-4.1-mini</option>
430
+ <option value="gpt-4.1">gpt-4.1</option>
431
+ <option value="gpt-4o-mini">gpt-4o-mini</option>
432
+ </select>
433
+ </label>
434
+ <div class="row config-actions">
435
+ <button id="save-ai-config-btn" type="button">保存 AI 设置</button>
436
+ <button id="logout-btn" type="button" class="secondary">Logout</button>
437
+ </div>
438
+ </section>
439
+ <section class="host-section">
440
+ <h3>GMO Credentials</h3>
441
+ <label>
442
+ <span>Error Log Directory</span>
443
+ <input id="error-log-dir" type="text" placeholder="e.g. D:\\weget-bot\\logs" />
444
+ </label>
445
+ <label>
446
+ <span>Risk Daily Loss Limit (JPY)</span>
447
+ <input id="risk-daily-loss-limit-jpy" type="number" min="1" step="1" />
448
+ </label>
449
+ <label>
450
+ <span>Crypto API Key</span>
451
+ <input id="crypto-api-key" type="text" />
452
+ </label>
453
+ <label>
454
+ <span>Crypto API Secret</span>
455
+ <div class="inline-input-row">
456
+ <input id="crypto-api-secret" type="password" />
457
+ <button id="toggle-crypto-secret-btn" type="button" class="secondary">显示</button>
458
+ </div>
459
+ </label>
460
+ <label>
461
+ <span>FX API Key</span>
462
+ <input id="fx-api-key" type="text" />
463
+ </label>
464
+ <label>
465
+ <span>FX API Secret</span>
466
+ <div class="inline-input-row">
467
+ <input id="fx-api-secret" type="password" />
468
+ <button id="toggle-fx-secret-btn" type="button" class="secondary">显示</button>
469
+ </div>
470
+ </label>
471
+ <div class="row config-actions">
472
+ <button id="save-api-config-btn" type="button">Save API Keys</button>
473
+ </div>
474
+ </section>
475
+ <section class="host-section skill-panel">
476
+ <div class="skill-panel-head">
477
+ <h3>Managed Skills</h3>
478
+ <span class="muted">本地宿主实际识别到的 skill 与启用状态</span>
479
+ </div>
480
+ <div id="skill-state-list" class="skill-state-list"></div>
481
+ </section>
87
482
  </section>
88
483
  </section>
89
484
  </main>